From 267cb812e827604d4829d3afe28a82b0970d3706 Mon Sep 17 00:00:00 2001 From: who-knows-who Date: Sat, 17 Apr 2021 12:32:29 +0100 Subject: Start decompiling unk_0202A1E0 --- arm9/asm/unk_0202A1E0.s | 1053 ----------------------------------------------- arm9/global.inc | 3 + arm9/src/unk_0202A1E0.c | 726 ++++++++++++++++++++++++++++++++ include/unk_0202A1E0.h | 171 ++++++++ 4 files changed, 900 insertions(+), 1053 deletions(-) delete mode 100644 arm9/asm/unk_0202A1E0.s create mode 100644 arm9/src/unk_0202A1E0.c create mode 100644 include/unk_0202A1E0.h diff --git a/arm9/asm/unk_0202A1E0.s b/arm9/asm/unk_0202A1E0.s deleted file mode 100644 index df633837..00000000 --- a/arm9/asm/unk_0202A1E0.s +++ /dev/null @@ -1,1053 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0202A1E0 -FUN_0202A1E0: ; 0x0202A1E0 - mov r0, #0xe4 - bx lr - - thumb_func_start FUN_0202A1E4 -FUN_0202A1E4: ; 0x0202A1E4 - ldr r3, _0202A1EC ; =MI_CpuFill8 - mov r1, #0x0 - mov r2, #0x3c - bx r3 - .balign 4 -_0202A1EC: .word MI_CpuFill8 - - thumb_func_start FUN_0202A1F0 -FUN_0202A1F0: ; 0x0202A1F0 - push {r4, lr} - mov r2, #0x5a - mov r1, #0x0 - lsl r2, r2, #0x2 - add r4, r0, #0x0 - bl MI_CpuFill8 - mov r0, #0x1 - strb r0, [r4, #0x3] - pop {r4, pc} - - thumb_func_start FUN_0202A204 -FUN_0202A204: ; 0x0202A204 - push {r4, lr} - add r4, r0, #0x0 - mov r1, #0x0 - bl MailMsg_init_fromTemplate - add r0, r4, #0x0 - add r0, #0x8 - mov r1, #0x1 - bl MailMsg_init_fromTemplate - add r0, r4, #0x0 - add r0, #0x10 - mov r1, #0x2 - bl MailMsg_init_fromTemplate - add r4, #0x18 - add r0, r4, #0x0 - mov r1, #0x3 - bl MailMsg_init_fromTemplate - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0202A230 -FUN_0202A230: ; 0x0202A230 - ldr r3, _0202A238 ; =MI_CpuFill8 - mov r1, #0x0 - ldr r2, _0202A23C ; =0x00000B3C - bx r3 - .balign 4 -_0202A238: .word MI_CpuFill8 -_0202A23C: .word 0x00000B3C - - thumb_func_start FUN_0202A240 -FUN_0202A240: ; 0x0202A240 - push {r3, lr} - cmp r1, #0xa - bhi _0202A2BE - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_0202A252: ; jump table (using 16-bit offset) - .short _0202A268 - _0202A252 - 2; case 0 - .short _0202A270 - _0202A252 - 2; case 1 - .short _0202A274 - _0202A252 - 2; case 2 - .short _0202A278 - _0202A252 - 2; case 3 - .short _0202A27C - _0202A252 - 2; case 4 - .short _0202A280 - _0202A252 - 2; case 5 - .short _0202A28E - _0202A252 - 2; case 6 - .short _0202A29C - _0202A252 - 2; case 7 - .short _0202A2A4 - _0202A252 - 2; case 8 - .short _0202A2B2 - _0202A252 - 2; case 9 - .short _0202A2BA - _0202A252 - 2; case 10 -_0202A268: - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1b - lsr r0, r0, #0x1d - pop {r3, pc} -_0202A270: - ldrb r0, [r0, #0x2] - pop {r3, pc} -_0202A274: - ldrb r0, [r0, #0x3] - pop {r3, pc} -_0202A278: - ldrh r0, [r0, #0x4] - pop {r3, pc} -_0202A27C: - ldrh r0, [r0, #0x6] - pop {r3, pc} -_0202A280: - add r1, r2, #0x0 - add r0, #0x8 - mov r2, #0x4 - bl MI_CpuCopy8 - mov r0, #0x0 - pop {r3, pc} -_0202A28E: - add r1, r2, #0x0 - add r0, #0x2c - mov r2, #0x10 - bl MI_CpuCopy8 - mov r0, #0x0 - pop {r3, pc} -_0202A29C: - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - pop {r3, pc} -_0202A2A4: - add r1, r2, #0x0 - add r0, #0xc - mov r2, #0x1c - bl MI_CpuCopy8 - mov r0, #0x0 - pop {r3, pc} -_0202A2B2: - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1d - pop {r3, pc} -_0202A2BA: - ldr r0, [r0, #0x28] - pop {r3, pc} -_0202A2BE: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0202A2C4 -FUN_0202A2C4: ; 0x0202A2C4 - push {r4, lr} - add r3, r0, #0x0 - cmp r1, #0xa - bhi _0202A36A - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_0202A2D8: ; jump table (using 16-bit offset) - .short _0202A2EE - _0202A2D8 - 2; case 0 - .short _0202A300 - _0202A2D8 - 2; case 1 - .short _0202A306 - _0202A2D8 - 2; case 2 - .short _0202A30C - _0202A2D8 - 2; case 3 - .short _0202A312 - _0202A2D8 - 2; case 4 - .short _0202A318 - _0202A2D8 - 2; case 5 - .short _0202A326 - _0202A2D8 - 2; case 6 - .short _0202A334 - _0202A2D8 - 2; case 7 - .short _0202A346 - _0202A2D8 - 2; case 8 - .short _0202A35A - _0202A2D8 - 2; case 9 - .short _0202A354 - _0202A2D8 - 2; case 10 -_0202A2EE: - ldrb r1, [r3, #0x0] - mov r0, #0x1c - bic r1, r0 - ldrb r0, [r2, #0x0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1b - orr r0, r1 - strb r0, [r3, #0x0] - pop {r4, pc} -_0202A300: - ldrb r0, [r2, #0x0] - strb r0, [r3, #0x2] - pop {r4, pc} -_0202A306: - ldrb r0, [r2, #0x0] - strb r0, [r3, #0x3] - pop {r4, pc} -_0202A30C: - ldrh r0, [r2, #0x0] - strh r0, [r3, #0x4] - pop {r4, pc} -_0202A312: - ldrh r0, [r2, #0x0] - strh r0, [r3, #0x6] - pop {r4, pc} -_0202A318: - add r3, #0x8 - add r0, r2, #0x0 - add r1, r3, #0x0 - mov r2, #0x4 - bl MI_CpuCopy8 - pop {r4, pc} -_0202A326: - add r3, #0x2c - add r0, r2, #0x0 - add r1, r3, #0x0 - mov r2, #0x10 - bl MI_CpuCopy8 - pop {r4, pc} -_0202A334: - ldrb r4, [r3, #0x0] - ldrb r1, [r2, #0x0] - mov r0, #0x1 - bic r4, r0 - mov r0, #0x1 - and r0, r1 - orr r0, r4 - strb r0, [r3, #0x0] - pop {r4, pc} -_0202A346: - add r3, #0xc - add r0, r2, #0x0 - add r1, r3, #0x0 - mov r2, #0x1c - bl MI_CpuCopy8 - pop {r4, pc} -_0202A354: - ldr r0, [r2, #0x0] - str r0, [r3, #0x28] - pop {r4, pc} -_0202A35A: - ldrb r1, [r3, #0x0] - mov r0, #0xe0 - bic r1, r0 - ldrb r0, [r2, #0x0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x18 - orr r0, r1 - strb r0, [r3, #0x0] -_0202A36A: - pop {r4, pc} - - thumb_func_start FUN_0202A36C -FUN_0202A36C: ; 0x0202A36C - push {r3-r4} - ldrb r4, [r0, #0x3] - add r1, r4, r1 - cmp r1, #0xff - bge _0202A378 - strb r1, [r0, #0x3] -_0202A378: - ldrh r1, [r0, #0x4] - add r2, r1, r2 - ldr r1, _0202A394 ; =0x0000FFFF - cmp r2, r1 - bge _0202A384 - strh r2, [r0, #0x4] -_0202A384: - ldrh r1, [r0, #0x6] - add r2, r1, r3 - ldr r1, _0202A394 ; =0x0000FFFF - cmp r2, r1 - bge _0202A390 - strh r2, [r0, #0x6] -_0202A390: - pop {r3-r4} - bx lr - .balign 4 -_0202A394: .word 0x0000FFFF - - thumb_func_start FUN_0202A398 -FUN_0202A398: ; 0x0202A398 - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - bx lr - - thumb_func_start FUN_0202A3A0 -FUN_0202A3A0: ; 0x0202A3A0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x1f - ldrb r3, [r0, #0x0] - mov r2, #0x2 - lsr r1, r1, #0x1e - bic r3, r2 - orr r1, r3 - strb r1, [r0, #0x0] - bx lr - - thumb_func_start FUN_0202A3B4 -FUN_0202A3B4: ; 0x0202A3B4 - cmp r2, #0x6 - bhi _0202A402 - add r2, r2, r2 - add r2, pc - ldrh r2, [r2, #0x6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 -_0202A3C4: ; jump table (using 16-bit offset) - .short _0202A402 - _0202A3C4 - 2; case 0 - .short _0202A3D2 - _0202A3C4 - 2; case 1 - .short _0202A402 - _0202A3C4 - 2; case 2 - .short _0202A402 - _0202A3C4 - 2; case 3 - .short _0202A402 - _0202A3C4 - 2; case 4 - .short _0202A3E0 - _0202A3C4 - 2; case 5 - .short _0202A3F2 - _0202A3C4 - 2; case 6 -_0202A3D2: - ldr r2, _0202A408 ; =0x0000270F - cmp r1, r2 - bls _0202A3DC - strh r2, [r0, #0x0] - b _0202A402 -_0202A3DC: - strh r1, [r0, #0x0] - b _0202A402 -_0202A3E0: - ldrh r2, [r0, #0x0] - add r2, r2, r1 - ldr r1, _0202A408 ; =0x0000270F - cmp r2, r1 - ble _0202A3EE - strh r1, [r0, #0x0] - b _0202A402 -_0202A3EE: - strh r2, [r0, #0x0] - b _0202A402 -_0202A3F2: - ldrh r2, [r0, #0x0] - cmp r2, r1 - bhs _0202A3FE - mov r1, #0x0 - strh r1, [r0, #0x0] - b _0202A402 -_0202A3FE: - sub r1, r2, r1 - strh r1, [r0, #0x0] -_0202A402: - ldrh r0, [r0, #0x0] - bx lr - nop -_0202A408: .word 0x0000270F - - thumb_func_start FUN_0202A40C -FUN_0202A40C: ; 0x0202A40C - cmp r1, #0x2 - beq _0202A416 - cmp r1, #0x3 - beq _0202A424 - b _0202A440 -_0202A416: - mov r1, #0x0 - strb r1, [r0, #0x2] - ldrh r2, [r0, #0x8] - mov r1, #0x10 - bic r2, r1 - strh r2, [r0, #0x8] - b _0202A440 -_0202A424: - ldrh r1, [r0, #0x8] - lsl r1, r1, #0x1b - lsr r1, r1, #0x1f - beq _0202A434 - ldrb r1, [r0, #0x2] - add r1, r1, #0x1 - strb r1, [r0, #0x2] - b _0202A440 -_0202A434: - mov r1, #0x1 - strb r1, [r0, #0x2] - ldrh r2, [r0, #0x8] - mov r1, #0x10 - orr r1, r2 - strh r1, [r0, #0x8] -_0202A440: - ldrb r0, [r0, #0x2] - bx lr - - thumb_func_start FUN_0202A444 -FUN_0202A444: ; 0x0202A444 - cmp r1, #0x2 - beq _0202A452 - cmp r1, #0x3 - beq _0202A458 - cmp r1, #0x4 - beq _0202A464 - b _0202A46E -_0202A452: - mov r1, #0x1 - strb r1, [r0, #0x3] - b _0202A46E -_0202A458: - ldrb r1, [r0, #0x3] - cmp r1, #0xa - bhs _0202A46E - add r1, r1, #0x1 - strb r1, [r0, #0x3] - b _0202A46E -_0202A464: - ldrb r1, [r0, #0x3] - cmp r1, #0x1 - bls _0202A46E - sub r1, r1, #0x1 - strb r1, [r0, #0x3] -_0202A46E: - ldrb r0, [r0, #0x3] - bx lr - .balign 4 - - thumb_func_start FUN_0202A474 -FUN_0202A474: ; 0x0202A474 - push {r3, lr} - add r3, r0, #0x0 - cmp r1, #0x0 - bne _0202A48A - add r3, #0xc0 - add r0, r2, #0x0 - add r1, r3, #0x0 - mov r2, #0xa8 - bl MI_CpuCopy8 - pop {r3, pc} -_0202A48A: - add r3, #0x18 - add r0, r2, #0x0 - add r1, r3, #0x0 - mov r2, #0xa8 - bl MI_CpuCopy8 - pop {r3, pc} - - thumb_func_start FUN_0202A498 -FUN_0202A498: ; 0x0202A498 - push {r3, lr} - cmp r1, #0x0 - bne _0202A4AA - add r1, r2, #0x0 - add r0, #0xc0 - mov r2, #0xa8 - bl MI_CpuCopy8 - pop {r3, pc} -_0202A4AA: - add r1, r2, #0x0 - add r0, #0x18 - mov r2, #0xa8 - bl MI_CpuCopy8 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0202A4B8 -FUN_0202A4B8: ; 0x0202A4B8 - push {r4-r6, lr} - add r6, r0, #0x0 - ldrb r0, [r1, #0x2] - mov r2, #0xfa - lsl r2, r2, #0x2 - sub r0, r0, #0x1 - add r3, r0, #0x0 - mul r3, r2 - lsl r0, r3, #0x10 - lsr r4, r0, #0x10 - ldrh r3, [r1, #0x4] - mov r0, #0xa - ldrb r5, [r1, #0x3] - mul r0, r3 - mov r3, #0x14 - mul r3, r5 - lsl r0, r0, #0x10 - lsl r3, r3, #0x10 - lsr r0, r0, #0x10 - lsr r3, r3, #0x10 - add r3, r0, r3 - add r0, r2, #0x0 - sub r0, #0x32 - cmp r3, r0 - ble _0202A4EE - mov r5, #0x0 - b _0202A4F6 -_0202A4EE: - sub r2, #0x32 - sub r0, r2, r3 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 -_0202A4F6: - ldrh r1, [r1, #0x6] - ldr r0, _0202A51C ; =0x000003CA - cmp r1, r0 - bls _0202A502 - mov r1, #0x0 - b _0202A510 -_0202A502: - add r0, #0x1e - sub r0, r0, r1 - mov r1, #0x1e - bl _s32_div_f - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 -_0202A510: - add r0, r4, r5 - add r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - strh r0, [r6, #0x16] - pop {r4-r6, pc} - .balign 4 -_0202A51C: .word 0x000003CA - - thumb_func_start FUN_0202A520 -FUN_0202A520: ; 0x0202A520 - ldrh r0, [r0, #0x16] - bx lr - - thumb_func_start FUN_0202A524 -FUN_0202A524: ; 0x0202A524 - push {r3, lr} - ldrh r0, [r0, #0x16] - mov r1, #0xfa - lsl r1, r1, #0x2 - bl _s32_div_f - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0202A538 -FUN_0202A538: ; 0x0202A538 - push {r4-r5} - cmp r1, #0x5 - bne _0202A544 - mov r0, #0x0 - pop {r4-r5} - bx lr -_0202A544: - cmp r2, #0x2 - beq _0202A54E - cmp r2, #0x3 - beq _0202A558 - b _0202A56A -_0202A54E: - lsl r2, r1, #0x1 - mov r3, #0x0 - add r2, r0, r2 - strh r3, [r2, #0xc] - b _0202A56A -_0202A558: - add r5, r0, #0x0 - add r5, #0xc - lsl r4, r1, #0x1 - ldrh r3, [r5, r4] - ldr r2, _0202A574 ; =0x0000FFFE - cmp r3, r2 - bhs _0202A56A - add r2, r3, #0x1 - strh r2, [r5, r4] -_0202A56A: - lsl r1, r1, #0x1 - add r0, r0, r1 - ldrh r0, [r0, #0xc] - pop {r4-r5} - bx lr - .balign 4 -_0202A574: .word 0x0000FFFE - - thumb_func_start FUN_0202A578 -FUN_0202A578: ; 0x0202A578 - push {r3-r4} - mov r3, #0x1 - mov r4, #0x0 - cmp r1, #0x0 - bls _0202A590 -_0202A582: - add r4, r4, #0x1 - lsl r4, r4, #0x10 - lsl r3, r3, #0x11 - lsr r4, r4, #0x10 - lsr r3, r3, #0x10 - cmp r4, r1 - blo _0202A582 -_0202A590: - cmp r2, #0x0 - beq _0202A5B4 - cmp r2, #0x1 - beq _0202A5AC - cmp r2, #0x2 - bne _0202A5C2 - ldr r1, _0202A5C8 ; =0x0000FFFF - eor r1, r3 - lsl r1, r1, #0x10 - lsr r2, r1, #0x10 - ldrh r1, [r0, #0x8] - and r1, r2 - strh r1, [r0, #0x8] - b _0202A5C2 -_0202A5AC: - ldrh r1, [r0, #0x8] - orr r1, r3 - strh r1, [r0, #0x8] - b _0202A5C2 -_0202A5B4: - ldrh r0, [r0, #0x8] - add r2, r0, #0x0 - asr r2, r1 - mov r0, #0x1 - and r0, r2 - pop {r3-r4} - bx lr -_0202A5C2: - mov r0, #0x0 - pop {r3-r4} - bx lr - .balign 4 -_0202A5C8: .word 0x0000FFFF - - thumb_func_start FUN_0202A5CC -FUN_0202A5CC: ; 0x0202A5CC - str r1, [r0, #0x4] - bx lr - - thumb_func_start FUN_0202A5D0 -FUN_0202A5D0: ; 0x0202A5D0 - ldr r0, [r0, #0x4] - bx lr - - thumb_func_start FUN_0202A5D4 -FUN_0202A5D4: ; 0x0202A5D4 - push {r3-r5, lr} - add r5, r1, #0x0 - mov r1, #0x17 - add r4, r2, #0x0 - bl SavArray_get - mov r1, #0x69 - lsl r1, r1, #0x2 - add r1, r0, r1 - lsl r0, r5, #0x3 - add r0, r1, r0 - add r1, r4, #0x0 - bl MailMsg_copy - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0202A5F4 -FUN_0202A5F4: ; 0x0202A5F4 - push {r4, lr} - add r4, r1, #0x0 - mov r1, #0x17 - bl SavArray_get - mov r1, #0x69 - lsl r1, r1, #0x2 - add r1, r0, r1 - lsl r0, r4, #0x3 - add r0, r1, r0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0202A60C -FUN_0202A60C: ; 0x0202A60C - push {r3-r6} - add r4, r3, #0x0 - mov r3, #0x1 - cmp r2, #0x0 - beq _0202A66C - cmp r2, #0xc8 - bhi _0202A66C - cmp r1, #0x0 - beq _0202A66C - cmp r1, #0xa - bhi _0202A66C - sub r5, r2, #0x1 - sub r2, r1, #0x1 - mov r1, #0xc8 - mul r1, r2 - add r1, r5, r1 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsr r6, r1, #0x1f - lsl r5, r1, #0x1d - sub r5, r5, r6 - mov r2, #0x1d - ror r5, r2 - add r2, r6, r5 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - lsl r3, r2 - lsl r2, r3, #0x18 - lsl r1, r1, #0x15 - lsr r5, r2, #0x18 - add r3, r0, #0x4 - lsr r2, r1, #0x18 - ldrb r1, [r3, r2] - orr r1, r5 - strb r1, [r3, r2] - ldr r3, [r4, #0x0] - ldr r1, [r4, #0x8] - lsl r5, r3, #0x18 - ldr r3, [r4, #0x4] - lsl r1, r1, #0x18 - lsl r3, r3, #0x18 - lsr r3, r3, #0x8 - ldr r2, [r4, #0xc] - lsr r1, r1, #0x10 - orr r3, r5 - orr r1, r3 - orr r1, r2 - str r1, [r0, #0x0] -_0202A66C: - pop {r3-r6} - bx lr - - thumb_func_start FUN_0202A670 -FUN_0202A670: ; 0x0202A670 - push {r4, lr} - add r4, r0, #0x0 - add r0, r4, #0x4 - mov r1, #0x0 - mov r2, #0xfa - bl MI_CpuFill8 - add r0, r4, #0x0 - mov r1, #0x0 - mov r2, #0x4 - bl MI_CpuFill8 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0202A68C -FUN_0202A68C: ; 0x0202A68C - ldr r3, [r0, #0x0] - ldr r2, [r1, #0x0] - cmp r3, r2 - bls _0202A698 - mov r0, #0x1 - bx lr -_0202A698: - ldr r3, [r0, #0x4] - ldr r2, [r1, #0x4] - cmp r3, r2 - bls _0202A6A4 - mov r0, #0x1 - bx lr -_0202A6A4: - ldr r2, [r0, #0x8] - ldr r0, [r1, #0x8] - cmp r2, r0 - bls _0202A6B0 - mov r0, #0x1 - bx lr -_0202A6B0: - mov r0, #0x0 - bx lr - - thumb_func_start FUN_0202A6B4 -FUN_0202A6B4: ; 0x0202A6B4 - push {r3-r7, lr} - sub sp, #0x10 - add r6, r2, #0x0 - add r5, r0, #0x0 - add r4, r1, #0x0 - mov r7, #0x1 - cmp r6, #0xc8 - bhi _0202A6C8 - cmp r4, #0xa - bls _0202A6CE -_0202A6C8: - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} -_0202A6CE: - ldr r0, [r5, #0x0] - lsr r1, r0, #0x18 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x0] - lsr r1, r0, #0x10 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x4] - lsr r1, r0, #0x8 - lsl r1, r1, #0x18 - lsl r0, r0, #0x18 - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - str r1, [sp, #0x8] - str r0, [sp, #0xc] - add r0, r3, #0x0 - add r1, sp, #0x0 - bl FUN_0202A68C - cmp r0, #0x0 - beq _0202A706 - add r0, r5, #0x0 - bl FUN_0202A670 - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} -_0202A706: - sub r1, r4, #0x1 - mov r0, #0xc8 - mul r0, r1 - sub r2, r6, #0x1 - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsr r3, r0, #0x1f - lsl r2, r0, #0x1d - lsl r0, r0, #0x15 - lsr r0, r0, #0x18 - add r0, r5, r0 - sub r2, r2, r3 - mov r1, #0x1d - ror r2, r1 - add r1, r3, r2 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r2, r7, #0x0 - lsl r2, r1 - lsl r1, r2, #0x18 - ldrb r0, [r0, #0x4] - lsr r1, r1, #0x18 - tst r0, r1 - beq _0202A73E - add sp, #0x10 - add r0, r7, #0x0 - pop {r3-r7, pc} -_0202A73E: - mov r0, #0x0 - add sp, #0x10 - pop {r3-r7, pc} - - thumb_func_start FUN_0202A744 -FUN_0202A744: ; 0x0202A744 - add r0, #0xfe - ldrb r0, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_0202A74C -FUN_0202A74C: ; 0x0202A74C - add r0, #0xff - ldrb r0, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_0202A754 -FUN_0202A754: ; 0x0202A754 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, r1, #0x0 - mov r1, #0x41 - add r4, r2, #0x0 - lsl r1, r1, #0x2 - ldr r2, _0202A77C ; =0x0000063C - add r1, r5, r1 - add r6, r3, #0x0 - bl MI_CpuCopy8 - ldr r0, _0202A780 ; =0x00000101 - strb r4, [r5, r0] - sub r0, r0, #0x1 - strb r6, [r5, r0] - mov r0, #0x1 - add r5, #0xfe - strb r0, [r5, #0x0] - pop {r4-r6, pc} - nop -_0202A77C: .word 0x0000063C -_0202A780: .word 0x00000101 - - thumb_func_start FUN_0202A784 -FUN_0202A784: ; 0x0202A784 - ldr r2, _0202A794 ; =0x00000101 - ldrb r3, [r0, r2] - sub r2, r2, #0x1 - strb r3, [r1, #0x0] - ldrb r0, [r0, r2] - strb r0, [r1, #0x1] - bx lr - nop -_0202A794: .word 0x00000101 - - thumb_func_start FUN_0202A798 -FUN_0202A798: ; 0x0202A798 - push {r3-r7, lr} - add r6, r1, #0x0 - mov r1, #0x41 - lsl r1, r1, #0x2 - add r5, r0, r1 - mov r0, #0xe4 - add r4, r2, #0x0 - mul r4, r0 - ldr r0, _0202A834 ; =0x00002710 - add r7, r6, #0x0 - str r0, [r6, #0x0] - add r0, r5, r4 - add r0, #0xc9 - ldrb r0, [r0, #0x0] - add r7, #0x30 - strh r0, [r6, #0x4] - add r0, r5, r4 - add r0, #0xc8 - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _0202A7EE - mov r0, #0x0 - mov r1, #0x1a - mov r2, #0x11 - mov r3, #0xb - bl NewMsgDataFromNarc - add r1, r5, r4 - add r1, #0xc8 - ldrb r1, [r1, #0x0] - add r2, r6, #0x0 - str r0, [sp, #0x0] - lsl r1, r1, #0x1e - lsr r1, r1, #0x1f - add r1, #0x16 - add r2, #0x8 - bl ReadMsgDataIntoU16Array - ldr r0, [sp, #0x0] - bl DestroyMsgData - b _0202A7FC -_0202A7EE: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xa8 - add r1, #0x8 - mov r2, #0x10 - bl MI_CpuCopy8 -_0202A7FC: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xca - add r1, #0x18 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xd2 - add r1, #0x20 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r6, #0x28 - add r0, #0xda - add r1, r6, #0x0 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r7, #0x0 - mov r2, #0xa8 - bl MI_CpuCopy8 - pop {r3-r7, pc} - nop -_0202A834: .word 0x00002710 - - thumb_func_start FUN_0202A838 -FUN_0202A838: ; 0x0202A838 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, r1, #0x0 - mov r1, #0x1d - add r4, r2, #0x0 - lsl r1, r1, #0x6 - mov r2, #0xff - add r1, r5, r1 - lsl r2, r2, #0x2 - add r6, r3, #0x0 - bl MI_CpuCopy8 - ldr r0, _0202A860 ; =0x00000103 - strb r4, [r5, r0] - sub r0, r0, #0x1 - strb r6, [r5, r0] - mov r0, #0x1 - add r5, #0xff - strb r0, [r5, #0x0] - pop {r4-r6, pc} - .balign 4 -_0202A860: .word 0x00000103 - - thumb_func_start FUN_0202A864 -FUN_0202A864: ; 0x0202A864 - ldr r2, _0202A874 ; =0x00000103 - ldrb r3, [r0, r2] - sub r2, r2, #0x1 - strb r3, [r1, #0x0] - ldrb r0, [r0, r2] - strb r0, [r1, #0x1] - bx lr - nop -_0202A874: .word 0x00000103 - - thumb_func_start FUN_0202A878 -FUN_0202A878: ; 0x0202A878 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, r1, #0x0 - mov r1, #0xff - lsl r1, r1, #0x2 - bl AllocFromHeap - add r4, r0, #0x0 - mov r0, #0x1d - lsl r0, r0, #0x6 - mov r2, #0xff - add r0, r5, r0 - add r1, r4, #0x0 - lsl r2, r2, #0x2 - bl MI_CpuCopy8 - add r0, r4, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_0202A89C -FUN_0202A89C: ; 0x0202A89C - mov r0, #0xd - lsl r0, r0, #0x8 - bx lr - .balign 4 - - thumb_func_start FUN_0202A8A4 -FUN_0202A8A4: ; 0x0202A8A4 - push {r4, lr} - add r4, r0, #0x0 - bl FUN_0202A1E4 - add r0, r4, #0x0 - add r0, #0x3c - bl FUN_0202A1F0 - mov r0, #0x69 - lsl r0, r0, #0x2 - add r0, r4, r0 - bl FUN_0202A204 - mov r0, #0x71 - lsl r0, r0, #0x2 - add r0, r4, r0 - bl FUN_0202A230 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0202A8CC -FUN_0202A8CC: ; 0x0202A8CC - ldr r3, _0202A8D4 ; =SavArray_get - mov r1, #0x17 - bx r3 - nop -_0202A8D4: .word SavArray_get - - thumb_func_start FUN_0202A8D8 -FUN_0202A8D8: ; 0x0202A8D8 - push {r3, lr} - mov r1, #0x17 - bl SavArray_get - add r0, #0x3c - pop {r3, pc} - - thumb_func_start FUN_0202A8E4 -FUN_0202A8E4: ; 0x0202A8E4 - push {r3, lr} - mov r1, #0x17 - bl SavArray_get - mov r1, #0x71 - lsl r1, r1, #0x2 - add r0, r0, r1 - pop {r3, pc} diff --git a/arm9/global.inc b/arm9/global.inc index d816d92a..94c754ec 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2005,6 +2005,9 @@ .extern FUN_0202A1C4 .extern FUN_0202A1E0 .extern FUN_0202A1E4 +.extern FUN_0202A1F0 +.extern FUN_0202A204 +.extern FUN_0202A230 .extern FUN_0202A240 .extern FUN_0202A2C4 .extern FUN_0202A36C diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c new file mode 100644 index 00000000..ca9dff64 --- /dev/null +++ b/arm9/src/unk_0202A1E0.c @@ -0,0 +1,726 @@ +#include "global.h" +#include "MI_memory.h" +#include "msgdata.h" +#include "heap.h" +#include "unk_0202A1E0.h" + +THUMB_FUNC s32 FUN_0202A1E0() +{ + return 0xe4; // 228 +} + +THUMB_FUNC void FUN_0202A1E4(void *dest) +{ + MI_CpuFill8(dest, 0, 0x3c); // 60 +} + +THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *unk) +{ + MI_CpuFill8(unk, 0, 0x168); // 360 + unk->b3 = 1; +} + +THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *unk) +{ + MailMsg_init_fromTemplate(&unk->messages[0], 0); + MailMsg_init_fromTemplate(&unk->messages[1], 1); + MailMsg_init_fromTemplate(&unk->messages[2], 2); + MailMsg_init_fromTemplate(&unk->messages[3], 3); +} + +THUMB_FUNC void FUN_0202A230(void *dst) +{ + MI_CpuFill8(dst, 0, 0xB3C); // 2876 +} + +THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 controlVariable, void *dst) +{ + switch (controlVariable) + { + case 0: + return unk->u_0_2; + case 1: + return unk->u_2; + case 2: + return unk->u_3; + case 3: + return unk->u_4; + case 4: + return unk->u_6; + case 5: + MI_CpuCopy8(&unk->u_8, dst, 4); + return 0; + case 6: + MI_CpuCopy8(&unk->u_2C, dst, 16); + return 0; + case 7: + return unk->u_0_0; + case 8: + MI_CpuCopy8(&unk->u_C, dst, 28); + return 0; + case 9: + return unk->u_0_5; + case 10: + return unk->u_28; + default: + return 0; + }; +} + +THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 controlVariable, void *src) +{ + switch (controlVariable) + { + case 0: + dst->u_0_2 = *(u8 *)src; + break; + case 1: + dst->u_2 = *(u8 *)src; + break; + case 2: + dst->u_3 = *(u8 *)src; + break; + case 3: + dst->u_4 = *(u16 *)src; + break; + case 4: + dst->u_6 = *(u16 *)src; + break; + case 5: + MI_CpuCopy8(src, &dst->u_8, 4); + break; + case 6: + MI_CpuCopy8(src, &dst->u_2C, 16); + break; + case 7: + dst->u_0_0 = *(u8 *)src; + break; + case 8: + MI_CpuCopy8(src, &dst->u_C, 28); + break; + case 10: + dst->u_28 = *(u32 *)src; + break; + case 9: + dst->u_0_5 = *(u8 *)src; + break; + } +} + +THUMB_FUNC void FUN_0202A36C(struct Unk0202A240 *unk, s32 arg1, s32 arg2, s32 arg3) +{ + if (unk->u_3 + arg1 < 0xff) + { + unk->u_3 += arg1; + } + + if (unk->u_4 + arg2 < 0xffff) + { + unk->u_4 += arg2; + } + + if (unk->u_6 + arg3 < 0xffff) + { + unk->u_6 += arg3; + } +} + +THUMB_FUNC u8 FUN_0202A398(struct Unk0202A240 *unk) +{ + return unk->u_0_1; +} + +THUMB_FUNC void FUN_0202A3A0(struct Unk0202A240 *unk, u16 arg1) +{ + unk->u_0_1 = arg1; +} + +THUMB_FUNC u16 FUN_0202A3B4(struct Unk0202A3B4 *unk, u16 arg1, s32 controlVariable) +{ + switch (controlVariable) + { + case 0: + break; + case 1: + if (arg1 > 0x270F) + { + unk->u_0 = 0x270F; + } + else + { + unk->u_0 = arg1; + } + break; + case 2: + case 3: + case 4: + break; + case 5: + if (unk->u_0 + arg1 > 0x270F) + { + unk->u_0 = 0x270F; + } + else + { + unk->u_0 += arg1; + } + break; + case 6: + if (unk->u_0 < arg1) + { + unk->u_0 = 0; + } + else + { + unk->u_0 -= arg1; + } + break; + } + return unk->u_0; +} + +THUMB_FUNC u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 controlVariable) +{ + switch (controlVariable) + { + case 2: + unk->u_2 = 0; + unk->u_8_4 = 0; + break; + case 3: + if (unk->u_8_4 != 0) + { + unk->u_2 += 1; + } + else + { + unk->u_2 = 1; + unk->u_8_4 = 1; + } + break; + } + return unk->u_2; +} + +THUMB_FUNC u8 FUN_0202A444(struct Unk0202A444 *unk, s32 controlVariable) +{ + switch (controlVariable) + { + case 2: + unk->u_3 = 1; + break; + case 3: + if (unk->u_3 < 0xa) + { + unk->u_3++; + } + break; + case 4: + if (unk->u_3 > 1) + { + unk->u_3--; + } + break; + } + return unk->u_3; +} + +THUMB_FUNC void FUN_0202A474(void *dst, s32 arg1, const void *src) +{ + if (arg1 == 0) + { + MI_CpuCopy8(src, dst + 0xc0, 0xa8); + } + else + { + MI_CpuCopy8(src, dst + 0x18, 0xa8); + } +} + +THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) +{ + if (arg1 == 0) + { + MI_CpuCopy8(src + 0xc0, dst, 0xa8); + } + else + { + MI_CpuCopy8(src + 0x18, dst, 0xa8); + } +} + +THUMB_FUNC void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) +{ + extern void _s32_div_f(); + + asm { + // push {r4-r6, lr} + add r6, r0, #0x0 + ldrb r0, [r1, #0x2] + mov r2, #0xfa + lsl r2, r2, #0x2 + sub r0, r0, #0x1 + add r3, r0, #0x0 + mul r3, r2 + lsl r0, r3, #0x10 + lsr r4, r0, #0x10 + ldrh r3, [r1, #0x4] + mov r0, #0xa + ldrb r5, [r1, #0x3] + mul r0, r3 + mov r3, #0x14 + mul r3, r5 + lsl r0, r0, #0x10 + lsl r3, r3, #0x10 + lsr r0, r0, #0x10 + lsr r3, r3, #0x10 + add r3, r0, r3 + add r0, r2, #0x0 + sub r0, #0x32 + cmp r3, r0 + ble _0202A4EE + mov r5, #0x0 + b _0202A4F6 + _0202A4EE: + sub r2, #0x32 + sub r0, r2, r3 + lsl r0, r0, #0x10 + lsr r5, r0, #0x10 + _0202A4F6: + ldrh r1, [r1, #0x6] + ldr r0, =0x000003CA + cmp r1, r0 + bls _0202A502 + mov r1, #0x0 + b _0202A510 + _0202A502: + add r0, #0x1e + sub r0, r0, r1 + mov r1, #0x1e + bl _s32_div_f + lsl r0, r0, #0x10 + lsr r1, r0, #0x10 + _0202A510: + add r0, r4, r5 + add r0, r1, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + strh r0, [r6, #0x16] + // pop {r4-r6, pc} + } +} + +THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) +{ + return unk->u_16; +} + +THUMB_FUNC u8 FUN_0202A524(struct Unk0202A4B8 *unk) +{ + return (u8)(unk->u_16 / (0xfa << 2)); +} + +THUMB_FUNC u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2) +{ + if (arg1 == 5) + { + return 0; + } + + switch(arg2) { + case 2: + unk->u_array_C[arg1] = 0; + break; + case 3: + if (unk->u_array_C[arg1] < 0xfffe) { + unk->u_array_C[arg1]++; + } + break; + } + return unk->u_array_C[arg1]; +} + +THUMB_FUNC u16 FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) { + asm{ + //push {r3-r4} + mov r3, #0x1 + mov r4, #0x0 + cmp r1, #0x0 + bls _0202A590 + _0202A582: + add r4, r4, #0x1 + lsl r4, r4, #0x10 + lsl r3, r3, #0x11 + lsr r4, r4, #0x10 + lsr r3, r3, #0x10 + cmp r4, r1 + blo _0202A582 + _0202A590: + cmp r2, #0x0 + beq _0202A5B4 + cmp r2, #0x1 + beq _0202A5AC + cmp r2, #0x2 + bne _0202A5C2 + ldr r1, =0x0000FFFF + eor r1, r3 + lsl r1, r1, #0x10 + lsr r2, r1, #0x10 + ldrh r1, [r0, #0x8] + and r1, r2 + strh r1, [r0, #0x8] + b _0202A5C2 + _0202A5AC: + ldrh r1, [r0, #0x8] + orr r1, r3 + strh r1, [r0, #0x8] + b _0202A5C2 + _0202A5B4: + ldrh r0, [r0, #0x8] + add r2, r0, #0x0 + asr r2, r1 + mov r0, #0x1 + and r0, r2 + pop {r3-r4} + bx lr + _0202A5C2: + mov r0, #0x0 + // pop {r3-r4} + // bx lr + // .balign 4 + // _0202A5C8: .word 0x0000FFFF + } +} + + +THUMB_FUNC void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1) +{ + unk->u_4 = arg1; +} + +THUMB_FUNC u32 FUN_0202A5D0(struct Unk0202A5CC *unk) +{ + return unk->u_4; +} + + +THUMB_FUNC void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + MailMsg_copy(&data->messages.messages[arg1], arg2); +} + +THUMB_FUNC struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->messages.messages[arg1]; +} + +THUMB_FUNC void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3) { + asm { + // push {r3-r6} + add r4, r3, #0x0 + mov r3, #0x1 + cmp r2, #0x0 + beq _0202A66C + cmp r2, #0xc8 + bhi _0202A66C + cmp r1, #0x0 + beq _0202A66C + cmp r1, #0xa + bhi _0202A66C + sub r5, r2, #0x1 + sub r2, r1, #0x1 + mov r1, #0xc8 + mul r1, r2 + add r1, r5, r1 + lsl r1, r1, #0x10 + lsr r1, r1, #0x10 + lsr r6, r1, #0x1f + lsl r5, r1, #0x1d + sub r5, r5, r6 + mov r2, #0x1d + ror r5, r2 + add r2, r6, r5 + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + lsl r3, r2 + lsl r2, r3, #0x18 + lsl r1, r1, #0x15 + lsr r5, r2, #0x18 + add r3, r0, #0x4 + lsr r2, r1, #0x18 + ldrb r1, [r3, r2] + orr r1, r5 + strb r1, [r3, r2] + ldr r3, [r4, #0x0] + ldr r1, [r4, #0x8] + lsl r5, r3, #0x18 + ldr r3, [r4, #0x4] + lsl r1, r1, #0x18 + lsl r3, r3, #0x18 + lsr r3, r3, #0x8 + ldr r2, [r4, #0xc] + lsr r1, r1, #0x10 + orr r3, r5 + orr r1, r3 + orr r1, r2 + str r1, [r0, #0x0] + _0202A66C: + // pop {r3-r6} + // bx lr + } +} + +THUMB_FUNC void FUN_0202A670(struct Unk0202A670 *arg0) +{ + + MI_CpuFill8(&(arg0->b4), 0, 0xfa); + MI_CpuFill8(arg0, 0, 4); +} + +THUMB_FUNC u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) +{ + if (arg0->b0 > arg1->b0) { + return 1; + } else if (arg0->b4 > arg1->b4) { + return 1; + } else if (arg0->b8 > arg1->b8) { + return 1; + } + return 0; +} + +THUMB_FUNC void FUN_0202A6B4(u32 arg0, u32 arg1, u32 arg2) +{ + asm { + // push {r3-r7, lr} + sub sp, #0x10 + add r6, r2, #0x0 + add r5, r0, #0x0 + add r4, r1, #0x0 + mov r7, #0x1 + cmp r6, #0xc8 + bhi _0202A6C8 + cmp r4, #0xa + bls _0202A6CE + _0202A6C8: + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} + _0202A6CE: + ldr r0, [r5, #0x0] + lsr r1, r0, #0x18 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #0x0] + lsr r1, r0, #0x10 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #0x4] + lsr r1, r0, #0x8 + lsl r1, r1, #0x18 + lsl r0, r0, #0x18 + lsr r1, r1, #0x18 + lsr r0, r0, #0x18 + str r1, [sp, #0x8] + str r0, [sp, #0xc] + add r0, r3, #0x0 + add r1, sp, #0x0 + bl FUN_0202A68C + cmp r0, #0x0 + beq _0202A706 + add r0, r5, #0x0 + bl FUN_0202A670 + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} + _0202A706: + sub r1, r4, #0x1 + mov r0, #0xc8 + mul r0, r1 + sub r2, r6, #0x1 + add r0, r2, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + lsr r3, r0, #0x1f + lsl r2, r0, #0x1d + lsl r0, r0, #0x15 + lsr r0, r0, #0x18 + add r0, r5, r0 + sub r2, r2, r3 + mov r1, #0x1d + ror r2, r1 + add r1, r3, r2 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r2, r7, #0x0 + lsl r2, r1 + lsl r1, r2, #0x18 + ldrb r0, [r0, #0x4] + lsr r1, r1, #0x18 + tst r0, r1 + beq _0202A73E + add sp, #0x10 + add r0, r7, #0x0 + pop {r3-r7, pc} + _0202A73E: + mov r0, #0x0 + add sp, #0x10 + // pop {r3-r7, pc} + } +} + + +THUMB_FUNC u8 FUN_0202A744(struct Unk0202A744 *unk) +{ + return unk->u_FE; +} + +THUMB_FUNC u8 FUN_0202A74C(struct Unk0202A744 *unk) +{ + return unk->u_FF; +} + +THUMB_FUNC void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(src, &dest->u_104, sizeof(struct Unk0202A744_substruct1)); + dest->u_101 = arg2; + dest->u_100 = arg3; + dest->u_FE = 1; +} + +THUMB_FUNC void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *dest) +{ + dest->u_0 = src->u_101; + dest->u_1 = src->u_100; +} + +THUMB_FUNC void FUN_0202A798() +{ + asm { + //push {r3-r7, lr} + add r6, r1, #0x0 + mov r1, #0x41 + lsl r1, r1, #0x2 + add r5, r0, r1 + mov r0, #0xe4 + add r4, r2, #0x0 + mul r4, r0 + ldr r0, =0x00002710 + add r7, r6, #0x0 + str r0, [r6, #0x0] + add r0, r5, r4 + add r0, #0xc9 + ldrb r0, [r0, #0x0] + add r7, #0x30 + strh r0, [r6, #0x4] + add r0, r5, r4 + add r0, #0xc8 + ldrb r0, [r0, #0x0] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _0202A7EE + mov r0, #0x0 + mov r1, #0x1a + mov r2, #0x11 + mov r3, #0xb + bl NewMsgDataFromNarc + add r1, r5, r4 + add r1, #0xc8 + ldrb r1, [r1, #0x0] + add r2, r6, #0x0 + str r0, [sp, #0x0] + lsl r1, r1, #0x1e + lsr r1, r1, #0x1f + add r1, #0x16 + add r2, #0x8 + bl ReadMsgDataIntoU16Array + ldr r0, [sp, #0x0] + bl DestroyMsgData + b _0202A7FC + _0202A7EE: + add r0, r5, r4 + add r1, r6, #0x0 + add r0, #0xa8 + add r1, #0x8 + mov r2, #0x10 + bl MI_CpuCopy8 + _0202A7FC: + add r0, r5, r4 + add r1, r6, #0x0 + add r0, #0xca + add r1, #0x18 + mov r2, #0x8 + bl MI_CpuCopy8 + add r0, r5, r4 + add r1, r6, #0x0 + add r0, #0xd2 + add r1, #0x20 + mov r2, #0x8 + bl MI_CpuCopy8 + add r0, r5, r4 + add r6, #0x28 + add r0, #0xda + add r1, r6, #0x0 + mov r2, #0x8 + bl MI_CpuCopy8 + add r0, r5, r4 + add r1, r7, #0x0 + mov r2, #0xa8 + bl MI_CpuCopy8 + //pop {r3-r7, pc} + //nop + } +} + +THUMB_FUNC void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +{ + MI_CpuCopy8(src, &dest->u_740, sizeof(dest->u_740)); + dest->u_103 = arg2; + dest->u_102 = arg3; + dest->u_FF = 1; +} + +THUMB_FUNC void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest) +{ + dest->u_0 = src->u_103; + dest->u_1 = src->u_102; +} + +THUMB_FUNC struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 heap_id) +{ + struct Unk0202A744_substruct2 *dstp = AllocFromHeap(heap_id, sizeof(struct Unk0202A744_substruct2) /* 1020 */); + MI_CpuCopy8(&src->u_740, dstp, 0x3fc); + return dstp; +} + +THUMB_FUNC s32 FUN_0202A89C() +{ + return 0xD00; // 3328 +} + +THUMB_FUNC void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct) +{ + FUN_0202A1E4(savStruct); + FUN_0202A1F0(&savStruct->u_3C); + FUN_0202A204(&savStruct->messages); + FUN_0202A230(&savStruct->u_1C4); +} + +THUMB_FUNC struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2) +{ + return SavArray_get(sav2, 23); +} + +THUMB_FUNC void *FUN_0202A8D8(struct SaveBlock2* sav2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->u_3C; +} + +THUMB_FUNC void *FUN_0202A8E4(struct SaveBlock2* sav2) +{ + struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); + return &data->u_1C4; +} \ No newline at end of file diff --git a/include/unk_0202A1E0.h b/include/unk_0202A1E0.h new file mode 100644 index 00000000..4ed236be --- /dev/null +++ b/include/unk_0202A1E0.h @@ -0,0 +1,171 @@ +#ifndef POKEDIAMOND_UNK_0202A1E0_H +#define POKEDIAMOND_UNK_0202A1E0_H + +#include "mail_message.h" +#include "save_block_2.h" + +struct Unk0202A1F0 +{ + u8 b0; + u8 b1; + u8 b2; + u8 b3; +}; + +struct UnkMailStruct +{ + struct MailMessage messages[4]; +}; + +struct Unk0202A240 +{ + u8 u_0_0 : 1; // used + u8 u_0_1 : 1; // used + u8 u_0_2 : 3; // used + u8 u_0_5 : 3; // used + u8 u_1; + u8 u_2; // used + u8 u_3; // used + u16 u_4; // used + u16 u_6; // used + s32 u_8; // used, cpu copy 4 bytes + s32 u_C[7]; // used, cpu copy 28 bytes + u32 u_28; // used + s32 u_2C[4]; // used, cpu copy 16 bytes +}; + +struct Unk0202A3B4 +{ + u16 u_0; // used + u8 filler_0[6]; + u16 filler_1 : 4; + u16 u_8_4 : 1; // used +}; + +struct Unk0202A40C +{ + u16 filler_0; + u8 u_2; // used + u8 filler_1[5]; + u16 filler_2 : 4; + u16 u_8_4 : 1; // used +}; + +struct Unk0202A444 +{ + u8 filler_0[3]; + u8 u_3; // used +}; + +struct Unk0202A4B8 +{ + u8 filler[2]; + u8 u_2; // used + u8 u_3; // used + u16 u_4; // used + u16 u_6; // used + u16 filler_1[2]; + u16 u_array_C[5]; // used + u16 u_16; // used + u16 u_18; // used +}; + +struct Unk0202A5CC +{ + u32 filler; + u32 u_4; +}; + + +struct UnkSaveStruct_0202A5D4 +{ + u32 filler[15]; + struct Unk0202A1F0 u_3C; + u32 filler1[89]; + struct UnkMailStruct messages; + u32 u_1C4; +}; + +struct Unk0202A670 +{ + u32 b0; + u8 b4; // used +}; + +struct Unk0202A68C +{ + u32 b0; // used + u32 b4; // used + u32 b8; // used +}; + +struct Unk0202A744_substruct1 +{ + u8 data[0x63c]; +}; // total size 0x63C (1596) + +struct Unk0202A744_substruct2 +{ + u8 data[0x3fc]; +}; // total size 0x3FC (1020) + +struct Unk0202A744 +{ + u8 filler[254]; + u8 u_FE; + u8 u_FF; + u8 u_100; + u8 u_101; + u8 u_102; + u8 u_103; + struct Unk0202A744_substruct1 u_104; + struct Unk0202A744_substruct2 u_740; +}; + +struct Unk0202A784 +{ + u8 u_0; + u8 u_1; +}; + +s32 FUN_0202A1E0(); +void FUN_0202A1E4(void *dst); +void FUN_0202A1F0(struct Unk0202A1F0 *unk); +void FUN_0202A204(struct UnkMailStruct *unk); +void FUN_0202A230(void *dst); +u32 FUN_0202A240(struct Unk0202A240 *unk, u32 arg1, void *dst); +void FUN_0202A2C4(struct Unk0202A240 *dst, u32 arg1, void *src); +void FUN_0202A36C(struct Unk0202A240 *unk, s32 arg1, s32 arg2, s32 arg3); +u8 FUN_0202A398(struct Unk0202A240 *unk); +void FUN_0202A3A0(struct Unk0202A240 *unk, u16 arg1); +u16 FUN_0202A3B4(struct Unk0202A3B4 *unk, u16 arg1, s32 arg2); +u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 arg1); +u8 FUN_0202A444(struct Unk0202A444 *unk, s32 arg1); +void FUN_0202A474(void *dst, s32 arg1, const void *src); +void FUN_0202A498(const void *src, s32 arg1, void *dst); +void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); +u16 FUN_0202A520(struct Unk0202A4B8 *unk); +u8 FUN_0202A524(struct Unk0202A4B8 *unk); +u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2); +void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1); +u32 FUN_0202A5D0(struct Unk0202A5CC *unk); +void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2); +struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1); +void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3); +void FUN_0202A670(struct Unk0202A670 *arg0); +u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); +u8 FUN_0202A744(struct Unk0202A744 *unk); +u8 FUN_0202A74C(struct Unk0202A744 *unk); +void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); +void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *ptr1); +void FUN_0202A798(); +void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); +void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest); +struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 head_id); +s32 FUN_0202A89C(); +void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct); +struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2); +void *FUN_0202A8D8(struct SaveBlock2* sav2); +void *FUN_0202A8E4(struct SaveBlock2* sav2); + +#endif //POKEDIAMOND_UNK_0202A1E0_H \ No newline at end of file -- cgit v1.2.3 From 1fc5a9fcef39d9fbed2b7f96b4a45940ba7e9afd Mon Sep 17 00:00:00 2001 From: who-knows-who Date: Sat, 15 May 2021 16:10:25 +0100 Subject: Match FUN_0202A4B8 --- arm9/src/unk_0202A1E0.c | 80 +++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 56 deletions(-) diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c index ca9dff64..7de474ee 100644 --- a/arm9/src/unk_0202A1E0.c +++ b/arm9/src/unk_0202A1E0.c @@ -251,63 +251,31 @@ THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) THUMB_FUNC void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) { - extern void _s32_div_f(); - - asm { - // push {r4-r6, lr} - add r6, r0, #0x0 - ldrb r0, [r1, #0x2] - mov r2, #0xfa - lsl r2, r2, #0x2 - sub r0, r0, #0x1 - add r3, r0, #0x0 - mul r3, r2 - lsl r0, r3, #0x10 - lsr r4, r0, #0x10 - ldrh r3, [r1, #0x4] - mov r0, #0xa - ldrb r5, [r1, #0x3] - mul r0, r3 - mov r3, #0x14 - mul r3, r5 - lsl r0, r0, #0x10 - lsl r3, r3, #0x10 - lsr r0, r0, #0x10 - lsr r3, r3, #0x10 - add r3, r0, r3 - add r0, r2, #0x0 - sub r0, #0x32 - cmp r3, r0 - ble _0202A4EE - mov r5, #0x0 - b _0202A4F6 - _0202A4EE: - sub r2, #0x32 - sub r0, r2, r3 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - _0202A4F6: - ldrh r1, [r1, #0x6] - ldr r0, =0x000003CA - cmp r1, r0 - bls _0202A502 - mov r1, #0x0 - b _0202A510 - _0202A502: - add r0, #0x1e - sub r0, r0, r1 - mov r1, #0x1e - bl _s32_div_f - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - _0202A510: - add r0, r4, r5 - add r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - strh r0, [r6, #0x16] - // pop {r4-r6, pc} + u16 part1 = (arg1->u_2 - 1) * 1000; + + s32 value = (u16) (arg1->u_4 * 10) + (u16) (arg1->u_3 * 20); + u16 part2; + if (value > 950) + { + part2 = 0; } + else + { + part2 = 950 - value; + } + + u16 part3; + if (arg1->u_6 > 970) + { + part3 = 0; + } + else + { + part3 = (970 + 30 - arg1->u_6) / 30; + } + + // Can't seem to get these shifts to happen with a cast + arg0->u_16 = (u32) ((part1 + part2 + part3) << 16) >> 16; } THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) -- cgit v1.2.3 From a2a17a9426f16ee601ff17840b8bb7851fef7138 Mon Sep 17 00:00:00 2001 From: who-knows-who Date: Wed, 2 Jun 2021 22:01:18 +0100 Subject: Finished file unk_0202A1E0 --- arm9/src/unk_0202A1E0.c | 431 ++++++++++++++++-------------------------------- include/unk_0202A1E0.h | 83 ++++++++-- 2 files changed, 204 insertions(+), 310 deletions(-) diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c index 7de474ee..607ea8c3 100644 --- a/arm9/src/unk_0202A1E0.c +++ b/arm9/src/unk_0202A1E0.c @@ -6,36 +6,36 @@ THUMB_FUNC s32 FUN_0202A1E0() { - return 0xe4; // 228 + return 228; } THUMB_FUNC void FUN_0202A1E4(void *dest) { - MI_CpuFill8(dest, 0, 0x3c); // 60 + MI_CpuFill8(dest, 0, 60); } -THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *unk) +THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *arg0) { - MI_CpuFill8(unk, 0, 0x168); // 360 - unk->b3 = 1; + MI_CpuFill8(arg0, 0, 360); + arg0->u_3 = 1; } -THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *unk) +THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *arg0) { - MailMsg_init_fromTemplate(&unk->messages[0], 0); - MailMsg_init_fromTemplate(&unk->messages[1], 1); - MailMsg_init_fromTemplate(&unk->messages[2], 2); - MailMsg_init_fromTemplate(&unk->messages[3], 3); + MailMsg_init_fromTemplate(&arg0->messages[0], 0); + MailMsg_init_fromTemplate(&arg0->messages[1], 1); + MailMsg_init_fromTemplate(&arg0->messages[2], 2); + MailMsg_init_fromTemplate(&arg0->messages[3], 3); } THUMB_FUNC void FUN_0202A230(void *dst) { - MI_CpuFill8(dst, 0, 0xB3C); // 2876 + MI_CpuFill8(dst, 0, 2876); } -THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 controlVariable, void *dst) +THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 mode, void *dst) { - switch (controlVariable) + switch (mode) { case 0: return unk->u_0_2; @@ -67,9 +67,9 @@ THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 controlVariable, void * }; } -THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 controlVariable, void *src) +THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 mode, void *src) { - switch (controlVariable) + switch (mode) { case 0: dst->u_0_2 = *(u8 *)src; @@ -249,33 +249,35 @@ THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) } } -THUMB_FUNC void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) +THUMB_FUNC u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) { - u16 part1 = (arg1->u_2 - 1) * 1000; + u16 var1, var2, var3, var4, var5, total; + + var1 = (u16) ((arg1->u_2 - 1) * 1000); + var2 = (u16) (arg1->u_4 * 10); + var3 = (u16) (arg1->u_3 * 20); - s32 value = (u16) (arg1->u_4 * 10) + (u16) (arg1->u_3 * 20); - u16 part2; - if (value > 950) + if (var2 + var3 > 950) { - part2 = 0; + var4 = 0; } else { - part2 = 950 - value; + var4 = (u16) (950 - (var2 + var3)); } - u16 part3; if (arg1->u_6 > 970) { - part3 = 0; + var5 = 0; } else { - part3 = (970 + 30 - arg1->u_6) / 30; + var5 = (u16) ((1000 - arg1->u_6) / 30); } - // Can't seem to get these shifts to happen with a cast - arg0->u_16 = (u32) ((part1 + part2 + part3) << 16) >> 16; + total = (u16) (var1 + var4 + var5); + arg0->u_16 = total; + return total; } THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) @@ -308,56 +310,30 @@ THUMB_FUNC u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2) return unk->u_array_C[arg1]; } -THUMB_FUNC u16 FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) { - asm{ - //push {r3-r4} - mov r3, #0x1 - mov r4, #0x0 - cmp r1, #0x0 - bls _0202A590 - _0202A582: - add r4, r4, #0x1 - lsl r4, r4, #0x10 - lsl r3, r3, #0x11 - lsr r4, r4, #0x10 - lsr r3, r3, #0x10 - cmp r4, r1 - blo _0202A582 - _0202A590: - cmp r2, #0x0 - beq _0202A5B4 - cmp r2, #0x1 - beq _0202A5AC - cmp r2, #0x2 - bne _0202A5C2 - ldr r1, =0x0000FFFF - eor r1, r3 - lsl r1, r1, #0x10 - lsr r2, r1, #0x10 - ldrh r1, [r0, #0x8] - and r1, r2 - strh r1, [r0, #0x8] - b _0202A5C2 - _0202A5AC: - ldrh r1, [r0, #0x8] - orr r1, r3 - strh r1, [r0, #0x8] - b _0202A5C2 - _0202A5B4: - ldrh r0, [r0, #0x8] - add r2, r0, #0x0 - asr r2, r1 - mov r0, #0x1 - and r0, r2 - pop {r3-r4} - bx lr - _0202A5C2: - mov r0, #0x0 - // pop {r3-r4} - // bx lr - // .balign 4 - // _0202A5C8: .word 0x0000FFFF +THUMB_FUNC BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) +{ + u16 i; + u16 flag = 1; + + for (i = 0; i < arg1 ; i++) + { + flag <<= 1; + } + + switch (arg2) + { + case 2: + flag = (u16) (flag ^ 0xffff); + arg0->u_8 &= flag; + break; + case 1: + arg0->u_8 |= flag; + break; + case 0: + return (BOOL) ((arg0->u_8 >> arg1) & 1); } + + return 0; } @@ -384,159 +360,81 @@ THUMB_FUNC struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1) return &data->messages.messages[arg1]; } -THUMB_FUNC void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3) { - asm { - // push {r3-r6} - add r4, r3, #0x0 - mov r3, #0x1 - cmp r2, #0x0 - beq _0202A66C - cmp r2, #0xc8 - bhi _0202A66C - cmp r1, #0x0 - beq _0202A66C - cmp r1, #0xa - bhi _0202A66C - sub r5, r2, #0x1 - sub r2, r1, #0x1 - mov r1, #0xc8 - mul r1, r2 - add r1, r5, r1 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - lsr r6, r1, #0x1f - lsl r5, r1, #0x1d - sub r5, r5, r6 - mov r2, #0x1d - ror r5, r2 - add r2, r6, r5 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - lsl r3, r2 - lsl r2, r3, #0x18 - lsl r1, r1, #0x15 - lsr r5, r2, #0x18 - add r3, r0, #0x4 - lsr r2, r1, #0x18 - ldrb r1, [r3, r2] - orr r1, r5 - strb r1, [r3, r2] - ldr r3, [r4, #0x0] - ldr r1, [r4, #0x8] - lsl r5, r3, #0x18 - ldr r3, [r4, #0x4] - lsl r1, r1, #0x18 - lsl r3, r3, #0x18 - lsr r3, r3, #0x8 - ldr r2, [r4, #0xc] - lsr r1, r1, #0x10 - orr r3, r5 - orr r1, r3 - orr r1, r2 - str r1, [r0, #0x0] - _0202A66C: - // pop {r3-r6} - // bx lr +THUMB_FUNC void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { + + u8 bitmask = 1; + + if (arg2 == 0 || arg2 > 200) + { + return; + } + + if (arg1 == 0 || arg1 > 10) + { + return; } + + u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var2 / 8); + u8 remainder = (u8) (var2 % 8); + bitmask <<= remainder; + + arg0->u_4[index] |= bitmask; + arg0->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C; } THUMB_FUNC void FUN_0202A670(struct Unk0202A670 *arg0) { - MI_CpuFill8(&(arg0->b4), 0, 0xfa); + MI_CpuFill8(&(arg0->u_4), 0, 250); MI_CpuFill8(arg0, 0, 4); } -THUMB_FUNC u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) +THUMB_FUNC BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) { - if (arg0->b0 > arg1->b0) { - return 1; - } else if (arg0->b4 > arg1->b4) { - return 1; - } else if (arg0->b8 > arg1->b8) { - return 1; + if (arg0->u_0 > arg1->u_0) { + return TRUE; + } else if (arg0->u_4 > arg1->u_4) { + return TRUE; + } else if (arg0->u_8 > arg1->u_8) { + return TRUE; } - return 0; + return FALSE; } -THUMB_FUNC void FUN_0202A6B4(u32 arg0, u32 arg1, u32 arg2) -{ - asm { - // push {r3-r7, lr} - sub sp, #0x10 - add r6, r2, #0x0 - add r5, r0, #0x0 - add r4, r1, #0x0 - mov r7, #0x1 - cmp r6, #0xc8 - bhi _0202A6C8 - cmp r4, #0xa - bls _0202A6CE - _0202A6C8: - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} - _0202A6CE: - ldr r0, [r5, #0x0] - lsr r1, r0, #0x18 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x0] - lsr r1, r0, #0x10 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x4] - lsr r1, r0, #0x8 - lsl r1, r1, #0x18 - lsl r0, r0, #0x18 - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - str r1, [sp, #0x8] - str r0, [sp, #0xc] - add r0, r3, #0x0 - add r1, sp, #0x0 - bl FUN_0202A68C - cmp r0, #0x0 - beq _0202A706 - add r0, r5, #0x0 - bl FUN_0202A670 - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} - _0202A706: - sub r1, r4, #0x1 - mov r0, #0xc8 - mul r0, r1 - sub r2, r6, #0x1 - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsr r3, r0, #0x1f - lsl r2, r0, #0x1d - lsl r0, r0, #0x15 - lsr r0, r0, #0x18 - add r0, r5, r0 - sub r2, r2, r3 - mov r1, #0x1d - ror r2, r1 - add r1, r3, r2 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r2, r7, #0x0 - lsl r2, r1 - lsl r1, r2, #0x18 - ldrb r0, [r0, #0x4] - lsr r1, r1, #0x18 - tst r0, r1 - beq _0202A73E - add sp, #0x10 - add r0, r7, #0x0 - pop {r3-r7, pc} - _0202A73E: - mov r0, #0x0 - add sp, #0x10 - // pop {r3-r7, pc} +THUMB_FUNC BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) +{ + u8 bitmask = 1; + + if (arg2 > 200 || arg1 > 10) + { + return FALSE; + } + + u32 var0 = arg0->u_0; + + Unk0202A68C var1; + var1.u_0 = var0 >> 24 & 0xff; + var1.u_4 = var0 >> 16 & 0xff; + var1.u_8 = var0 >> 8 & 0xff; + var1.u_C = var0 & 0xff; + + if (FUN_0202A68C(arg3, &var1)) + { + FUN_0202A670(arg0); + return FALSE; + } + + u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var2 / 8); + u8 remainder = (u8) (var2 % 8); + bitmask <<= remainder; + + if (arg0->u_4[index] & bitmask) + { + return 1; } + return FALSE; } @@ -564,82 +462,31 @@ THUMB_FUNC void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *dest) dest->u_1 = src->u_100; } -THUMB_FUNC void FUN_0202A798() -{ - asm { - //push {r3-r7, lr} - add r6, r1, #0x0 - mov r1, #0x41 - lsl r1, r1, #0x2 - add r5, r0, r1 - mov r0, #0xe4 - add r4, r2, #0x0 - mul r4, r0 - ldr r0, =0x00002710 - add r7, r6, #0x0 - str r0, [r6, #0x0] - add r0, r5, r4 - add r0, #0xc9 - ldrb r0, [r0, #0x0] - add r7, #0x30 - strh r0, [r6, #0x4] - add r0, r5, r4 - add r0, #0xc8 - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _0202A7EE - mov r0, #0x0 - mov r1, #0x1a - mov r2, #0x11 - mov r3, #0xb - bl NewMsgDataFromNarc - add r1, r5, r4 - add r1, #0xc8 - ldrb r1, [r1, #0x0] - add r2, r6, #0x0 - str r0, [sp, #0x0] - lsl r1, r1, #0x1e - lsr r1, r1, #0x1f - add r1, #0x16 - add r2, #0x8 - bl ReadMsgDataIntoU16Array - ldr r0, [sp, #0x0] - bl DestroyMsgData - b _0202A7FC - _0202A7EE: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xa8 - add r1, #0x8 - mov r2, #0x10 - bl MI_CpuCopy8 - _0202A7FC: - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xca - add r1, #0x18 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r6, #0x0 - add r0, #0xd2 - add r1, #0x20 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r6, #0x28 - add r0, #0xda - add r1, r6, #0x0 - mov r2, #0x8 - bl MI_CpuCopy8 - add r0, r5, r4 - add r1, r7, #0x0 - mov r2, #0xa8 - bl MI_CpuCopy8 - //pop {r3-r7, pc} - //nop +THUMB_FUNC void FUN_0202A798(struct Unk0202A798_1 *arg0, struct Unk0202A798_2 *arg1, u32 arg2) +{ + struct Unk0202A798_substruct2 *var0 = &arg1->u_0; + u8 *var1 = arg1->u_30; + struct Unk0202A798_substruct1 *src = &arg0->u_104[arg2]; + struct MsgData *message; + + var0->u_0 = 10000; + var0->u_4 = src->u_C9; + + if(src->u_C8_0) + { + message = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 17, 11); + ReadMsgDataIntoU16Array(message, (u32) (22 + src->u_C8_1), var0->u_8); + DestroyMsgData(message); + } + else + { + MI_CpuCopy8(src->u_A8, var0->u_8, 16); } + + MI_CpuCopy8(src->u_CA, var0->u_18, 8); + MI_CpuCopy8(src->u_D2, var0->u_20, 8); + MI_CpuCopy8(src->u_DA, var0->u_28, 8); + MI_CpuCopy8(src->u_0, var1, 168); } THUMB_FUNC void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) @@ -659,7 +506,7 @@ THUMB_FUNC void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest) THUMB_FUNC struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 heap_id) { struct Unk0202A744_substruct2 *dstp = AllocFromHeap(heap_id, sizeof(struct Unk0202A744_substruct2) /* 1020 */); - MI_CpuCopy8(&src->u_740, dstp, 0x3fc); + MI_CpuCopy8(&src->u_740, dstp, sizeof(struct Unk0202A744_substruct2)); return dstp; } @@ -681,7 +528,7 @@ THUMB_FUNC struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2) return SavArray_get(sav2, 23); } -THUMB_FUNC void *FUN_0202A8D8(struct SaveBlock2* sav2) +THUMB_FUNC struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2) { struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); return &data->u_3C; diff --git a/include/unk_0202A1E0.h b/include/unk_0202A1E0.h index 4ed236be..c07810c3 100644 --- a/include/unk_0202A1E0.h +++ b/include/unk_0202A1E0.h @@ -6,10 +6,8 @@ struct Unk0202A1F0 { - u8 b0; - u8 b1; - u8 b2; - u8 b3; + u8 filler[3]; + u8 u_3; }; struct UnkMailStruct @@ -70,6 +68,12 @@ struct Unk0202A4B8 u16 u_18; // used }; +struct Unk0202A578 +{ + u8 filler[8]; + u16 u_8; +}; + struct Unk0202A5CC { u32 filler; @@ -86,18 +90,21 @@ struct UnkSaveStruct_0202A5D4 u32 u_1C4; }; -struct Unk0202A670 +typedef struct Unk0202A670 { - u32 b0; - u8 b4; // used -}; + u32 u_0; // used + u8 u_4[250]; // used +} +Unk0202A670; -struct Unk0202A68C +typedef struct Unk0202A68C { - u32 b0; // used - u32 b4; // used - u32 b8; // used -}; + u32 u_0; // used + u32 u_4; // used + u32 u_8; // used + u32 u_C; // used +} +Unk0202A68C; // total size 0x10 (16) struct Unk0202A744_substruct1 { @@ -106,7 +113,7 @@ struct Unk0202A744_substruct1 struct Unk0202A744_substruct2 { - u8 data[0x3fc]; + u8 data[1020]; }; // total size 0x3FC (1020) struct Unk0202A744 @@ -128,6 +135,44 @@ struct Unk0202A784 u8 u_1; }; +struct Unk0202A798_substruct1 +{ + u8 u_0[168]; + u8 u_A8[16]; + u16 filler_2[8]; + u8 u_C8_0:1; + u8 u_C8_1:1; + u8 u_C8_filler:6; + u8 u_C9; + u16 u_CA[4]; + u16 u_D2[4]; + u16 u_DA[4]; + u8 filler_3[2]; +}; // total size 0xE4 (228) + +struct Unk0202A798_1 +{ + u8 filler[260]; + struct Unk0202A798_substruct1 u_104[4]; +}; + +struct Unk0202A798_substruct2 +{ + u32 u_0; + u16 u_4; + u8 filler_1[2]; + u16 u_8[8]; + u16 u_18[4]; + u16 u_20[4]; + u16 u_28[4]; +}; // total size 0x30 (48) + +struct Unk0202A798_2 +{ + struct Unk0202A798_substruct2 u_0; + u8 u_30[168]; +}; + s32 FUN_0202A1E0(); void FUN_0202A1E4(void *dst); void FUN_0202A1F0(struct Unk0202A1F0 *unk); @@ -143,17 +188,19 @@ u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 arg1); u8 FUN_0202A444(struct Unk0202A444 *unk, s32 arg1); void FUN_0202A474(void *dst, s32 arg1, const void *src); void FUN_0202A498(const void *src, s32 arg1, void *dst); -void FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); +u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); u16 FUN_0202A520(struct Unk0202A4B8 *unk); u8 FUN_0202A524(struct Unk0202A4B8 *unk); u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2); +BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2); void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1); u32 FUN_0202A5D0(struct Unk0202A5CC *unk); void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2); struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1); -void FUN_0202A60C(u32 arg0, u32 arg1, u32 arg2, u32 arg3); +void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); void FUN_0202A670(struct Unk0202A670 *arg0); -u32 FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); +BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); +BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); u8 FUN_0202A744(struct Unk0202A744 *unk); u8 FUN_0202A74C(struct Unk0202A744 *unk); void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); @@ -165,7 +212,7 @@ struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 head_id s32 FUN_0202A89C(); void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct); struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2); -void *FUN_0202A8D8(struct SaveBlock2* sav2); +struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2); void *FUN_0202A8E4(struct SaveBlock2* sav2); #endif //POKEDIAMOND_UNK_0202A1E0_H \ No newline at end of file -- cgit v1.2.3 From 5bbef1bba183ad6654edbd0c8fc8244db38ac5c9 Mon Sep 17 00:00:00 2001 From: who-knows-who Date: Mon, 21 Jun 2021 21:36:37 +0100 Subject: Rename functions --- arm9/asm/scrcmd_10.s | 26 +- arm9/asm/unk_020377F0.s | 4 +- arm9/asm/unk_02066840.s | 14 +- arm9/asm/unk_0206E2F0.s | 4 +- arm9/asm/unk_0208A338.s | 10 +- arm9/global.inc | 64 ++--- arm9/modules/05/asm/mod05_021E1AD8.s | 4 +- arm9/modules/06/asm/module_06.s | 138 +++++------ arm9/modules/54/asm/module_54.s | 2 +- arm9/modules/74/asm/module_74.s | 8 +- arm9/modules/82/asm/module_82.s | 10 +- arm9/src/save_arrays.c | 5 +- arm9/src/unk_0202A1E0.c | 459 +++++++++++++++++------------------ arm9/src/unk_0205FA2C.c | 97 ++++---- include/unk_0202A1E0.h | 359 +++++++++++++-------------- 15 files changed, 591 insertions(+), 613 deletions(-) diff --git a/arm9/asm/scrcmd_10.s b/arm9/asm/scrcmd_10.s index 3235f5ae..6f417ce9 100644 --- a/arm9/asm/scrcmd_10.s +++ b/arm9/asm/scrcmd_10.s @@ -243,12 +243,12 @@ _020424F6: b _020426FA _020424FC: ldr r0, [r1, #0xc] - bl FUN_0202A8CC + bl SaveStruct23_GetSubstruct1 bl MOD06_022433A8 b _020426FA _02042508: ldr r0, [r1, #0xc] - bl FUN_0202A8CC + bl SaveStruct23_GetSubstruct1 bl MOD06_022433B0 strh r0, [r4, #0x0] b _020426FA @@ -717,7 +717,7 @@ ScrCmd_Unk01E3: ; 0x02042894 add r6, r0, #0x0 ldr r0, [r5, #0x0] ldr r0, [r0, #0xc] - bl FUN_0202A8E4 + bl SaveStruct23_GetSubstruct4 add r1, sp, #0x0 bl FUN_0202A864 add r0, sp, #0x0 @@ -743,8 +743,8 @@ ScrCmd_Unk01E4: ; 0x020428E0 add r4, r0, #0x0 ldr r0, [r5, #0x0] ldr r0, [r0, #0xc] - bl FUN_0202A8E4 - bl FUN_0202A74C + bl SaveStruct23_GetSubstruct4 + bl SaveStruct23_Substruct4_GetField_0xFF strh r0, [r4, #0x0] mov r0, #0x0 pop {r3-r5, pc} @@ -862,10 +862,10 @@ ScrCmd_Unk0297: ; 0x020429B8 bl GetVarPointer add r5, r0, #0x0 add r0, r4, #0x0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #0x0 add r2, r1, #0x0 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} @@ -885,10 +885,10 @@ ScrCmd_Unk0298: ; 0x020429E8 bl VarGet add r5, r0, #0x0 add r0, r4, #0x0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 add r1, r5, #0x0 mov r2, #0x5 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 mov r0, #0x0 pop {r3-r5, pc} .balign 4 @@ -908,10 +908,10 @@ ScrCmd_Unk0299: ; 0x02042A18 bl VarGet add r5, r0, #0x0 add r0, r4, #0x0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 add r1, r5, #0x0 mov r2, #0x6 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 mov r0, #0x0 pop {r3-r5, pc} .balign 4 @@ -939,10 +939,10 @@ ScrCmd_Unk029A: ; 0x02042A48 bl GetVarPointer add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #0x0 add r2, r1, #0x0 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 cmp r0, r6 bhs _02042A8E mov r0, #0x0 diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index 9c2132bf..1505027c 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -2193,10 +2193,10 @@ FUN_02038790: ; 0x02038790 bl AllocFromHeapAtEnd add r4, r0, #0x0 ldr r0, [r5, #0xc] - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 str r0, [r4, #0x0] ldr r0, [r5, #0xc] - bl FUN_0202A8E4 + bl SaveStruct23_GetSubstruct4 str r0, [r4, #0x4] ldr r0, [r5, #0xc] bl Sav2_SysInfo_get diff --git a/arm9/asm/unk_02066840.s b/arm9/asm/unk_02066840.s index d443fce9..e8495712 100644 --- a/arm9/asm/unk_02066840.s +++ b/arm9/asm/unk_02066840.s @@ -19,7 +19,7 @@ FUN_02066840: ; 0x02066840 bl FUN_02029AFC add r5, r0, #0x0 add r0, r6, #0x0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 str r0, [sp, #0x4] add r0, r7, #0x0 mov r1, #0x0 @@ -93,7 +93,7 @@ FUN_02066840: ; 0x02066840 _020668FC: add r0, r6, #0x0 add r1, r4, #0x0 - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage ldr r1, [sp, #0x8] mov r2, #0x8 add r1, r1, r5 @@ -104,7 +104,7 @@ _020668FC: blt _020668FC add r0, r6, #0x0 mov r1, #0x3 - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage add r1, r7, #0x0 add r1, #0xc0 mov r2, #0x8 @@ -115,7 +115,7 @@ _020668FC: ldr r0, [sp, #0x4] mov r1, #0x7 mov r2, #0x0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag add r1, r7, #0x0 add r1, #0xe2 strh r0, [r1, #0x0] @@ -127,19 +127,19 @@ _020668FC: ldr r0, [sp, #0x4] ldr r1, [sp, #0x0] add r2, r7, #0x0 - bl FUN_0202A498 + bl SaveStruct23_Substruct2_GetArray add sp, #0xc pop {r4-r7, pc} _02066956: ldr r0, [sp, #0x4] - bl FUN_0202A520 + bl SaveStruct23_Substruct2_GetField_0x16 add r1, r7, #0x0 add r1, #0xe2 strh r0, [r1, #0x0] ldr r0, [sp, #0x4] ldr r1, [sp, #0x0] add r2, r7, #0x0 - bl FUN_0202A498 + bl SaveStruct23_Substruct2_GetArray _0206696C: add sp, #0xc pop {r4-r7, pc} diff --git a/arm9/asm/unk_0206E2F0.s b/arm9/asm/unk_0206E2F0.s index ab6068fc..a1bf9798 100644 --- a/arm9/asm/unk_0206E2F0.s +++ b/arm9/asm/unk_0206E2F0.s @@ -168,10 +168,10 @@ FUN_0206E3D8: ; 0x0206E3D8 thumb_func_start FUN_0206E3E8 FUN_0206E3E8: ; 0x0206E3E8 push {r3, lr} - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #0x0 add r2, r1, #0x0 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 pop {r3, pc} thumb_func_start FUN_0206E3F8 diff --git a/arm9/asm/unk_0208A338.s b/arm9/asm/unk_0208A338.s index bafa4c91..f96c2e10 100644 --- a/arm9/asm/unk_0208A338.s +++ b/arm9/asm/unk_0208A338.s @@ -208,7 +208,7 @@ _0208A4E8: ldr r0, [r4, #0x0] mov r1, #0x0 ldr r0, [r0, #0xc] - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x48 @@ -220,7 +220,7 @@ _0208A502: ldr r0, [r4, #0x0] mov r1, #0x1 ldr r0, [r0, #0xc] - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x48 @@ -232,7 +232,7 @@ _0208A51C: ldr r0, [r4, #0x0] mov r1, #0x2 ldr r0, [r0, #0xc] - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x48 @@ -244,7 +244,7 @@ _0208A536: ldr r0, [r4, #0x0] mov r1, #0x3 ldr r0, [r0, #0xc] - bl FUN_0202A5F4 + bl SaveStruct23_GetMessage add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x48 @@ -335,7 +335,7 @@ _0208A5EC: ldr r0, [r0, #0xc] ldr r1, [r4, #0x64] add r2, #0x48 - bl FUN_0202A5D4 + bl SaveStruct23_SetMessage add r0, r4, #0x0 mov r1, #0x6 mov r2, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 4f8cce89..c513e6b4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1998,45 +1998,45 @@ .extern FUN_0202A170 .extern FUN_0202A1B8 .extern FUN_0202A1C4 -.extern FUN_0202A1E0 -.extern FUN_0202A1E4 -.extern FUN_0202A1F0 -.extern FUN_0202A204 -.extern FUN_0202A230 -.extern FUN_0202A240 -.extern FUN_0202A2C4 +.extern SaveStruct23_Substruct4_Substruct1_sizeof +.extern SaveStruct23_Substruct1_Init +.extern SaveStruct23_Substruct2_Init +.extern SaveStruct23_Messages_Init +.extern SaveStruct23_Substruct4_Init +.extern SaveStruct23_Substruct1_GetField +.extern SaveStruct23_Substruct1_SetField .extern FUN_0202A36C -.extern FUN_0202A398 -.extern FUN_0202A3A0 -.extern FUN_0202A3B4 -.extern FUN_0202A40C -.extern FUN_0202A444 -.extern FUN_0202A474 -.extern FUN_0202A498 -.extern FUN_0202A4B8 -.extern FUN_0202A520 +.extern SaveStruct23_Substruct1_GetFlag1 +.extern SaveStruct23_Substruct1_SetFlag1 +.extern SaveStruct23_Substruct2_SetField_0x0 +.extern SaveStruct23_Substruct2_SetField_0x2 +.extern SaveStruct23_Substruct2_SetField_0x3 +.extern SaveStruct23_Substruct2_SetArray +.extern SaveStruct23_Substruct2_GetArray +.extern SaveStruct23_Substruct2_SetField_0x16 +.extern SaveStruct23_Substruct2_GetField_0x16 .extern FUN_0202A524 -.extern FUN_0202A538 -.extern FUN_0202A578 -.extern FUN_0202A5CC -.extern FUN_0202A5D0 -.extern FUN_0202A5D4 -.extern FUN_0202A5F4 -.extern FUN_0202A60C -.extern FUN_0202A6B4 -.extern FUN_0202A744 -.extern FUN_0202A74C -.extern FUN_0202A754 +.extern SaveStruct23_Substruct2_SetField_0xC +.extern SaveStruct23_Substruct2_SetFlag +.extern SaveStruct23_Substruct2_SetField_0x4 +.extern SaveStruct23_Substruct2_GetField_0x4 +.extern SaveStruct23_SetMessage +.extern SaveStruct23_GetMessage +.extern SaveStruct23_Substruct4_SetArrayFlag +.extern SaveStruct23_Substruct4_GetArrayFlag +.extern SaveStruct23_Substruct4_GetField_0xFE +.extern SaveStruct23_Substruct4_GetField_0xFF +.extern SaveStruct23_Substruct4_SetSubstruct1 .extern FUN_0202A784 .extern FUN_0202A798 .extern FUN_0202A838 .extern FUN_0202A864 .extern FUN_0202A878 -.extern FUN_0202A89C -.extern FUN_0202A8A4 -.extern FUN_0202A8CC -.extern FUN_0202A8D8 -.extern FUN_0202A8E4 +.extern SaveStruct23_sizeof +.extern SaveStruct23_Init +.extern SaveStruct23_GetSubstruct1 +.extern SaveStruct23_GetSubstruct2 +.extern SaveStruct23_GetSubstruct4 .extern FUN_0202A8F4 .extern FUN_0202A8F8 .extern FUN_0202A918 diff --git a/arm9/modules/05/asm/mod05_021E1AD8.s b/arm9/modules/05/asm/mod05_021E1AD8.s index c41f4c57..22b26c5d 100644 --- a/arm9/modules/05/asm/mod05_021E1AD8.s +++ b/arm9/modules/05/asm/mod05_021E1AD8.s @@ -2073,10 +2073,10 @@ MOD05_021E2AD4: ; 0x021E2AD4 bl NewString_ReadMsgData str r0, [sp, #0x10] ldr r0, [r6, #0xc] - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #0 add r2, r1, #0 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 add r2, r0, #0 mov r0, #1 str r0, [sp] diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 3b86cb19..d258860d 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -19893,17 +19893,17 @@ _022433A4: .word OS_ResetSystem thumb_func_start MOD06_022433A8 MOD06_022433A8: ; 0x022433A8 - ldr r3, _022433AC ; =FUN_0202A1E4 + ldr r3, _022433AC ; =SaveStruct23_Substruct1_Init bx r3 .align 2, 0 -_022433AC: .word FUN_0202A1E4 +_022433AC: .word SaveStruct23_Substruct1_Init thumb_func_start MOD06_022433B0 MOD06_022433B0: ; 0x022433B0 - ldr r3, _022433B4 ; =FUN_0202A398 + ldr r3, _022433B4 ; =SaveStruct23_Substruct1_GetFlag1 bx r3 .align 2, 0 -_022433B4: .word FUN_0202A398 +_022433B4: .word SaveStruct23_Substruct1_GetFlag1 thumb_func_start MOD06_022433B8 MOD06_022433B8: ; 0x022433B8 @@ -19965,26 +19965,26 @@ _02243414: MOD06_02243428: ; 0x02243428 push {r4, lr} add r4, r1, #0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 cmp r4, #0 bne _0224343E mov r1, #5 mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag pop {r4, pc} _0224343E: mov r1, #5 mov r2, #1 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag pop {r4, pc} thumb_func_start MOD06_02243448 MOD06_02243448: ; 0x02243448 push {r3, lr} - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #5 mov r2, #0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r0, r0, #0x10 lsr r0, r0, #0x10 pop {r3, pc} @@ -19993,15 +19993,15 @@ MOD06_02243448: ; 0x02243448 MOD06_0224345C: ; 0x0224345C push {r4, r5, r6, lr} add r5, r0, #0 - bl FUN_0202A8CC + bl SaveStruct23_GetSubstruct1 add r4, r0, #0 add r0, r5, #0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 mov r1, #0 add r6, r0, #0 add r0, r4, #0 add r2, r1, #0 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField lsl r0, r0, #0x18 lsr r4, r0, #0x18 cmp r4, #5 @@ -20015,11 +20015,11 @@ _02243484: add r0, r6, #0 lsr r1, r1, #0x10 mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag add r0, r6, #0 add r1, r4, #0 mov r2, #2 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC cmp r4, #4 beq _022434A8 add r0, r5, #0 @@ -20031,8 +20031,8 @@ _022434A8: thumb_func_start MOD06_022434AC MOD06_022434AC: ; 0x022434AC push {r3, lr} - bl FUN_0202A8E4 - bl FUN_0202A744 + bl SaveStruct23_GetSubstruct4 + bl SaveStruct23_Substruct4_GetField_0xFE lsl r0, r0, #0x10 lsr r0, r0, #0x10 pop {r3, pc} @@ -20072,16 +20072,16 @@ MOD06_022434D0: ; 0x022434D0 mov r0, #0x3b str r0, [r4, #4] add r0, r6, #0 - bl FUN_0202A8CC + bl SaveStruct23_GetSubstruct1 str r0, [r4, #0x70] add r0, r6, #0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 str r0, [r4, #0x74] ldr r0, _02243688 ; =0x12345678 mov r1, #0 str r0, [r4] ldr r0, [r4, #0x70] - bl FUN_0202A3A0 + bl SaveStruct23_Substruct1_SetFlag1 cmp r5, #0 bne _0224356C strb r7, [r4, #0xf] @@ -20114,25 +20114,25 @@ _02243544: cmp r2, #0xe blo _02243544 ldr r0, [r4, #0x70] - bl FUN_0202A1E4 + bl SaveStruct23_Substruct1_Init ldrb r1, [r4, #0xf] add r0, sp, #8 add r2, sp, #8 strb r1, [r0] ldr r0, [r4, #0x70] mov r1, #0 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField b _0224362A _0224356C: mov r1, #0 ldr r0, [r4, #0x70] add r2, r1, #0 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField strb r0, [r4, #0xf] ldr r0, [r4, #0x70] mov r1, #1 mov r2, #0 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField strb r0, [r4, #0xc] ldrb r0, [r4, #0xc] sub r0, r0, #1 @@ -20144,16 +20144,16 @@ _0224356C: ldr r0, [r4, #0x70] mov r1, #5 add r2, #0x2a - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField add r2, r4, #0 ldr r0, [r4, #0x70] mov r1, #8 add r2, #0x3e - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField ldr r0, [r4, #0x70] mov r1, #0xa mov r2, #0 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField str r0, [r4, #8] ldrb r0, [r4, #0xf] cmp r0, #2 @@ -20161,7 +20161,7 @@ _0224356C: ldr r0, [r4, #0x70] mov r1, #9 mov r2, #0 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField lsl r0, r0, #0x18 lsr r0, r0, #0x18 lsl r0, r0, #0x1d @@ -20180,14 +20180,14 @@ _0224356C: lsl r3, r3, #4 mov r1, #6 add r2, r2, r3 - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField ldrb r0, [r4, #0x10] mov r1, #7 mov r2, #0 lsl r0, r0, #0x18 lsr r5, r0, #0x1d ldr r0, [r4, #0x70] - bl FUN_0202A240 + bl SaveStruct23_Substruct1_GetField add r3, r0, #0 ldr r0, _02243690 ; =0x000007E8 mov r1, #0xa6 @@ -20226,7 +20226,7 @@ _0224362A: lsl r1, r1, #0x10 lsr r1, r1, #0x10 mov r2, #0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r0, r0, #0x10 lsr r0, r0, #0x10 beq _02243668 @@ -20244,7 +20244,7 @@ _02243668: ldrb r1, [r4, #0xf] ldr r0, [r4, #0x74] mov r2, #0 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC strh r0, [r4, #0x1c] _0224367E: add r0, r4, #0 @@ -20707,17 +20707,17 @@ _022439B8: strb r1, [r0] ldr r0, [r5, #0x70] mov r1, #0 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldrb r1, [r5, #0xc] add r0, sp, #0 add r2, sp, #0 strb r1, [r0] ldr r0, [r5, #0x70] mov r1, #1 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldr r0, [r5, #0x74] ldr r1, [r5, #0x70] - bl FUN_0202A4B8 + bl SaveStruct23_Substruct2_SetField_0x16 _022439F6: pop {r3, r4, r5, r6, r7, pc} @@ -20771,7 +20771,7 @@ _02243A52: add r1, #8 lsl r1, r1, #0x10 lsr r1, r1, #0x10 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r0, r0, #0x10 lsr r0, r0, #0x10 beq _02243A74 @@ -20793,7 +20793,7 @@ _02243A7E: lsl r1, r1, #0x10 lsr r1, r1, #0x10 mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag ldrb r2, [r5, #0xd] ldr r0, [sp, #4] mov r1, #0x1d @@ -20801,7 +20801,7 @@ _02243A7E: ldrb r1, [r5, #0xf] ldr r0, [r5, #0x74] mov r2, #2 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC ldr r0, [sp, #8] bl FUN_02029FC8 mov r1, #0xf @@ -20849,7 +20849,7 @@ MOD06_02243AD8: ; 0x02243AD8 lsr r1, r1, #0x10 mov r2, #0 add r4, #0x35 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r0, r0, #0x10 lsr r0, r0, #0x10 beq _02243B1A @@ -20872,7 +20872,7 @@ _02243B26: add r1, #8 lsl r1, r1, #0x10 lsr r1, r1, #0x10 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag add r0, r6, #0 add r1, r4, #0 bl FUN_0202A150 @@ -20887,7 +20887,7 @@ _02243B26: ldrb r1, [r5, #0xf] ldr r0, [r5, #0x74] mov r2, #3 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC add r0, r6, #0 mov r1, #0xf mov r2, #1 @@ -20933,19 +20933,19 @@ MOD06_02243BA8: ; 0x02243BA8 strb r1, [r0] ldr r0, [r4, #0x70] mov r1, #0 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldrb r1, [r4, #0xc] add r0, sp, #0 add r2, sp, #0 strb r1, [r0] ldr r0, [r4, #0x70] mov r1, #1 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField add r2, r4, #0 ldr r0, [r4, #0x70] mov r1, #5 add r2, #0x2a - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldrh r1, [r4, #0x28] ldrh r2, [r4, #0x24] ldrh r3, [r4, #0x26] @@ -20957,15 +20957,15 @@ MOD06_02243BA8: ; 0x02243BA8 ldr r0, [r4, #0x70] mov r1, #8 add r2, #0x3e - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField add r2, r4, #0 ldr r0, [r4, #0x70] mov r1, #0xa add r2, #8 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldr r0, [r4, #0x70] mov r1, #1 - bl FUN_0202A3A0 + bl SaveStruct23_Substruct1_SetFlag1 ldrb r0, [r4, #0xf] cmp r0, #2 bne _02243C4E @@ -20977,7 +20977,7 @@ MOD06_02243BA8: ; 0x02243BA8 strb r1, [r0] ldr r0, [r4, #0x70] mov r1, #9 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldrb r3, [r4, #0x10] ldr r2, _02243C54 ; =0x000007E8 ldr r0, [r4, #0x70] @@ -20987,7 +20987,7 @@ MOD06_02243BA8: ; 0x02243BA8 lsl r3, r3, #4 mov r1, #6 add r2, r2, r3 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField ldr r2, _02243C58 ; =0x00000838 ldr r0, [r4, #0x70] add r3, r4, r2 @@ -20996,7 +20996,7 @@ MOD06_02243BA8: ; 0x02243BA8 lsl r2, r2, #0x18 lsr r2, r2, #0x1d add r2, r3, r2 - bl FUN_0202A2C4 + bl SaveStruct23_Substruct1_SetField _02243C4E: add sp, #4 pop {r3, r4, pc} @@ -21234,13 +21234,13 @@ _02243DEE: ldr r0, [r4, #0x74] bne _02243E00 mov r1, #0 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 ldr r1, _02243E2C ; =0x02250C5C ldrb r5, [r1, r0] b _02243E1E _02243E00: mov r2, #0 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC ldrb r1, [r4, #0x10] lsl r1, r1, #0x1d lsr r1, r1, #0x1e @@ -21259,7 +21259,7 @@ _02243E1E: ldr r0, [r4, #0x74] add r1, r5, #0 mov r2, #5 - bl FUN_0202A3B4 + bl SaveStruct23_Substruct2_SetField_0x0 add r0, r5, #0 pop {r3, r4, r5, pc} .align 2, 0 @@ -21283,7 +21283,7 @@ _02243E48: blo _02243E5E mov r1, #1 mov r2, #0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag cmp r0, #0 beq _02243E6E mov r0, #0 @@ -21291,7 +21291,7 @@ _02243E48: _02243E5E: mov r1, #0 add r2, r1, #0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag cmp r0, #0 beq _02243E6E mov r0, #0 @@ -21307,7 +21307,7 @@ MOD06_02243E74: ; 0x02243E74 add r6, r0, #0 add r0, r1, #0 add r5, r2, #0 - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 add r4, r0, #0 cmp r5, #0 beq _02243E90 @@ -21318,15 +21318,15 @@ MOD06_02243E74: ; 0x02243E74 b _02243F10 _02243E90: mov r1, #0 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 pop {r4, r5, r6, pc} _02243E98: mov r1, #4 mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag add r0, r4, #0 mov r1, #0 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 add r5, r0, #0 cmp r5, #0xa bne _02243EB2 @@ -21335,7 +21335,7 @@ _02243E98: _02243EB2: add r0, r4, #0 mov r1, #3 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 add r0, r5, #1 cmp r0, #5 blt _02243EC8 @@ -21348,11 +21348,11 @@ _02243EC8: pop {r4, r5, r6, pc} _02243ECC: mov r1, #3 - bl FUN_0202A40C + bl SaveStruct23_Substruct2_SetField_0x2 add r5, r0, #0 add r0, r4, #0 mov r1, #0 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 cmp r0, #1 bne _02243EE4 mov r0, #0 @@ -21365,14 +21365,14 @@ _02243EE4: blo _02243F0C add r0, r4, #0 mov r1, #4 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 add r0, r4, #0 mov r1, #2 - bl FUN_0202A40C + bl SaveStruct23_Substruct2_SetField_0x2 add r0, r4, #0 mov r1, #4 mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag mov r0, #1 pop {r4, r5, r6, pc} _02243F0C: @@ -21476,7 +21476,7 @@ MOD06_02243F9C: ; 0x02243F9C add r1, #8 lsl r1, r1, #0x10 lsr r1, r1, #0x10 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r0, r0, #0x18 lsr r0, r0, #0x18 bne _02243FC0 @@ -21749,7 +21749,7 @@ _022441B8: ldr r0, [r6, #0x74] ldr r1, [sp] ldr r2, [sp, #4] - bl FUN_0202A474 + bl SaveStruct23_Substruct2_SetArray ldr r0, [sp, #4] mov r1, #0 mov r2, #0xa8 @@ -21939,9 +21939,9 @@ MOD06_0224434C: ; 0x0224434C lsl r2, r2, #4 bl MI_CpuFill8 add r0, r6, #0 - bl FUN_0202A8E4 + bl SaveStruct23_GetSubstruct4 add r6, r0, #0 - bl FUN_0202A744 + bl SaveStruct23_Substruct4_GetField_0xFE cmp r0, #0 bne _0224437A add r0, r5, #0 @@ -22424,7 +22424,7 @@ _0224471C: ldr r0, [r6, #0x74] mov r1, #3 mov r2, #0 - bl FUN_0202A538 + bl SaveStruct23_Substruct2_SetField_0xC ldr r1, _02244754 ; =0x00000844 strh r0, [r6, r1] pop {r3, r4, r5, r6, r7, pc} diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index b11b96cf..25c18523 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -4440,7 +4440,7 @@ MOD54_021D9780: ; 0x021D9780 .word MOD54_021D9488, MOD54_021D94B4, MOD54_021D91B4, MOD54_021D9274 .word MOD54_021D94D0, MOD54_021D91BC, MOD54_021D92AC, MOD54_021D94E8 .word MOD54_021D91AC, MOD54_021D9238, MOD54_021D9500, FUN_0202B934 - .word MOD54_021D9518, MOD54_021D9520, FUN_0202A1E0, MOD54_021D9544 + .word MOD54_021D9518, MOD54_021D9520, SaveStruct23_Substruct4_Substruct1_sizeof, MOD54_021D9544 .word MOD54_021D956C .data diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s index 651527c1..44254d39 100644 --- a/arm9/modules/74/asm/module_74.s +++ b/arm9/modules/74/asm/module_74.s @@ -35,10 +35,10 @@ MOD74_021D74E0: ; 0x021D74E0 bl FUN_02029FC8 str r0, [r4, #0x1c] ldr r0, [r5] - bl FUN_0202A8D8 + bl SaveStruct23_GetSubstruct2 str r0, [r4, #0x20] ldr r0, [r5] - bl FUN_0202A8E4 + bl SaveStruct23_GetSubstruct4 str r0, [r4, #0x24] mov r0, #0x4a str r0, [r4] @@ -967,7 +967,7 @@ MOD74_021D7C10: ; 0x021D7C10 ldr r0, [r5, #0x20] lsr r1, r1, #0x10 mov r2, #0 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag lsl r2, r0, #0x10 add r0, sp, #0x18 ldrb r6, [r0, #0x10] @@ -1195,7 +1195,7 @@ _021D7E04: bl AddTextPrinterParameterized2 ldr r0, [r4, #0x20] mov r1, #0 - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 mov r1, #0 add r2, r0, #0 str r1, [sp] diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index f1a3e494..ce3a33bb 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -1400,7 +1400,7 @@ MOD82_0222E050: ; 0x0222E050 ldr r0, [r4] mov r1, #0 ldr r0, [r0] - bl FUN_0202A444 + bl SaveStruct23_Substruct2_SetField_0x3 str r0, [r4, #0x38] str r0, [r4, #0x3c] mov r0, #1 @@ -2629,7 +2629,7 @@ _0222EA38: lsr r1, r1, #0x18 lsr r2, r2, #0x18 add r3, sp, #0 - bl FUN_0202A6B4 + bl SaveStruct23_Substruct4_GetArrayFlag cmp r0, #0 beq _0222EA66 mov r0, #0x12 @@ -2795,7 +2795,7 @@ _0222EB94: add r1, #0x48 lsr r2, r2, #0x18 lsr r3, r3, #0x18 - bl FUN_0202A754 + bl SaveStruct23_Substruct4_SetSubstruct1 add r0, r4, #0 mov r1, #0x25 mov r2, #0x11 @@ -2812,7 +2812,7 @@ _0222EB94: lsr r1, r1, #0x18 lsr r2, r2, #0x18 add r3, sp, #0 - bl FUN_0202A60C + bl SaveStruct23_Substruct4_SetArrayFlag b _0222EC44 _0222EBD6: mov r1, #0x3b @@ -2995,7 +2995,7 @@ _0222ED32: mov r1, #5 ldr r0, [r0] mov r2, #2 - bl FUN_0202A578 + bl SaveStruct23_Substruct2_SetFlag add r0, r4, #0 mov r1, #0x25 mov r2, #0x1a diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index f4b18b86..1969e3f1 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -16,6 +16,7 @@ #include "unk_020139D8.h" #include "unk_02024E64.h" #include "sav_chatot.h" +#include "unk_0202A1E0.h" extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); @@ -28,7 +29,6 @@ extern u32 FUN_02028980(void); extern u32 FUN_02029A84(void); extern u32 FUN_02029FB0(void); extern u32 Sav2_Chatot_sizeof(void); -extern u32 FUN_0202A89C(void); extern u32 FUN_0202A8F4(void); extern u32 FUN_0202A924(void); extern u32 FUN_0202ABC8(void); @@ -48,7 +48,6 @@ extern void FUN_0202805C(void *); extern void FUN_02028994(void *); extern void FUN_02029A8C(void *); extern void FUN_02029FB8(void *); -extern void FUN_0202A8A4(void *); extern void FUN_0202A8F8(void *); extern void FUN_0202A92C(void *); extern void FUN_0202ABCC(void *); @@ -88,7 +87,7 @@ const struct SaveChunkHeader UNK_020EE700[] = { { 20, 0, (SAVSIZEFN)FUN_02029FB0, (SAVINITFN)FUN_02029FB8 }, { 21, 0, (SAVSIZEFN)Sav2_SealCase_sizeof, (SAVINITFN)Sav2_SealCase_init }, { 22, 0, (SAVSIZEFN)Sav2_Chatot_sizeof, (SAVINITFN)Sav2_Chatot_init }, - { 23, 0, (SAVSIZEFN)FUN_0202A89C, (SAVINITFN)FUN_0202A8A4 }, + { 23, 0, (SAVSIZEFN)SaveStruct23_sizeof, (SAVINITFN)SaveStruct23_Init }, { 24, 0, (SAVSIZEFN)FUN_0202A8F4, (SAVINITFN)FUN_0202A8F8 }, { 25, 0, (SAVSIZEFN)FUN_0202A924, (SAVINITFN)FUN_0202A92C }, { 26, 0, (SAVSIZEFN)FUN_0202ABC8, (SAVINITFN)FUN_0202ABCC }, diff --git a/arm9/src/unk_0202A1E0.c b/arm9/src/unk_0202A1E0.c index 607ea8c3..4f32d430 100644 --- a/arm9/src/unk_0202A1E0.c +++ b/arm9/src/unk_0202A1E0.c @@ -4,252 +4,249 @@ #include "heap.h" #include "unk_0202A1E0.h" -THUMB_FUNC s32 FUN_0202A1E0() +THUMB_FUNC s32 SaveStruct23_Substruct4_Substruct1_sizeof() { - return 228; + return sizeof(struct SaveStruct23_Substruct4_Substruct1); // 228 } -THUMB_FUNC void FUN_0202A1E4(void *dest) +THUMB_FUNC void SaveStruct23_Substruct1_Init(struct SaveStruct23_Substruct1 *substruct1) { - MI_CpuFill8(dest, 0, 60); + MI_CpuFill8(substruct1, 0, sizeof(struct SaveStruct23_Substruct1)); } -THUMB_FUNC void FUN_0202A1F0(struct Unk0202A1F0 *arg0) +THUMB_FUNC void SaveStruct23_Substruct2_Init(struct SaveStruct23_Substruct2 *substruct2) { - MI_CpuFill8(arg0, 0, 360); - arg0->u_3 = 1; + MI_CpuFill8(substruct2, 0, sizeof(struct SaveStruct23_Substruct2)); + substruct2->u_3 = 1; } -THUMB_FUNC void FUN_0202A204(struct UnkMailStruct *arg0) +THUMB_FUNC void SaveStruct23_Messages_Init(struct SaveStruct23_Messages *messages) { - MailMsg_init_fromTemplate(&arg0->messages[0], 0); - MailMsg_init_fromTemplate(&arg0->messages[1], 1); - MailMsg_init_fromTemplate(&arg0->messages[2], 2); - MailMsg_init_fromTemplate(&arg0->messages[3], 3); + MailMsg_init_fromTemplate(&messages->messages[0], 0); + MailMsg_init_fromTemplate(&messages->messages[1], 1); + MailMsg_init_fromTemplate(&messages->messages[2], 2); + MailMsg_init_fromTemplate(&messages->messages[3], 3); } -THUMB_FUNC void FUN_0202A230(void *dst) +THUMB_FUNC void SaveStruct23_Substruct4_Init(struct SaveStruct23_Substruct4 *substruct4) { - MI_CpuFill8(dst, 0, 2876); + MI_CpuFill8(substruct4, 0, sizeof(struct SaveStruct23_Substruct4)); } -THUMB_FUNC u32 FUN_0202A240(struct Unk0202A240 *unk, u32 mode, void *dst) +THUMB_FUNC u32 SaveStruct23_Substruct1_GetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *dst) { - switch (mode) + switch (field) { - case 0: - return unk->u_0_2; - case 1: - return unk->u_2; - case 2: - return unk->u_3; - case 3: - return unk->u_4; - case 4: - return unk->u_6; - case 5: - MI_CpuCopy8(&unk->u_8, dst, 4); + case FIELD_0x0_2: + return substruct1->u_0_2; + case FIELD_0x2: + return substruct1->u_2; + case FIELD_0x3: + return substruct1->u_3; + case FIELD_0x4: + return substruct1->u_4; + case FIELD_0x6: + return substruct1->u_6; + case FIELD_0x8: + MI_CpuCopy8(&substruct1->u_8, dst, 4); return 0; - case 6: - MI_CpuCopy8(&unk->u_2C, dst, 16); + case FIELD_0x2C: + MI_CpuCopy8(&substruct1->u_2C, dst, 16); return 0; - case 7: - return unk->u_0_0; - case 8: - MI_CpuCopy8(&unk->u_C, dst, 28); + case FIELD_flag0: + return substruct1->flag0; + case FIELD_0xC: + MI_CpuCopy8(&substruct1->u_C, dst, 28); return 0; - case 9: - return unk->u_0_5; - case 10: - return unk->u_28; + case FIELD_0x0_5: + return substruct1->u_0_5; + case FIELD_0x28: + return substruct1->u_28; default: return 0; }; } -THUMB_FUNC void FUN_0202A2C4(struct Unk0202A240 *dst, u32 mode, void *src) +THUMB_FUNC void SaveStruct23_Substruct1_SetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *value) { - switch (mode) + switch (field) { - case 0: - dst->u_0_2 = *(u8 *)src; + case FIELD_0x0_2: + substruct1->u_0_2 = *(u8 *)value; break; - case 1: - dst->u_2 = *(u8 *)src; + case FIELD_0x2: + substruct1->u_2 = *(u8 *)value; break; - case 2: - dst->u_3 = *(u8 *)src; + case FIELD_0x3: + substruct1->u_3 = *(u8 *)value; break; - case 3: - dst->u_4 = *(u16 *)src; + case FIELD_0x4: + substruct1->u_4 = *(u16 *)value; break; - case 4: - dst->u_6 = *(u16 *)src; + case FIELD_0x6: + substruct1->u_6 = *(u16 *)value; break; - case 5: - MI_CpuCopy8(src, &dst->u_8, 4); + case FIELD_0x8: + MI_CpuCopy8(value, &substruct1->u_8, 4); break; - case 6: - MI_CpuCopy8(src, &dst->u_2C, 16); + case FIELD_0x2C: + MI_CpuCopy8(value, &substruct1->u_2C, 16); break; - case 7: - dst->u_0_0 = *(u8 *)src; + case FIELD_flag0: + substruct1->flag0 = *(u8 *)value; break; - case 8: - MI_CpuCopy8(src, &dst->u_C, 28); + case FIELD_0xC: + MI_CpuCopy8(value, &substruct1->u_C, 28); break; - case 10: - dst->u_28 = *(u32 *)src; + case FIELD_0x28: + substruct1->u_28 = *(u32 *)value; break; - case 9: - dst->u_0_5 = *(u8 *)src; + case FIELD_0x0_5: + substruct1->u_0_5 = *(u8 *)value; break; } } -THUMB_FUNC void FUN_0202A36C(struct Unk0202A240 *unk, s32 arg1, s32 arg2, s32 arg3) +THUMB_FUNC void FUN_0202A36C(struct SaveStruct23_Substruct1 *substruct1, s32 arg1, s32 arg2, s32 arg3) { - if (unk->u_3 + arg1 < 0xff) + if (substruct1->u_3 + arg1 < 0xff) { - unk->u_3 += arg1; + substruct1->u_3 += arg1; } - if (unk->u_4 + arg2 < 0xffff) + if (substruct1->u_4 + arg2 < 0xffff) { - unk->u_4 += arg2; + substruct1->u_4 += arg2; } - if (unk->u_6 + arg3 < 0xffff) + if (substruct1->u_6 + arg3 < 0xffff) { - unk->u_6 += arg3; + substruct1->u_6 += arg3; } } -THUMB_FUNC u8 FUN_0202A398(struct Unk0202A240 *unk) +THUMB_FUNC BOOL SaveStruct23_Substruct1_GetFlag1(struct SaveStruct23_Substruct1 *substruct1) { - return unk->u_0_1; + return substruct1->flag1; } -THUMB_FUNC void FUN_0202A3A0(struct Unk0202A240 *unk, u16 arg1) +THUMB_FUNC void SaveStruct23_Substruct1_SetFlag1(struct SaveStruct23_Substruct1 *substruct1, BOOL flag) { - unk->u_0_1 = arg1; + substruct1->flag1 = flag; } -THUMB_FUNC u16 FUN_0202A3B4(struct Unk0202A3B4 *unk, u16 arg1, s32 controlVariable) +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x0(struct SaveStruct23_Substruct2 *substruct2, u16 value, DataSetMode mode) { - switch (controlVariable) + switch (mode) { - case 0: - break; - case 1: - if (arg1 > 0x270F) + case DATA_SET: + if (value > 9999) { - unk->u_0 = 0x270F; + substruct2->u_0 = 9999; } else { - unk->u_0 = arg1; + substruct2->u_0 = value; } break; - case 2: - case 3: - case 4: - break; - case 5: - if (unk->u_0 + arg1 > 0x270F) + case DATA_ADD: + if (substruct2->u_0 + value > 9999) { - unk->u_0 = 0x270F; + substruct2->u_0 = 9999; } else { - unk->u_0 += arg1; + substruct2->u_0 += value; } break; - case 6: - if (unk->u_0 < arg1) + case DATA_SUBSTRACT: + if (substruct2->u_0 < value) { - unk->u_0 = 0; + substruct2->u_0 = 0; } else { - unk->u_0 -= arg1; + substruct2->u_0 -= value; } break; + case DATA_GET: + default: + break; } - return unk->u_0; + return substruct2->u_0; } -THUMB_FUNC u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 controlVariable) +THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x2(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode) { - switch (controlVariable) + switch (mode) { - case 2: - unk->u_2 = 0; - unk->u_8_4 = 0; + case DATA_RESET: + substruct2->u_2 = 0; + substruct2->flag4 = 0; break; - case 3: - if (unk->u_8_4 != 0) + case DATA_INCREMENT: + if (substruct2->flag4) { - unk->u_2 += 1; + substruct2->u_2++; } else { - unk->u_2 = 1; - unk->u_8_4 = 1; + substruct2->u_2 = 1; + substruct2->flag4 = 1; } break; } - return unk->u_2; + return substruct2->u_2; } -THUMB_FUNC u8 FUN_0202A444(struct Unk0202A444 *unk, s32 controlVariable) +THUMB_FUNC u8 SaveStruct23_Substruct2_SetField_0x3(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode) { - switch (controlVariable) + switch (mode) { - case 2: - unk->u_3 = 1; + case DATA_RESET: + substruct2->u_3 = 1; break; - case 3: - if (unk->u_3 < 0xa) + case DATA_INCREMENT: + if (substruct2->u_3 < 10) { - unk->u_3++; + substruct2->u_3++; } break; - case 4: - if (unk->u_3 > 1) + case DATA_DECREMENT: + if (substruct2->u_3 > 1) { - unk->u_3--; + substruct2->u_3--; } break; } - return unk->u_3; + return substruct2->u_3; } -THUMB_FUNC void FUN_0202A474(void *dst, s32 arg1, const void *src) +THUMB_FUNC void SaveStruct23_Substruct2_SetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *src) { - if (arg1 == 0) + if (mode == 0) { - MI_CpuCopy8(src, dst + 0xc0, 0xa8); + MI_CpuCopy8(src, substruct2->u_C0, 168); } else { - MI_CpuCopy8(src, dst + 0x18, 0xa8); + MI_CpuCopy8(src, substruct2->u_18, 168); } } -THUMB_FUNC void FUN_0202A498(const void *src, s32 arg1, void *dst) +THUMB_FUNC void SaveStruct23_Substruct2_GetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *dst) { - if (arg1 == 0) + if (mode == 0) { - MI_CpuCopy8(src + 0xc0, dst, 0xa8); + MI_CpuCopy8(substruct2->u_C0, dst, 168); } else { - MI_CpuCopy8(src + 0x18, dst, 0xa8); + MI_CpuCopy8(substruct2->u_18, dst, 168); } } -THUMB_FUNC u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0x16(struct SaveStruct23_Substruct2 *substruct2, struct Unk0202A4B8 *arg1) { u16 var1, var2, var3, var4, var5, total; @@ -276,93 +273,93 @@ THUMB_FUNC u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1) } total = (u16) (var1 + var4 + var5); - arg0->u_16 = total; + substruct2->u_16 = total; return total; } -THUMB_FUNC u16 FUN_0202A520(struct Unk0202A4B8 *unk) +THUMB_FUNC u16 SaveStruct23_Substruct2_GetField_0x16(struct SaveStruct23_Substruct2 *substruct2) { - return unk->u_16; + return substruct2->u_16; } -THUMB_FUNC u8 FUN_0202A524(struct Unk0202A4B8 *unk) +THUMB_FUNC u8 FUN_0202A524(struct SaveStruct23_Substruct2 *substruct2) { - return (u8)(unk->u_16 / (0xfa << 2)); + return (u8)(substruct2->u_16 / 1000); } -THUMB_FUNC u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2) +THUMB_FUNC u16 SaveStruct23_Substruct2_SetField_0xC(struct SaveStruct23_Substruct2 *substruct2, u16 arg1, DataSetMode mode) { if (arg1 == 5) { return 0; } - switch(arg2) { - case 2: - unk->u_array_C[arg1] = 0; + switch(mode) { + case DATA_RESET: + substruct2->u_C[arg1] = 0; break; - case 3: - if (unk->u_array_C[arg1] < 0xfffe) { - unk->u_array_C[arg1]++; + case DATA_INCREMENT: + if (substruct2->u_C[arg1] < 0xfffe) { + substruct2->u_C[arg1]++; } break; } - return unk->u_array_C[arg1]; + return substruct2->u_C[arg1]; } -THUMB_FUNC BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2) +THUMB_FUNC BOOL SaveStruct23_Substruct2_SetFlag(struct SaveStruct23_Substruct2 *substruct2, u16 flagNumber, DataSetMode mode) { u16 i; u16 flag = 1; - for (i = 0; i < arg1 ; i++) + for (i = 0; i < flagNumber ; i++) { flag <<= 1; } - switch (arg2) + switch (mode) { - case 2: + case DATA_RESET: flag = (u16) (flag ^ 0xffff); - arg0->u_8 &= flag; + substruct2->flags &= flag; break; - case 1: - arg0->u_8 |= flag; + case DATA_SET: + substruct2->flags |= flag; break; - case 0: - return (BOOL) ((arg0->u_8 >> arg1) & 1); + case DATA_GET: + return (BOOL) ((substruct2->flags >> flagNumber) & 1); } - return 0; + return FALSE; } -THUMB_FUNC void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1) +THUMB_FUNC void SaveStruct23_Substruct2_SetField_0x4(struct SaveStruct23_Substruct2 *substruct2, u32 value) { - unk->u_4 = arg1; + substruct2->u_4 = value; } -THUMB_FUNC u32 FUN_0202A5D0(struct Unk0202A5CC *unk) +THUMB_FUNC u32 SaveStruct23_Substruct2_GetField_0x4(struct SaveStruct23_Substruct2 *substruct2) { - return unk->u_4; + return substruct2->u_4; } -THUMB_FUNC void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2) +THUMB_FUNC void SaveStruct23_SetMessage(struct SaveBlock2 *sav2, u32 index, struct MailMessage *message) { - struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); - MailMsg_copy(&data->messages.messages[arg1], arg2); + struct SaveStruct23 *data = SavArray_get(sav2, 23); + MailMsg_copy(&data->messages.messages[index], message); } -THUMB_FUNC struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1) +THUMB_FUNC struct MailMessage *SaveStruct23_GetMessage(struct SaveBlock2 *sav2, u32 index) { - struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); - return &data->messages.messages[arg1]; + struct SaveStruct23 *data = SavArray_get(sav2, 23); + return &data->messages.messages[index]; } -THUMB_FUNC void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { +THUMB_FUNC void SaveStruct23_Substruct4_SetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { - u8 bitmask = 1; + u8 flag = 1; if (arg2 == 0 || arg2 > 200) { @@ -374,44 +371,44 @@ THUMB_FUNC void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct return; } - u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); - u8 index = (u8) (var2 / 8); - u8 remainder = (u8) (var2 % 8); - bitmask <<= remainder; + u16 var1 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); + u8 index = (u8) (var1 / 8); + u8 remainder = (u8) (var1 % 8); + flag <<= remainder; - arg0->u_4[index] |= bitmask; - arg0->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C; + substruct4->flags[index] |= flag; + substruct4->u_0 = (arg3->u_0 << 24) | ((arg3->u_4 & 0xff) << 16) | ((arg3->u_8 & 0xff) << 8) | arg3->u_C; } -THUMB_FUNC void FUN_0202A670(struct Unk0202A670 *arg0) +THUMB_FUNC void SaveStruct23_Substruct4_ClearArrayFlags(struct SaveStruct23_Substruct4 *substruct4) { - MI_CpuFill8(&(arg0->u_4), 0, 250); - MI_CpuFill8(arg0, 0, 4); + MI_CpuFill8(substruct4->flags, 0, 250); + MI_CpuFill8(&substruct4->u_0, 0, 4); } -THUMB_FUNC BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1) +THUMB_FUNC BOOL StructUnk0202A68C_Compare(struct Unk0202A68C *struct1, struct Unk0202A68C *struct2) { - if (arg0->u_0 > arg1->u_0) { + if (struct1->u_0 > struct2->u_0) { return TRUE; - } else if (arg0->u_4 > arg1->u_4) { + } else if (struct1->u_4 > struct2->u_4) { return TRUE; - } else if (arg0->u_8 > arg1->u_8) { + } else if (struct1->u_8 > struct2->u_8) { return TRUE; } return FALSE; } -THUMB_FUNC BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) +THUMB_FUNC BOOL SaveStruct23_Substruct4_GetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3) { - u8 bitmask = 1; + u8 flag = 1; if (arg2 > 200 || arg1 > 10) { return FALSE; } - u32 var0 = arg0->u_0; + u32 var0 = substruct4->u_0; Unk0202A68C var1; var1.u_0 = var0 >> 24 & 0xff; @@ -419,123 +416,121 @@ THUMB_FUNC BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct var1.u_8 = var0 >> 8 & 0xff; var1.u_C = var0 & 0xff; - if (FUN_0202A68C(arg3, &var1)) + if (StructUnk0202A68C_Compare(arg3, &var1)) { - FUN_0202A670(arg0); + SaveStruct23_Substruct4_ClearArrayFlags(substruct4); return FALSE; } u16 var2 = (u16) ((arg1 - 1) * 200 + (arg2 - 1)); u8 index = (u8) (var2 / 8); u8 remainder = (u8) (var2 % 8); - bitmask <<= remainder; + flag <<= remainder; - if (arg0->u_4[index] & bitmask) + if (substruct4->flags[index] & flag) { - return 1; + return TRUE; } return FALSE; } -THUMB_FUNC u8 FUN_0202A744(struct Unk0202A744 *unk) +THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFE(struct SaveStruct23_Substruct4 *substruct4) { - return unk->u_FE; + return substruct4->u_FE; } -THUMB_FUNC u8 FUN_0202A74C(struct Unk0202A744 *unk) +THUMB_FUNC u8 SaveStruct23_Substruct4_GetField_0xFF(struct SaveStruct23_Substruct4 *substruct4) { - return unk->u_FF; + return substruct4->u_FF; } -THUMB_FUNC void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +THUMB_FUNC void SaveStruct23_Substruct4_SetSubstruct1(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct1 *substruct1, u8 arg2, u8 arg3) { - MI_CpuCopy8(src, &dest->u_104, sizeof(struct Unk0202A744_substruct1)); - dest->u_101 = arg2; - dest->u_100 = arg3; - dest->u_FE = 1; + MI_CpuCopy8(substruct1, &substruct4->substruct1, sizeof(struct SaveStruct23_Substruct4_Substruct1)*7); + substruct4->u_101 = arg2; + substruct4->u_100 = arg3; + substruct4->u_FE = 1; } -THUMB_FUNC void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *dest) +THUMB_FUNC void FUN_0202A784(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst) { - dest->u_0 = src->u_101; - dest->u_1 = src->u_100; + dst->u_0 = substruct4->u_101; + dst->u_1 = substruct4->u_100; } -THUMB_FUNC void FUN_0202A798(struct Unk0202A798_1 *arg0, struct Unk0202A798_2 *arg1, u32 arg2) +THUMB_FUNC void FUN_0202A798(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A798 *arg1, u32 arg2) { - struct Unk0202A798_substruct2 *var0 = &arg1->u_0; + struct Unk0202A798_substruct *unk_substruct = &arg1->u_0; u8 *var1 = arg1->u_30; - struct Unk0202A798_substruct1 *src = &arg0->u_104[arg2]; + struct SaveStruct23_Substruct4_Substruct1 *substruct4_substruct1 = &substruct4->substruct1[arg2]; struct MsgData *message; - var0->u_0 = 10000; - var0->u_4 = src->u_C9; + unk_substruct->u_0 = 10000; + unk_substruct->u_4 = substruct4_substruct1->u_C9; - if(src->u_C8_0) + if(substruct4_substruct1->u_C8_0) { message = NewMsgDataFromNarc(0, NARC_MSGDATA_MSG, 17, 11); - ReadMsgDataIntoU16Array(message, (u32) (22 + src->u_C8_1), var0->u_8); + ReadMsgDataIntoU16Array(message, (u32) (22 + substruct4_substruct1->u_C8_1), unk_substruct->u_8); DestroyMsgData(message); } else { - MI_CpuCopy8(src->u_A8, var0->u_8, 16); + MI_CpuCopy8(substruct4_substruct1->u_A8, unk_substruct->u_8, 16); } - MI_CpuCopy8(src->u_CA, var0->u_18, 8); - MI_CpuCopy8(src->u_D2, var0->u_20, 8); - MI_CpuCopy8(src->u_DA, var0->u_28, 8); - MI_CpuCopy8(src->u_0, var1, 168); + MI_CpuCopy8(substruct4_substruct1->u_CA, unk_substruct->u_18, 8); + MI_CpuCopy8(substruct4_substruct1->u_D2, unk_substruct->u_20, 8); + MI_CpuCopy8(substruct4_substruct1->u_DA, unk_substruct->u_28, 8); + MI_CpuCopy8(substruct4_substruct1->u_0, var1, 168); } -THUMB_FUNC void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3) +THUMB_FUNC void FUN_0202A838(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2, u8 arg2, u8 arg3) { - MI_CpuCopy8(src, &dest->u_740, sizeof(dest->u_740)); - dest->u_103 = arg2; - dest->u_102 = arg3; - dest->u_FF = 1; + MI_CpuCopy8(substruct4_substruct2, &substruct4->substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2)); + substruct4->u_103 = arg2; + substruct4->u_102 = arg3; + substruct4->u_FF = 1; } -THUMB_FUNC void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest) +THUMB_FUNC void FUN_0202A864(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dst) { - dest->u_0 = src->u_103; - dest->u_1 = src->u_102; + dst->u_0 = substruct4->u_103; + dst->u_1 = substruct4->u_102; } -THUMB_FUNC struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 heap_id) +THUMB_FUNC struct SaveStruct23_Substruct4_Substruct2 *FUN_0202A878(struct SaveStruct23_Substruct4 *substruct4, u32 heap_id) { - struct Unk0202A744_substruct2 *dstp = AllocFromHeap(heap_id, sizeof(struct Unk0202A744_substruct2) /* 1020 */); - MI_CpuCopy8(&src->u_740, dstp, sizeof(struct Unk0202A744_substruct2)); - return dstp; + struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2 = AllocFromHeap(heap_id, sizeof(struct SaveStruct23_Substruct4_Substruct2) /* 1020 */); + MI_CpuCopy8(&substruct4->substruct2, substruct4_substruct2, sizeof(struct SaveStruct23_Substruct4_Substruct2)); + return substruct4_substruct2; } -THUMB_FUNC s32 FUN_0202A89C() +THUMB_FUNC s32 SaveStruct23_sizeof() { - return 0xD00; // 3328 + return sizeof(struct SaveStruct23); // 0xD00 (3328) } -THUMB_FUNC void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct) +THUMB_FUNC void SaveStruct23_Init(struct SaveStruct23 *saveStruct23) { - FUN_0202A1E4(savStruct); - FUN_0202A1F0(&savStruct->u_3C); - FUN_0202A204(&savStruct->messages); - FUN_0202A230(&savStruct->u_1C4); + SaveStruct23_Substruct1_Init(&saveStruct23->substruct1); + SaveStruct23_Substruct2_Init(&saveStruct23->substruct2); + SaveStruct23_Messages_Init(&saveStruct23->messages); + SaveStruct23_Substruct4_Init(&saveStruct23->substruct4); } -THUMB_FUNC struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2) +THUMB_FUNC struct SaveStruct23_Substruct1 *SaveStruct23_GetSubstruct1(struct SaveBlock2* sav2) { - return SavArray_get(sav2, 23); + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct1; } -THUMB_FUNC struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2) +THUMB_FUNC struct SaveStruct23_Substruct2 *SaveStruct23_GetSubstruct2(struct SaveBlock2* sav2) { - struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); - return &data->u_3C; + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct2; } -THUMB_FUNC void *FUN_0202A8E4(struct SaveBlock2* sav2) +THUMB_FUNC struct SaveStruct23_Substruct4 *SaveStruct23_GetSubstruct4(struct SaveBlock2* sav2) { - struct UnkSaveStruct_0202A5D4 *data = SavArray_get(sav2, 23); - return &data->u_1C4; + return &((struct SaveStruct23 *)SavArray_get(sav2, 23))->substruct4; } \ No newline at end of file diff --git a/arm9/src/unk_0205FA2C.c b/arm9/src/unk_0205FA2C.c index cabd756e..a023ad83 100644 --- a/arm9/src/unk_0205FA2C.c +++ b/arm9/src/unk_0205FA2C.c @@ -1,5 +1,6 @@ #include "unk_0205FA2C.h" #include "unk_020337E8.h" +#include "unk_0202A1E0.h" extern void *UNK_020F96DC; extern void *UNK_020FA6E8; @@ -11,17 +12,9 @@ extern u16 *GetVarPointer(struct UnkSavStruct80 *arg, u16); extern u16 MOD06_02244660(struct UnkSavStruct80 *param0, u8 *param1); extern u16 MOD06_022446BC(struct UnkSavStruct80 *param0, u8 *param1); extern u16 MOD06_022446E0(struct UnkSavStruct80 *param0, u8 *param1); -extern void FUN_0202A5CC(u32 param0, u32 param1); -extern u32 FUN_0202A5D0(u32 param0); extern u32 FUN_0202A150(struct UnkStruct_02029FB0 *param0, u32 param1); -extern u32 FUN_0202A8D8(struct SaveBlock2 *sav2); -extern u32 FUN_0202A578(u32 param0, u32 param1, u32 param2); extern u32 FUN_02026CC4(struct SaveBlock2 *sav2); extern u32 FUN_02025D94(u32 param0, u32 param1); -extern u32 FUN_0202A8CC(struct SaveBlock2 *sav2); -extern void FUN_0202A2C4(u32 param0, u32 param1, u32 *param2); -extern u32 FUN_0202A240(u32 param0, u32 param1, u32 param2); -extern int FUN_0202A538(u32 param0, u16 param1, u32 param2); const u8 UNK_020F7454[] = { 0x00, @@ -327,33 +320,33 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2) return 0; } - u32 res2 = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); - u8 res4 = (u8)FUN_0202A578(res2, 0, 0); - u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET); + BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET); + BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET); - u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); - u8 res7 = (u8)FUN_0202A578(res2, 2, 0); - u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET); + BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET); + BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET); - if (res3 != 0 && res4 != 0 && res5 != 0) + if (flagD && flag0 && flag1) { return 0; } u32 res9 = FUN_02026CC4(sav2); - if (res3 == 0) + if (!flagD) { if (FUN_02025D94(res9, 0x55) != 0) { - FUN_0202A578(res2, 0xd, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_SET); return 1; } - if (res6 == 0) + if (!flagE) { - FUN_0202A578(res2, 0xe, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_SET); } return 4; @@ -364,36 +357,36 @@ THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2) return 0; } - if (res4 == 0) + if (!flag0) { if (FUN_02025D94(res9, 0x56) != 0) { - FUN_0202A578(res2, 0, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_SET); return 2; } - if (res7 == 0) + if (!flag2) { - FUN_0202A578(res2, 2, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_SET); } return 4; } - if (res < 100 || res5 != 0) + if (res < 100 || flag1) { return 0; } if (FUN_02025D94(res9, 0x57) != 0) { - FUN_0202A578(res2, 1, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_SET); return 3; } - if (res8 == 0) + if (!flag3) { - FUN_0202A578(res2, 3, 1); + SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_SET); } return 4; @@ -407,24 +400,24 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - u32 res2 = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); - u8 res4 = (u8)FUN_0202A578(res2, 0, 0); - u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + BOOL flagD = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xd, DATA_GET); + BOOL flag0 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0, DATA_GET); + BOOL flag1 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 1, DATA_GET); - u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); - u8 res7 = (u8)FUN_0202A578(res2, 2, 0); - u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + BOOL flagE = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 0xe, DATA_GET); + BOOL flag2 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 2, DATA_GET); + BOOL flag3 = (u8)SaveStruct23_Substruct2_SetFlag(saveStruct23_substruct2, 3, DATA_GET); - if (res3 != 0 && res4 != 0 && res5 != 0) + if (flagD && flag0 && flag1) { return 0; } - if (res3 == 0) + if (!flagD) { - if (res6 != 0) + if (flagE) { return 4; } @@ -437,9 +430,9 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - if (res4 == 0) + if (!flag0) { - if (res7 != 0) + if (flag2) { return 5; } @@ -452,12 +445,12 @@ THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) return 0; } - if (res5 != 0) + if (flag1) { return 0; } - if (res8 != 0) + if (flag3) { return 6; } @@ -488,42 +481,42 @@ THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2) { u32 res = FUN_02060070(FUN_020287A4(FUN_0202881C(sav2))); - FUN_0202A5CC(FUN_0202A8D8(sav2), res); + SaveStruct23_Substruct2_SetField_0x4(SaveStruct23_GetSubstruct2(sav2), res); return res; } THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2) { - u32 res = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u32 res2 = FUN_02060070(FUN_0202A5D0(res)); + u32 res2 = FUN_02060070(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2)); - FUN_0202A5CC(res, res2); + SaveStruct23_Substruct2_SetField_0x4(saveStruct23_substruct2, res2); u32 res3 = FUN_02060064(res2); - FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3); return res3; } THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2) { - u32 res = FUN_0202A8D8(sav2); + struct SaveStruct23_Substruct2 *saveStruct23_substruct2 = SaveStruct23_GetSubstruct2(sav2); - u32 res2 = FUN_0202A8CC(sav2); + struct SaveStruct23_Substruct1 *saveStruct23_substruct1 = SaveStruct23_GetSubstruct1(sav2); - u32 res3 = FUN_02060064(FUN_0202A5D0(res)); + u32 res3 = FUN_02060064(SaveStruct23_Substruct2_GetField_0x4(saveStruct23_substruct2)); int i = 0; - int res4 = FUN_0202A538(res, (u16)FUN_0202A240(res2, 0, 0), 0) * 0x18; + int res4 = SaveStruct23_Substruct2_SetField_0xC(saveStruct23_substruct2, (u16)SaveStruct23_Substruct1_GetField(saveStruct23_substruct1, FIELD_0x0_2, 0), DATA_GET) * 0x18; for (i = 0; i < res4; i++) { res3 = FUN_02060064(res3); } - FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + SaveStruct23_Substruct1_SetField(SaveStruct23_GetSubstruct1(sav2), FIELD_0x28, &res3); return res3; } diff --git a/include/unk_0202A1E0.h b/include/unk_0202A1E0.h index c07810c3..8c1e5da9 100644 --- a/include/unk_0202A1E0.h +++ b/include/unk_0202A1E0.h @@ -4,215 +4,206 @@ #include "mail_message.h" #include "save_block_2.h" -struct Unk0202A1F0 -{ - u8 filler[3]; - u8 u_3; -}; - -struct UnkMailStruct -{ - struct MailMessage messages[4]; -}; - -struct Unk0202A240 -{ - u8 u_0_0 : 1; // used - u8 u_0_1 : 1; // used - u8 u_0_2 : 3; // used - u8 u_0_5 : 3; // used - u8 u_1; - u8 u_2; // used - u8 u_3; // used - u16 u_4; // used - u16 u_6; // used - s32 u_8; // used, cpu copy 4 bytes - s32 u_C[7]; // used, cpu copy 28 bytes - u32 u_28; // used - s32 u_2C[4]; // used, cpu copy 16 bytes -}; +typedef enum +{ + DATA_GET = 0, + DATA_SET, + DATA_RESET, + DATA_INCREMENT, + DATA_DECREMENT, + DATA_ADD, + DATA_SUBSTRACT +} +DataSetMode; + +typedef enum +{ + FIELD_0x0_2 = 0, + FIELD_0x2, + FIELD_0x3, + FIELD_0x4, + FIELD_0x6, + FIELD_0x8, + FIELD_0x2C, + FIELD_flag0, + FIELD_0xC, + FIELD_0x0_5, + FIELD_0x28, +} +SaveStruct23_Substruct1_Field; + +struct SaveStruct23_Substruct1 +{ + /* 0x000 */ u8 flag0 : 1; + u8 flag1 : 1; + u8 u_0_2 : 3; + u8 u_0_5 : 3; + /* 0x001 */ u8 u_1; + /* 0x002 */ u8 u_2; + /* 0x003 */ u8 u_3; + /* 0x004 */ u16 u_4; + /* 0x006 */ u16 u_6; + /* 0x008 */ s32 u_8; + /* 0x00C */ s32 u_C[7]; + /* 0x028 */ u32 u_28; + /* 0x02C */ s32 u_2C[4]; +}; // total size = 0x3C (60) + +struct SaveStruct23_Substruct2 +{ + /* 0x000 */ u16 u_0; + /* 0x002 */ u8 u_2; + /* 0x003 */ u8 u_3; + /* 0x004 */ u32 u_4; + + union + { + struct + { + /* 0x008 */ u16 flag0:1; + u16 flag1:1; + u16 flag2:1; + u16 flag3:1; + u16 flag4:1; + u16 filler_1:11; + }; + /* 0x008 */ u16 flags; + }; + /* 0x00A */ u8 filler_2[2]; + /* 0x00C */ u16 u_C[5]; + /* 0x016 */ u16 u_16; + /* 0x018 */ u8 u_18[168]; + /* 0x0C0 */ u8 u_C0[168]; +}; // total size 0x168 (360) + +struct SaveStruct23_Messages +{ + /* 0x000 */ struct MailMessage messages[4]; +}; // total size 0x020 (32) + +struct SaveStruct23_Substruct4_Substruct1 +{ + /* 0x000 */ u8 u_0[168]; + /* 0x0A8 */ u8 u_A8[16]; + /* 0x0B8 */ u8 filler_1[16]; + /* 0x0C8 */ u8 u_C8_0:1; + u8 u_C8_1:1; + u8 filler_2:6; + /* 0x0C8 */ u8 u_C9; + /* 0x0CA */ u16 u_CA[4]; + /* 0x0D2 */ u16 u_D2[4]; + /* 0x0DA */ u16 u_DA[4]; + /* 0x0E2 */ u8 filler_3[2]; +}; // total size 0xE4 (228) -struct Unk0202A3B4 +struct SaveStruct23_Substruct4_Substruct2 { - u16 u_0; // used - u8 filler_0[6]; - u16 filler_1 : 4; - u16 u_8_4 : 1; // used + /* 0x00 */ u8 u_0[1020]; }; -struct Unk0202A40C +struct SaveStruct23_Substruct4 { - u16 filler_0; - u8 u_2; // used - u8 filler_1[5]; - u16 filler_2 : 4; - u16 u_8_4 : 1; // used -}; + /* 0x000 */ u32 u_0; + /* 0x004 */ u8 flags[250]; + /* 0x0FE */ u8 u_FE; + /* 0x0FF */ u8 u_FF; + /* 0x100 */ u8 u_100; + /* 0x101 */ u8 u_101; + /* 0x102 */ u8 u_102; + /* 0x103 */ u8 u_103; + /* 0x104 */ struct SaveStruct23_Substruct4_Substruct1 substruct1[7]; + /* 0x740 */ struct SaveStruct23_Substruct4_Substruct2 substruct2; +}; // total size 0xB3C (2876) -struct Unk0202A444 +struct SaveStruct23 // Struct fetched with SavArray_get(sav2, 23) { - u8 filler_0[3]; - u8 u_3; // used -}; + /* 0x000 */ struct SaveStruct23_Substruct1 substruct1; + /* 0x03C */ struct SaveStruct23_Substruct2 substruct2; + /* 0x1A4 */ struct SaveStruct23_Messages messages; + /* 0x1C4 */ struct SaveStruct23_Substruct4 substruct4; +}; // total size = 0xD00 (3328) struct Unk0202A4B8 { - u8 filler[2]; - u8 u_2; // used - u8 u_3; // used - u16 u_4; // used - u16 u_6; // used - u16 filler_1[2]; - u16 u_array_C[5]; // used - u16 u_16; // used - u16 u_18; // used -}; - -struct Unk0202A578 -{ - u8 filler[8]; - u16 u_8; + /* 0x000 */ u8 filler_1[2]; + /* 0x002 */ u8 u_2; + /* 0x003 */ u8 u_3; + /* 0x004 */ u16 u_4; + /* 0x006 */ u16 u_6; }; -struct Unk0202A5CC -{ - u32 filler; - u32 u_4; -}; - - -struct UnkSaveStruct_0202A5D4 -{ - u32 filler[15]; - struct Unk0202A1F0 u_3C; - u32 filler1[89]; - struct UnkMailStruct messages; - u32 u_1C4; -}; - -typedef struct Unk0202A670 -{ - u32 u_0; // used - u8 u_4[250]; // used -} -Unk0202A670; - typedef struct Unk0202A68C { - u32 u_0; // used - u32 u_4; // used - u32 u_8; // used - u32 u_C; // used -} + /* 0x000 */ u32 u_0; + /* 0x004 */ u32 u_4; + /* 0x008 */ u32 u_8; + /* 0x00C */ u32 u_C; +} Unk0202A68C; // total size 0x10 (16) -struct Unk0202A744_substruct1 -{ - u8 data[0x63c]; -}; // total size 0x63C (1596) - -struct Unk0202A744_substruct2 -{ - u8 data[1020]; -}; // total size 0x3FC (1020) - -struct Unk0202A744 -{ - u8 filler[254]; - u8 u_FE; - u8 u_FF; - u8 u_100; - u8 u_101; - u8 u_102; - u8 u_103; - struct Unk0202A744_substruct1 u_104; - struct Unk0202A744_substruct2 u_740; -}; - struct Unk0202A784 { - u8 u_0; - u8 u_1; -}; - -struct Unk0202A798_substruct1 -{ - u8 u_0[168]; - u8 u_A8[16]; - u16 filler_2[8]; - u8 u_C8_0:1; - u8 u_C8_1:1; - u8 u_C8_filler:6; - u8 u_C9; - u16 u_CA[4]; - u16 u_D2[4]; - u16 u_DA[4]; - u8 filler_3[2]; -}; // total size 0xE4 (228) - -struct Unk0202A798_1 -{ - u8 filler[260]; - struct Unk0202A798_substruct1 u_104[4]; + /* 0x000 */ u8 u_0; + /* 0x001 */ u8 u_1; }; -struct Unk0202A798_substruct2 +struct Unk0202A798_substruct { - u32 u_0; - u16 u_4; - u8 filler_1[2]; - u16 u_8[8]; - u16 u_18[4]; - u16 u_20[4]; - u16 u_28[4]; + /* 0x000 */ u32 u_0; + /* 0x004 */ u16 u_4; + /* 0x006 */ u8 filler_1[2]; + /* 0x008 */ u16 u_8[8]; + /* 0x018 */ u16 u_18[4]; + /* 0x020 */ u16 u_20[4]; + /* 0x028 */ u16 u_28[4]; }; // total size 0x30 (48) -struct Unk0202A798_2 +struct Unk0202A798 { - struct Unk0202A798_substruct2 u_0; - u8 u_30[168]; + /* 0x000 */ struct Unk0202A798_substruct u_0; + /* 0x030 */ u8 u_30[168]; }; -s32 FUN_0202A1E0(); -void FUN_0202A1E4(void *dst); -void FUN_0202A1F0(struct Unk0202A1F0 *unk); -void FUN_0202A204(struct UnkMailStruct *unk); -void FUN_0202A230(void *dst); -u32 FUN_0202A240(struct Unk0202A240 *unk, u32 arg1, void *dst); -void FUN_0202A2C4(struct Unk0202A240 *dst, u32 arg1, void *src); -void FUN_0202A36C(struct Unk0202A240 *unk, s32 arg1, s32 arg2, s32 arg3); -u8 FUN_0202A398(struct Unk0202A240 *unk); -void FUN_0202A3A0(struct Unk0202A240 *unk, u16 arg1); -u16 FUN_0202A3B4(struct Unk0202A3B4 *unk, u16 arg1, s32 arg2); -u8 FUN_0202A40C(struct Unk0202A40C *unk, s32 arg1); -u8 FUN_0202A444(struct Unk0202A444 *unk, s32 arg1); -void FUN_0202A474(void *dst, s32 arg1, const void *src); -void FUN_0202A498(const void *src, s32 arg1, void *dst); -u16 FUN_0202A4B8(struct Unk0202A4B8 *arg0, struct Unk0202A4B8 *arg1); -u16 FUN_0202A520(struct Unk0202A4B8 *unk); -u8 FUN_0202A524(struct Unk0202A4B8 *unk); -u16 FUN_0202A538(struct Unk0202A4B8 *unk, s32 arg1, s32 arg2); -BOOL FUN_0202A578(struct Unk0202A578 *arg0, u16 arg1, u32 arg2); -void FUN_0202A5CC(struct Unk0202A5CC *unk, u32 arg1); -u32 FUN_0202A5D0(struct Unk0202A5CC *unk); -void FUN_0202A5D4(struct SaveBlock2 *sav2, u32 arg1, struct MailMessage *arg2); -struct MailMessage *FUN_0202A5F4(struct SaveBlock2 *sav2, u32 arg1); -void FUN_0202A60C(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); -void FUN_0202A670(struct Unk0202A670 *arg0); -BOOL FUN_0202A68C(struct Unk0202A68C *arg0, struct Unk0202A68C *arg1); -BOOL FUN_0202A6B4(struct Unk0202A670 *arg0, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); -u8 FUN_0202A744(struct Unk0202A744 *unk); -u8 FUN_0202A74C(struct Unk0202A744 *unk); -void FUN_0202A754(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); -void FUN_0202A784(struct Unk0202A744 *src, struct Unk0202A784 *ptr1); -void FUN_0202A798(); -void FUN_0202A838(struct Unk0202A744 *dest, void *src, u8 arg2, u8 arg3); -void FUN_0202A864(struct Unk0202A744 *src, struct Unk0202A784 *dest); -struct Unk0202A744_substruct2 *FUN_0202A878(struct Unk0202A744 *src, u32 head_id); -s32 FUN_0202A89C(); -void FUN_0202A8A4(struct UnkSaveStruct_0202A5D4 *savStruct); -struct UnkSaveStruct_0202A5D4 *FUN_0202A8CC(struct SaveBlock2* sav2); -struct Unk0202A1F0 *FUN_0202A8D8(struct SaveBlock2* sav2); -void *FUN_0202A8E4(struct SaveBlock2* sav2); +s32 SaveStruct23_Substruct4_Substruct1_sizeof(); +void SaveStruct23_Substruct1_Init(struct SaveStruct23_Substruct1 *substruct1); +void SaveStruct23_Substruct2_Init(struct SaveStruct23_Substruct2 *substruct2); +void SaveStruct23_Messages_Init(struct SaveStruct23_Messages *mailStruct); +void SaveStruct23_Substruct4_Init(struct SaveStruct23_Substruct4 *substruct4); +u32 SaveStruct23_Substruct1_GetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *dst); +void SaveStruct23_Substruct1_SetField(struct SaveStruct23_Substruct1 *substruct1, SaveStruct23_Substruct1_Field field, void *value); +void FUN_0202A36C(struct SaveStruct23_Substruct1 *substruct1, s32 arg1, s32 arg2, s32 arg3); +BOOL SaveStruct23_Substruct1_GetFlag1(struct SaveStruct23_Substruct1 *substruct1); +void SaveStruct23_Substruct1_SetFlag1(struct SaveStruct23_Substruct1 *substruct1, BOOL arg1); +u16 SaveStruct23_Substruct2_SetField_0x0(struct SaveStruct23_Substruct2 *substruct2, u16 value, DataSetMode mode); +u8 SaveStruct23_Substruct2_SetField_0x2(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode); +u8 SaveStruct23_Substruct2_SetField_0x3(struct SaveStruct23_Substruct2 *substruct2, DataSetMode mode); +void SaveStruct23_Substruct2_SetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *src); +void SaveStruct23_Substruct2_GetArray(struct SaveStruct23_Substruct2 *substruct2, s32 mode, void *dst); +u16 SaveStruct23_Substruct2_SetField_0x16(struct SaveStruct23_Substruct2 *substruct2, struct Unk0202A4B8 *arg1); +u16 SaveStruct23_Substruct2_GetField_0x16(struct SaveStruct23_Substruct2 *substruct2); +u8 FUN_0202A524(struct SaveStruct23_Substruct2 *substruct2); +u16 SaveStruct23_Substruct2_SetField_0xC(struct SaveStruct23_Substruct2 *substruct2, u16 arg1, DataSetMode mode); +BOOL SaveStruct23_Substruct2_SetFlag(struct SaveStruct23_Substruct2 *substruct2, u16 flagNumber, DataSetMode mode); +void SaveStruct23_Substruct2_SetField_0x4(struct SaveStruct23_Substruct2 *substruct2, u32 arg1); +u32 SaveStruct23_Substruct2_GetField_0x4(struct SaveStruct23_Substruct2 *substruct2); +void SaveStruct23_SetMessage(struct SaveBlock2 *sav2, u32 index, struct MailMessage *message); +struct MailMessage *SaveStruct23_GetMessage(struct SaveBlock2 *sav2, u32 index); +void SaveStruct23_Substruct4_SetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); +void SaveStruct23_Substruct4_ClearArrayFlags(struct SaveStruct23_Substruct4 *substruct4); +BOOL StructUnk0202A68C_Compare(struct Unk0202A68C *struct1, struct Unk0202A68C *struct2); +BOOL SaveStruct23_Substruct4_GetArrayFlag(struct SaveStruct23_Substruct4 *substruct4, u8 arg1, u8 arg2, struct Unk0202A68C *arg3); +u8 SaveStruct23_Substruct4_GetField_0xFE(struct SaveStruct23_Substruct4 *substruct4); +u8 SaveStruct23_Substruct4_GetField_0xFF(struct SaveStruct23_Substruct4 *substruct4); +void SaveStruct23_Substruct4_SetSubstruct1(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct1 *substruct4_substruct1, u8 arg2, u8 arg3); +void FUN_0202A784(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dest); +void FUN_0202A798(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A798 *arg1, u32 arg2); +void FUN_0202A838(struct SaveStruct23_Substruct4 *substruct4, struct SaveStruct23_Substruct4_Substruct2 *substruct4_substruct2, u8 arg2, u8 arg3); +void FUN_0202A864(struct SaveStruct23_Substruct4 *substruct4, struct Unk0202A784 *dest); +struct SaveStruct23_Substruct4_Substruct2 *FUN_0202A878(struct SaveStruct23_Substruct4 *substruct4, u32 heap_id); +s32 SaveStruct23_sizeof(); +void SaveStruct23_Init(struct SaveStruct23 *saveStruct23); +struct SaveStruct23_Substruct1 *SaveStruct23_GetSubstruct1(struct SaveBlock2* sav2); +struct SaveStruct23_Substruct2 *SaveStruct23_GetSubstruct2(struct SaveBlock2* sav2); +struct SaveStruct23_Substruct4 *SaveStruct23_GetSubstruct4(struct SaveBlock2* sav2); #endif //POKEDIAMOND_UNK_0202A1E0_H \ No newline at end of file -- cgit v1.2.3 From 9d717596e138c8e24aca0be9b963c6dd22a3716e Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 23 Jun 2021 18:05:55 -0500 Subject: Starting unk_0201C6B4 --- arm9/asm/unk_0201C6B4.s | 148 ------------------------------------------------ arm9/src/unk_0201C6B4.c | 75 ++++++++++++++++++++++++ include/unk_0201C6B4.h | 10 ++++ 3 files changed, 85 insertions(+), 148 deletions(-) delete mode 100644 arm9/asm/unk_0201C6B4.s create mode 100644 arm9/src/unk_0201C6B4.c create mode 100644 include/unk_0201C6B4.h diff --git a/arm9/asm/unk_0201C6B4.s b/arm9/asm/unk_0201C6B4.s deleted file mode 100644 index 6ee6910b..00000000 --- a/arm9/asm/unk_0201C6B4.s +++ /dev/null @@ -1,148 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0201C6B4 -FUN_0201C6B4: ; 0x0201C6B4 - mov r2, #0x0 - ldrsb r1, [r0, r2] - cmp r1, #0x0 - beq _0201C6C4 -_0201C6BC: - add r2, r2, #0x1 - ldrsb r1, [r0, r2] - cmp r1, #0x0 - bne _0201C6BC -_0201C6C4: - add r0, r2, #0x0 - bx lr - - thumb_func_start FUN_0201C6C8 -FUN_0201C6C8: ; 0x0201C6C8 - push {r4-r5} - mov r4, #0x1 - mov r3, #0x0 - lsl r4, r4, #0x8 -_0201C6D0: - ldrsb r5, [r0, r3] - strb r5, [r1, r3] - ldrsb r5, [r0, r3] - cmp r2, r5 - beq _0201C6DE - cmp r5, #0x0 - bne _0201C6FE -_0201C6DE: - mov r4, #0x0 - strb r4, [r1, r3] - cmp r2, #0xd - bne _0201C6F6 - add r1, r3, #0x1 - ldrsb r1, [r0, r1] - cmp r1, #0xa - bne _0201C6F6 - add r1, r3, #0x2 - add r0, r0, r1 - pop {r4-r5} - bx lr -_0201C6F6: - add r1, r3, #0x1 - add r0, r0, r1 - pop {r4-r5} - bx lr -_0201C6FE: - add r3, r3, #0x1 - cmp r3, r4 - blt _0201C6D0 - mov r0, #0x0 - pop {r4-r5} - bx lr - .balign 4 - - thumb_func_start FUN_0201C70C -FUN_0201C70C: ; 0x0201C70C - push {r4-r6, lr} - add r4, r0, #0x0 - bl FUN_0201C6B4 - mov r5, #0x1 - mov r6, #0x0 - sub r3, r0, #0x1 - bmi _0201C74A - sub r1, r6, #0x1 - mov r0, #0xa -_0201C720: - ldrsb r2, [r4, r3] - cmp r2, #0x30 - blt _0201C732 - cmp r2, #0x39 - bgt _0201C732 - sub r2, #0x30 - mul r2, r5 - add r6, r6, r2 - b _0201C744 -_0201C732: - cmp r3, #0x0 - bne _0201C73E - cmp r2, #0x2d - bne _0201C744 - mul r6, r1 - b _0201C744 -_0201C73E: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} -_0201C744: - mul r5, r0 - sub r3, r3, #0x1 - bpl _0201C720 -_0201C74A: - add r0, r6, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0201C750 -FUN_0201C750: ; 0x0201C750 - push {r3-r5, lr} - mov r2, #0x0 - add r4, r1, #0x0 - add r5, r0, #0x0 - add r1, r2, #0x0 -_0201C75A: - lsl r0, r2, #0x2 - str r1, [r5, r0] - add r0, r2, #0x1 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 - cmp r2, #0x4 - blo _0201C75A - add r0, r4, #0x0 - bl FUN_0201C6B4 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - ldr r2, _0201C788 ; =0x00000000 - beq _0201C784 -_0201C776: - ldrsb r0, [r4, r2] - strb r0, [r5, r2] - add r0, r2, #0x1 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 - cmp r2, r1 - blo _0201C776 -_0201C784: - pop {r3-r5, pc} - nop -_0201C788: .word 0x00000000 - - thumb_func_start FUN_0201C78C -FUN_0201C78C: ; 0x0201C78C - ldr r1, _0201C79C ; =0x00000121 - cmp r0, r1 - bhs _0201C796 - mov r0, #0x1 - bx lr -_0201C796: - mov r0, #0x0 - bx lr - nop -_0201C79C: .word 0x00000121 diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c new file mode 100644 index 00000000..95a301d6 --- /dev/null +++ b/arm9/src/unk_0201C6B4.c @@ -0,0 +1,75 @@ +#include "global.h" +#include "proto.h" +#include "unk_0201C6B4.h" + +THUMB_FUNC u32 FUN_0201C6B4(s8 * r0) +{ + u32 r2 = 0; + while(r0[r2] != 0) + { + r2++; + } + return r2; +} + +THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) +{ + for(u8 r3 = 0; r3 < 256; r3++) + { + r1[r3] = r0[r3]; + if(r2 == r0[r3] || r0[r3] != 0) + { + r1[r3] = 0; + if(r2 == 13 | r0[r3 + 1] == 10) + { + return r0 + r3 + 1; + } + return r0 + r3 + 2; + } + } + return NULL; +} + +THUMB_FUNC s32 FUN_0201C70C(s8 * r4) +{ + u32 r5 = 1; + s32 r6 = 0; + for(u32 r3 = FUN_0201C6B4(r4) - 1; r3 >= 0; r3--) + { + if(r4[r3] < 48 || r4[r3] > 57) + { + if(r3 == 0) + { + return 0; + } + if(r4[r3] == 45) + { + r6 = r6 * -1; + } + } + else + { + r6 += ((r4[r3] - 48) * r5); + } + r5 = r5 * 10; + } + return r6; +} + +THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) +{ + for(u32 r2 = 0; r2 < 4; r2++) + { + r5[r2 << 2] = 0; + } + u32 r0 = FUN_0201C6B4(r4); + for(u32 r2 = 0; r2 < r0; r2++) + { + r5[r2] = r4[r2]; + } +} + +THUMB_FUNC BOOL FUN_0201C78C(u32 r0) +{ + return r0 > 289; +} \ No newline at end of file diff --git a/include/unk_0201C6B4.h b/include/unk_0201C6B4.h new file mode 100644 index 00000000..956f7bc2 --- /dev/null +++ b/include/unk_0201C6B4.h @@ -0,0 +1,10 @@ +#ifndef POKEDIAMOND_UNK_0201C6B4_H +#define POKEDIAMOND_UNK_0201C6B4_H + +u32 FUN_0201C6B4(s8 * r0); +s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2); +s32 FUN_0201C70C(s8 * r4); +void FUN_0201C750(s8 * r5, s8 * r4); +BOOL FUN_0201C78C(u32 r0); + +#endif // POKEDIAMOND_UNK_0201C6B4_H \ No newline at end of file -- cgit v1.2.3 From 9ff579dac825bf4afa7c9fb4ea3e5a1ffb2d996d Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Thu, 24 Jun 2021 15:55:08 +0200 Subject: cleanup header includes and orders Not complete, but a good start. --- arm7/lib/include/SND_alarm.h | 12 +++ arm7/lib/include/SND_exChannel.h | 8 ++ arm7/lib/include/SND_work.h | 4 + arm9/lib/include/CARD_rom.h | 1 + arm9/lib/include/GX_g3x.h | 2 + arm9/lib/include/MI_exMemory.h | 2 +- arm9/lib/include/OS_entropy.h | 3 +- arm9/lib/include/OS_interrupt.h | 2 +- arm9/lib/include/OS_irqHandler.h | 2 +- arm9/lib/include/OS_irqTable.h | 2 +- arm9/lib/include/OS_reset.h | 3 +- arm9/lib/include/PAD_pad.h | 2 +- arm9/lib/include/SND_alarm.h | 13 +-- arm9/lib/include/SND_interface.h | 1 + arm9/lib/include/SND_main.h | 163 +------------------------------- arm9/lib/include/SND_work.h | 26 +----- arm9/lib/include/consts.h | 3 - arm9/lib/include/fx.h | 2 + arm9/lib/include/systemWork.h | 1 - arm9/lib/src/CARD_common.c | 1 + arm9/lib/src/CARD_pullOut.c | 1 + arm9/lib/src/CP_context.c | 2 +- arm9/lib/src/CTRDG_common.c | 1 + arm9/lib/src/FX_cp.c | 4 +- arm9/lib/src/FX_vec.c | 4 +- arm9/lib/src/GX.c | 5 +- arm9/lib/src/MI_wram.c | 5 +- arm9/lib/src/OS_arena.c | 5 +- arm9/lib/src/OS_entropy.c | 7 +- arm9/lib/src/OS_exception.c | 4 +- arm9/lib/src/OS_interrupt.c | 6 +- arm9/lib/src/OS_ownerInfo.c | 4 +- arm9/lib/src/OS_reset.c | 3 +- arm9/lib/src/OS_spinLock.c | 3 +- arm9/lib/src/OS_thread.c | 3 +- arm9/lib/src/SND_command.c | 3 + arm9/lib/src/custom_allocator.c | 4 +- arm9/modules/21/src/mod21_02254A6C.c | 4 +- arm9/src/save.c | 1 + arm9/src/timer3.c | 6 ++ include/global.h | 2 +- include/heap.h | 1 + include/nitro/OS_alarm_shared.h | 1 + include/nitro/OS_thread_shared.h | 3 + include/nitro/SND_alarm_shared.h | 30 ++++++ include/nitro/SND_main_shared.h | 176 +++++++++++++++++++++++++++++++++++ include/nitro/SND_work_shared.h | 46 +++++++++ 47 files changed, 356 insertions(+), 231 deletions(-) create mode 100644 arm7/lib/include/SND_alarm.h create mode 100644 arm7/lib/include/SND_exChannel.h create mode 100644 arm7/lib/include/SND_work.h create mode 100644 include/nitro/SND_alarm_shared.h create mode 100644 include/nitro/SND_main_shared.h create mode 100644 include/nitro/SND_work_shared.h diff --git a/arm7/lib/include/SND_alarm.h b/arm7/lib/include/SND_alarm.h new file mode 100644 index 00000000..195b90bb --- /dev/null +++ b/arm7/lib/include/SND_alarm.h @@ -0,0 +1,12 @@ +#ifndef GUARD_SND_ALARM_H +#define GUARD_SND_ALARM_H + +#include "global.h" +#include "SND_alarm_shared.h" + +void SND_StopAlarm(u32 idx); +void SND_StartAlarm(u32 idx); +void SND_SetupAlarm(); +void SND_AlarmInit(); + +#endif //GUARD_SND_ALARM_H \ No newline at end of file diff --git a/arm7/lib/include/SND_exChannel.h b/arm7/lib/include/SND_exChannel.h new file mode 100644 index 00000000..05fbe3d7 --- /dev/null +++ b/arm7/lib/include/SND_exChannel.h @@ -0,0 +1,8 @@ +#ifndef GUARD_SND_EXCHANNEL_H +#define GUARD_SND_EXCHANNEL_H + +#include "global.h" + +bool SND_IsChannelActive(u32 idx); + +#endif //GUARD_SND_EXCHANNEL_H \ No newline at end of file diff --git a/arm7/lib/include/SND_work.h b/arm7/lib/include/SND_work.h new file mode 100644 index 00000000..9b834c6c --- /dev/null +++ b/arm7/lib/include/SND_work.h @@ -0,0 +1,4 @@ +#ifndef GUARD_SND_WORK_H +#define GUARD_SND_WORK_H + +#endif //GUARD_SND_WORK_H \ No newline at end of file diff --git a/arm9/lib/include/CARD_rom.h b/arm9/lib/include/CARD_rom.h index e72d653f..b6fca60b 100644 --- a/arm9/lib/include/CARD_rom.h +++ b/arm9/lib/include/CARD_rom.h @@ -6,6 +6,7 @@ #include "MI_dma.h" #include "CARD_common.h" #include "OS_tcm.h" +#include "mmap.h" #define CARD_ROM_PAGE_SIZE 512 diff --git a/arm9/lib/include/GX_g3x.h b/arm9/lib/include/GX_g3x.h index a0512b28..aa65a190 100644 --- a/arm9/lib/include/GX_g3x.h +++ b/arm9/lib/include/GX_g3x.h @@ -3,6 +3,8 @@ #include "fx.h" +#include "registers.h" + void GXi_NopClearFifo128_(void *reg); void G3X_Init(); void G3X_ResetMtxStack(); diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h index aa90a73c..5e21d7e6 100644 --- a/arm9/lib/include/MI_exMemory.h +++ b/arm9/lib/include/MI_exMemory.h @@ -1,7 +1,7 @@ #ifndef POKEDIAMOND_MI_EXMEMORY_H #define POKEDIAMOND_MI_EXMEMORY_H -#include "consts.h" +#include "registers.h" typedef enum { MI_PROCESSOR_ARM9 = 0, diff --git a/arm9/lib/include/OS_entropy.h b/arm9/lib/include/OS_entropy.h index b0f2781a..7c39aadd 100644 --- a/arm9/lib/include/OS_entropy.h +++ b/arm9/lib/include/OS_entropy.h @@ -5,8 +5,7 @@ #ifndef POKEDIAMOND_OS_ENTROPY_H #define POKEDIAMOND_OS_ENTROPY_H -#include "consts.h" -#include "userInfo.h" +#include "registers.h" void OS_GetLowEntropyData(u32 * arr); diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index 130ad2de..19dd0da2 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -1,7 +1,7 @@ #ifndef POKEDIAMOND_ARM9_OS_INTERRUPT_H #define POKEDIAMOND_ARM9_OS_INTERRUPT_H -#include "consts.h" +#include "registers.h" #include "nitro/OS_interrupt_shared.h" #define REG_OS_IME_IME_SHIFT 0 diff --git a/arm9/lib/include/OS_irqHandler.h b/arm9/lib/include/OS_irqHandler.h index ea12a0ad..e845298b 100644 --- a/arm9/lib/include/OS_irqHandler.h +++ b/arm9/lib/include/OS_irqHandler.h @@ -1,8 +1,8 @@ #ifndef POKEDIAMOND_OS_IRQHANDLER_H #define POKEDIAMOND_OS_IRQHANDLER_H -#include "consts.h" #include "OS_interrupt.h" +#include "mmap.h" static inline void OS_ClearIrqCheckFlag(OSIrqMask intr) { diff --git a/arm9/lib/include/OS_irqTable.h b/arm9/lib/include/OS_irqTable.h index 10165a11..ba8b45a8 100644 --- a/arm9/lib/include/OS_irqTable.h +++ b/arm9/lib/include/OS_irqTable.h @@ -1,7 +1,7 @@ #ifndef POKEDIAMOND_ARM9_OS_IRQTABLE_H #define POKEDIAMOND_ARM9_OS_IRQTABLE_H -#include "consts.h" +#include "mmap.h" #include "OS_interrupt.h" void OS_IrqDummy(void); diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h index b5d43bad..756de9fb 100644 --- a/arm9/lib/include/OS_reset.h +++ b/arm9/lib/include/OS_reset.h @@ -1,9 +1,8 @@ #ifndef POKEDIAMOND_ARM9_OS_RESET_H #define POKEDIAMOND_ARM9_OS_RESET_H -#include "consts.h" #include "nitro/OS_reset_shared.h" -#include "PXI_fifo.h" +#include "mmap.h" void OS_InitReset(void); void OS_ResetSystem(u32 parameter); diff --git a/arm9/lib/include/PAD_pad.h b/arm9/lib/include/PAD_pad.h index a4b5d570..f3de4198 100644 --- a/arm9/lib/include/PAD_pad.h +++ b/arm9/lib/include/PAD_pad.h @@ -1,7 +1,7 @@ #ifndef NITRO_PAD_PAD_H_ #define NITRO_PAD_PAD_H_ -#include "consts.h" +#include "registers.h" //================================================================================ // BUTTONS diff --git a/arm9/lib/include/SND_alarm.h b/arm9/lib/include/SND_alarm.h index cf5db862..07b77f45 100644 --- a/arm9/lib/include/SND_alarm.h +++ b/arm9/lib/include/SND_alarm.h @@ -2,24 +2,13 @@ #define GUARD_SND_ALARM_H #include "global.h" -#include "OS_alarm.h" +#include "nitro/SND_alarm_shared.h" typedef void (*SNDAlarmCallback)(void *); -struct SNDAlarm { - u8 enable; // 0x00 - u8 id; // 0x01 - u16 unk_2; // 0x02 - OSTick tick; // 0x04 - OSTick period; // 0x0C - OSAlarm alarm; // 0x14 -}; // size = 0x40 - void SND_AlarmInit(void); void SNDi_IncAlarmId(u32 idx); u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data); void SNDi_CallAlarmHandler(s32 idx); -#define SND_ALARM_COUNT 8 - #endif diff --git a/arm9/lib/include/SND_interface.h b/arm9/lib/include/SND_interface.h index bd2c3869..d0898f85 100644 --- a/arm9/lib/include/SND_interface.h +++ b/arm9/lib/include/SND_interface.h @@ -4,6 +4,7 @@ #include "global.h" #include "SND_bank.h" #include "SND_work.h" +#include "SND_alarm.h" void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData); void SND_StopSeq(s32 player); diff --git a/arm9/lib/include/SND_main.h b/arm9/lib/include/SND_main.h index e35f1ee1..8fa9364e 100644 --- a/arm9/lib/include/SND_main.h +++ b/arm9/lib/include/SND_main.h @@ -3,6 +3,8 @@ #include "global.h" +#include "nitro/SND_main_shared.h" + void SNDi_UnlockMutex(void); void SNDi_LockMutex(void); void SND_Init(void); @@ -21,165 +23,4 @@ typedef struct SNDBinaryBlockHeader { u32 size; // 0x4 } SNDBinaryBlockHeader; // size = 0x8 -struct SNDWaveParam { - u8 format; // 0x0 - u8 loopEnabled; // 0x1 - u16 samplerate; // 0x2 - u16 timer; // 0x4 - u16 loopStart; // 0x6 - u32 loopLength; // 0x8 -}; // size = 0xC - -struct SNDLfoParam { - u8 target; // 0x0 - u8 speed; // 0x1 - u8 depth; // 0x2 - u8 range; // 0x3 - u16 delay; // 0x4 -}; // size = 0x6 - -struct SNDLfo { - struct SNDLfoParam param; // 0x0 - u16 delayCounter; // 0x6 - u16 counter; // 0x8 -}; // size = 0xA - -struct SNDExChannel { - u8 id; // 0x00 - u8 type; // 0x01 - u8 envStatus; // 0x02 - - struct { - u8 active : 1; - u8 start : 1; - u8 autoSweep : 1; - u8 syncFlag : 5; - } flags; // 0x03 - - u8 panRange; // 0x04 - u8 rootMidiKey; // 0x05 - s16 userDecay2; // 0x06 - - u8 midiKey; // 0x08 - u8 velocity; // 0x09 - s8 initPan; // 0x0A - s8 userPan; // 0x0B - - s16 userDecay; // 0x0C - s16 userPitch; // 0x0E - - s32 envAttenuation; // 0x10 - s32 sweepCounter; // 0x14 - s32 sweepLength; // 0x18 - - u8 envAttack; // 0x1C - u8 envSustain; // 0x1D - u16 envDecay; // 0x1E - u16 envRelease; // 0x20 - u8 priority; // 0x22 - u8 pan; // 0x23 - u16 volume; // 0x24 - u16 timer; // 0x26 - - struct SNDLfo lfo; // 0x28 - - s16 sweepPitch; // 0x32 - - s32 length; // 0x34 - - struct SNDWaveParam waveParam; // 0x38 - - union { - const void *waveDataPtr; - u32 dutyCycle; - }; // 0x44 - - void (*callback)(struct SNDExChannel *chn, u32 status, void *userData); // 0x48 - void *callbackUserData; // 0x4C - - struct SNDExChannel *channelLLNext; // 0x50 -}; // size = 0x54 - -#define SND_TRACK_COUNT_PER_PLAYER 16 -#define SND_INVALID_TRACK_INDEX 0xFF - -struct SNDPlayer { - struct { - u8 active : 1; - u8 prepared : 1; - u8 paused : 1; - } flags; // 0x0 - - u8 playerId; // 0x1 - u8 unk_2[2]; // 0x2 - - u8 prio; // 0x4 - u8 volume; // 0x5 - s16 extFader; // 0x6 - - u8 tracks[SND_TRACK_COUNT_PER_PLAYER]; // 0x8 - - u16 tempo; // 0x18 - u16 tempoRatio; // 0x1A - u16 tempoCounter; // 0x1C - u8 unk_1E[2]; // 0x1E - - struct SNDBankData *bank; // 0x20 -}; // size = 0x24 - -#define SND_TRACK_MAX_CALL 3 - -struct SNDBankData; - -struct SNDTrack { - struct { - u8 active : 1; - u8 noteWait : 1; - u8 muted : 1; - u8 tie : 1; - u8 noteFinishWait : 1; - u8 portamento : 1; - u8 cmp : 1; // ??? - u8 channelMask : 1; - } flags; // 0x00 - - u8 panRange; // 0x01 - u16 program; // 0x02 - - u8 volume; // 0x04 - u8 expression; // 0x05 - s8 pitchBend; // 0x06 - u8 bendRange; // 0x07 - - s8 pan; // 0x08 - s8 extPan; // 0x09 - s16 extFader; // 0x0A - s16 extPitch; // 0x0C - u8 envAttack; // 0x0E - u8 envDecay; // 0x0F - u8 envSustain; // 0x10 - u8 envRelease; // 0x11 - u8 priority; // 0x12 - s8 transpose; // 0x13 - - u8 portamentoKey; // 0x14 - u8 portamentoTime; // 0x15 - s16 sweepPitch; // 0x16 - - struct SNDLfoParam mod; // 0x18 - u16 channelMask; // 0x1E - - s32 wait; // 0x20 - - const u8 *trackDataStart; // 0x24 - const u8 *trackDataPos; // 0x28 - const u8 *posCallStack[SND_TRACK_MAX_CALL]; // 0x34 - u8 loopCount[SND_TRACK_MAX_CALL]; // 0x38 - u8 callStackDepth; // 0x3B - - struct SNDExChannel *channelLLHead; // 0x3C -}; // size = 0x40 - - - #endif // GUARD_SND_MAIN_H diff --git a/arm9/lib/include/SND_work.h b/arm9/lib/include/SND_work.h index dec2bd71..a8a3d62b 100644 --- a/arm9/lib/include/SND_work.h +++ b/arm9/lib/include/SND_work.h @@ -4,31 +4,7 @@ #include "global.h" #include "SND_main.h" -#include "SND_alarm.h" - -#define SND_PLAYER_COUNT 16 -#define SND_CHANNEL_COUNT 16 -#define SND_TRACK_COUNT 32 - -struct SNDWork { - struct SNDExChannel channels[SND_CHANNEL_COUNT]; // 0x00 - struct SNDPlayer players[SND_PLAYER_COUNT]; // 0x540 - struct SNDTrack tracks[SND_TRACK_COUNT]; // 0x780 - struct SNDAlarm alarms[SND_ALARM_COUNT]; // 0xF80 -}; // size = 0x1180 - -struct SNDSharedWork { - u32 finishedCommandTag; // 0x0 - u32 playerStatus; // 0x4 - u16 channelStatus; // 0x8 - u16 captureStatus; // 0xA - u8 unk_C[0x14]; // 0xC - struct { - s16 localVars[16]; // local 0x0 - u32 tickCounter; // local 0x20 - } players[SND_PLAYER_COUNT]; // 0x20 - s16 globalVars[16]; // 0x260 -}; // size = 0x280 +#include "nitro/SND_work_shared.h" struct SNDDriverInfo { struct SNDWork work; // 0x0000 diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 1ad79b93..127339ca 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -2,9 +2,6 @@ #define POKEDIAMOND_ARM9_CONSTS_H #include "nitro/consts_shared.h" -#include "mmap.h" -#include "registers.h" -#include "systemWork.h" #define HW_C5_PERMIT_MASK 0xf diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h index 38506194..bdf49037 100644 --- a/arm9/lib/include/fx.h +++ b/arm9/lib/include/fx.h @@ -1,6 +1,8 @@ #ifndef GUARD_FX_H #define GUARD_FX_H +#include "nitro/types.h" + typedef s16 fx16; typedef s32 fx32; typedef s64 fx64; diff --git a/arm9/lib/include/systemWork.h b/arm9/lib/include/systemWork.h index b7660985..1e3ba46b 100644 --- a/arm9/lib/include/systemWork.h +++ b/arm9/lib/include/systemWork.h @@ -1,7 +1,6 @@ #ifndef POKEDIAMOND_ARM9_SYSTEMWORK_H #define POKEDIAMOND_ARM9_SYSTEMWORK_H -#include "OS_context.h" #include "nitro/OS_systemWork_shared.h" #endif //POKEDIAMOND_ARM9_SYSTEMWORK_H diff --git a/arm9/lib/src/CARD_common.c b/arm9/lib/src/CARD_common.c index f820027e..fd66c7ce 100644 --- a/arm9/lib/src/CARD_common.c +++ b/arm9/lib/src/CARD_common.c @@ -8,6 +8,7 @@ #include "OS_cache.h" #include "MB_mb.h" #include "PXI_fifo.h" +#include "mmap.h" CARDiCommon cardi_common ALIGN(32); static CARDiCommandArg cardi_arg ALIGN(32); diff --git a/arm9/lib/src/CARD_pullOut.c b/arm9/lib/src/CARD_pullOut.c index 3456df48..d5c7737f 100644 --- a/arm9/lib/src/CARD_pullOut.c +++ b/arm9/lib/src/CARD_pullOut.c @@ -8,6 +8,7 @@ #include "PAD_pad.h" #include "SPI_pm.h" #include "syscall.h" +#include "mmap.h" static CARDPulledOutCallback CARD_UserCallback; static BOOL CARDi_IsPulledOutFlag = FALSE; diff --git a/arm9/lib/src/CP_context.c b/arm9/lib/src/CP_context.c index 4e928c06..6567f516 100644 --- a/arm9/lib/src/CP_context.c +++ b/arm9/lib/src/CP_context.c @@ -1,6 +1,6 @@ #include "CP_context.h" #include "function_target.h" -#include "consts.h" +#include "registers.h" ARM_FUNC asm void CP_SaveContext(register CPContext *context) { diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c index 3d80cf24..df3ec0b6 100644 --- a/arm9/lib/src/CTRDG_common.c +++ b/arm9/lib/src/CTRDG_common.c @@ -7,6 +7,7 @@ #include "PXI_fifo.h" #include "MI_dma.h" #include "MI_memory.h" +#include "mmap.h" CTRDGWork CTRDGi_Work; diff --git a/arm9/lib/src/FX_cp.c b/arm9/lib/src/FX_cp.c index c8069146..0c5d4ff8 100644 --- a/arm9/lib/src/FX_cp.c +++ b/arm9/lib/src/FX_cp.c @@ -1,6 +1,8 @@ -#include "global.h" #include "fx.h" +#include "global.h" +#include "registers.h" + ARM_FUNC fx32 FX_Div(fx32 numerator, fx32 denominator){ FX_DivAsync(numerator, denominator); diff --git a/arm9/lib/src/FX_vec.c b/arm9/lib/src/FX_vec.c index 39dd3076..005872ac 100644 --- a/arm9/lib/src/FX_vec.c +++ b/arm9/lib/src/FX_vec.c @@ -1,6 +1,8 @@ -#include "global.h" #include "fx.h" +#include "global.h" +#include "registers.h" + ARM_FUNC void VEC_Add(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ dst->x = a->x + b->x; dst->y = a->y + b->y; diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 688e41b7..f47c0131 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -1,6 +1,9 @@ -#include "global.h" #include "gx.h" +#include "global.h" +#include "OS_spinLock.h" +#include "OS_terminate_proc.h" + u32 GXi_DmaId = 3; vu16 GXi_VRamLockId = 0; diff --git a/arm9/lib/src/MI_wram.c b/arm9/lib/src/MI_wram.c index a65bbb6f..c1433f07 100644 --- a/arm9/lib/src/MI_wram.c +++ b/arm9/lib/src/MI_wram.c @@ -1,7 +1,8 @@ -#include "function_target.h" -#include "consts.h" #include "MI_wram.h" +#include "global.h" +#include "registers.h" + ARM_FUNC void MI_SetWramBank(MIWram cnt) { reg_GX_VRAMCNT_WRAM = (u8)cnt; diff --git a/arm9/lib/src/OS_arena.c b/arm9/lib/src/OS_arena.c index df9c2fd8..de7cb9fe 100644 --- a/arm9/lib/src/OS_arena.c +++ b/arm9/lib/src/OS_arena.c @@ -1,8 +1,9 @@ -#include "function_target.h" -#include "consts.h" #include "OS_arena.h" + +#include "global.h" #include "OS_protectionRegion.h" #include "OS_emulator.h" +#include "mmap.h" static BOOL OSi_Initialized = FALSE; static BOOL OSi_MainExArenaEnabled = FALSE; diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c index b33781cc..5d466f82 100644 --- a/arm9/lib/src/OS_entropy.c +++ b/arm9/lib/src/OS_entropy.c @@ -2,10 +2,13 @@ // Created by red031000 on 2020-05-03. // -#include "function_target.h" -#include "consts.h" #include "OS_entropy.h" +#include "global.h" +#include "registers.h" +#include "systemWork.h" +#include "userInfo.h" + ARM_FUNC void OS_GetLowEntropyData(u32 * arr) { const OSSystemWork* work = OS_GetSystemWork(); diff --git a/arm9/lib/src/OS_exception.c b/arm9/lib/src/OS_exception.c index 3aaaa2f2..63cd6d58 100644 --- a/arm9/lib/src/OS_exception.c +++ b/arm9/lib/src/OS_exception.c @@ -1,6 +1,8 @@ #include "OS_exception.h" -#include "function_target.h" + +#include "global.h" #include "OS_protectionUnit.h" +#include "mmap.h" static OSiExContext OSi_ExContext; diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c index c7c0704d..699c7929 100644 --- a/arm9/lib/src/OS_interrupt.c +++ b/arm9/lib/src/OS_interrupt.c @@ -1,6 +1,8 @@ -#include "consts.h" -#include "function_target.h" #include "OS_interrupt.h" + +#include "global.h" +#include "registers.h" +#include "mmap.h" #include "OS_thread.h" #pragma optimize_for_size on diff --git a/arm9/lib/src/OS_ownerInfo.c b/arm9/lib/src/OS_ownerInfo.c index 10a638fb..6693f73f 100644 --- a/arm9/lib/src/OS_ownerInfo.c +++ b/arm9/lib/src/OS_ownerInfo.c @@ -1,5 +1,7 @@ -#include "function_target.h" #include "OS_ownerInfo.h" + +#include "global.h" +#include "systemWork.h" #include "MI_memory.h" ARM_FUNC void OS_GetMacAddress(u8 *macAddress) diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c index 45d2bb13..083f2321 100644 --- a/arm9/lib/src/OS_reset.c +++ b/arm9/lib/src/OS_reset.c @@ -1,5 +1,6 @@ -#include "function_target.h" #include "OS_reset.h" + +#include "global.h" #include "MB_mb.h" #include "OS_terminate_proc.h" #include "OS_interrupt.h" diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c index c0398be9..576e03ad 100644 --- a/arm9/lib/src/OS_spinLock.c +++ b/arm9/lib/src/OS_spinLock.c @@ -3,9 +3,10 @@ // #include "OS_spinLock.h" + #include "OS_system.h" #include "function_target.h" -#include "consts.h" +#include "mmap.h" #include "MI_exMemory.h" extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names diff --git a/arm9/lib/src/OS_thread.c b/arm9/lib/src/OS_thread.c index 35e91c22..a52b1f6d 100644 --- a/arm9/lib/src/OS_thread.c +++ b/arm9/lib/src/OS_thread.c @@ -6,7 +6,8 @@ #include "OS_system.h" #include "OS_context.h" #include "OS_terminate_proc.h" -#include "consts.h" +#include "systemWork.h" +#include "mmap.h" extern void SDK_SYS_STACKSIZE(void); extern void SDK_IRQ_STACKSIZE(void); diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c index 4ad80be5..044d960f 100644 --- a/arm9/lib/src/SND_command.c +++ b/arm9/lib/src/SND_command.c @@ -1,7 +1,10 @@ +#include "SND_alarm.h" #include "SND_command.h" #include "SND_work.h" +#include "OS_emulator.h" #include "OS_system.h" #include "OS_cache.h" +#include "PXI_fifo.h" #define SND_CMD_WAIT_QUEUE_COUNT 8 diff --git a/arm9/lib/src/custom_allocator.c b/arm9/lib/src/custom_allocator.c index 1b1375bc..283c3500 100644 --- a/arm9/lib/src/custom_allocator.c +++ b/arm9/lib/src/custom_allocator.c @@ -1,6 +1,8 @@ -#include "global.h" #include "custom_allocator.h" +#include "global.h" +#include "OS_alloc.h" + static FreeFunc sDestructor; static AllocFunc sAllocator; diff --git a/arm9/modules/21/src/mod21_02254A6C.c b/arm9/modules/21/src/mod21_02254A6C.c index 45b11873..681186f2 100644 --- a/arm9/modules/21/src/mod21_02254A6C.c +++ b/arm9/modules/21/src/mod21_02254A6C.c @@ -1,6 +1,8 @@ +#include "mod21_02254A6C.h" + #include "global.h" #include "heap.h" -#include "mod21_02254A6C.h" +#include "registers.h" #include "MI_memory.h" extern void MOD20_022536F4(u32 *param0, u32 param1); diff --git a/arm9/src/save.c b/arm9/src/save.c index 89bd8374..7eb523f6 100644 --- a/arm9/src/save.c +++ b/arm9/src/save.c @@ -3,6 +3,7 @@ #include "save_block_2.h" #include "heap.h" #include "CARD_backup.h" +#include "OS_spinLock.h" #pragma thumb on diff --git a/arm9/src/timer3.c b/arm9/src/timer3.c index d4e8f8a1..4e7b03c7 100644 --- a/arm9/src/timer3.c +++ b/arm9/src/timer3.c @@ -1,5 +1,11 @@ #include "timer3.h" +#include "OS_interrupt.h" +#include "OS_irqTable.h" +#include "OS_timer.h" +#include "OS_system.h" +#include "registers.h" + static BOOL timer3_needReset; static vu64 timer3_counter; diff --git a/include/global.h b/include/global.h index 1853dbc3..8353ed2c 100644 --- a/include/global.h +++ b/include/global.h @@ -5,7 +5,7 @@ #include "MWC_string.h" #include "function_target.h" -#include "nitro.h" +#include "nitro/types.h" #include "constants/global.h" #include "error_handling.h" diff --git a/include/heap.h b/include/heap.h index 36c747a7..57cd88e8 100644 --- a/include/heap.h +++ b/include/heap.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_HEAP_H #include "global.h" +#include "nitro/OS_arena_shared.h" #include "NNS_FND_expheap.h" #include "NNS_FND_allocator.h" diff --git a/include/nitro/OS_alarm_shared.h b/include/nitro/OS_alarm_shared.h index fe549351..1a24f139 100644 --- a/include/nitro/OS_alarm_shared.h +++ b/include/nitro/OS_alarm_shared.h @@ -15,6 +15,7 @@ #include "nitro/types.h" #include "nitro/OS_tick_shared.h" +#include "nitro/OS_thread_shared.h" typedef void (*OSAlarmHandler) (void *); diff --git a/include/nitro/OS_thread_shared.h b/include/nitro/OS_thread_shared.h index a0cce54d..0c0e7f9a 100644 --- a/include/nitro/OS_thread_shared.h +++ b/include/nitro/OS_thread_shared.h @@ -15,6 +15,9 @@ #include "nitro/types.h" +/* UGLY HACK: include proc specific header for OSContext */ +#include "OS_context.h" + typedef struct OSiAlarm OSAlarm; typedef struct _OSThread OSThread; diff --git a/include/nitro/SND_alarm_shared.h b/include/nitro/SND_alarm_shared.h new file mode 100644 index 00000000..a1e8ed9d --- /dev/null +++ b/include/nitro/SND_alarm_shared.h @@ -0,0 +1,30 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include SND_alarm.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_SND_ALARM_SHARED_H +#define POKEDIAMOND_SND_ALARM_SHARED_H + +#include "nitro/OS_tick_shared.h" +#include "nitro/OS_alarm_shared.h" + +struct SNDAlarm { + u8 enable; // 0x00 + u8 id; // 0x01 + u16 unk_2; // 0x02 + OSTick tick; // 0x04 + OSTick period; // 0x0C + OSAlarm alarm; // 0x14 +}; // size = 0x40 + +#define SND_ALARM_COUNT 8 + +#endif //POKEDIAMOND_SND_ALARM_SHARED_H diff --git a/include/nitro/SND_main_shared.h b/include/nitro/SND_main_shared.h new file mode 100644 index 00000000..d77273ed --- /dev/null +++ b/include/nitro/SND_main_shared.h @@ -0,0 +1,176 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include SND_main.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_SND_MAIN_SHARED_H +#define POKEDIAMOND_SND_MAIN_SHARED_H + +struct SNDWaveParam { + u8 format; // 0x0 + u8 loopEnabled; // 0x1 + u16 samplerate; // 0x2 + u16 timer; // 0x4 + u16 loopStart; // 0x6 + u32 loopLength; // 0x8 +}; // size = 0xC + +struct SNDLfoParam { + u8 target; // 0x0 + u8 speed; // 0x1 + u8 depth; // 0x2 + u8 range; // 0x3 + u16 delay; // 0x4 +}; // size = 0x6 + +struct SNDLfo { + struct SNDLfoParam param; // 0x0 + u16 delayCounter; // 0x6 + u16 counter; // 0x8 +}; // size = 0xA + +struct SNDExChannel { + u8 id; // 0x00 + u8 type; // 0x01 + u8 envStatus; // 0x02 + + struct { + u8 active : 1; + u8 start : 1; + u8 autoSweep : 1; + u8 syncFlag : 5; + } flags; // 0x03 + + u8 panRange; // 0x04 + u8 rootMidiKey; // 0x05 + s16 userDecay2; // 0x06 + + u8 midiKey; // 0x08 + u8 velocity; // 0x09 + s8 initPan; // 0x0A + s8 userPan; // 0x0B + + s16 userDecay; // 0x0C + s16 userPitch; // 0x0E + + s32 envAttenuation; // 0x10 + s32 sweepCounter; // 0x14 + s32 sweepLength; // 0x18 + + u8 envAttack; // 0x1C + u8 envSustain; // 0x1D + u16 envDecay; // 0x1E + u16 envRelease; // 0x20 + u8 priority; // 0x22 + u8 pan; // 0x23 + u16 volume; // 0x24 + u16 timer; // 0x26 + + struct SNDLfo lfo; // 0x28 + + s16 sweepPitch; // 0x32 + + s32 length; // 0x34 + + struct SNDWaveParam waveParam; // 0x38 + + union { + const void *waveDataPtr; + u32 dutyCycle; + }; // 0x44 + + void (*callback)(struct SNDExChannel *chn, u32 status, void *userData); // 0x48 + void *callbackUserData; // 0x4C + + struct SNDExChannel *channelLLNext; // 0x50 +}; // size = 0x54 + +#define SND_TRACK_COUNT_PER_PLAYER 16 +#define SND_INVALID_TRACK_INDEX 0xFF + +struct SNDBankData; + +struct SNDPlayer { + struct { + u8 active : 1; + u8 prepared : 1; + u8 paused : 1; + } flags; // 0x0 + + u8 playerId; // 0x1 + u8 unk_2[2]; // 0x2 + + u8 prio; // 0x4 + u8 volume; // 0x5 + s16 extFader; // 0x6 + + u8 tracks[SND_TRACK_COUNT_PER_PLAYER]; // 0x8 + + u16 tempo; // 0x18 + u16 tempoRatio; // 0x1A + u16 tempoCounter; // 0x1C + u8 unk_1E[2]; // 0x1E + + struct SNDBankData *bank; // 0x20 +}; // size = 0x24 + +#define SND_TRACK_MAX_CALL 3 + +struct SNDTrack { + struct { + u8 active : 1; + u8 noteWait : 1; + u8 muted : 1; + u8 tie : 1; + u8 noteFinishWait : 1; + u8 portamento : 1; + u8 cmp : 1; // ??? + u8 channelMask : 1; + } flags; // 0x00 + + u8 panRange; // 0x01 + u16 program; // 0x02 + + u8 volume; // 0x04 + u8 expression; // 0x05 + s8 pitchBend; // 0x06 + u8 bendRange; // 0x07 + + s8 pan; // 0x08 + s8 extPan; // 0x09 + s16 extFader; // 0x0A + s16 extPitch; // 0x0C + u8 envAttack; // 0x0E + u8 envDecay; // 0x0F + u8 envSustain; // 0x10 + u8 envRelease; // 0x11 + u8 priority; // 0x12 + s8 transpose; // 0x13 + + u8 portamentoKey; // 0x14 + u8 portamentoTime; // 0x15 + s16 sweepPitch; // 0x16 + + struct SNDLfoParam mod; // 0x18 + u16 channelMask; // 0x1E + + s32 wait; // 0x20 + + const u8 *trackDataStart; // 0x24 + const u8 *trackDataPos; // 0x28 + const u8 *posCallStack[SND_TRACK_MAX_CALL]; // 0x34 + u8 loopCount[SND_TRACK_MAX_CALL]; // 0x38 + u8 callStackDepth; // 0x3B + + struct SNDExChannel *channelLLHead; // 0x3C +}; // size = 0x40 + + #endif //POKEDIAMOND_SND_MAIN_SHARED_H + \ No newline at end of file diff --git a/include/nitro/SND_work_shared.h b/include/nitro/SND_work_shared.h new file mode 100644 index 00000000..0de3981e --- /dev/null +++ b/include/nitro/SND_work_shared.h @@ -0,0 +1,46 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include SND_work.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_SND_WORK_SHARED_H +#define POKEDIAMOND_SND_WORK_SHARED_H + +#include "nitro/SND_alarm_shared.h" +#include "nitro/SND_main_shared.h" + +#define SND_PLAYER_COUNT 16 +#define SND_CHANNEL_COUNT 16 +#define SND_TRACK_COUNT 32 + +struct SNDWork { + struct SNDExChannel channels[SND_CHANNEL_COUNT]; // 0x00 + struct SNDPlayer players[SND_PLAYER_COUNT]; // 0x540 + struct SNDTrack tracks[SND_TRACK_COUNT]; // 0x780 + struct SNDAlarm alarms[SND_ALARM_COUNT]; // 0xF80 +}; // size = 0x1180 + +struct SNDSharedWork { + u32 finishedCommandTag; // 0x0 + u32 playerStatus; // 0x4 + u16 channelStatus; // 0x8 + u16 captureStatus; // 0xA + u8 unk_C[0x14]; // 0xC + struct { + s16 localVars[16]; // local 0x0 + u32 tickCounter; // local 0x20 + } players[SND_PLAYER_COUNT]; // 0x20 + s16 globalVars[16]; // 0x260 +}; // size = 0x280 + +extern struct SNDWork SNDi_Work; +extern struct SNDSharedWork *SNDi_SharedWork; + + #endif //POKEDIAMOND_SND_WORK_SHARED_H -- cgit v1.2.3 From 7897c7e2946a008098d9e1cc7209bcfd00e43d8a Mon Sep 17 00:00:00 2001 From: GliMusings Date: Fri, 25 Jun 2021 21:17:19 -0500 Subject: Not yet matching, 3 registers rotated in FUN_0201C70C --- arm9/src/unk_0201C6B4.c | 60 ++++++++++++++++++++++++++----------------------- include/unk_0201C6B4.h | 4 ++-- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c index 95a301d6..673866f2 100644 --- a/arm9/src/unk_0201C6B4.c +++ b/arm9/src/unk_0201C6B4.c @@ -1,10 +1,9 @@ #include "global.h" -#include "proto.h" #include "unk_0201C6B4.h" -THUMB_FUNC u32 FUN_0201C6B4(s8 * r0) +THUMB_FUNC int FUN_0201C6B4(s8 * r0) { - u32 r2 = 0; + int r2 = 0; while(r0[r2] != 0) { r2++; @@ -14,56 +13,61 @@ THUMB_FUNC u32 FUN_0201C6B4(s8 * r0) THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) { - for(u8 r3 = 0; r3 < 256; r3++) - { + for(int r3 = 0; r3 < 256; r3++) // _0201C6FE jumps to conditional + { // _0201C6D0 r1[r3] = r0[r3]; - if(r2 == r0[r3] || r0[r3] != 0) - { + if(r2 == r0[r3] || r0[r3] == 0) + { // _0201C6DE r1[r3] = 0; - if(r2 == 13 | r0[r3 + 1] == 10) - { - return r0 + r3 + 1; - } - return r0 + r3 + 2; + if(r2 == 13 && r0[r3 + 1] == 10) + { // _0201C6F6 + return (s8 *)((s32)(r0) + (r3 + 2)); + } // _0201C6DE + 44 + return (s8 *)((s32)(r0) + (r3 + 1)); } } return NULL; } -THUMB_FUNC s32 FUN_0201C70C(s8 * r4) +THUMB_FUNC int FUN_0201C70C(s8 * r4) { + s32 unk0 = FUN_0201C6B4(r4); u32 r5 = 1; s32 r6 = 0; - for(u32 r3 = FUN_0201C6B4(r4) - 1; r3 >= 0; r3--) + unk0--; + for(s32 r3 = unk0; r3 >= 0; r3--) { - if(r4[r3] < 48 || r4[r3] > 57) + if(r4[r3] >= 0x30 && r4[r3] <= 0x39) + { + r6 += ((r4[r3] - 0x30) * r5); + } + else { if(r3 == 0) { - return 0; + if(r4[r3] == 0x2d) + { + r6 *= -1; + } } - if(r4[r3] == 45) + else { - r6 = r6 * -1; + return -1; } } - else - { - r6 += ((r4[r3] - 48) * r5); - } - r5 = r5 * 10; + r5 *= 10; } return r6; } THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) { - for(u32 r2 = 0; r2 < 4; r2++) + for(u8 r2 = 0; r2 < 4; r2++) { - r5[r2 << 2] = 0; + ((s32*)(r5))[r2] = 0; } - u32 r0 = FUN_0201C6B4(r4); - for(u32 r2 = 0; r2 < r0; r2++) + u8 r0 = (u8)(FUN_0201C6B4(r4)); + for(u8 r2 = 0; r2 < r0; r2++) { r5[r2] = r4[r2]; } @@ -71,5 +75,5 @@ THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) THUMB_FUNC BOOL FUN_0201C78C(u32 r0) { - return r0 > 289; + return r0 < 289; } \ No newline at end of file diff --git a/include/unk_0201C6B4.h b/include/unk_0201C6B4.h index 956f7bc2..fdd66597 100644 --- a/include/unk_0201C6B4.h +++ b/include/unk_0201C6B4.h @@ -1,9 +1,9 @@ #ifndef POKEDIAMOND_UNK_0201C6B4_H #define POKEDIAMOND_UNK_0201C6B4_H -u32 FUN_0201C6B4(s8 * r0); +int FUN_0201C6B4(s8 * r0); s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2); -s32 FUN_0201C70C(s8 * r4); +int FUN_0201C70C(s8 * r4); void FUN_0201C750(s8 * r5, s8 * r4); BOOL FUN_0201C78C(u32 r0); -- cgit v1.2.3 From f97bb6e31678d2455999873e14c5a60530f74adb Mon Sep 17 00:00:00 2001 From: GliMusings Date: Fri, 25 Jun 2021 23:40:07 -0500 Subject: OK --- arm9/src/unk_0201C6B4.c | 22 +++++++++++----------- include/unk_0201C6B4.h | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c index 673866f2..45001877 100644 --- a/arm9/src/unk_0201C6B4.c +++ b/arm9/src/unk_0201C6B4.c @@ -1,9 +1,9 @@ #include "global.h" #include "unk_0201C6B4.h" -THUMB_FUNC int FUN_0201C6B4(s8 * r0) +THUMB_FUNC s32 FUN_0201C6B4(s8 * r0) { - int r2 = 0; + s32 r2 = 0; while(r0[r2] != 0) { r2++; @@ -13,29 +13,29 @@ THUMB_FUNC int FUN_0201C6B4(s8 * r0) THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) { - for(int r3 = 0; r3 < 256; r3++) // _0201C6FE jumps to conditional - { // _0201C6D0 + for(int r3 = 0; r3 < 256; r3++) + { r1[r3] = r0[r3]; if(r2 == r0[r3] || r0[r3] == 0) - { // _0201C6DE + { r1[r3] = 0; if(r2 == 13 && r0[r3 + 1] == 10) - { // _0201C6F6 + { return (s8 *)((s32)(r0) + (r3 + 2)); - } // _0201C6DE + 44 + } return (s8 *)((s32)(r0) + (r3 + 1)); } } return NULL; } -THUMB_FUNC int FUN_0201C70C(s8 * r4) +THUMB_FUNC s32 FUN_0201C70C(s8 * r4) { s32 unk0 = FUN_0201C6B4(r4); - u32 r5 = 1; + s32 r3; + s32 r5 = 1; s32 r6 = 0; - unk0--; - for(s32 r3 = unk0; r3 >= 0; r3--) + for(r3 = unk0 - 1; r3 >= 0; r3--) { if(r4[r3] >= 0x30 && r4[r3] <= 0x39) { diff --git a/include/unk_0201C6B4.h b/include/unk_0201C6B4.h index fdd66597..c5657388 100644 --- a/include/unk_0201C6B4.h +++ b/include/unk_0201C6B4.h @@ -1,9 +1,9 @@ #ifndef POKEDIAMOND_UNK_0201C6B4_H #define POKEDIAMOND_UNK_0201C6B4_H -int FUN_0201C6B4(s8 * r0); +s32 FUN_0201C6B4(s8 * r0); s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2); -int FUN_0201C70C(s8 * r4); +s32 FUN_0201C70C(s8 * r4); void FUN_0201C750(s8 * r5, s8 * r4); BOOL FUN_0201C78C(u32 r0); -- cgit v1.2.3 From 8d466f9e243e6c5616d298f20aed3011905174e5 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Fri, 25 Jun 2021 23:56:40 -0500 Subject: make pretty --- arm9/src/unk_0201C6B4.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c index 45001877..d251639d 100644 --- a/arm9/src/unk_0201C6B4.c +++ b/arm9/src/unk_0201C6B4.c @@ -13,17 +13,17 @@ THUMB_FUNC s32 FUN_0201C6B4(s8 * r0) THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2) { - for(int r3 = 0; r3 < 256; r3++) + for(int r3 = 0; r3 < 0x100; r3++) { r1[r3] = r0[r3]; if(r2 == r0[r3] || r0[r3] == 0) { r1[r3] = 0; - if(r2 == 13 && r0[r3 + 1] == 10) + if(r2 == 0xd && r0[r3 + 1] == 0xa) { - return (s8 *)((s32)(r0) + (r3 + 2)); + return &r0[r3 + 2]; } - return (s8 *)((s32)(r0) + (r3 + 1)); + return &r0[r3 + 1]; } } return NULL; @@ -39,7 +39,7 @@ THUMB_FUNC s32 FUN_0201C70C(s8 * r4) { if(r4[r3] >= 0x30 && r4[r3] <= 0x39) { - r6 += ((r4[r3] - 0x30) * r5); + r6 += (r4[r3] - 0x30) * r5; } else { @@ -55,7 +55,7 @@ THUMB_FUNC s32 FUN_0201C70C(s8 * r4) return -1; } } - r5 *= 10; + r5 *= 0xa; } return r6; } @@ -64,7 +64,8 @@ THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) { for(u8 r2 = 0; r2 < 4; r2++) { - ((s32*)(r5))[r2] = 0; + s32 * unk5 = (s32 *)r5; + unk5[r2] = 0; } u8 r0 = (u8)(FUN_0201C6B4(r4)); for(u8 r2 = 0; r2 < r0; r2++) @@ -75,5 +76,5 @@ THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) THUMB_FUNC BOOL FUN_0201C78C(u32 r0) { - return r0 < 289; + return r0 < 0x121; } \ No newline at end of file -- cgit v1.2.3 From a1b1d3b47fb5b2fbdedd164bcdf5844fab6f9d3a Mon Sep 17 00:00:00 2001 From: GliMusings Date: Sat, 26 Jun 2021 00:05:23 -0500 Subject: Forget newlines --- arm9/src/unk_0201C6B4.c | 2 +- include/unk_0201C6B4.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arm9/src/unk_0201C6B4.c b/arm9/src/unk_0201C6B4.c index d251639d..151a9cd6 100644 --- a/arm9/src/unk_0201C6B4.c +++ b/arm9/src/unk_0201C6B4.c @@ -77,4 +77,4 @@ THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4) THUMB_FUNC BOOL FUN_0201C78C(u32 r0) { return r0 < 0x121; -} \ No newline at end of file +} diff --git a/include/unk_0201C6B4.h b/include/unk_0201C6B4.h index c5657388..0a501954 100644 --- a/include/unk_0201C6B4.h +++ b/include/unk_0201C6B4.h @@ -7,4 +7,4 @@ s32 FUN_0201C70C(s8 * r4); void FUN_0201C750(s8 * r5, s8 * r4); BOOL FUN_0201C78C(u32 r0); -#endif // POKEDIAMOND_UNK_0201C6B4_H \ No newline at end of file +#endif // POKEDIAMOND_UNK_0201C6B4_H -- cgit v1.2.3 From b27aae4db38ab23353ce64eb420b8e287c70032d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 09:12:49 +0200 Subject: decompile unk_020030E8.s --- arm9/asm/unk_020030E8.s | 1424 ----------------------------------------------- arm9/src/unk_020030E8.c | 708 +++++++++++++++++++++++ include/unk_02002F08.h | 69 ++- include/unk_020030E8.h | 32 ++ 4 files changed, 793 insertions(+), 1440 deletions(-) delete mode 100644 arm9/asm/unk_020030E8.s create mode 100644 arm9/src/unk_020030E8.c create mode 100644 include/unk_020030E8.h diff --git a/arm9/asm/unk_020030E8.s b/arm9/asm/unk_020030E8.s deleted file mode 100644 index d304b14a..00000000 --- a/arm9/asm/unk_020030E8.s +++ /dev/null @@ -1,1424 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .text - - thumb_func_start FUN_02003108 -FUN_02003108: ; 0x02003108 - push {r3-r7, lr} - add r4, r1, #0x0 - mov r1, #0x14 - add r6, r0, #0x0 - mul r1, r4 - add r5, r2, #0x0 - add r1, r6, r1 - add r7, r3, #0x0 - lsl r0, r5, #0x1 - ldr r1, [r1, #0x8] - add r0, r7, r0 - cmp r0, r1 - bls _02003126 - bl GF_AssertFail -_02003126: - cmp r4, #0x3 - bhi _0200315E - add r0, r4, r4 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02003136: ; jump table (using 16-bit offset) - .short _0200313E - _02003136 - 2; case 0 - .short _02003146 - _02003136 - 2; case 1 - .short _0200314E - _02003136 - 2; case 2 - .short _02003156 - _02003136 - 2; case 3 -_0200313E: - bl FUN_020222E8 - add r1, r0, #0x0 - b _02003164 -_02003146: - bl FUN_020222F8 - add r1, r0, #0x0 - b _02003164 -_0200314E: - bl FUN_02022308 - add r1, r0, #0x0 - b _02003164 -_02003156: - bl FUN_02022310 - add r1, r0, #0x0 - b _02003164 -_0200315E: - bl GF_AssertFail - pop {r3-r7, pc} -_02003164: - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - lsl r2, r5, #0x1 - str r0, [sp, #0x0] - add r1, r1, r2 - add r0, r6, #0x0 - add r2, r4, #0x0 - add r3, r5, #0x0 - bl FUN_02003054 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_0200317C -FUN_0200317C: ; 0x0200317C - push {r3-r5, lr} - add r4, r2, #0x0 - add r5, r3, #0x0 - add r2, sp, #0x0 - add r3, r4, #0x0 - bl GfGfxLoader_GetPlttData - add r4, r0, #0x0 - bne _02003192 - bl GF_AssertFail -_02003192: - cmp r5, #0x0 - bne _0200319A - ldr r0, [sp, #0x0] - ldr r5, [r0, #0x8] -_0200319A: - ldr r0, [sp, #0x0] - add r2, r5, #0x0 - ldr r1, [r0, #0xc] - add r0, sp, #0x0 - ldrh r0, [r0, #0x10] - lsl r0, r0, #0x1 - add r0, r1, r0 - ldr r1, [sp, #0x14] - bl MIi_CpuCopy16 - add r0, r4, #0x0 - bl FreeToHeap - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020031B8 -FUN_020031B8: ; 0x020031B8 - push {r3-r7, lr} - sub sp, #0x8 - add r4, sp, #0x10 - add r5, r0, #0x0 - add r0, r1, #0x0 - ldrh r1, [r4, #0x14] - add r6, r3, #0x0 - str r1, [sp, #0x0] - ldrh r1, [r4, #0x10] - lsl r4, r2, #0x1 - ldr r2, [sp, #0x0] - lsl r7, r1, #0x1 - mov r1, #0x14 - mul r6, r1 - mul r1, r0 - ldr r0, [r5, r1] - str r1, [sp, #0x4] - ldr r1, [r5, r6] - add r0, r0, r4 - add r1, r1, r7 - bl MIi_CpuCopy16 - ldr r0, [sp, #0x4] - add r1, r5, r6 - ldr r0, [r5, r0] - ldr r1, [r1, #0x4] - ldr r2, [sp, #0x0] - add r0, r0, r4 - add r1, r1, r7 - bl MIi_CpuCopy16 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_020031FC -FUN_020031FC: ; 0x020031FC - mov r2, #0x14 - mul r2, r1 - ldr r0, [r0, r2] - bx lr - - thumb_func_start FUN_02003204 -FUN_02003204: ; 0x02003204 - mov r2, #0x14 - mul r2, r1 - add r0, r0, r2 - ldr r0, [r0, #0x4] - bx lr - .balign 4 - - thumb_func_start FUN_02003210 -FUN_02003210: ; 0x02003210 - push {r0-r3} - push {r3-r7, lr} - sub sp, #0x10 - str r3, [sp, #0x8] - add r5, r0, #0x0 - ldr r0, [sp, #0x38] - mov r6, #0x0 - str r0, [sp, #0x38] - ldr r0, [sp, #0x3c] - add r7, r1, #0x0 - str r0, [sp, #0x3c] - ldr r0, [sp, #0x40] - add r4, r6, #0x0 - str r0, [sp, #0x40] - add r0, sp, #0x28 - ldrh r0, [r0, #0x8] - str r0, [sp, #0xc] -_02003232: - add r0, r7, #0x0 - add r1, r4, #0x0 - bl FUN_02003314 - cmp r0, #0x1 - bne _020032A6 - mov r0, #0x46 - lsl r0, r0, #0x2 - ldrh r0, [r5, r0] - add r1, r4, #0x0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x12 - bl FUN_02003314 - cmp r0, #0x0 - bne _020032A6 - mov r0, #0x14 - add r6, r4, #0x0 - mul r6, r0 - add r0, r4, #0x0 - add r1, r5, r6 - add r2, sp, #0x30 - bl FUN_02003368 - ldr r0, [sp, #0x3c] - add r1, sp, #0x28 - str r0, [sp, #0x0] - ldr r0, [sp, #0x40] - str r0, [sp, #0x4] - add r0, r5, r6 - ldrh r1, [r1, #0x8] - ldr r2, [sp, #0x8] - ldr r3, [sp, #0x38] - add r0, #0xc - bl FUN_020033A4 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_02003328 - cmp r4, #0x4 - blo _02003294 - mov r2, #0x1 - add r0, r5, #0x0 - add r1, r4, #0x0 - lsl r2, r2, #0x8 - bl FUN_0200359C - b _0200329E -_02003294: - add r0, r5, #0x0 - add r1, r4, #0x0 - mov r2, #0x10 - bl FUN_0200359C -_0200329E: - ldr r1, [sp, #0xc] - add r0, sp, #0x28 - strh r1, [r0, #0x8] - mov r6, #0x1 -_020032A6: - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0xe - blo _02003232 - cmp r6, #0x1 - bne _02003300 - mov r0, #0x46 - lsl r0, r0, #0x2 - ldrh r2, [r5, r0] - ldr r1, _0200330C ; =0xFFFF0003 - and r1, r2 - lsl r2, r2, #0x10 - lsr r2, r2, #0x12 - orr r2, r7 - lsl r2, r2, #0x12 - lsr r2, r2, #0x10 - orr r1, r2 - strh r1, [r5, r0] - add r1, r0, #0x2 - ldrh r1, [r5, r1] - lsl r1, r1, #0x11 - lsr r1, r1, #0x1f - bne _02003300 - add r1, r0, #0x2 - ldrh r2, [r5, r1] - mov r1, #0x1 - lsl r1, r1, #0xe - orr r2, r1 - add r1, r0, #0x2 - strh r2, [r5, r1] - ldrh r2, [r5, r0] - mov r1, #0x3 - bic r2, r1 - mov r1, #0x1 - orr r1, r2 - strh r1, [r5, r0] - mov r2, #0x0 - add r0, r0, #0x4 - strb r2, [r5, r0] - ldr r0, _02003310 ; =FUN_02003464 - add r1, r5, #0x0 - sub r2, r2, #0x2 - bl FUN_0200CA44 -_02003300: - add r0, r6, #0x0 - add sp, #0x10 - pop {r3-r7} - pop {r3} - add sp, #0x10 - bx r3 - .balign 4 -_0200330C: .word 0xFFFF0003 -_02003310: .word FUN_02003464 - - thumb_func_start FUN_02003314 -FUN_02003314: ; 0x02003314 - mov r3, #0x1 - add r2, r3, #0x0 - lsl r2, r1 - tst r0, r2 - bne _02003320 - mov r3, #0x0 -_02003320: - lsl r0, r3, #0x18 - lsr r0, r0, #0x18 - bx lr - .balign 4 - - thumb_func_start FUN_02003328 -FUN_02003328: ; 0x02003328 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, _02003360 ; =0x0000011A - add r4, r1, #0x0 - ldrh r0, [r5, r0] - lsl r0, r0, #0x12 - lsr r0, r0, #0x12 - bl FUN_02003314 - cmp r0, #0x1 - beq _0200335E - ldr r3, _02003360 ; =0x0000011A - ldr r1, _02003364 ; =0xFFFFC000 - ldrh r2, [r5, r3] - add r0, r2, #0x0 - lsl r2, r2, #0x12 - lsr r6, r2, #0x12 - mov r2, #0x1 - lsl r2, r4 - orr r2, r6 - lsl r2, r2, #0x10 - and r0, r1 - lsr r2, r2, #0x10 - lsr r1, r1, #0x12 - and r1, r2 - orr r0, r1 - strh r0, [r5, r3] -_0200335E: - pop {r4-r6, pc} - .balign 4 -_02003360: .word 0x0000011A -_02003364: .word 0xFFFFC000 - - thumb_func_start FUN_02003368 -FUN_02003368: ; 0x02003368 - push {r4-r5} - cmp r0, #0x4 - ldr r0, [r1, #0x8] - bge _02003374 - lsl r0, r0, #0x13 - b _02003378 -_02003374: - lsr r0, r0, #0x9 - lsl r0, r0, #0x18 -_02003378: - mov r4, #0x0 - lsr r0, r0, #0x18 - add r5, r4, #0x0 - cmp r0, #0x0 - bls _02003398 - mov r3, #0x1 -_02003384: - add r1, r3, #0x0 - lsl r1, r5 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - add r1, r5, #0x1 - lsl r1, r1, #0x18 - lsr r5, r1, #0x18 - cmp r5, r0 - blo _02003384 -_02003398: - ldrh r0, [r2, #0x0] - and r0, r4 - strh r0, [r2, #0x0] - pop {r4-r5} - bx lr - .balign 4 - - thumb_func_start FUN_020033A4 -FUN_020033A4: ; 0x020033A4 - push {r4-r6, lr} - add r5, r0, #0x0 - add r6, r1, #0x0 - add r4, r3, #0x0 - cmp r2, #0x0 - bge _020033D4 - add r0, r2, #0x0 - bl abs - add r0, r0, #0x2 - ldrh r1, [r5, #0x6] - mov r2, #0xf - lsl r0, r0, #0x10 - bic r1, r2 - lsr r2, r0, #0x10 - mov r0, #0xf - and r0, r2 - orr r0, r1 - strh r0, [r5, #0x6] - ldrh r1, [r5, #0x2] - mov r0, #0x3f - bic r1, r0 - strh r1, [r5, #0x2] - b _020033F2 -_020033D4: - ldrh r1, [r5, #0x6] - mov r0, #0xf - bic r1, r0 - mov r0, #0x2 - orr r0, r1 - strh r0, [r5, #0x6] - ldrh r0, [r5, #0x2] - mov r1, #0x3f - bic r0, r1 - lsl r1, r2, #0x10 - lsr r2, r1, #0x10 - mov r1, #0x3f - and r1, r2 - orr r0, r1 - strh r0, [r5, #0x2] -_020033F2: - strh r6, [r5, #0x0] - ldrh r1, [r5, #0x2] - ldr r0, _02003454 ; =0xFFFFF83F - add r3, sp, #0x0 - and r1, r0 - lsl r0, r4, #0x1b - lsr r0, r0, #0x15 - orr r0, r1 - strh r0, [r5, #0x2] - ldrh r1, [r5, #0x2] - ldr r0, _02003458 ; =0xFFFF07FF - add r2, r1, #0x0 - ldrb r1, [r3, #0x10] - and r2, r0 - lsl r0, r1, #0x1b - lsr r0, r0, #0x10 - orr r0, r2 - strh r0, [r5, #0x2] - ldrh r0, [r5, #0x4] - ldr r2, _0200345C ; =0xFFFF8000 - ldrh r6, [r3, #0x14] - lsr r3, r2, #0x11 - and r0, r2 - and r3, r6 - orr r0, r3 - strh r0, [r5, #0x4] - ldrh r3, [r5, #0x6] - ldr r0, _02003460 ; =0xFFFFFC0F - and r0, r3 - ldrh r3, [r5, #0x2] - lsl r3, r3, #0x1a - lsr r3, r3, #0x1a - lsl r3, r3, #0x1a - lsr r3, r3, #0x16 - orr r0, r3 - strh r0, [r5, #0x6] - cmp r4, r1 - ldrh r1, [r5, #0x4] - bhs _02003448 - sub r0, r2, #0x1 - and r0, r1 - strh r0, [r5, #0x4] - pop {r4-r6, pc} -_02003448: - mov r0, #0x2 - lsl r0, r0, #0xe - orr r0, r1 - strh r0, [r5, #0x4] - pop {r4-r6, pc} - nop -_02003454: .word 0xFFFFF83F -_02003458: .word 0xFFFF07FF -_0200345C: .word 0xFFFF8000 -_02003460: .word 0xFFFFFC0F - - thumb_func_start FUN_02003464 -FUN_02003464: ; 0x02003464 - push {r4-r6, lr} - add r4, r1, #0x0 - mov r1, #0x47 - lsl r1, r1, #0x2 - ldrb r2, [r4, r1] - add r5, r0, #0x0 - cmp r2, #0x1 - bne _020034A4 - mov r2, #0x0 - strb r2, [r4, r1] - sub r2, r1, #0x2 - ldrh r3, [r4, r2] - ldr r2, _020034F4 ; =0xFFFFC000 - add r5, r3, #0x0 - and r5, r2 - sub r3, r1, #0x2 - strh r5, [r4, r3] - sub r3, r1, #0x4 - ldrh r5, [r4, r3] - ldr r3, _020034F8 ; =0xFFFF0003 - sub r2, r2, #0x1 - and r5, r3 - sub r3, r1, #0x4 - strh r5, [r4, r3] - sub r3, r1, #0x2 - ldrh r3, [r4, r3] - sub r1, r1, #0x2 - and r2, r3 - strh r2, [r4, r1] - bl FUN_0200CAB4 - pop {r4-r6, pc} -_020034A4: - sub r0, r1, #0x4 - ldrh r2, [r4, r0] - lsl r0, r2, #0x1e - lsr r0, r0, #0x1e - cmp r0, #0x1 - bne _020034F0 - sub r0, r1, #0x2 - ldrh r0, [r4, r0] - ldr r3, _020034F4 ; =0xFFFFC000 - lsl r2, r2, #0x10 - lsr r6, r2, #0x12 - lsr r2, r3, #0x12 - and r0, r3 - and r2, r6 - orr r2, r0 - sub r0, r1, #0x2 - strh r2, [r4, r0] - add r0, r4, #0x0 - bl FUN_02003500 - add r0, r4, #0x0 - bl FUN_02003520 - mov r1, #0x46 - lsl r1, r1, #0x2 - ldrh r0, [r4, r1] - lsl r0, r0, #0x10 - lsr r0, r0, #0x12 - bne _020034F0 - add r0, r1, #0x2 - ldrh r2, [r4, r0] - ldr r0, _020034FC ; =0xFFFFBFFF - and r2, r0 - add r0, r1, #0x2 - strh r2, [r4, r0] - add r0, r5, #0x0 - bl FUN_0200CAB4 -_020034F0: - pop {r4-r6, pc} - nop -_020034F4: .word 0xFFFFC000 -_020034F8: .word 0xFFFF0003 -_020034FC: .word 0xFFFFBFFF - - thumb_func_start FUN_02003500 -FUN_02003500: ; 0x02003500 - push {r4-r6, lr} - add r5, r0, #0x0 - mov r4, #0x0 - mov r6, #0x10 -_02003508: - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02003540 - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x4 - blo _02003508 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02003520 -FUN_02003520: ; 0x02003520 - push {r4-r6, lr} - mov r4, #0x4 - add r6, r4, #0x0 - add r5, r0, #0x0 - add r6, #0xfc -_0200352A: - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02003540 - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0xe - blo _0200352A - pop {r4-r6, pc} - - thumb_func_start FUN_02003540 -FUN_02003540: ; 0x02003540 - push {r4-r6, lr} - add r5, r0, #0x0 - mov r0, #0x46 - lsl r0, r0, #0x2 - ldrh r0, [r5, r0] - add r4, r1, #0x0 - add r6, r2, #0x0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x12 - bl FUN_02003314 - cmp r0, #0x0 - beq _02003594 - mov r0, #0x14 - mul r0, r4 - add r2, r5, r0 - ldrh r0, [r2, #0x12] - ldrh r3, [r2, #0xe] - lsl r1, r0, #0x16 - lsl r3, r3, #0x1a - lsr r1, r1, #0x1a - lsr r3, r3, #0x1a - cmp r1, r3 - bhs _02003584 - ldr r3, _02003598 ; =0xFFFFFC0F - and r3, r0 - add r0, r1, #0x1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1a - lsr r0, r0, #0x16 - orr r0, r3 - strh r0, [r2, #0x12] - pop {r4-r6, pc} -_02003584: - ldr r1, _02003598 ; =0xFFFFFC0F - and r0, r1 - strh r0, [r2, #0x12] - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_0200359C -_02003594: - pop {r4-r6, pc} - nop -_02003598: .word 0xFFFFFC0F - - thumb_func_start FUN_0200359C -FUN_0200359C: ; 0x0200359C - push {r4-r7, lr} - sub sp, #0xc - str r1, [sp, #0x4] - str r0, [sp, #0x0] - ldr r0, [sp, #0x4] - mov r1, #0x14 - mul r1, r0 - ldr r0, [sp, #0x0] - mov r6, #0x0 - add r5, r0, r1 - add r0, r5, #0x0 - str r0, [sp, #0x8] - add r0, #0xc - add r7, r2, #0x0 - add r4, r6, #0x0 - str r0, [sp, #0x8] -_020035BC: - ldrh r0, [r5, #0xc] - lsl r1, r6, #0x10 - lsr r1, r1, #0x10 - bl FUN_02003314 - cmp r0, #0x0 - beq _020035DC - ldr r0, [r5, #0x0] - lsl r1, r4, #0x1 - ldr r2, [r5, #0x4] - add r0, r0, r1 - add r1, r2, r1 - ldr r2, [sp, #0x8] - add r3, r7, #0x0 - bl FUN_020035F8 -_020035DC: - add r6, r6, #0x1 - add r4, r4, r7 - cmp r6, #0x10 - blo _020035BC - ldr r1, [sp, #0x4] - add r5, #0xc - lsl r1, r1, #0x18 - ldr r0, [sp, #0x0] - lsr r1, r1, #0x18 - add r2, r5, #0x0 - bl FUN_02003684 - add sp, #0xc - pop {r4-r7, pc} - - thumb_func_start FUN_020035F8 -FUN_020035F8: ; 0x020035F8 - push {r3-r7, lr} - sub sp, #0x8 - str r0, [sp, #0x4] - mov r0, #0x0 - add r6, r1, #0x0 - mov r12, r0 - str r2, [sp, #0x0] - mov lr, r3 - add r0, r3, #0x0 - beq _02003680 -_0200360C: - ldr r0, [sp, #0x4] - mov r1, #0x1f - ldrh r0, [r0, #0x0] - asr r2, r0, #0x5 - add r5, r2, #0x0 - and r5, r1 - ldr r1, [sp, #0x0] - asr r4, r0, #0xa - ldrh r1, [r1, #0x4] - lsl r1, r1, #0x11 - lsr r3, r1, #0x11 - ldr r1, [sp, #0x0] - ldrh r1, [r1, #0x2] - lsl r1, r1, #0x15 - lsr r2, r1, #0x1b - mov r1, #0x1f - and r1, r4 - mov r4, #0x1f - and r0, r4 - and r4, r3 - sub r4, r4, r0 - mul r4, r2 - asr r4, r4, #0x4 - add r0, r0, r4 - lsl r0, r0, #0x18 - lsr r7, r0, #0x18 - asr r4, r3, #0xa - mov r0, #0x1f - and r0, r4 - sub r0, r0, r1 - mul r0, r2 - asr r0, r0, #0x4 - add r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - asr r3, r3, #0x5 - mov r1, #0x1f - and r1, r3 - sub r1, r1, r5 - mul r1, r2 - asr r1, r1, #0x4 - add r1, r5, r1 - lsl r1, r1, #0x18 - lsl r0, r0, #0xa - lsr r1, r1, #0x13 - orr r0, r1 - orr r0, r7 - strh r0, [r6, #0x0] - ldr r0, [sp, #0x4] - add r6, r6, #0x2 - add r0, r0, #0x2 - str r0, [sp, #0x4] - mov r0, r12 - add r1, r0, #0x1 - mov r0, lr - mov r12, r1 - cmp r1, r0 - blo _0200360C -_02003680: - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start FUN_02003684 -FUN_02003684: ; 0x02003684 - push {r4-r5} - ldrh r4, [r2, #0x2] - lsl r3, r4, #0x10 - lsl r4, r4, #0x15 - lsr r3, r3, #0x1b - lsr r4, r4, #0x1b - cmp r4, r3 - bne _020036BE - mov r3, #0x46 - lsl r3, r3, #0x2 - ldrh r4, [r0, r3] - mov r2, #0x1 - lsl r2, r1 - lsl r1, r4, #0x10 - lsr r5, r1, #0x12 - add r1, r5, #0x0 - tst r1, r2 - beq _0200371E - eor r2, r5 - lsl r2, r2, #0x10 - ldr r1, _02003724 ; =0xFFFF0003 - lsr r2, r2, #0x10 - lsl r2, r2, #0x12 - and r1, r4 - lsr r2, r2, #0x10 - orr r1, r2 - strh r1, [r0, r3] - pop {r4-r5} - bx lr -_020036BE: - ldrh r0, [r2, #0x4] - lsl r0, r0, #0x10 - lsr r0, r0, #0x1f - bne _020036F4 - lsl r0, r4, #0x10 - asr r1, r0, #0x10 - ldrh r0, [r2, #0x6] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1c - add r0, r1, r0 - lsl r0, r0, #0x10 - asr r4, r0, #0x10 - cmp r4, r3 - ble _020036DE - lsl r0, r3, #0x10 - asr r4, r0, #0x10 -_020036DE: - ldrh r1, [r2, #0x2] - ldr r0, _02003728 ; =0xFFFFF83F - and r1, r0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1b - lsr r0, r0, #0x15 - orr r0, r1 - strh r0, [r2, #0x2] - pop {r4-r5} - bx lr -_020036F4: - lsl r0, r4, #0x10 - asr r1, r0, #0x10 - ldrh r0, [r2, #0x6] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1c - sub r0, r1, r0 - lsl r0, r0, #0x10 - asr r4, r0, #0x10 - cmp r4, r3 - bge _0200370C - lsl r0, r3, #0x10 - asr r4, r0, #0x10 -_0200370C: - ldrh r1, [r2, #0x2] - ldr r0, _02003728 ; =0xFFFFF83F - and r1, r0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1b - lsr r0, r0, #0x15 - orr r0, r1 - strh r0, [r2, #0x2] -_0200371E: - pop {r4-r5} - bx lr - nop -_02003724: .word 0xFFFF0003 -_02003728: .word 0xFFFFF83F - - thumb_func_start FUN_0200372C -FUN_0200372C: ; 0x0200372C - push {r3-r7, lr} - add r6, r0, #0x0 - ldr r0, _020038DC ; =0x0000011A - ldrh r1, [r6, r0] - lsl r1, r1, #0x10 - lsr r1, r1, #0x1f - bne _02003748 - sub r0, r0, #0x2 - ldrh r0, [r6, r0] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1e - cmp r0, #0x1 - beq _02003748 - b _020038DA -_02003748: - mov r7, #0x2 - mov r5, #0x0 - add r4, r6, #0x0 - lsl r7, r7, #0xc -_02003750: - ldr r0, _020038DC ; =0x0000011A - ldrh r1, [r6, r0] - lsl r0, r1, #0x10 - lsr r0, r0, #0x1f - bne _02003770 - ldr r0, [r4, #0x4] - cmp r0, #0x0 - beq _0200377C - lsl r0, r1, #0x12 - lsl r1, r5, #0x10 - lsr r0, r0, #0x12 - lsr r1, r1, #0x10 - bl FUN_02003314 - cmp r0, #0x0 - beq _0200377C -_02003770: - ldr r0, [r4, #0x4] - ldr r1, [r4, #0x8] - bl DC_FlushRange - cmp r5, #0xd - bls _0200377E -_0200377C: - b _020038A4 -_0200377E: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_0200378A: ; jump table (using 16-bit offset) - .short _020037A6 - _0200378A - 2; case 0 - .short _020037B2 - _0200378A - 2; case 1 - .short _020037BE - _0200378A - 2; case 2 - .short _020037CA - _0200378A - 2; case 3 - .short _020037D6 - _0200378A - 2; case 4 - .short _020037EA - _0200378A - 2; case 5 - .short _020037FE - _0200378A - 2; case 6 - .short _02003814 - _0200378A - 2; case 7 - .short _0200382A - _0200378A - 2; case 8 - .short _0200383E - _0200378A - 2; case 9 - .short _02003852 - _0200378A - 2; case 10 - .short _02003868 - _0200378A - 2; case 11 - .short _0200387E - _0200378A - 2; case 12 - .short _02003892 - _0200378A - 2; case 13 -_020037A6: - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GX_LoadBGPltt - b _020038A4 -_020037B2: - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GXS_LoadBGPltt - b _020038A4 -_020037BE: - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GX_LoadOBJPltt - b _020038A4 -_020037CA: - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GXS_LoadOBJPltt - b _020038A4 -_020037D6: - bl GX_BeginLoadBGExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GX_LoadBGExtPltt - bl GX_EndLoadBGExtPltt - b _020038A4 -_020037EA: - bl GX_BeginLoadBGExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - add r1, r7, #0x0 - bl GX_LoadBGExtPltt - bl GX_EndLoadBGExtPltt - b _020038A4 -_020037FE: - bl GX_BeginLoadBGExtPltt - mov r1, #0x1 - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - lsl r1, r1, #0xe - bl GX_LoadBGExtPltt - bl GX_EndLoadBGExtPltt - b _020038A4 -_02003814: - bl GX_BeginLoadBGExtPltt - mov r1, #0x6 - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - lsl r1, r1, #0xc - bl GX_LoadBGExtPltt - bl GX_EndLoadBGExtPltt - b _020038A4 -_0200382A: - bl GXS_BeginLoadBGExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GXS_LoadBGExtPltt - bl GXS_EndLoadBGExtPltt - b _020038A4 -_0200383E: - bl GXS_BeginLoadBGExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - add r1, r7, #0x0 - bl GXS_LoadBGExtPltt - bl GXS_EndLoadBGExtPltt - b _020038A4 -_02003852: - bl GXS_BeginLoadBGExtPltt - mov r1, #0x1 - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - lsl r1, r1, #0xe - bl GXS_LoadBGExtPltt - bl GXS_EndLoadBGExtPltt - b _020038A4 -_02003868: - bl GXS_BeginLoadBGExtPltt - mov r1, #0x6 - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - lsl r1, r1, #0xc - bl GXS_LoadBGExtPltt - bl GXS_EndLoadBGExtPltt - b _020038A4 -_0200387E: - bl GX_BeginLoadOBJExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GX_LoadOBJExtPltt - bl GX_EndLoadOBJExtPltt - b _020038A4 -_02003892: - bl GXS_BeginLoadOBJExtPltt - ldr r0, [r4, #0x4] - ldr r2, [r4, #0x8] - mov r1, #0x0 - bl GXS_LoadOBJExtPltt - bl GXS_EndLoadOBJExtPltt -_020038A4: - add r5, r5, #0x1 - add r4, #0x14 - cmp r5, #0xe - bge _020038AE - b _02003750 -_020038AE: - ldr r3, _020038DC ; =0x0000011A - ldr r1, _020038E0 ; =0xFFFFC000 - sub r2, r3, #0x2 - ldrh r2, [r6, r2] - ldrh r0, [r6, r3] - lsl r2, r2, #0x10 - and r0, r1 - lsr r2, r2, #0x12 - lsr r1, r1, #0x12 - and r1, r2 - orr r0, r1 - strh r0, [r6, r3] - ldrh r0, [r6, r3] - lsl r0, r0, #0x12 - lsr r0, r0, #0x12 - bne _020038DA - sub r0, r3, #0x2 - ldrh r1, [r6, r0] - mov r0, #0x3 - bic r1, r0 - sub r0, r3, #0x2 - strh r1, [r6, r0] -_020038DA: - pop {r3-r7, pc} - .balign 4 -_020038DC: .word 0x0000011A -_020038E0: .word 0xFFFFC000 - - thumb_func_start FUN_020038E4 -FUN_020038E4: ; 0x020038E4 - mov r1, #0x46 - lsl r1, r1, #0x2 - ldrh r0, [r0, r1] - lsl r0, r0, #0x10 - lsr r0, r0, #0x12 - bx lr - - thumb_func_start FUN_020038F0 -FUN_020038F0: ; 0x020038F0 - push {r3-r4} - ldr r3, _0200390C ; =0x0000011A - lsl r1, r1, #0x10 - ldrh r4, [r0, r3] - ldr r2, _02003910 ; =0xFFFF7FFF - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - and r2, r4 - lsr r1, r1, #0x10 - orr r1, r2 - strh r1, [r0, r3] - pop {r3-r4} - bx lr - nop -_0200390C: .word 0x0000011A -_02003910: .word 0xFFFF7FFF - - thumb_func_start FUN_02003914 -FUN_02003914: ; 0x02003914 - push {r3-r7, lr} - sub sp, #0x8 - add r6, r0, #0x0 - str r3, [sp, #0x0] - mov r0, #0x14 - add r4, r1, #0x0 - mul r4, r0 - add r0, sp, #0x10 - ldrh r0, [r0, #0x14] - add r7, r2, #0x0 - ldr r5, [sp, #0x20] - str r0, [sp, #0x4] - lsl r1, r0, #0x1 - add r0, r6, r4 - ldr r0, [r0, #0x8] - cmp r1, r0 - bls _0200393A - bl GF_AssertFail -_0200393A: - sub r0, r7, #0x1 - cmp r0, #0x1 - bhi _02003952 - ldr r2, [r6, r4] - lsl r1, r5, #0x1 - add r1, r2, r1 - ldr r2, [sp, #0x4] - ldr r0, [sp, #0x0] - sub r2, r2, r5 - lsl r2, r2, #0x1 - bl MIi_CpuClear16 -_02003952: - cmp r7, #0x0 - beq _0200395A - cmp r7, #0x2 - bne _0200396E -_0200395A: - add r1, r6, r4 - ldr r2, [r1, #0x4] - lsl r1, r5, #0x1 - add r1, r2, r1 - ldr r2, [sp, #0x4] - ldr r0, [sp, #0x0] - sub r2, r2, r5 - lsl r2, r2, #0x1 - bl MIi_CpuClear16 -_0200396E: - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02003974 -FUN_02003974: ; 0x02003974 - push {r4-r7, lr} - sub sp, #0xc - str r0, [sp, #0x0] - add r0, sp, #0x10 - ldrh r0, [r0, #0x10] - str r1, [sp, #0x4] - add r7, r2, #0x0 - lsl r1, r0, #0x1b - lsr r1, r1, #0x1b - mov r12, r1 - lsl r1, r0, #0x16 - lsl r0, r0, #0x11 - lsr r1, r1, #0x1b - lsr r0, r0, #0x1b - mov r2, #0x0 - mov lr, r1 - str r0, [sp, #0x8] - cmp r7, #0x0 - bls _020039E2 -_0200399A: - ldr r0, [sp, #0x0] - lsl r6, r2, #0x1 - ldrh r4, [r0, r6] - lsl r0, r4, #0x1b - lsr r1, r0, #0x1b - lsl r0, r4, #0x16 - lsl r4, r4, #0x11 - lsr r5, r4, #0x1b - ldr r4, [sp, #0x8] - lsr r0, r0, #0x1b - sub r4, r4, r5 - mul r4, r3 - asr r4, r4, #0x4 - add r4, r5, r4 - lsl r5, r4, #0xa - mov r4, r12 - sub r4, r4, r1 - mul r4, r3 - asr r4, r4, #0x4 - add r1, r1, r4 - mov r4, lr - sub r4, r4, r0 - mul r4, r3 - asr r4, r4, #0x4 - add r0, r0, r4 - lsl r0, r0, #0x5 - orr r0, r1 - add r1, r5, #0x0 - orr r1, r0 - ldr r0, [sp, #0x4] - strh r1, [r0, r6] - add r0, r2, #0x1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - cmp r2, r7 - blo _0200399A -_020039E2: - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_020039E8 -FUN_020039E8: ; 0x020039E8 - push {r3-r7, lr} - sub sp, #0x8 - add r7, r2, #0x0 - add r5, r0, #0x0 - mov r2, #0x14 - add r6, r1, #0x0 - mul r6, r2 - str r3, [sp, #0x4] - ldr r1, [r5, r6] - mov r0, #0x0 - add r4, r5, r6 - cmp r1, #0x0 - beq _02003A0A - ldr r1, [r4, #0x4] - cmp r1, #0x0 - beq _02003A0A - mov r0, #0x1 -_02003A0A: - cmp r0, #0x0 - bne _02003A12 - bl GF_AssertFail -_02003A12: - add r3, sp, #0x10 - ldrh r0, [r3, #0x14] - add r2, r5, r6 - lsl r1, r7, #0x1 - str r0, [sp, #0x0] - ldr r0, [r4, #0x0] - ldr r2, [r2, #0x4] - add r0, r0, r1 - add r1, r2, r1 - ldrb r3, [r3, #0x10] - ldr r2, [sp, #0x4] - bl FUN_02003974 - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start FUN_02003A30 -FUN_02003A30: ; 0x02003A30 - push {r3-r7, lr} - sub sp, #0x8 - str r3, [sp, #0x4] - add r5, r0, #0x0 - add r6, r1, #0x0 - add r4, r2, #0x0 - ldr r7, [sp, #0x20] - beq _02003A60 -_02003A40: - mov r0, #0x1 - tst r0, r4 - beq _02003A54 - str r7, [sp, #0x0] - ldr r3, [sp, #0x4] - add r0, r5, #0x0 - add r1, r6, #0x0 - mov r2, #0x10 - bl FUN_02003974 -_02003A54: - lsl r0, r4, #0xf - lsr r4, r0, #0x10 - add r6, #0x20 - add r5, #0x20 - cmp r4, #0x0 - bne _02003A40 -_02003A60: - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start FUN_02003A64 -FUN_02003A64: ; 0x02003A64 - push {r4-r7, lr} - sub sp, #0xc - str r3, [sp, #0x8] - add r6, r0, #0x0 - add r7, r1, #0x0 - ldr r0, [sp, #0x20] - add r5, r2, #0x0 - mov r1, #0x14 - add r2, r7, #0x0 - str r0, [sp, #0x20] - mul r2, r1 - mov r4, #0x0 - ldr r1, [r6, r2] - add r0, r4, #0x0 - cmp r1, #0x0 - beq _02003A8E - add r1, r6, r2 - ldr r1, [r1, #0x4] - cmp r1, #0x0 - beq _02003A8E - mov r0, #0x1 -_02003A8E: - cmp r0, #0x0 - bne _02003A96 - bl GF_AssertFail -_02003A96: - cmp r5, #0x0 - beq _02003AC0 -_02003A9A: - mov r0, #0x1 - tst r0, r5 - beq _02003AB6 - ldr r0, [sp, #0x8] - lsl r2, r4, #0x10 - str r0, [sp, #0x0] - ldr r0, [sp, #0x20] - add r1, r7, #0x0 - str r0, [sp, #0x4] - add r0, r6, #0x0 - lsr r2, r2, #0x10 - mov r3, #0x10 - bl FUN_020039E8 -_02003AB6: - lsl r0, r5, #0xf - lsr r5, r0, #0x10 - add r4, #0x10 - cmp r5, #0x0 - bne _02003A9A -_02003AC0: - add sp, #0xc - pop {r4-r7, pc} - - thumb_func_start FUN_02003AC4 -FUN_02003AC4: ; 0x02003AC4 - push {r3-r7, lr} - mov lr, r1 - mov r12, r2 - add r7, r3, #0x0 - mov r4, #0x0 - cmp r1, #0x0 - ble _02003B3C - ldr r6, [sp, #0x18] -_02003AD4: - ldrh r3, [r0, #0x0] - mov r1, #0x1f - add r2, r3, #0x0 - asr r5, r3, #0xa - and r2, r1 - and r5, r1 - mov r1, #0x1d - mul r1, r5 - mov r5, #0x4c - mul r5, r2 - asr r3, r3, #0x5 - mov r2, #0x1f - and r3, r2 - mov r2, #0x97 - mul r2, r3 - add r2, r5, r2 - add r1, r1, r2 - asr r3, r1, #0x8 - mov r1, r12 - add r2, r1, #0x0 - mul r2, r3 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - asr r2, r1, #0x8 - add r1, r7, #0x0 - mul r1, r3 - mul r3, r6 - lsl r1, r1, #0x10 - lsl r3, r3, #0x10 - lsr r1, r1, #0x10 - lsr r3, r3, #0x10 - asr r1, r1, #0x8 - asr r3, r3, #0x8 - cmp r2, #0x1f - ble _02003B1C - mov r2, #0x1f -_02003B1C: - cmp r1, #0x1f - ble _02003B22 - mov r1, #0x1f -_02003B22: - cmp r3, #0x1f - ble _02003B28 - mov r3, #0x1f -_02003B28: - lsl r3, r3, #0xa - lsl r1, r1, #0x5 - orr r1, r3 - orr r1, r2 - strh r1, [r0, #0x0] - add r4, r4, #0x1 - mov r1, lr - add r0, r0, #0x2 - cmp r4, r1 - blt _02003AD4 -_02003B3C: - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02003B40 -FUN_02003B40: ; 0x02003B40 - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - add r2, sp, #0x4 - bl GfGfxLoader_GetPlttData - add r4, r0, #0x0 - bne _02003B58 - bl GF_AssertFail -_02003B58: - ldr r0, [sp, #0x1c] - cmp r0, #0x0 - bne _02003B64 - ldr r0, [sp, #0x4] - ldr r0, [r0, #0x8] - str r0, [sp, #0x1c] -_02003B64: - ldr r0, [sp, #0x2c] - ldr r2, [sp, #0x24] - str r0, [sp, #0x0] - ldr r0, [sp, #0x4] - ldr r3, [sp, #0x28] - ldr r0, [r0, #0xc] - mov r1, #0x10 - bl FUN_02003AC4 - ldr r0, [sp, #0x1c] - add r3, sp, #0x8 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x0] - ldr r1, [sp, #0x4] - ldrh r3, [r3, #0x18] - ldr r1, [r1, #0xc] - ldr r2, [sp, #0x18] - add r0, r5, #0x0 - bl FUN_02003054 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x8 - pop {r3-r5, pc} diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c new file mode 100644 index 00000000..771faab2 --- /dev/null +++ b/arm9/src/unk_020030E8.c @@ -0,0 +1,708 @@ +#include "global.h" +#include "MI_memory.h" +#include "unk_02002F08.h" +#include "unk_0200CA44.h" +#include "unk_020030E8.h" + + + + +extern void *FUN_020222E8(); +extern void *FUN_020222F8(); +extern void *FUN_02022308(); +extern void *FUN_02022310(); +extern int abs(int); + + +THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3) +{ + GF_ASSERT(param2 * 2 + param3 <= param0->unk000[param1].unk08); + + u16 *r1; + switch (param1) + { + case 0: + r1 = FUN_020222E8(); + break; + case 1: + r1 = FUN_020222F8(); + break; + case 2: + r1 = FUN_02022308(); + break; + case 3: + r1 = FUN_02022310(); + break; + default: + GF_ASSERT(FALSE); + return; + } + + FUN_02003054(param0, r1 + param2, param1, param2, (u16)param3); +} + +THUMB_FUNC void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) +{ + NNSG2dPaletteData *pltData; + + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + GF_ASSERT(ptr != NULL); + + if (size == 0) + { + size = pltData->szByte; + } + + MI_CpuCopy16(pltData->pRawData + offset * 2, dest, size); + + FreeToHeap(ptr); +} + +THUMB_FUNC void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) +{ + + MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5); + MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5); +} + +THUMB_FUNC u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1) +{ + return param0->unk000[param1].unk00; +} + +THUMB_FUNC u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1) +{ + return param0->unk000[param1].unk04; +} + + + + + + + + +THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8) +{ + + u16 stc = param2; + u32 r6 = 0; + + for (u8 r4 = 0; r4 < 14; r4++) + { + if (FUN_02003314(param1, r4) != 1) + { + continue; + } + + if (FUN_02003314(param0->unk118_2, r4) != 0) + { + continue; + } + + FUN_02003368(r4, ¶m0->unk000[r4], ¶m2); + + FUN_020033A4(¶m0->unk000[r4].unk0c, param2, param3, param6, param7, param8); + + FUN_02003328(param0, r4); + + if (r4 >= 4) + { + FUN_0200359C(param0, r4, 0x100); + } + else + { + FUN_0200359C(param0, r4, 0x10); + } + + param2 = stc; + r6 = 1; + } + + if (r6 == 1) + { + param0->unk118_2 |= param1; + if (param0->unk11a_e == 0) + { + param0->unk11a_e = 1; + + param0->unk118_0 = 1; + param0->unk11c = 0; + + //wtf is that? + FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)param0, (u32)(-2)); + } + } + + return r6; +} + +THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) +{ + u32 r3 = 1; + if ((param0 & (1 << param1)) == 0) + { + r3 = 0; + } + + return (u8)r3; +} + +THUMB_FUNC void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1) +{ + if (FUN_02003314(param0->unk11a_0, param1) != 1) + { + param0->unk11a_0 |= 1 << param1; + } +} + +THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2) +{ + u8 r0; + if (param0 < 4) + { + r0 = (u8)(param1->unk08 >> 5); + } + else + { + r0 = (u8)(param1->unk08 >> 9); + } + + u16 r4 = 0; + for (u8 i = 0; i < r0; i++) + { + r4 += 1 << i; + } + + *param2 &= r4; +} + + + +THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5) +{ + if (param2 < 0) + { + param0->unk06_0 = abs(param2) + 2; + param0->unk02_0 = 0; + } + else + { + param0->unk06_0 = 2; + param0->unk02_0 = param2; + } + + param0->unk00 = param1; + param0->unk02_6 = param3; + param0->unk02_b = param4; + param0->unk04_0 = param5; + + param0->unk06_4 = param0->unk02_0; + + if (param3 < param4) + { + param0->unk04_f = 0; + return; + } + param0->unk04_f = 1; +} + + + + +THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1) +{ + if (param1->unk11c == 1) + { + param1->unk11c = 0; + param1->unk11a_0 = 0; + param1->unk118_2 = 0; + param1->unk11a_e = 0; + FUN_0200CAB4((s32)param0); + return; + } + + if (param1->unk118_0 == 1) + { + param1->unk11a_0 = param1->unk118_2; + FUN_02003500(param1); + FUN_02003520(param1); + + if (param1->unk118_2 == 0) + { + param1->unk11a_e = 0; + FUN_0200CAB4((s32)param0); + } + } +} + + + +THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0) +{ + for (u8 i = 0; i < 4; i++) + { + FUN_02003540(param0, i, 0x10); + } +} + +THUMB_FUNC void FUN_02003520(struct UnkStruct_02002F08 *param0) +{ + for (u8 i = 4; i < 14; i++) + { + FUN_02003540(param0, i, 0x100); + } +} + +THUMB_FUNC void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2) +{ + if (FUN_02003314(param0->unk118_2, param1) != 0) + { + if (param0->unk000[param1].unk0c.unk06_4 < param0->unk000[param1].unk0c.unk02_0) + { + param0->unk000[param1].unk0c.unk06_4++; + return; + } + + param0->unk000[param1].unk0c.unk06_4 = 0; + FUN_0200359C(param0, param1, param2); + } +} + + + + +THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2) +{ + + for (u32 r6 = 0; r6 < 0x10; r6++) + { + if (FUN_02003314(param0->unk000[param1].unk0c.unk00, (u16)r6) != 0) + { + FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, param0->unk000[param1].unk04 + param2 * r6, ¶m0->unk000[param1].unk0c, param2); + } + } + + FUN_02003684(param0, (u8)param1, ¶m0->unk000[param1].unk0c); +} + +THUMB_FUNC void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3) +{ + for (u32 i = 0; i < param3; i++) + { + u8 lo = (u8)((param0[i] & 0x1f) + ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4)); + + u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * param2->unk02_6) >> 4)); + u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * param2->unk02_6) >> 4)); + + param1[i] = (u16)((hi << 10) | (mid << 5) | lo); + } +} + +THUMB_FUNC void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2) +{ + s16 r4; + if (param2->unk02_6 == param2->unk02_b) + { + if ((param0->unk118_2 & (1 << param1)) == 0) + { + return; + } + + param0->unk118_2 ^= (1 << param1); + + return; + } + + if (param2->unk04_f == 0) + { + r4 = (s16)param2->unk02_6; + r4 += param2->unk06_0; + if (r4 > param2->unk02_b) + { + r4 = (s16)param2->unk02_b; + } + + param2->unk02_6 = r4; + return; + } + + r4 = (s16)param2->unk02_6; + r4 -= param2->unk06_0; + if (r4 < param2->unk02_b) + { + r4 = (s16)param2->unk02_b; + } + + param2->unk02_6 = r4; +} + +THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0) +{ + if (param0->unk11a_f == 0 && param0->unk118_0 != 1) + { + return; + } + + for (s32 r5 = 0; r5 < 14; r5++) + { + if (param0->unk11a_f != 0 || (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) + { + DC_FlushRange(param0->unk000[r5].unk04, param0->unk000[r5].unk08); + + switch (r5) + { + case 0: + GX_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + break; + case 1: + GXS_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + break; + case 2: + GX_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + break; + case 3: + GXS_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + break; + case 4: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_EndLoadBGExtPltt(); + break; + case 5: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08); + GX_EndLoadBGExtPltt(); + break; + case 6: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08); + GX_EndLoadBGExtPltt(); + break; + case 7: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08); + GX_EndLoadBGExtPltt(); + break; + case 8: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_EndLoadBGExtPltt(); + break; + case 9: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08); + GXS_EndLoadBGExtPltt(); + break; + case 10: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08); + GXS_EndLoadBGExtPltt(); + break; + case 11: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08); + GXS_EndLoadBGExtPltt(); + break; + case 12: + GX_BeginLoadOBJExtPltt(); + GX_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_EndLoadOBJExtPltt(); + break; + case 13: + GXS_BeginLoadOBJExtPltt(); + GXS_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_EndLoadOBJExtPltt(); + break; + } + } + } + + param0->unk11a_0 = param0->unk118_2; + if (param0->unk11a_0 == 0) + { + param0->unk118_0 = 0; + } +} + +THUMB_FUNC u16 FUN_020038E4(struct UnkStruct_02002F08 *param0) +{ + return param0->unk118_2; +} + +THUMB_FUNC void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1) +{ + param0->unk11a_f = param1; +} + +THUMB_FUNC void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) +{ + GF_ASSERT(param5 * 2 <= param0->unk000[param1].unk08); + if (param2 - 1 <= 1) + { + MI_CpuFill16(¶m0->unk000[param1].unk00[param4], param3, (u32)((param5 - param4) * 2)); + } + + if (param2 == 0 || param2 == 2) + { + MI_CpuFill16(¶m0->unk000[param1].unk04[param4], param3, (u32)((param5 - param4) * 2)); + } +} + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +{ + s32 r12 = ((u32)(param4 << 0x1b)) >> 0x1b; + s32 lr = ((u32)(param4 << 0x16)) >> 0x1b; + s32 st8 = ((u32)(param4 << 0x11)) >> 0x1b; + s32 lo, mid, hi; + + for (u16 i = 0; i < param2; i++) + { + lo = (((u32)(param0[i] << 0x1b)) >> 0x1b); + mid = (((u32)(param0[i] << 0x16)) >> 0x1b); + hi = (((u32)(param0[i] << 0x11)) >> 0x1b); + + param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | (hi + ((st8 - hi) * param3) >> 4) << 10; + } +} +#else +asm void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +{ + // clang-format off + push {r4-r7, lr} + sub sp, #0xc + str r0, [sp, #0x0] + add r0, sp, #0x10 + ldrh r0, [r0, #0x10] + str r1, [sp, #0x4] + add r7, r2, #0x0 + lsl r1, r0, #0x1b + lsr r1, r1, #0x1b + mov r12, r1 + lsl r1, r0, #0x16 + lsl r0, r0, #0x11 + lsr r1, r1, #0x1b + lsr r0, r0, #0x1b + mov r2, #0x0 + mov lr, r1 + str r0, [sp, #0x8] + cmp r7, #0x0 + bls _020039E2 +_0200399A: + ldr r0, [sp, #0x0] + lsl r6, r2, #0x1 + ldrh r4, [r0, r6] + lsl r0, r4, #0x1b + lsr r1, r0, #0x1b + lsl r0, r4, #0x16 + lsl r4, r4, #0x11 + lsr r5, r4, #0x1b + ldr r4, [sp, #0x8] + lsr r0, r0, #0x1b + sub r4, r4, r5 + mul r4, r3 + asr r4, r4, #0x4 + add r4, r5, r4 + lsl r5, r4, #0xa + mov r4, r12 + sub r4, r4, r1 + mul r4, r3 + asr r4, r4, #0x4 + add r1, r1, r4 + mov r4, lr + sub r4, r4, r0 + mul r4, r3 + asr r4, r4, #0x4 + add r0, r0, r4 + lsl r0, r0, #0x5 + orr r0, r1 + add r1, r5, #0x0 + orr r1, r0 + ldr r0, [sp, #0x4] + strh r1, [r0, r6] + add r0, r2, #0x1 + lsl r0, r0, #0x10 + lsr r2, r0, #0x10 + cmp r2, r7 + blo _0200399A +_020039E2: + add sp, #0xc + pop {r4-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) +{ + BOOL r0 = FALSE; + if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0) + { + r0 = TRUE; + } + + GF_ASSERT(r0); + + FUN_02003974(param0->unk000[param1].unk00 + param2, param0->unk000[param1].unk04 + param2, param3, param4, param5); +} + +THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +{ + while (param2 != 0) + { + if ((param2 & 1) != 0) + { + FUN_02003974(param0, param1, 0x10, param3, param4); + } + + param2 >>= 1; + param1 += 0x10; + param0 += 0x10; + } +} + +THUMB_FUNC void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4) +{ + u32 r4 = 0; + BOOL r0 = FALSE; + if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0) + { + r0 = TRUE; + } + + GF_ASSERT(r0); + + while (param2 != 0) + { + if ((param2 & 1) != 0) + { + FUN_020039E8(param0, param1, (u16)r4, 0x10, param3, param4); + } + + param2 >>= 1; + r4 += 0x10; + } +} + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4) +{ + s32 r4, lo, mid, hi, add; + for (r4 = 0; r4 < param1; r4++) + { + lo = ((param0[r4]) & 0x1f); + mid = ((param0[r4] >> 5) & 0x1f); + hi = ((param0[r4] >> 10) & 0x1f); + + add = (lo * 0x4c + mid * 0x97 + hi * 0x1d) >> 8; + + lo = (u16)(add * param2) >> 8; + mid = (u16)(add * param3) >> 8; + hi = (u16)(add * param4) >> 8; + + if (lo > 0x1f) + { + lo = 0x1f; + } + if (mid > 0x1f) + { + mid = 0x1f; + } + if (hi > 0x1f) + { + hi = 0x1f; + } + + param0[r4] = (hi << 10) | (mid << 5) | lo; + } +} +#else +asm void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4) +{ + // clang-format off + push {r3-r7, lr} + mov lr, r1 + mov r12, r2 + add r7, r3, #0x0 + mov r4, #0x0 + cmp r1, #0x0 + ble _02003B3C + ldr r6, [sp, #0x18] +_02003AD4: + ldrh r3, [r0, #0x0] + mov r1, #0x1f + add r2, r3, #0x0 + asr r5, r3, #0xa + and r2, r1 + and r5, r1 + mov r1, #0x1d + mul r1, r5 + mov r5, #0x4c + mul r5, r2 + asr r3, r3, #0x5 + mov r2, #0x1f + and r3, r2 + mov r2, #0x97 + mul r2, r3 + add r2, r5, r2 + add r1, r1, r2 + asr r3, r1, #0x8 + mov r1, r12 + add r2, r1, #0x0 + mul r2, r3 + lsl r1, r2, #0x10 + lsr r1, r1, #0x10 + asr r2, r1, #0x8 + add r1, r7, #0x0 + mul r1, r3 + mul r3, r6 + lsl r1, r1, #0x10 + lsl r3, r3, #0x10 + lsr r1, r1, #0x10 + lsr r3, r3, #0x10 + asr r1, r1, #0x8 + asr r3, r3, #0x8 + cmp r2, #0x1f + ble _02003B1C + mov r2, #0x1f +_02003B1C: + cmp r1, #0x1f + ble _02003B22 + mov r1, #0x1f +_02003B22: + cmp r3, #0x1f + ble _02003B28 + mov r3, #0x1f +_02003B28: + lsl r3, r3, #0xa + lsl r1, r1, #0x5 + orr r1, r3 + orr r1, r2 + strh r1, [r0, #0x0] + add r4, r4, #0x1 + mov r1, lr + add r0, r0, #0x2 + cmp r4, r1 + blt _02003AD4 +_02003B3C: + pop {r3-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9) +{ + NNSG2dPaletteData *pltData; + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + GF_ASSERT(ptr != NULL); + + if (param5 == 0) + { + param5 = pltData->szByte; + } + + FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9); + FUN_02003054(param0, pltData->pRawData, param4, param6, (u16)param5); + + FreeToHeap(ptr); +} diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index 773d9246..755fe05b 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -6,19 +6,41 @@ #include "string16.h" +struct UnkStruct_02002F08_sub_sub { + u16 unk00; + + u16 unk02_0: 6; + u16 unk02_6: 5; + u16 unk02_b: 5; + + u16 unk04_0: 15; + u16 unk04_f: 1; + + u16 unk06_0: 4; + u16 unk06_4: 6; + u16 unk06_a: 6; +}; + +struct UnkStruct_02002F08_sub +{ + u16 *unk00; + u16 *unk04; + u32 unk08; + struct UnkStruct_02002F08_sub_sub unk0c; +}; + struct UnkStruct_02002F08 { - struct - { - u16 *unk00; - u16 *unk04; - u32 unk08; - u32 unk0c; - u32 unk10; - } unk000[14]; - - u32 unk118; - u32 unk11c; + struct UnkStruct_02002F08_sub unk000[14]; + + u16 unk118_0 : 2; + u16 unk118_2 : 14; + u16 unk11a_0 : 14; + u16 unk11a_e : 1; + u16 unk11a_f : 1; + u8 unk11c; + u8 unk11d; + u16 unk11e; }; s32 FUN_02002F08(u32 param0, struct String *str, u32 param2); @@ -28,11 +50,26 @@ u32 FUN_02002F90(struct String *str); s32 FUN_02002F9C(u32 param0, struct String *str); struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id); void FUN_02002FEC(struct UnkStruct_02002F08 *ptr); -void FUN_02002FF4(struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size); +void FUN_02002FF4( + struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size); void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id); void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1); -void FUN_02003054(struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size); -void FUN_02003084(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset, u16 param7); -void FUN_020030E8(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset); +void FUN_02003054( + struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size); +void FUN_02003084(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 size, + u16 offset, + u16 param7); +void FUN_020030E8(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 size, + u16 offset); -#endif //POKEDIAMOND_UNK_02002F08_H +#endif // POKEDIAMOND_UNK_02002F08_H diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h new file mode 100644 index 00000000..3b5ff7f4 --- /dev/null +++ b/include/unk_020030E8.h @@ -0,0 +1,32 @@ +#include "global.h" +#include "filesystem.h" +#include "unk_02002F08.h" + + +void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3); +void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); +void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); +u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1); +u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1); +u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8); +u8 FUN_02003314(u16 param0, u16 param1); +void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1); +void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2); +void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5); +void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1); +void FUN_02003500(struct UnkStruct_02002F08 *param0); +void FUN_02003520(struct UnkStruct_02002F08 *param0); +void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2); +void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2); +void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3); +void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2); +void FUN_0200372C(struct UnkStruct_02002F08 *param0); +u16 FUN_020038E4(struct UnkStruct_02002F08 *param0); +void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1); +void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); +void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); +void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); +void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); +void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4); +void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4); +void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9); -- cgit v1.2.3 From 807fb0c97bb0edf6b6d288bf70aeb8aa934b7e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 09:13:42 +0200 Subject: format --- arm9/src/unk_020030E8.c | 114 +++++++++++++++++++++++++++++------------------- include/unk_02002F08.h | 20 ++++----- include/unk_020030E8.h | 39 +++++++++++++---- 3 files changed, 111 insertions(+), 62 deletions(-) diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c index 771faab2..697ffd19 100644 --- a/arm9/src/unk_020030E8.c +++ b/arm9/src/unk_020030E8.c @@ -1,11 +1,8 @@ #include "global.h" +#include "unk_020030E8.h" #include "MI_memory.h" #include "unk_02002F08.h" #include "unk_0200CA44.h" -#include "unk_020030E8.h" - - - extern void *FUN_020222E8(); extern void *FUN_020222F8(); @@ -13,7 +10,6 @@ extern void *FUN_02022308(); extern void *FUN_02022310(); extern int abs(int); - THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3) { GF_ASSERT(param2 * 2 + param3 <= param0->unk000[param1].unk08); @@ -41,7 +37,8 @@ THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 FUN_02003054(param0, r1 + param2, param1, param2, (u16)param3); } -THUMB_FUNC void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) +THUMB_FUNC void FUN_0200317C( + NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) { NNSG2dPaletteData *pltData; @@ -58,11 +55,14 @@ THUMB_FUNC void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, FreeToHeap(ptr); } -THUMB_FUNC void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) +THUMB_FUNC void FUN_020031B8( + struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) { - MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5); - MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5); + MI_CpuCopy16( + param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5); + MI_CpuCopy16( + param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5); } THUMB_FUNC u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1) @@ -75,14 +75,13 @@ THUMB_FUNC u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1) return param0->unk000[param1].unk04; } - - - - - - - -THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8) +THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, + u16 param1, + u16 param2, + s16 param3, + u8 param6, + u8 param7, + u16 param8) { u16 stc = param2; @@ -129,8 +128,10 @@ THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 p param0->unk118_0 = 1; param0->unk11c = 0; - //wtf is that? - FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)param0, (u32)(-2)); + // wtf is that? + FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, + (struct TextPrinter *)param0, + (u32)(-2)); } } @@ -177,9 +178,12 @@ THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, *param2 &= r4; } - - -THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5) +THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, + u16 param1, + s16 param2, + u8 param3, + u8 param4, + u16 param5) { if (param2 < 0) { @@ -207,9 +211,6 @@ THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 para param0->unk04_f = 1; } - - - THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1) { if (param1->unk11c == 1) @@ -236,8 +237,6 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1) } } - - THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0) { for (u8 i = 0; i < 4; i++) @@ -269,9 +268,6 @@ THUMB_FUNC void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 p } } - - - THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2) { @@ -279,27 +275,39 @@ THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 { if (FUN_02003314(param0->unk000[param1].unk0c.unk00, (u16)r6) != 0) { - FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, param0->unk000[param1].unk04 + param2 * r6, ¶m0->unk000[param1].unk0c, param2); + FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, + param0->unk000[param1].unk04 + param2 * r6, + ¶m0->unk000[param1].unk0c, + param2); } } FUN_02003684(param0, (u8)param1, ¶m0->unk000[param1].unk0c); } -THUMB_FUNC void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3) +THUMB_FUNC void FUN_020035F8( + u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3) { for (u32 i = 0; i < param3; i++) { - u8 lo = (u8)((param0[i] & 0x1f) + ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4)); + u8 lo = (u8)((param0[i] & 0x1f) + + ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4)); - u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * param2->unk02_6) >> 4)); - u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * param2->unk02_6) >> 4)); + u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + + (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * + param2->unk02_6) >> + 4)); + u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + + (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * + param2->unk02_6) >> + 4)); param1[i] = (u16)((hi << 10) | (mid << 5) | lo); } } -THUMB_FUNC void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2) +THUMB_FUNC void FUN_02003684( + struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2) { s16 r4; if (param2->unk02_6 == param2->unk02_b) @@ -346,7 +354,8 @@ THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0) for (s32 r5 = 0; r5 < 14; r5++) { - if (param0->unk11a_f != 0 || (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) + if (param0->unk11a_f != 0 || + (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) { DC_FlushRange(param0->unk000[r5].unk04, param0->unk000[r5].unk08); @@ -435,7 +444,8 @@ THUMB_FUNC void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1) param0->unk11a_f = param1; } -THUMB_FUNC void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) +THUMB_FUNC void FUN_02003914( + struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) { GF_ASSERT(param5 * 2 <= param0->unk000[param1].unk08); if (param2 - 1 <= 1) @@ -463,7 +473,8 @@ THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u1 mid = (((u32)(param0[i] << 0x16)) >> 0x1b); hi = (((u32)(param0[i] << 0x11)) >> 0x1b); - param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | (hi + ((st8 - hi) * param3) >> 4) << 10; + param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | + (hi + ((st8 - hi) * param3) >> 4) << 10; } } #else @@ -533,7 +544,8 @@ _020039E2: } #endif -THUMB_FUNC void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) +THUMB_FUNC void FUN_020039E8( + struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) { BOOL r0 = FALSE; if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0) @@ -543,7 +555,11 @@ THUMB_FUNC void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 GF_ASSERT(r0); - FUN_02003974(param0->unk000[param1].unk00 + param2, param0->unk000[param1].unk04 + param2, param3, param4, param5); + FUN_02003974(param0->unk000[param1].unk00 + param2, + param0->unk000[param1].unk04 + param2, + param3, + param4, + param5); } THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) @@ -555,13 +571,14 @@ THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u1 FUN_02003974(param0, param1, 0x10, param3, param4); } - param2 >>= 1; + param2 >>= 1; param1 += 0x10; param0 += 0x10; } } -THUMB_FUNC void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void FUN_02003A64( + struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4) { u32 r4 = 0; BOOL r0 = FALSE; @@ -690,7 +707,16 @@ _02003B3C: } #endif -THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9) +THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 param5, + u16 param6, + u32 param7, + u32 param8, + u32 param9) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index 755fe05b..859e44b0 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -5,20 +5,20 @@ #include "gf_gfx_loader.h" #include "string16.h" - -struct UnkStruct_02002F08_sub_sub { +struct UnkStruct_02002F08_sub_sub +{ u16 unk00; - u16 unk02_0: 6; - u16 unk02_6: 5; - u16 unk02_b: 5; + u16 unk02_0 : 6; + u16 unk02_6 : 5; + u16 unk02_b : 5; - u16 unk04_0: 15; - u16 unk04_f: 1; + u16 unk04_0 : 15; + u16 unk04_f : 1; - u16 unk06_0: 4; - u16 unk06_4: 6; - u16 unk06_a: 6; + u16 unk06_0 : 4; + u16 unk06_4 : 6; + u16 unk06_a : 6; }; struct UnkStruct_02002F08_sub diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h index 3b5ff7f4..f211b611 100644 --- a/include/unk_020030E8.h +++ b/include/unk_020030E8.h @@ -2,31 +2,54 @@ #include "filesystem.h" #include "unk_02002F08.h" - void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3); void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); -void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); +void FUN_020031B8( + struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1); u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1); -u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8); +u32 FUN_02003210(struct UnkStruct_02002F08 *param0, + u16 param1, + u16 param2, + s16 param3, + u8 param6, + u8 param7, + u16 param8); u8 FUN_02003314(u16 param0, u16 param1); void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1); void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2); -void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5); +void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, + u16 param1, + s16 param2, + u8 param3, + u8 param4, + u16 param5); void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1); void FUN_02003500(struct UnkStruct_02002F08 *param0); void FUN_02003520(struct UnkStruct_02002F08 *param0); void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2); void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2); void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3); -void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2); +void FUN_02003684( + struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2); void FUN_0200372C(struct UnkStruct_02002F08 *param0); u16 FUN_020038E4(struct UnkStruct_02002F08 *param0); void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1); -void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); +void FUN_02003914( + struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); +void FUN_020039E8( + struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4); void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4); -void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9); +void FUN_02003B40(struct UnkStruct_02002F08 *param0, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 param4, + u32 param5, + u16 param6, + u32 param7, + u32 param8, + u32 param9); -- cgit v1.2.3 From 9000931f5c47a0b6e8ee6f2ac0069db61868bd32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 10:37:38 +0200 Subject: document palette stuff from unk_02002F08.c --- arm9/asm/unk_020142EC.s | 2 +- arm9/asm/unk_020144FC.s | 2 +- arm9/asm/unk_0206C700.s | 26 +++---- arm9/asm/unk_020859C0.s | 16 ++-- arm9/asm/unk_02086084.s | 16 ++-- arm9/asm/unk_02086414.s | 10 +-- arm9/global.inc | 10 +-- arm9/modules/07/asm/module_07.s | 4 +- arm9/modules/08/asm/module_08.s | 22 +++--- arm9/modules/09/asm/module_09.s | 22 +++--- arm9/modules/11/asm/module_11_thumb1.s | 28 +++---- arm9/modules/11/asm/module_11_thumb2.s | 20 ++--- arm9/modules/12/asm/module_12.s | 110 +++++++++++++-------------- arm9/modules/61/asm/module_61.s | 22 +++--- arm9/modules/62/asm/module_62.s | 22 +++--- arm9/src/unk_02002F08.c | 50 ++++++------- arm9/src/unk_020030E8.c | 132 ++++++++++++++++----------------- include/unk_02002F08.h | 36 ++++----- include/unk_020030E8.h | 46 ++++++------ 19 files changed, 298 insertions(+), 298 deletions(-) diff --git a/arm9/asm/unk_020142EC.s b/arm9/asm/unk_020142EC.s index 5526b320..e7c3e769 100644 --- a/arm9/asm/unk_020142EC.s +++ b/arm9/asm/unk_020142EC.s @@ -288,6 +288,6 @@ FUN_020144E0: ; 0x020144E0 mov r2, #0x0 lsl r3, r3, #0x14 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, pc} .balign 4 diff --git a/arm9/asm/unk_020144FC.s b/arm9/asm/unk_020144FC.s index e3677eca..9d52898d 100644 --- a/arm9/asm/unk_020144FC.s +++ b/arm9/asm/unk_020144FC.s @@ -15,7 +15,7 @@ FUN_020144FC: ; 0x020144FC mov r2, #0x1 lsl r3, r3, #0x14 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, pc} .balign 4 diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index e742f202..90e19c61 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -94,24 +94,24 @@ FUN_0206C700: ; 0x0206C700 mov r1, #0x0 lsl r2, r2, #0x8 add r3, r5, #0x0 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #0x1 ldr r0, [r4, #0x14] lsl r2, r1, #0x9 add r3, r5, #0x0 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #0x7 ldr r0, [r4, #0x14] mov r1, #0x2 lsl r2, r2, #0x6 add r3, r5, #0x0 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #0x2 ldr r0, [r4, #0x14] mov r1, #0x3 lsl r2, r2, #0x8 add r3, r5, #0x0 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0x0 bl BgConfig_Alloc str r0, [r4, #0x0] @@ -300,16 +300,16 @@ FUN_0206C92C: ; 0x0206C92C bl WindowArray_dtor ldr r0, [r4, #0x14] mov r1, #0x0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x14] mov r1, #0x1 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x14] mov r1, #0x2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x14] mov r1, #0x3 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x14] bl FUN_02002FEC ldr r0, [r4, #0x18] @@ -2386,7 +2386,7 @@ _0206DA26: ldr r3, [r5, #0x5c] mov r1, #0x76 mov r2, #0x8 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r6, #0x0 bl FUN_0200CD64 add r2, r0, #0x0 @@ -2399,7 +2399,7 @@ _0206DA26: ldr r0, [r5, #0x14] ldr r3, [r5, #0x5c] mov r1, #0x26 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x0 str r0, [sp, #0x0] mov r0, #0x20 @@ -2410,7 +2410,7 @@ _0206DA26: ldr r3, [r5, #0x5c] mov r1, #0xe mov r2, #0x7 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r5, #0x5c] mov r1, #0x2 str r0, [sp, #0x0] @@ -2429,7 +2429,7 @@ _0206DA26: ldr r0, [r5, #0x14] ldr r3, [r5, #0x5c] mov r1, #0x26 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x0 str r0, [sp, #0x0] str r0, [sp, #0x4] @@ -2464,7 +2464,7 @@ _0206DA26: ldr r0, [r5, #0x14] ldr r3, [r5, #0x5c] add r2, r1, #0x0 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x1 lsl r0, r0, #0x1a ldr r1, [r0, #0x0] diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s index 162a8aca..c6e0a621 100644 --- a/arm9/asm/unk_020859C0.s +++ b/arm9/asm/unk_020859C0.s @@ -306,21 +306,21 @@ _02085A9A: mov r1, #0x0 lsl r2, r2, #0x8 mov r3, #0x35 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r4, #0x0 add r0, #0xe8 mov r1, #0x1 ldr r0, [r0, #0x0] lsl r2, r1, #0x9 mov r3, #0x35 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r4, #0x0 add r0, #0xe8 mov r1, #0x2 ldr r0, [r0, #0x0] lsl r2, r1, #0x8 mov r3, #0x35 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r4, #0x0 add r0, #0xe8 mov r2, #0x2 @@ -328,7 +328,7 @@ _02085A9A: mov r1, #0x3 lsl r2, r2, #0x8 mov r3, #0x35 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r4, #0x0 add r0, #0xe4 ldr r0, [r0, #0x0] @@ -510,22 +510,22 @@ FUN_02085C08: ; 0x02085C08 add r0, #0xe8 ldr r0, [r0, #0x0] mov r1, #0x0 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0x0 add r0, #0xe8 ldr r0, [r0, #0x0] mov r1, #0x1 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0x0 add r0, #0xe8 ldr r0, [r0, #0x0] mov r1, #0x2 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0x0 add r0, #0xe8 ldr r0, [r0, #0x0] mov r1, #0x3 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0x0 add r0, #0xe8 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_02086084.s b/arm9/asm/unk_02086084.s index d110b7f1..3d88cc10 100644 --- a/arm9/asm/unk_02086084.s +++ b/arm9/asm/unk_02086084.s @@ -68,23 +68,23 @@ FUN_02086084: ; 0x02086084 mov r1, #0x0 lsl r2, r2, #0x8 mov r3, #0x47 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #0x2 ldr r0, [r4, #0x8] lsl r2, r1, #0x8 mov r3, #0x47 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #0x1 ldr r0, [r4, #0x8] lsl r2, r1, #0x9 mov r3, #0x47 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #0x2 ldr r0, [r4, #0x8] mov r1, #0x3 lsl r2, r2, #0x8 mov r3, #0x47 - bl FUN_02003008 + bl PaletteData_AllocBuffers bl FUN_02086414 bl FUN_0208643C bl FUN_0208650C @@ -183,16 +183,16 @@ FUN_020861DC: ; 0x020861DC bl GX_EngineBToggleLayers ldr r0, [r4, #0x8] mov r1, #0x0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x8] mov r1, #0x2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x8] mov r1, #0x1 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x8] mov r1, #0x3 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x8] bl FUN_02002FEC ldr r0, [r4, #0x4] diff --git a/arm9/asm/unk_02086414.s b/arm9/asm/unk_02086414.s index f01e84e2..e041eec2 100644 --- a/arm9/asm/unk_02086414.s +++ b/arm9/asm/unk_02086414.s @@ -472,7 +472,7 @@ FUN_020866FC: ; 0x020866FC add r0, r4, #0x0 mov r1, #0x26 mov r3, #0x47 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x0 str r0, [sp, #0x0] mov r0, #0x47 @@ -493,7 +493,7 @@ FUN_020866FC: ; 0x020866FC add r0, r4, #0x0 mov r1, #0x26 mov r3, #0x47 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x0 str r0, [sp, #0x0] mov r0, #0x20 @@ -504,7 +504,7 @@ FUN_020866FC: ; 0x020866FC mov r1, #0xe mov r2, #0x7 mov r3, #0x47 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0xc pop {r3-r6, pc} @@ -793,7 +793,7 @@ FUN_0208699C: ; 0x0208699C mov r1, #0x76 mov r2, #0x8 mov r3, #0x47 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r3-r5, pc} .balign 4 @@ -838,7 +838,7 @@ FUN_020869F0: ; 0x020869F0 add r0, r4, #0x0 add r2, r1, #0x0 mov r3, #0x47 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r3-r5, pc} diff --git a/arm9/global.inc b/arm9/global.inc index 144d5c43..12a68207 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -245,11 +245,11 @@ .extern FUN_02002F9C .extern FUN_02002FD0 .extern FUN_02002FEC -.extern FUN_02003008 -.extern FUN_02003038 -.extern FUN_02003054 -.extern FUN_02003084 -.extern FUN_020030E8 +.extern PaletteData_AllocBuffers +.extern PaletteData_FreeBuffers +.extern PaletteData_LoadPalette +.extern PaletteData_LoadFromNarc +.extern PaletteData_LoadNarc .extern FUN_02003108 .extern FUN_0200317C .extern FUN_020031B8 diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index 234e29fe..dbf02f8d 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -156,7 +156,7 @@ MOD07_02211F34: ; 0x02211F34 mov r1, #0 ldr r3, [r3, #0x24] mov r2, #0x60 - bl FUN_02003008 + bl PaletteData_AllocBuffers ldr r0, _02211FEC ; =0x00000B82 mov r3, #0 strb r3, [r4, r0] @@ -1641,7 +1641,7 @@ _02212BA8: bl FUN_0201C29C ldr r0, [r4, #8] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #8] bl FUN_02002FEC ldr r0, [r4] diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s index 4a0a6d1c..902d44d7 100644 --- a/arm9/modules/08/asm/module_08.s +++ b/arm9/modules/08/asm/module_08.s @@ -35,7 +35,7 @@ MOD08_02211E7C: ; 0x02211E7C add r0, r5, #0 add r2, r4, #0 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, r4, r5, pc} .align 2, 0 @@ -3185,7 +3185,7 @@ _02213500: ldr r1, [sp, #0x14] ldr r2, [sp, #0x10] ldr r3, [r5] - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] str r0, [sp, #4] @@ -3650,7 +3650,7 @@ _022138F0: ldr r1, [sp, #0x18] ldr r2, [sp, #0x14] ldr r3, [r4] - bl FUN_020030E8 + bl PaletteData_LoadNarc _02213926: ldr r0, [sp, #0xc] lsl r5, r0, #2 @@ -4160,7 +4160,7 @@ MOD08_02213C94: ; 0x02213C94 ldr r0, [r0] ldr r3, [r5] mov r1, #7 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r5, #0 add r0, #0xc4 lsl r1, r4, #0x18 @@ -4663,7 +4663,7 @@ _02214078: ldr r1, [r3, r1] ldr r2, [r3, r2] ldr r3, [r3] - bl FUN_020030E8 + bl PaletteData_LoadNarc _022140CC: ldr r2, [r4, #0x48] mov r0, #0 @@ -5039,7 +5039,7 @@ _0221436A: ldr r1, [r3, r1] ldr r2, [r3, r2] ldr r3, [r3] - bl FUN_020030E8 + bl PaletteData_LoadNarc _022143BE: ldr r2, [r4, #0x48] mov r0, #0 @@ -7574,7 +7574,7 @@ MOD08_02215660: ; 0x02215660 mov r2, #0 ldr r0, [r0] add r3, r2, #0 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, pc} thumb_func_start MOD08_02215680 @@ -7875,7 +7875,7 @@ _022158C2: ldr r1, [sp, #0x20] ldr r2, [sp, #0x1c] ldr r3, [r4] - bl FUN_020030E8 + bl PaletteData_LoadNarc _022158EC: ldr r0, [sp, #0x24] add r7, r7, #4 @@ -15602,7 +15602,7 @@ _02219228: ldr r0, [r4, #0x34] mov r1, #7 add r2, r6, #0 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r4, #0x30] mov r1, #2 bl BgClearTilemapBufferAndCommit @@ -16006,7 +16006,7 @@ _02219550: ldr r0, [r4, #0x34] mov r1, #7 add r2, r6, #0 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r4, #0x30] mov r1, #2 bl BgClearTilemapBufferAndCommit @@ -42756,7 +42756,7 @@ MOD08_02227068: ; 0x02227068 ldr r1, [r5] ldr r2, [r2, r3] add r3, r6, #0 - bl FUN_020030E8 + bl PaletteData_LoadNarc lsl r1, r4, #0x18 ldr r0, [r5, #0x2c] lsr r1, r1, #0x18 diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s index 07d0fa04..5ca32f7e 100644 --- a/arm9/modules/09/asm/module_09.s +++ b/arm9/modules/09/asm/module_09.s @@ -2219,7 +2219,7 @@ MOD09_02212F8C: ; 0x02212F8C ldr r3, [r3, #0xc] mov r1, #0x48 mov r2, #0x17 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x7a lsl r0, r0, #2 ldr r0, [r5, r0] @@ -2246,7 +2246,7 @@ MOD09_02212F8C: ; 0x02212F8C ldr r3, [r3, #0xc] mov r1, #0xe mov r2, #6 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] mov r0, #0x20 @@ -2259,7 +2259,7 @@ MOD09_02212F8C: ; 0x02212F8C ldr r3, [r3, #0xc] mov r1, #0xe mov r2, #7 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r5] ldr r0, [r0, #8] bl MOD11_02230E44 @@ -2295,7 +2295,7 @@ MOD09_02212F8C: ; 0x02212F8C ldr r0, [r5, r0] ldr r3, [r3, #0xc] mov r1, #0x26 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x7a lsl r0, r0, #2 ldr r0, [r5, r0] @@ -2343,7 +2343,7 @@ MOD09_02212F8C: ; 0x02212F8C str r0, [sp] ldr r0, [r5, r2] mov r2, #1 - bl FUN_02003054 + bl PaletteData_LoadPalette add r0, r4, #0 bl FreeToHeap add sp, #0x14 @@ -12567,7 +12567,7 @@ MOD09_02218640: ; 0x02218640 add r1, r2, r1 mov r2, #1 mov r3, #0xc0 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, pc} _02218662: mov r0, #0x20 @@ -12579,7 +12579,7 @@ _02218662: add r1, r2, r1 mov r2, #1 mov r3, #0xc0 - bl FUN_02003054 + bl PaletteData_LoadPalette pop {r3, pc} nop _0221867C: .word 0x00001F60 @@ -14029,7 +14029,7 @@ MOD09_022191C0: ; 0x022191C0 ldr r3, [r3, #0xc] mov r1, #0x4d mov r2, #3 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] mov r0, #0x20 @@ -14041,7 +14041,7 @@ MOD09_022191C0: ; 0x022191C0 ldr r3, [r3, #0xc] mov r1, #0xe mov r2, #7 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r5] ldr r0, [r0] bl MOD11_02230E44 @@ -14073,7 +14073,7 @@ MOD09_022191C0: ; 0x022191C0 ldr r0, [r5, #8] ldr r3, [r3, #0xc] mov r1, #0x26 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x14 pop {r4, r5, pc} .align 2, 0 @@ -15664,7 +15664,7 @@ MOD09_02219F24: ; 0x02219F24 ldr r0, [r5, #8] ldr r3, [r3, #0xc] mov r1, #0x10 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0xc pop {r4, r5, pc} diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 23f0a76c..3f932185 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -545,7 +545,7 @@ _0222D99A: add r2, r3, r2 mov r1, #7 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r4, #0 bl FUN_0200CD64 add r2, r0, #0 @@ -558,7 +558,7 @@ _0222D99A: ldr r0, [r5, #0x28] mov r1, #0x26 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -569,7 +569,7 @@ _0222D99A: mov r1, #0xe mov r2, #7 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] str r0, [sp, #4] @@ -723,24 +723,24 @@ MOD11_0222DB50: ; 0x0222DB50 mov r1, #0 lsl r2, r2, #8 mov r3, #5 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #1 ldr r0, [r4, #0x28] lsl r2, r1, #9 mov r3, #5 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #7 ldr r0, [r4, #0x28] mov r1, #2 lsl r2, r2, #6 mov r3, #5 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #2 ldr r0, [r4, #0x28] mov r1, #3 lsl r2, r2, #8 mov r3, #5 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r0, #5 bl BgConfig_Alloc str r0, [r4, #4] @@ -1290,16 +1290,16 @@ _0222E10A: bl FreeToHeap ldr r0, [r4, #0x28] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x28] mov r1, #1 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x28] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x28] mov r1, #3 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x28] bl FUN_02002FEC ldr r0, [r4, #0xc] @@ -1565,7 +1565,7 @@ _0222E2F0: mov r1, #7 add r2, r2, r6 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r7, #0 bl FUN_0200CD64 add r2, r0, #0 @@ -1578,7 +1578,7 @@ _0222E2F0: ldr r0, [r5, #0x28] mov r1, #0x26 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -1589,7 +1589,7 @@ _0222E2F0: mov r1, #0xe mov r2, #7 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] str r0, [sp, #4] diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s index 9b184cfc..8af139bc 100644 --- a/arm9/modules/11/asm/module_11_thumb2.s +++ b/arm9/modules/11/asm/module_11_thumb2.s @@ -30,7 +30,7 @@ MOD11_0222F29C: ; 0x0222F29C mov r1, #0 lsl r2, r2, #8 mov r3, #5 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #0 mov r0, #1 str r1, [sp] @@ -142,7 +142,7 @@ _0222F30E: mov r1, #0xe mov r2, #7 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r4, #0 bl FUN_0200CD64 add r2, r0, #0 @@ -155,7 +155,7 @@ _0222F30E: ldr r0, [r5, #0xc] mov r1, #0x26 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r1, #0 mov r0, #1 str r1, [sp] @@ -805,7 +805,7 @@ MOD11_0222F93C: ; 0x0222F93C bl FUN_0200E3A0 ldr r0, [r4, #0xc] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0xc] bl FUN_02002FEC ldr r0, [r4, #8] @@ -23844,7 +23844,7 @@ _0223AC50: add r0, r7, #0 mov r1, #0x26 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #7 str r0, [sp] mov r0, #0xe @@ -84214,7 +84214,7 @@ _02258288: add r2, r2, r3 ldrh r2, [r5, r2] mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] ldr r0, [sp, #0x20] @@ -84523,7 +84523,7 @@ _0225854E: mov r1, #7 mov r2, #0xc3 mov r3, #5 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [sp, #0x10] mov r1, #1 bl FUN_020031FC @@ -84881,7 +84881,7 @@ _02258874: ldr r1, [r7, #0x58] mov r2, #1 mov r3, #0 - bl FUN_02003054 + bl PaletteData_LoadPalette ldr r6, [sp, #0x2c] mov r4, #0 _0225889A: @@ -89160,7 +89160,7 @@ _0225AB62: add r0, r6, #0 mov r2, #1 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette add r4, r4, #1 _0225AB96: cmp r4, #4 @@ -89215,7 +89215,7 @@ MOD11_0225ABA4: ; 0x0225ABA4 add r0, r7, #0 mov r2, #1 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette add r0, r6, #0 mov r1, #4 bl ScheduleBgTilemapBufferTransfer diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 5cb61425..6c817679 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -76,24 +76,24 @@ MOD12_0222D5C0: ; 0x0222D5C0 mov r1, #0 lsl r2, r2, #8 mov r3, #0x15 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #1 ldr r0, [r4, #0x5c] lsl r2, r1, #9 mov r3, #0x15 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #7 ldr r0, [r4, #0x5c] mov r1, #2 lsl r2, r2, #6 mov r3, #0x15 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #2 ldr r0, [r4, #0x5c] mov r1, #3 lsl r2, r2, #8 mov r3, #0x15 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r0, #0x15 bl BgConfig_Alloc str r0, [r4, #0x30] @@ -483,16 +483,16 @@ MOD12_0222D9B0: ; 0x0222D9B0 bl FUN_020117BC ldr r0, [r4, #0x5c] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x5c] mov r1, #1 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x5c] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x5c] mov r1, #3 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x5c] bl FUN_02002FEC ldr r0, [r4, #0x58] @@ -1164,7 +1164,7 @@ MOD12_0222DFC4: ; 0x0222DFC4 mov r1, #0x2d mov r2, #0x1d mov r3, #0x15 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x15 mov r1, #0x20 bl AllocFromHeap @@ -3211,24 +3211,24 @@ MOD12_0222EF04: ; 0x0222EF04 mov r1, #0 lsl r2, r2, #8 mov r3, #0x16 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #1 ldr r0, [r5, #0x50] lsl r2, r1, #9 mov r3, #0x16 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #7 ldr r0, [r5, #0x50] mov r1, #2 lsl r2, r2, #6 mov r3, #0x16 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r2, #2 ldr r0, [r5, #0x50] mov r1, #3 lsl r2, r2, #8 mov r3, #0x16 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r0, #0x16 bl BgConfig_Alloc str r0, [r5, #0x30] @@ -3654,16 +3654,16 @@ _0222F3AE: bl FUN_02002CF8 ldr r0, [r4, #0x50] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x50] mov r1, #1 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x50] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x50] mov r1, #3 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x50] bl FUN_02002FEC ldr r0, [r4, #0x48] @@ -4209,7 +4209,7 @@ MOD12_0222F834: ; 0x0222F834 mov r1, #0x2d mov r2, #0x22 mov r3, #0x16 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -4220,7 +4220,7 @@ MOD12_0222F834: ; 0x0222F834 mov r1, #0x2d mov r2, #0x23 mov r3, #0x16 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r1, [r5] ldr r0, _0222F930 ; =0x00001988 ldr r0, [r1, r0] @@ -4248,7 +4248,7 @@ MOD12_0222F834: ; 0x0222F834 ldr r0, [r5, #0x50] mov r1, #0x26 mov r3, #0x16 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] str r0, [sp, #4] @@ -4283,7 +4283,7 @@ MOD12_0222F834: ; 0x0222F834 mov r1, #0x2d mov r2, #0x24 mov r3, #0x16 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r3, r4, r5, pc} .align 2, 0 @@ -4332,7 +4332,7 @@ MOD12_0222F938: ; 0x0222F938 mov r1, #0x2d mov r2, #0x21 mov r3, #0x16 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r4, pc} @@ -5058,14 +5058,14 @@ MOD12_0222FE4C: ; 0x0222FE4C mov r1, #0 lsl r2, r2, #8 mov r3, #0x17 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xa4 mov r1, #1 ldr r0, [r0] lsl r2, r1, #9 mov r3, #0x17 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xa4 mov r2, #7 @@ -5073,7 +5073,7 @@ MOD12_0222FE4C: ; 0x0222FE4C mov r1, #2 lsl r2, r2, #6 mov r3, #0x17 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xa4 mov r2, #2 @@ -5081,7 +5081,7 @@ MOD12_0222FE4C: ; 0x0222FE4C mov r1, #3 lsl r2, r2, #8 mov r3, #0x17 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r1, #2 mov r0, #0x17 lsl r1, r1, #8 @@ -5484,22 +5484,22 @@ _02230296: add r0, #0xa4 ldr r0, [r0] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xa4 ldr r0, [r0] mov r1, #1 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xa4 ldr r0, [r0] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xa4 ldr r0, [r0] mov r1, #3 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xa4 ldr r0, [r0] @@ -6207,7 +6207,7 @@ MOD12_022308F0: ; 0x022308F0 mov r1, #0x2d mov r2, #0x1f mov r3, #0x17 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -6220,7 +6220,7 @@ MOD12_022308F0: ; 0x022308F0 mov r1, #0x2d mov r2, #0x23 mov r3, #0x17 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r1, [r5] ldr r0, _022309C4 ; =0x00001988 ldr r0, [r1, r0] @@ -6250,7 +6250,7 @@ MOD12_022308F0: ; 0x022308F0 ldr r0, [r0] mov r1, #0x26 mov r3, #0x17 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r5, #0 bl MOD12_0223E734 add r0, r5, #0 @@ -8479,7 +8479,7 @@ _02231A98: add r0, r6, #0 mov r1, #0x2d mov r3, #0x15 - bl FUN_020030E8 + bl PaletteData_LoadNarc add r0, r6, #0 mov r1, #1 bl FUN_020031FC @@ -8607,7 +8607,7 @@ _02231B90: add r1, r7, r1 ldr r1, [r1, #0x34] mov r3, #0 - bl FUN_02003054 + bl PaletteData_LoadPalette ldr r6, [sp, #0x14] ldr r4, [sp, #0x10] mov r5, #0 @@ -8910,7 +8910,7 @@ MOD12_02231D5C: ; 0x02231D5C str r0, [sp, #0xc] ldr r0, [r2, #0x50] mov r2, #0x25 - bl FUN_02003084 + bl PaletteData_LoadFromNarc add sp, #0x1c pop {r3, r4, r5, r6, pc} nop @@ -9143,7 +9143,7 @@ _02231FC0: ldr r0, [r0, #0x50] mov r2, #1 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette ldr r0, _022320A0 ; =0x000002E1 ldrb r0, [r6, r0] cmp r0, #0xff @@ -9927,7 +9927,7 @@ MOD12_022325AC: ; 0x022325AC ldr r1, [r7, r1] mov r2, #1 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette add sp, #0x18 pop {r3, r4, r5, r6, r7, pc} _022325EC: @@ -9953,7 +9953,7 @@ _022325EC: ldr r0, [r0, #0x50] mov r2, #1 lsr r3, r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette add sp, #0x18 pop {r3, r4, r5, r6, r7, pc} nop @@ -29230,7 +29230,7 @@ _0223B7D6: ldr r1, [r1] mov r2, #1 mov r3, #0 - bl FUN_02003054 + bl PaletteData_LoadPalette _0223B7F2: ldr r4, [sp, #0x10] mov r5, #0 @@ -41150,14 +41150,14 @@ MOD12_02241210: ; 0x02241210 mov r1, #0 lsl r2, r2, #8 mov r3, #0x18 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xd0 mov r1, #1 ldr r0, [r0] lsl r2, r1, #9 mov r3, #0x18 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xd0 mov r2, #7 @@ -41165,7 +41165,7 @@ MOD12_02241210: ; 0x02241210 mov r1, #2 lsl r2, r2, #6 mov r3, #0x18 - bl FUN_02003008 + bl PaletteData_AllocBuffers add r0, r5, #0 add r0, #0xd0 mov r2, #2 @@ -41173,7 +41173,7 @@ MOD12_02241210: ; 0x02241210 mov r1, #3 lsl r2, r2, #8 mov r3, #0x18 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r0, #0x18 bl BgConfig_Alloc str r0, [r5, #0x30] @@ -41519,22 +41519,22 @@ _022415D4: add r0, #0xd0 ldr r0, [r0] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] mov r1, #1 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] mov r1, #3 - bl FUN_02003038 + bl PaletteData_FreeBuffers add r0, r4, #0 add r0, #0xd0 ldr r0, [r0] @@ -42193,7 +42193,7 @@ MOD12_02241BA0: ; 0x02241BA0 mov r1, #0x2d mov r2, #0x21 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r4, pc} .align 2, 0 @@ -43656,7 +43656,7 @@ MOD12_022426BC: ; 0x022426BC mov r1, #0x2d mov r2, #0x22 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -43669,7 +43669,7 @@ MOD12_022426BC: ; 0x022426BC mov r1, #0x2d mov r2, #0x23 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r1, [r5] ldr r0, _02242784 ; =0x00001988 ldr r0, [r1, r0] @@ -43699,7 +43699,7 @@ MOD12_022426BC: ; 0x022426BC ldr r0, [r0] mov r1, #0x26 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r0, [r5, #0x30] mov r1, #2 bl BgClearTilemapBufferAndCommit @@ -43826,7 +43826,7 @@ MOD12_02242804: ; 0x02242804 mov r1, #0x2d mov r2, #0x26 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -43839,7 +43839,7 @@ MOD12_02242804: ; 0x02242804 mov r1, #0x2d mov r2, #0x23 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc ldr r1, [r6] ldr r0, _022429D0 ; =0x00001988 ldr r0, [r1, r0] @@ -43869,7 +43869,7 @@ MOD12_02242804: ; 0x02242804 ldr r0, [r0] mov r1, #0x26 mov r3, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0xc mov r1, #0x18 bl String_ctor diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index cbb58d60..3a7d9e76 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -1134,12 +1134,12 @@ MOD61_021D7CE8: ; 0x021D7CE8 ldr r3, [r5] mov r1, #0 mov r2, #0xe0 - bl FUN_02003008 + bl PaletteData_AllocBuffers ldr r0, [r5, #0x30] ldr r3, [r5] mov r1, #2 mov r2, #0x60 - bl FUN_02003008 + bl PaletteData_AllocBuffers mov r0, #0x60 str r0, [sp] ldr r1, [sp, #0x24] @@ -1147,7 +1147,7 @@ MOD61_021D7CE8: ; 0x021D7CE8 ldr r0, [r5, #0x30] ldr r1, [r1, #0xc] add r3, r2, #0 - bl FUN_02003054 + bl PaletteData_LoadPalette ldrb r0, [r5, #0xc] cmp r0, #1 bne _021D7E00 @@ -1159,7 +1159,7 @@ MOD61_021D7CE8: ; 0x021D7CE8 mov r2, #0 add r1, #0x60 mov r3, #0x10 - bl FUN_02003054 + bl PaletteData_LoadPalette _021D7E00: mov r0, #2 str r0, [sp] @@ -1170,7 +1170,7 @@ _021D7E00: ldr r0, [r5, #0x30] ldr r3, [r5] mov r1, #0x13 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -1181,7 +1181,7 @@ _021D7E00: ldr r3, [r5] mov r1, #0xe mov r2, #6 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -1192,7 +1192,7 @@ _021D7E00: ldr r3, [r5] mov r1, #0xe mov r2, #7 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -1203,7 +1203,7 @@ _021D7E00: ldr r3, [r5] mov r1, #0x26 mov r2, #0x18 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -1215,7 +1215,7 @@ _021D7E00: ldr r3, [r5] mov r1, #0x26 add r2, #0x19 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0x10 mov r1, #0 str r0, [sp] @@ -1365,10 +1365,10 @@ MOD61_021D7FB4: ; 0x021D7FB4 bl FreeToHeap ldr r0, [r4, #0x30] mov r1, #2 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x30] mov r1, #0 - bl FUN_02003038 + bl PaletteData_FreeBuffers ldr r0, [r4, #0x30] bl FUN_02002FEC mov r1, #0 diff --git a/arm9/modules/62/asm/module_62.s b/arm9/modules/62/asm/module_62.s index 313e1dd9..35c6e17d 100644 --- a/arm9/modules/62/asm/module_62.s +++ b/arm9/modules/62/asm/module_62.s @@ -3115,7 +3115,7 @@ MOD62_0222ED34: ; 0x0222ED34 add r0, r4, #0 mov r1, #0x26 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x35 @@ -3136,7 +3136,7 @@ MOD62_0222ED34: ; 0x0222ED34 add r0, r4, #0 mov r1, #0x26 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -3147,7 +3147,7 @@ MOD62_0222ED34: ; 0x0222ED34 mov r1, #0xe mov r2, #7 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0xc pop {r3, r4, r5, r6, pc} thumb_func_end MOD62_0222ED34 @@ -3180,7 +3180,7 @@ MOD62_0222EDBC: ; 0x0222EDBC add r0, r4, #0 mov r1, #0x26 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] mov r0, #0x35 @@ -3201,7 +3201,7 @@ MOD62_0222EDBC: ; 0x0222EDBC add r0, r4, #0 mov r1, #0x26 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] mov r0, #0x20 @@ -3212,7 +3212,7 @@ MOD62_0222EDBC: ; 0x0222EDBC mov r1, #0xe mov r2, #7 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] mov r0, #0x20 @@ -3223,7 +3223,7 @@ MOD62_0222EDBC: ; 0x0222EDBC mov r1, #0xe mov r2, #7 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #1 str r0, [sp] mov r0, #0x20 @@ -3235,7 +3235,7 @@ MOD62_0222EDBC: ; 0x0222EDBC add r0, r4, #0 add r2, #0xcb mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0xc pop {r3, r4, r5, r6, pc} .align 2, 0 @@ -3829,7 +3829,7 @@ MOD62_0222F2C8: ; 0x0222F2C8 ldr r0, [r0] add r2, #0xc5 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc mov r0, #0 str r0, [sp] str r0, [sp, #4] @@ -3910,7 +3910,7 @@ MOD62_0222F36C: ; 0x0222F36C ldr r0, [r4] add r2, #0xc4 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r4, pc} .align 2, 0 @@ -3963,7 +3963,7 @@ MOD62_0222F3D4: ; 0x0222F3D4 ldr r0, [r4] add r2, #0xc4 mov r3, #0x35 - bl FUN_020030E8 + bl PaletteData_LoadNarc add sp, #0x10 pop {r4, pc} .align 2, 0 diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c index b81da622..20a22b7d 100644 --- a/arm9/src/unk_02002F08.c +++ b/arm9/src/unk_02002F08.c @@ -60,53 +60,53 @@ THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) UNK_02106FC8->unk94[param0], String_c_str(str)); } -THUMB_FUNC struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id) +THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) { - struct UnkStruct_02002F08 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02002F08)); - MI_CpuFill8(ptr, 0, sizeof(struct UnkStruct_02002F08)); + struct PaletteData *ptr = AllocFromHeap(heap_id, sizeof(struct PaletteData)); + MI_CpuFill8(ptr, 0, sizeof(struct PaletteData)); return ptr; } -THUMB_FUNC void FUN_02002FEC(struct UnkStruct_02002F08 *ptr) +THUMB_FUNC void FUN_02002FEC(struct PaletteData *ptr) { FreeToHeap(ptr); } -THUMB_FUNC void FUN_02002FF4( - struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size) +THUMB_FUNC void PaletteData_SetBuffers( + struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) { - param0->unk000[param1].unk00 = param2; - param0->unk000[param1].unk04 = param3; - param0->unk000[param1].unk08 = size; + paletteData->pltt[index].unfadedBuf = unfadedBuf; + paletteData->pltt[index].fadedBuf = fadedBuf; + paletteData->pltt[index].bufSize = size; } -THUMB_FUNC void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id) +THUMB_FUNC void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id) { void *ptr = AllocFromHeap(heap_id, size); void *ptr2 = AllocFromHeap(heap_id, size); - FUN_02002FF4(param0, param1, ptr, ptr2, size); + PaletteData_SetBuffers(paletteData, index, ptr, ptr2, size); } -THUMB_FUNC void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1) +THUMB_FUNC void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index) { - FreeToHeap(param0->unk000[param1].unk00); - FreeToHeap(param0->unk000[param1].unk04); + FreeToHeap(paletteData->pltt[index].unfadedBuf); + FreeToHeap(paletteData->pltt[index].fadedBuf); } -THUMB_FUNC void FUN_02003054( - struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size) +THUMB_FUNC void PaletteData_LoadPalette( + struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) { - MIi_CpuCopy16(param1, param0->unk000[param2].unk00 + offset, size); - MIi_CpuCopy16(param1, param0->unk000[param2].unk04 + offset, size); + MIi_CpuCopy16(src, paletteData->pltt[index].unfadedBuf + offset, size); + MIi_CpuCopy16(src, paletteData->pltt[index].fadedBuf + offset, size); } -THUMB_FUNC void FUN_02003084(struct UnkStruct_02002F08 *param0, +THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, - u32 param4, + u32 index, u32 size, u16 offset, u16 param7) @@ -121,19 +121,19 @@ THUMB_FUNC void FUN_02003084(struct UnkStruct_02002F08 *param0, size = pltData->szByte; } - GF_ASSERT(size + offset * 2 <= param0->unk000[param4].unk08); + GF_ASSERT(size + offset * 2 <= paletteData->pltt[index].bufSize); - FUN_02003054(param0, pltData->pRawData + param7 * 2, param4, offset, (u16)size); + PaletteData_LoadPalette(paletteData, pltData->pRawData + param7 * 2, index, offset, (u16)size); FreeToHeap(ptr); } -THUMB_FUNC void FUN_020030E8(struct UnkStruct_02002F08 *param0, +THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, - u32 param4, + u32 index, u32 size, u16 offset) { - FUN_02003084(param0, narcId, memberId, heap_id, param4, size, offset, 0); + PaletteData_LoadFromNarc(paletteData, narcId, memberId, heap_id, index, size, offset, 0); } diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c index 697ffd19..74abf49b 100644 --- a/arm9/src/unk_020030E8.c +++ b/arm9/src/unk_020030E8.c @@ -10,9 +10,9 @@ extern void *FUN_02022308(); extern void *FUN_02022310(); extern int abs(int); -THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3) +THUMB_FUNC void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3) { - GF_ASSERT(param2 * 2 + param3 <= param0->unk000[param1].unk08); + GF_ASSERT(param2 * 2 + param3 <= param0->pltt[param1].bufSize); u16 *r1; switch (param1) @@ -34,7 +34,7 @@ THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 return; } - FUN_02003054(param0, r1 + param2, param1, param2, (u16)param3); + PaletteData_LoadPalette(param0, r1 + param2, param1, param2, (u16)param3); } THUMB_FUNC void FUN_0200317C( @@ -56,26 +56,26 @@ THUMB_FUNC void FUN_0200317C( } THUMB_FUNC void FUN_020031B8( - struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) + struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) { MI_CpuCopy16( - param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5); + param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].unfadedBuf + param4, param5); MI_CpuCopy16( - param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5); + param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].fadedBuf + param4, param5); } -THUMB_FUNC u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1) +THUMB_FUNC u16 *FUN_020031FC(struct PaletteData *param0, u32 param1) { - return param0->unk000[param1].unk00; + return param0->pltt[param1].unfadedBuf; } -THUMB_FUNC u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1) +THUMB_FUNC u16 *FUN_02003204(struct PaletteData *param0, u32 param1) { - return param0->unk000[param1].unk04; + return param0->pltt[param1].fadedBuf; } -THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, +THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, u16 param1, u16 param2, s16 param3, @@ -99,9 +99,9 @@ THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, continue; } - FUN_02003368(r4, ¶m0->unk000[r4], ¶m2); + FUN_02003368(r4, ¶m0->pltt[r4], ¶m2); - FUN_020033A4(¶m0->unk000[r4].unk0c, param2, param3, param6, param7, param8); + FUN_020033A4(¶m0->pltt[r4].unk0c, param2, param3, param6, param7, param8); FUN_02003328(param0, r4); @@ -149,7 +149,7 @@ THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) return (u8)r3; } -THUMB_FUNC void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1) +THUMB_FUNC void FUN_02003328(struct PaletteData *param0, u16 param1) { if (FUN_02003314(param0->unk11a_0, param1) != 1) { @@ -157,16 +157,16 @@ THUMB_FUNC void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1) } } -THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2) +THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) { u8 r0; if (param0 < 4) { - r0 = (u8)(param1->unk08 >> 5); + r0 = (u8)(param1->bufSize >> 5); } else { - r0 = (u8)(param1->unk08 >> 9); + r0 = (u8)(param1->bufSize >> 9); } u16 r4 = 0; @@ -178,7 +178,7 @@ THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, *param2 &= r4; } -THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, +THUMB_FUNC void FUN_020033A4(struct PaletteControl *param0, u16 param1, s16 param2, u8 param3, @@ -211,7 +211,7 @@ THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, param0->unk04_f = 1; } -THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1) +THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) { if (param1->unk11c == 1) { @@ -237,7 +237,7 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1) } } -THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0) +THUMB_FUNC void FUN_02003500(struct PaletteData *param0) { for (u8 i = 0; i < 4; i++) { @@ -245,7 +245,7 @@ THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0) } } -THUMB_FUNC void FUN_02003520(struct UnkStruct_02002F08 *param0) +THUMB_FUNC void FUN_02003520(struct PaletteData *param0) { for (u8 i = 4; i < 14; i++) { @@ -253,40 +253,40 @@ THUMB_FUNC void FUN_02003520(struct UnkStruct_02002F08 *param0) } } -THUMB_FUNC void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2) +THUMB_FUNC void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2) { if (FUN_02003314(param0->unk118_2, param1) != 0) { - if (param0->unk000[param1].unk0c.unk06_4 < param0->unk000[param1].unk0c.unk02_0) + if (param0->pltt[param1].unk0c.unk06_4 < param0->pltt[param1].unk0c.unk02_0) { - param0->unk000[param1].unk0c.unk06_4++; + param0->pltt[param1].unk0c.unk06_4++; return; } - param0->unk000[param1].unk0c.unk06_4 = 0; + param0->pltt[param1].unk0c.unk06_4 = 0; FUN_0200359C(param0, param1, param2); } } -THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2) { for (u32 r6 = 0; r6 < 0x10; r6++) { - if (FUN_02003314(param0->unk000[param1].unk0c.unk00, (u16)r6) != 0) + if (FUN_02003314(param0->pltt[param1].unk0c.unk00, (u16)r6) != 0) { - FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, - param0->unk000[param1].unk04 + param2 * r6, - ¶m0->unk000[param1].unk0c, + FUN_020035F8(param0->pltt[param1].unfadedBuf + param2 * r6, + param0->pltt[param1].fadedBuf + param2 * r6, + ¶m0->pltt[param1].unk0c, param2); } } - FUN_02003684(param0, (u8)param1, ¶m0->unk000[param1].unk0c); + FUN_02003684(param0, (u8)param1, ¶m0->pltt[param1].unk0c); } THUMB_FUNC void FUN_020035F8( - u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3) + u16 *param0, u16 *param1, struct PaletteControl *param2, u32 param3) { for (u32 i = 0; i < param3; i++) { @@ -307,7 +307,7 @@ THUMB_FUNC void FUN_020035F8( } THUMB_FUNC void FUN_02003684( - struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2) + struct PaletteData *param0, u8 param1, struct PaletteControl *param2) { s16 r4; if (param2->unk02_6 == param2->unk02_b) @@ -345,7 +345,7 @@ THUMB_FUNC void FUN_02003684( param2->unk02_6 = r4; } -THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0) +THUMB_FUNC void FUN_0200372C(struct PaletteData *param0) { if (param0->unk11a_f == 0 && param0->unk118_0 != 1) { @@ -355,72 +355,72 @@ THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0) for (s32 r5 = 0; r5 < 14; r5++) { if (param0->unk11a_f != 0 || - (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) + (param0->pltt[r5].fadedBuf != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) { - DC_FlushRange(param0->unk000[r5].unk04, param0->unk000[r5].unk08); + DC_FlushRange(param0->pltt[r5].fadedBuf, param0->pltt[r5].bufSize); switch (r5) { case 0: - GX_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); break; case 1: - GXS_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); break; case 2: - GX_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); break; case 3: - GXS_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); break; case 4: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); GX_EndLoadBGExtPltt(); break; case 5: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08); + GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); GX_EndLoadBGExtPltt(); break; case 6: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08); + GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); GX_EndLoadBGExtPltt(); break; case 7: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08); + GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); GX_EndLoadBGExtPltt(); break; case 8: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); GXS_EndLoadBGExtPltt(); break; case 9: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08); + GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); GXS_EndLoadBGExtPltt(); break; case 10: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08); + GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); GXS_EndLoadBGExtPltt(); break; case 11: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08); + GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); GXS_EndLoadBGExtPltt(); break; case 12: GX_BeginLoadOBJExtPltt(); - GX_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GX_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); GX_EndLoadOBJExtPltt(); break; case 13: GXS_BeginLoadOBJExtPltt(); - GXS_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08); + GXS_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); GXS_EndLoadOBJExtPltt(); break; } @@ -434,28 +434,28 @@ THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0) } } -THUMB_FUNC u16 FUN_020038E4(struct UnkStruct_02002F08 *param0) +THUMB_FUNC u16 FUN_020038E4(struct PaletteData *param0) { return param0->unk118_2; } -THUMB_FUNC void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1) +THUMB_FUNC void FUN_020038F0(struct PaletteData *param0, u32 param1) { param0->unk11a_f = param1; } THUMB_FUNC void FUN_02003914( - struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) + struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) { - GF_ASSERT(param5 * 2 <= param0->unk000[param1].unk08); + GF_ASSERT(param5 * 2 <= param0->pltt[param1].bufSize); if (param2 - 1 <= 1) { - MI_CpuFill16(¶m0->unk000[param1].unk00[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(¶m0->pltt[param1].unfadedBuf[param4], param3, (u32)((param5 - param4) * 2)); } if (param2 == 0 || param2 == 2) { - MI_CpuFill16(¶m0->unk000[param1].unk04[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(¶m0->pltt[param1].fadedBuf[param4], param3, (u32)((param5 - param4) * 2)); } } @@ -545,18 +545,18 @@ _020039E2: #endif THUMB_FUNC void FUN_020039E8( - struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) + struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) { BOOL r0 = FALSE; - if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0) + if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) { r0 = TRUE; } GF_ASSERT(r0); - FUN_02003974(param0->unk000[param1].unk00 + param2, - param0->unk000[param1].unk04 + param2, + FUN_02003974(param0->pltt[param1].unfadedBuf + param2, + param0->pltt[param1].fadedBuf + param2, param3, param4, param5); @@ -578,11 +578,11 @@ THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u1 } THUMB_FUNC void FUN_02003A64( - struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4) + struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4) { u32 r4 = 0; BOOL r0 = FALSE; - if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0) + if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) { r0 = TRUE; } @@ -602,7 +602,7 @@ THUMB_FUNC void FUN_02003A64( } #ifdef NONMATCHING -THUMB_FUNC void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4) +THUMB_FUNC void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { s32 r4, lo, mid, hi, add; for (r4 = 0; r4 < param1; r4++) @@ -634,7 +634,7 @@ THUMB_FUNC void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u3 } } #else -asm void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4) +asm void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { // clang-format off push {r3-r7, lr} @@ -707,7 +707,7 @@ _02003B3C: } #endif -THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, +THUMB_FUNC void FUN_02003B40(struct PaletteData *param0, NarcId narcId, s32 memberId, u32 heap_id, @@ -728,7 +728,7 @@ THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, } FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9); - FUN_02003054(param0, pltData->pRawData, param4, param6, (u16)param5); + PaletteData_LoadPalette(param0, pltData->pRawData, param4, param6, (u16)param5); FreeToHeap(ptr); } diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index 859e44b0..d5553eb2 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -5,7 +5,7 @@ #include "gf_gfx_loader.h" #include "string16.h" -struct UnkStruct_02002F08_sub_sub +struct PaletteControl { u16 unk00; @@ -21,17 +21,17 @@ struct UnkStruct_02002F08_sub_sub u16 unk06_a : 6; }; -struct UnkStruct_02002F08_sub +struct Palette { - u16 *unk00; - u16 *unk04; - u32 unk08; - struct UnkStruct_02002F08_sub_sub unk0c; + u16 *unfadedBuf; + u16 *fadedBuf; + u32 bufSize; + struct PaletteControl unk0c; }; -struct UnkStruct_02002F08 +struct PaletteData { - struct UnkStruct_02002F08_sub unk000[14]; + struct Palette pltt[14]; u16 unk118_0 : 2; u16 unk118_2 : 14; @@ -48,15 +48,15 @@ u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3); u32 FUN_02002F58(const u16 *str); u32 FUN_02002F90(struct String *str); s32 FUN_02002F9C(u32 param0, struct String *str); -struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id); -void FUN_02002FEC(struct UnkStruct_02002F08 *ptr); -void FUN_02002FF4( - struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size); -void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id); -void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1); -void FUN_02003054( - struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size); -void FUN_02003084(struct UnkStruct_02002F08 *param0, +struct PaletteData *FUN_02002FD0(u32 heap_id); +void FUN_02002FEC(struct PaletteData *ptr); +void PaletteData_SetBuffers( + struct PaletteData *param0, u32 param1, void *param2, void *param3, u32 size); +void PaletteData_AllocBuffers(struct PaletteData *param0, u32 param1, u32 size, u32 heap_id); +void PaletteData_FreeBuffers(struct PaletteData *param0, u32 param1); +void PaletteData_LoadPalette( + struct PaletteData *param0, const void *param1, u32 param2, u32 offset, u16 size); +void PaletteData_LoadFromNarc(struct PaletteData *param0, NarcId narcId, s32 memberId, u32 heap_id, @@ -64,7 +64,7 @@ void FUN_02003084(struct UnkStruct_02002F08 *param0, u32 size, u16 offset, u16 param7); -void FUN_020030E8(struct UnkStruct_02002F08 *param0, +void PaletteData_LoadNarc(struct PaletteData *param0, NarcId narcId, s32 memberId, u32 heap_id, diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h index f211b611..346b9715 100644 --- a/include/unk_020030E8.h +++ b/include/unk_020030E8.h @@ -2,13 +2,13 @@ #include "filesystem.h" #include "unk_02002F08.h" -void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3); +void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3); void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); void FUN_020031B8( - struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); -u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1); -u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1); -u32 FUN_02003210(struct UnkStruct_02002F08 *param0, + struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); +u16 *FUN_020031FC(struct PaletteData *param0, u32 param1); +u16 *FUN_02003204(struct PaletteData *param0, u32 param1); +u32 FUN_02003210(struct PaletteData *param0, u16 param1, u16 param2, s16 param3, @@ -16,34 +16,34 @@ u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u8 param7, u16 param8); u8 FUN_02003314(u16 param0, u16 param1); -void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1); -void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2); -void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, +void FUN_02003328(struct PaletteData *param0, u16 param1); +void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2); +void FUN_020033A4(struct PaletteControl *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5); -void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1); -void FUN_02003500(struct UnkStruct_02002F08 *param0); -void FUN_02003520(struct UnkStruct_02002F08 *param0); -void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2); -void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2); -void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3); +void FUN_02003464(u32 param0, struct PaletteData *param1); +void FUN_02003500(struct PaletteData *param0); +void FUN_02003520(struct PaletteData *param0); +void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2); +void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2); +void FUN_020035F8(u16 *param0, u16 *param1, struct PaletteControl *param2, u32 param3); void FUN_02003684( - struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2); -void FUN_0200372C(struct UnkStruct_02002F08 *param0); -u16 FUN_020038E4(struct UnkStruct_02002F08 *param0); -void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1); + struct PaletteData *param0, u8 param1, struct PaletteControl *param2); +void FUN_0200372C(struct PaletteData *param0); +u16 FUN_020038E4(struct PaletteData *param0); +void FUN_020038F0(struct PaletteData *param0, u32 param1); void FUN_02003914( - struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); + struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); void FUN_020039E8( - struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); + struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4); -void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4); -void FUN_02003B40(struct UnkStruct_02002F08 *param0, +void FUN_02003A64(struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4); +void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4); +void FUN_02003B40(struct PaletteData *param0, NarcId narcId, s32 memberId, u32 heap_id, -- cgit v1.2.3 From ba803600ac7ceef20799ee7b0c4da0409cbbbea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 12:23:19 +0200 Subject: partially document unk_020030E8.c --- arm9/asm/unk_02006D98.s | 4 +- arm9/asm/unk_020142EC.s | 4 +- arm9/global.inc | 18 +- arm9/modules/05/asm/mod05_021E3444.s | 2 +- arm9/modules/08/asm/module_08.s | 26 +-- arm9/modules/09/asm/module_09.s | 4 +- arm9/modules/11/asm/module_11_thumb1.s | 16 +- arm9/modules/11/asm/module_11_thumb2.s | 36 +-- arm9/modules/12/asm/module_12.s | 58 ++--- arm9/modules/16/asm/module_16.s | 4 +- arm9/modules/61/asm/module_61.s | 10 +- arm9/src/unk_020030E8.c | 409 ++++++++++++++++----------------- include/unk_02002F08.h | 31 ++- include/unk_020030E8.h | 28 +-- 14 files changed, 328 insertions(+), 322 deletions(-) diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s index 526c52c7..01721a1a 100644 --- a/arm9/asm/unk_02006D98.s +++ b/arm9/asm/unk_02006D98.s @@ -3724,7 +3724,7 @@ _020087E0: add r1, r2, r1 ldrb r3, [r3, #0x0] mov r2, #0x10 - bl FUN_02003974 + bl BlendPalette add r0, r4, #0x0 add r0, #0x6c ldrh r0, [r0, #0x0] @@ -3748,7 +3748,7 @@ _020087E0: add r1, r2, r1 ldrb r3, [r3, #0x0] mov r2, #0x10 - bl FUN_02003974 + bl BlendPalette _02008862: add r0, r4, #0x0 add r0, #0x49 diff --git a/arm9/asm/unk_020142EC.s b/arm9/asm/unk_020142EC.s index e7c3e769..3a0426d5 100644 --- a/arm9/asm/unk_020142EC.s +++ b/arm9/asm/unk_020142EC.s @@ -23,7 +23,7 @@ FUN_020142EC: ; 0x020142EC bne _02014320 add r0, r5, #0x0 mov r1, #0x0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf str r0, [sp, #0x0] ldr r0, _02014398 ; =FUN_020144E0 str r0, [r4, #0x4] @@ -31,7 +31,7 @@ FUN_020142EC: ; 0x020142EC _02014320: add r0, r5, #0x0 mov r1, #0x1 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf str r0, [sp, #0x0] ldr r0, _0201439C ; =FUN_020144FC str r0, [r4, #0x4] diff --git a/arm9/global.inc b/arm9/global.inc index 12a68207..4f028bbd 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -251,19 +251,19 @@ .extern PaletteData_LoadFromNarc .extern PaletteData_LoadNarc .extern FUN_02003108 -.extern FUN_0200317C -.extern FUN_020031B8 -.extern FUN_020031FC -.extern FUN_02003204 +.extern CopyPaletteFromNarc +.extern PaletteData_CopyPalette +.extern PaletteData_GetUnfadedBuf +.extern PaletteData_GetFadedBuf .extern FUN_02003210 .extern FUN_0200372C .extern FUN_020038E4 .extern FUN_020038F0 -.extern FUN_02003914 -.extern FUN_02003974 -.extern FUN_020039E8 -.extern FUN_02003A30 -.extern FUN_02003A64 +.extern PaletteData_FillPalette +.extern BlendPalette +.extern BlendPaletteUnfaded +.extern BlendPalettes +.extern BlendPalettesUnfaded .extern FUN_02003B40 .extern InitSoundData .extern DoSoundUpdateFrame diff --git a/arm9/modules/05/asm/mod05_021E3444.s b/arm9/modules/05/asm/mod05_021E3444.s index 9bd14da2..0537d0db 100644 --- a/arm9/modules/05/asm/mod05_021E3444.s +++ b/arm9/modules/05/asm/mod05_021E3444.s @@ -1474,7 +1474,7 @@ MOD05_021E3F68: ; 0x021E3F68 ldr r0, [sp, #4] add r3, r7, #0 ldr r0, [r0, #0xc] - bl FUN_02003974 + bl BlendPalette add r0, r6, #0 add r1, r5, #0 mov r2, #0x20 diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s index 902d44d7..1cc36e88 100644 --- a/arm9/modules/08/asm/module_08.s +++ b/arm9/modules/08/asm/module_08.s @@ -4754,7 +4754,7 @@ _02214142: ldr r0, [r0] add r2, #0x64 mov r3, #0x10 - bl FUN_02003A64 + bl BlendPalettesUnfaded b _022141B8 _02214180: mov r3, #0 @@ -4782,7 +4782,7 @@ _02214180: ldr r0, [r0] add r2, #0x64 mov r3, #0x10 - bl FUN_02003A64 + bl BlendPalettesUnfaded _022141B8: ldrb r0, [r4, #5] add r0, r0, #1 @@ -4917,7 +4917,7 @@ _02214286: ldr r0, [r0] lsr r2, r2, #0x10 mov r3, #0x10 - bl FUN_02003A64 + bl BlendPalettesUnfaded b _022142FA _022142C2: mov r3, #0 @@ -4945,7 +4945,7 @@ _022142C2: mov r1, #0 lsr r2, r2, #0x10 mov r3, #0x10 - bl FUN_02003A64 + bl BlendPalettesUnfaded _022142FA: ldrb r0, [r4, #5] add r0, r0, #1 @@ -14563,7 +14563,7 @@ MOD08_02218A84: ; 0x02218A84 ldrh r3, [r4, #0xe] ldr r0, [r4, #0x18] ldr r1, [r4, #8] - bl FUN_020039E8 + bl BlendPaletteUnfaded ldrb r3, [r4, #0x13] ldrb r1, [r4, #0x14] cmp r1, r3 @@ -14728,7 +14728,7 @@ MOD08_02218BD4: ; 0x02218BD4 add r5, r0, #0 bl MOD08_02215504 mov r1, #0 - bl FUN_02003204 + bl PaletteData_GetFadedBuf add r4, r0, #0 add r0, r5, #0 bl MOD08_02212004 @@ -14763,7 +14763,7 @@ MOD08_02218C04: ; 0x02218C04 add r0, r4, #0 add r2, r1, #0 add r3, r1, #0 - bl FUN_020031B8 + bl PaletteData_CopyPalette add sp, #8 pop {r3, r4, r5, pc} _02218C30: @@ -14775,7 +14775,7 @@ _02218C30: add r0, r4, #0 add r2, r1, #0 add r3, r1, #0 - bl FUN_020031B8 + bl PaletteData_CopyPalette add sp, #8 pop {r3, r4, r5, pc} @@ -26031,7 +26031,7 @@ _0221E796: mov r2, #0xff mov r3, #0xa str r1, [sp] - bl FUN_02003A64 + bl BlendPalettesUnfaded b _0221E7DA _0221E7C8: bl MOD08_02215504 @@ -26040,7 +26040,7 @@ _0221E7C8: str r1, [sp] mov r1, #0 mov r3, #0xa - bl FUN_02003A64 + bl BlendPalettesUnfaded _0221E7DA: mov r0, #3 strb r0, [r4, #3] @@ -26085,7 +26085,7 @@ _0221E810: mov r2, #0xff add r3, r1, #0 str r1, [sp] - bl FUN_02003A64 + bl BlendPalettesUnfaded _0221E832: mov r6, #0 add r5, r4, #0 @@ -34520,7 +34520,7 @@ _02222DA6: ldr r0, [r4, #0x18] lsl r2, r2, #8 mov r3, #8 - bl FUN_02003A64 + bl BlendPalettesUnfaded ldr r0, [r4] ldr r1, _02222E18 ; =MOD08_02222BF4 add r2, r4, #0 @@ -38691,7 +38691,7 @@ MOD08_02224F74: ; 0x02224F74 mov r1, #2 lsr r2, r2, #0x10 mov r3, #8 - bl FUN_02003A64 + bl BlendPalettesUnfaded add sp, #4 pop {r3, r4, pc} .align 2, 0 diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s index 5ca32f7e..c5b40b5e 100644 --- a/arm9/modules/09/asm/module_09.s +++ b/arm9/modules/09/asm/module_09.s @@ -2224,7 +2224,7 @@ MOD09_02212F8C: ; 0x02212F8C lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #1 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r2, r0, #0 ldr r0, _02213134 ; =0x00001F60 mov r1, #6 @@ -2300,7 +2300,7 @@ MOD09_02212F8C: ; 0x02212F8C lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #1 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r5] mov r1, #0x20 diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 3f932185..1040df95 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -911,14 +911,14 @@ _0222DC42: str r0, [r4, #0x18] ldr r0, [r4, #0x28] mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf ldr r1, _0222DF24 ; =0x00002224 mov r2, #0xe0 add r1, r4, r1 bl MIi_CpuCopy16 ldr r0, [r4, #0x28] mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf ldr r1, _0222DF28 ; =0x00002304 mov r2, #0xe0 add r1, r4, r1 @@ -942,7 +942,7 @@ _0222DC42: mov r2, #2 lsl r3, r3, #0x10 lsr r3, r3, #0x10 - bl FUN_02003914 + bl PaletteData_FillPalette mov r0, #0xc0 str r0, [sp] add r0, #0x40 @@ -960,7 +960,7 @@ _0222DC42: lsl r3, r3, #0x10 mov r2, #2 lsr r3, r3, #0x10 - bl FUN_02003914 + bl PaletteData_FillPalette mov r0, #0 str r0, [sp] mov r0, #0xdf @@ -978,7 +978,7 @@ _0222DC42: add r2, r1, #0 lsl r3, r3, #0x10 lsr r3, r3, #0x10 - bl FUN_02003914 + bl PaletteData_FillPalette mov r1, #0 mov r0, #0xa0 str r0, [sp] @@ -987,7 +987,7 @@ _0222DC42: ldr r0, [r4, #0x28] add r2, r1, #0 add r3, r1, #0 - bl FUN_02003914 + bl PaletteData_FillPalette mov r2, #0 str r2, [sp] mov r0, #0xff @@ -995,7 +995,7 @@ _0222DC42: ldr r0, [r4, #0x28] ldr r3, _0222DF30 ; =0x0000FFFF mov r1, #1 - bl FUN_02003914 + bl PaletteData_FillPalette mov r2, #0 str r2, [sp] mov r0, #0xff @@ -1003,7 +1003,7 @@ _0222DC42: ldr r0, [r4, #0x28] ldr r3, _0222DF30 ; =0x0000FFFF mov r1, #3 - bl FUN_02003914 + bl PaletteData_FillPalette ldr r0, [r4, #0x28] mov r1, #0 mov r2, #0xb diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s index 8af139bc..1905bce4 100644 --- a/arm9/modules/11/asm/module_11_thumb2.s +++ b/arm9/modules/11/asm/module_11_thumb2.s @@ -39,7 +39,7 @@ MOD11_0222F29C: ; 0x0222F29C ldr r0, [r5, #0xc] mov r2, #2 add r3, r1, #0 - bl FUN_02003914 + bl PaletteData_FillPalette mov r0, #5 bl BgConfig_Alloc str r0, [r5, #4] @@ -164,7 +164,7 @@ _0222F30E: ldr r0, [r5, #0xc] add r2, r1, #0 add r3, r1, #0 - bl FUN_02003914 + bl PaletteData_FillPalette bl GX_BothDispOn mov r0, #0x10 mov r1, #1 @@ -3859,7 +3859,7 @@ MOD11_02230FCC: ; 0x02230FCC ldr r5, [r4, r0] ldr r0, [r4, #0x28] mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf mov r2, #2 add r1, r5, #0 lsl r2, r2, #8 @@ -73745,7 +73745,7 @@ _0225319A: bne _02253286 add r0, r5, #0 mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r7, r0, #0 ldr r0, [r4] bl MOD11_02231244 @@ -73758,7 +73758,7 @@ _0225319A: bne _022531DC add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r7, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73773,7 +73773,7 @@ _022531DC: tst r0, r1 beq _02253200 add r0, r5, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r7, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73789,7 +73789,7 @@ _02253200: beq _02253226 add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r7, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73800,7 +73800,7 @@ _02253200: _02253226: add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r7, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73897,7 +73897,7 @@ _022532E4: _022532F6: add r0, r5, #0 mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r4] bl MOD11_02231244 @@ -73910,7 +73910,7 @@ _022532F6: bne _02253332 add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73925,7 +73925,7 @@ _02253332: tst r0, r1 beq _02253356 add r0, r5, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73941,7 +73941,7 @@ _02253356: beq _0225337C add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -73952,7 +73952,7 @@ _02253356: _0225337C: add r0, r5, #0 mov r1, #2 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r6, r0, #0 ldr r0, [r4] bl MOD11_02231250 @@ -83966,7 +83966,7 @@ _022580F2: add r2, #0xf lsl r2, r2, #0x10 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded add sp, #8 pop {r3, r4, r5, r6, r7, pc} _02258112: @@ -83995,7 +83995,7 @@ _0225812A: add r2, #0xf lsl r2, r2, #0x10 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded add sp, #8 pop {r3, r4, r5, r6, r7, pc} _0225814A: @@ -84526,7 +84526,7 @@ _0225854E: bl PaletteData_LoadNarc ldr r0, [sp, #0x10] mov r1, #1 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf mov r2, #2 ldr r1, [r6, #0x58] lsl r2, r2, #8 @@ -90735,7 +90735,7 @@ MOD11_0225B794: ; 0x0225B794 ldr r0, _0225B81C ; =0x00007FFF str r0, [sp, #4] add r0, r4, #0 - bl FUN_020039E8 + bl BlendPaletteUnfaded ldr r1, _0225B820 ; =0x000006A8 _0225B7C8: ldrb r0, [r5, r1] @@ -90805,7 +90805,7 @@ MOD11_0225B824: ; 0x0225B824 bne _0225B8A8 add r0, r4, #0 mov r1, #1 - bl FUN_02003204 + bl PaletteData_GetFadedBuf add r4, r0, #0 ldr r0, _0225B8AC ; =gMain + 0x40 ldrh r0, [r0, #0x22] diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 6c817679..53833b86 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -1175,11 +1175,11 @@ MOD12_0222DFC4: ; 0x0222DFC4 str r0, [sp, #0x10] ldr r0, [r5, #0x5c] mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf add r4, r0, #0 ldr r0, [r5, #0x5c] mov r1, #0 - bl FUN_02003204 + bl PaletteData_GetFadedBuf str r0, [sp, #0x14] ldr r0, _0222E0EC ; =MOD12_022451D0 add r1, r7, #0 @@ -3311,7 +3311,7 @@ MOD12_0222EF04: ; 0x0222EF04 ldr r0, [r5, #0x50] ldr r3, _0222F17C ; =0x00007FFF add r2, r1, #0 - bl FUN_02003914 + bl PaletteData_FillPalette mov r1, #1 add r0, r1, #0 str r1, [sp] @@ -3320,7 +3320,7 @@ MOD12_0222EF04: ; 0x0222EF04 ldr r0, [r5, #0x50] ldr r3, _0222F17C ; =0x00007FFF mov r2, #0 - bl FUN_02003914 + bl PaletteData_FillPalette mov r2, #0 str r2, [sp] mov r0, #0xe0 @@ -3328,7 +3328,7 @@ MOD12_0222EF04: ; 0x0222EF04 ldr r0, [r5, #0x50] ldr r3, _0222F17C ; =0x00007FFF mov r1, #2 - bl FUN_02003914 + bl PaletteData_FillPalette mov r2, #0 mov r0, #1 str r2, [sp] @@ -3337,7 +3337,7 @@ MOD12_0222EF04: ; 0x0222EF04 ldr r0, [r5, #0x50] ldr r3, _0222F17C ; =0x00007FFF mov r1, #3 - bl FUN_02003914 + bl PaletteData_FillPalette bl FUN_02033E74 mov r0, #6 str r0, [sp] @@ -5670,7 +5670,7 @@ MOD12_022304B0: ; 0x022304B0 add r0, #0xa4 ldr r0, [r0] mov r1, #0 - bl FUN_02003204 + bl PaletteData_GetFadedBuf add r4, r0, #0 mov r2, #2 ldr r0, [r5] @@ -5689,7 +5689,7 @@ MOD12_022304B0: ; 0x022304B0 asr r3, r3, #8 lsl r3, r3, #0x18 lsr r3, r3, #0x18 - bl FUN_02003A30 + bl BlendPalettes ldrh r3, [r5, #0xa] ldrh r1, [r5, #8] cmp r1, r3 @@ -6257,7 +6257,7 @@ MOD12_022308F0: ; 0x022308F0 add r0, #0xa4 ldr r0, [r0] mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf ldr r1, _022309C8 ; =0x0000110C mov r2, #2 ldr r1, [r5, r1] @@ -8482,7 +8482,7 @@ _02231A98: bl PaletteData_LoadNarc add r0, r6, #0 mov r1, #1 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf lsl r1, r5, #2 add r1, r4, r1 ldr r1, [r1, #0x34] @@ -10644,7 +10644,7 @@ _02232B46: mov r3, #0x10 lsl r2, r2, #0x14 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded cmp r4, #1 bne _02232B70 add r0, r5, #0 @@ -12129,7 +12129,7 @@ MOD12_02233648: ; 0x02233648 add r2, r2, #1 lsl r2, r2, #0x10 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded mov r1, #8 ldrsh r2, [r4, r1] cmp r2, #0 @@ -15894,7 +15894,7 @@ _02235402: str r0, [sp, #4] ldr r0, [r4] ldr r0, [r0, #0x5c] - bl FUN_020039E8 + bl BlendPaletteUnfaded add sp, #0x10 pop {r3, r4, r5, pc} _0223541C: @@ -15922,7 +15922,7 @@ _02235438: str r0, [sp, #4] ldr r0, [r4] ldr r0, [r0, #0x5c] - bl FUN_020039E8 + bl BlendPaletteUnfaded add sp, #0x10 pop {r3, r4, r5, pc} _02235452: @@ -25922,14 +25922,14 @@ _02239E14: ldr r2, _02239E8C ; =0x00001FFF ldr r0, [r0, #0x50] add r3, r1, #0 - bl FUN_02003A64 + bl BlendPalettesUnfaded mov r3, #0 str r3, [sp] ldr r0, [r4] ldr r2, _02239E90 ; =0x00003FFF ldr r0, [r0, #0x50] mov r1, #2 - bl FUN_02003A64 + bl BlendPalettesUnfaded ldr r0, _02239E94 ; =0x000006EC bl PlaySE ldrb r0, [r4, #0x10] @@ -28300,7 +28300,7 @@ _0223B06C: add r2, r1, #0 ldr r0, [r0, #0x50] add r3, r1, #0 - bl FUN_02003914 + bl PaletteData_FillPalette mov r2, #0 str r2, [sp] mov r0, #0xe0 @@ -28309,7 +28309,7 @@ _0223B06C: mov r1, #2 ldr r0, [r0, #0x50] add r3, r2, #0 - bl FUN_02003914 + bl PaletteData_FillPalette ldrb r0, [r4, #0x10] add sp, #8 add r0, r0, #1 @@ -29079,7 +29079,7 @@ MOD12_0223B4F8: ; 0x0223B4F8 mov r1, #0x1e mov r2, #0x17 lsl r3, r3, #8 - bl FUN_0200317C + bl CopyPaletteFromNarc ldr r0, [r4, #4] mov r2, #0x17 ldr r1, [r0] @@ -29096,7 +29096,7 @@ MOD12_0223B4F8: ; 0x0223B4F8 add r0, #0x40 str r0, [sp, #4] mov r0, #0x2d - bl FUN_0200317C + bl CopyPaletteFromNarc mov r0, #0 mov r1, #0x20 add r4, #0xf0 @@ -29106,7 +29106,7 @@ MOD12_0223B4F8: ; 0x0223B4F8 str r0, [sp, #4] mov r0, #0x2d lsl r3, r1, #4 - bl FUN_0200317C + bl CopyPaletteFromNarc add sp, #0x10 pop {r3, r4, r5, pc} .align 2, 0 @@ -30553,7 +30553,7 @@ MOD12_0223C1F4: ; 0x0223C1F4 ldr r0, [r0] mov r2, #0 mov r3, #0x40 - bl FUN_020039E8 + bl BlendPaletteUnfaded add sp, #8 pop {r3, pc} @@ -35423,7 +35423,7 @@ MOD12_0223E750: ; 0x0223E750 add r5, r1, #0 ldr r0, [r0] mov r1, #0 - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf ldr r3, _0223E77C ; =MOD12_0224620C lsl r5, r5, #2 ldrh r1, [r3, r5] @@ -35435,7 +35435,7 @@ MOD12_0223E750: ; 0x0223E750 lsl r3, r3, #0x18 ldr r1, [r4, r1] lsr r3, r3, #0x18 - bl FUN_02003A30 + bl BlendPalettes pop {r3, r4, r5, pc} .align 2, 0 _0223E77C: .word MOD12_0224620C @@ -35646,7 +35646,7 @@ MOD12_0223E8EC: ; 0x0223E8EC mov r1, #0 add r0, #0xa4 ldr r0, [r0] - bl FUN_020031FC + bl PaletteData_GetUnfadedBuf ldrb r1, [r4, #0xa] lsl r3, r1, #1 ldr r1, _0223E94C ; =0x00007FFF @@ -35661,7 +35661,7 @@ MOD12_0223E8EC: ; 0x0223E8EC asr r3, r3, #8 lsl r3, r3, #0x18 lsr r3, r3, #0x18 - bl FUN_02003974 + bl BlendPalette ldrh r1, [r4, #8] cmp r1, #0 bne _0223E932 @@ -36309,7 +36309,7 @@ _0223EE30: add r0, #8 mov r2, #1 lsr r3, r3, #0x18 - bl FUN_02003974 + bl BlendPalette add r1, sp, #4 ldrh r1, [r1] ldr r0, [r5] @@ -44010,7 +44010,7 @@ MOD12_022429E0: ; 0x022429E0 ldr r0, [r0] mov r1, #1 mov r2, #2 - bl FUN_02003914 + bl PaletteData_FillPalette mov r3, #0 mov r0, #1 str r3, [sp] @@ -44020,7 +44020,7 @@ MOD12_022429E0: ; 0x022429E0 ldr r0, [r4] mov r1, #3 mov r2, #2 - bl FUN_02003914 + bl PaletteData_FillPalette add sp, #8 pop {r4, pc} diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index 480aa929..73e8460b 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -49734,7 +49734,7 @@ MOD16_021EE5D0: ; 0x021EE5D0 ldr r1, [r1] mov r2, #0x30 add r3, r7, #0 - bl FUN_02003974 + bl BlendPalette ldr r0, [sp, #4] mov r1, #1 bl NNS_G2dGetImagePaletteLocation @@ -49759,7 +49759,7 @@ MOD16_021EE5D0: ; 0x021EE5D0 ldr r1, [r1] mov r2, #0x50 add r3, r7, #0 - bl FUN_02003974 + bl BlendPalette ldr r0, [sp, #8] mov r1, #1 bl NNS_G2dGetImagePaletteLocation diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index 3a7d9e76..d58310fa 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -466,7 +466,7 @@ _021D77F2: add r2, #0x22 lsl r2, r2, #0x10 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded ldrb r0, [r5, #0x16] strb r0, [r5, #0x17] mov r0, #0 @@ -780,7 +780,7 @@ _021D7ABC: lsl r2, r3, #0x10 lsr r2, r2, #0x10 mov r3, #1 - bl FUN_020039E8 + bl BlendPaletteUnfaded ldrb r0, [r4, #0x16] strb r0, [r4, #0x17] mov r0, #0 @@ -798,7 +798,7 @@ _021D7AEA: add r2, #0x22 lsl r2, r2, #0x10 lsr r2, r2, #0x10 - bl FUN_020039E8 + bl BlendPaletteUnfaded ldrb r0, [r4, #0x15] ldrb r1, [r4, #0x14] cmp r0, #0 @@ -1223,7 +1223,7 @@ _021D7E00: ldr r0, [r5, #0x30] add r2, r1, #0 mov r3, #0x70 - bl FUN_020039E8 + bl BlendPaletteUnfaded mov r0, #0x10 str r0, [sp] mov r2, #0 @@ -1231,7 +1231,7 @@ _021D7E00: ldr r0, [r5, #0x30] mov r1, #2 mov r3, #0x30 - bl FUN_020039E8 + bl BlendPaletteUnfaded ldr r0, [r5, #0x30] mov r1, #1 bl FUN_020038F0 diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c index 74abf49b..d9e410dc 100644 --- a/arm9/src/unk_020030E8.c +++ b/arm9/src/unk_020030E8.c @@ -10,34 +10,34 @@ extern void *FUN_02022308(); extern void *FUN_02022310(); extern int abs(int); -THUMB_FUNC void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3) +THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size) { - GF_ASSERT(param2 * 2 + param3 <= param0->pltt[param1].bufSize); + GF_ASSERT(offset * 2 + size <= paletteData->pltt[index].bufSize); - u16 *r1; - switch (param1) + u16 *ptr; + switch (index) { case 0: - r1 = FUN_020222E8(); + ptr = FUN_020222E8(); break; case 1: - r1 = FUN_020222F8(); + ptr = FUN_020222F8(); break; case 2: - r1 = FUN_02022308(); + ptr = FUN_02022308(); break; case 3: - r1 = FUN_02022310(); + ptr = FUN_02022310(); break; default: GF_ASSERT(FALSE); return; } - PaletteData_LoadPalette(param0, r1 + param2, param1, param2, (u16)param3); + PaletteData_LoadPalette(paletteData, ptr + offset, index, offset, (u16)size); } -THUMB_FUNC void FUN_0200317C( +THUMB_FUNC void CopyPaletteFromNarc( NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) { NNSG2dPaletteData *pltData; @@ -55,63 +55,63 @@ THUMB_FUNC void FUN_0200317C( FreeToHeap(ptr); } -THUMB_FUNC void FUN_020031B8( - struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5) +THUMB_FUNC void PaletteData_CopyPalette( + struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size) { MI_CpuCopy16( - param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].unfadedBuf + param4, param5); + paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].unfadedBuf + destOffset, size); MI_CpuCopy16( - param0->pltt[param1].unfadedBuf + param2, param0->pltt[param3].fadedBuf + param4, param5); + paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].fadedBuf + destOffset, size); } -THUMB_FUNC u16 *FUN_020031FC(struct PaletteData *param0, u32 param1) +THUMB_FUNC u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index) { - return param0->pltt[param1].unfadedBuf; + return paletteData->pltt[index].unfadedBuf; } -THUMB_FUNC u16 *FUN_02003204(struct PaletteData *param0, u32 param1) +THUMB_FUNC u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index) { - return param0->pltt[param1].fadedBuf; + return paletteData->pltt[index].fadedBuf; } -THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, +THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, - s16 param3, - u8 param6, - u8 param7, - u16 param8) + s16 delay, + u8 startY, + u8 targetY, + u16 color) { u16 stc = param2; u32 r6 = 0; - for (u8 r4 = 0; r4 < 14; r4++) + for (u8 i = 0; i < 14; i++) { - if (FUN_02003314(param1, r4) != 1) + if (IsPaletteSelected(param1, i) != 1) { continue; } - if (FUN_02003314(param0->unk118_2, r4) != 0) + if (IsPaletteSelected(paletteData->activeFadePalettes, i) != 0) { continue; } - FUN_02003368(r4, ¶m0->pltt[r4], ¶m2); + FUN_02003368(i, &paletteData->pltt[i], ¶m2); - FUN_020033A4(¶m0->pltt[r4].unk0c, param2, param3, param6, param7, param8); + FUN_020033A4(&paletteData->pltt[i].fadeCtrl, param2, delay, startY, targetY, color); - FUN_02003328(param0, r4); + FUN_02003328(paletteData, i); - if (r4 >= 4) + if (i >= 4) { - FUN_0200359C(param0, r4, 0x100); + FUN_0200359C(paletteData, i, 0x100); } else { - FUN_0200359C(param0, r4, 0x10); + FUN_0200359C(paletteData, i, 0x10); } param2 = stc; @@ -120,17 +120,17 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, if (r6 == 1) { - param0->unk118_2 |= param1; - if (param0->unk11a_e == 0) + paletteData->activeFadePalettes |= param1; + if (paletteData->unk11a_e == 0) { - param0->unk11a_e = 1; + paletteData->unk11a_e = 1; - param0->unk118_0 = 1; - param0->unk11c = 0; + paletteData->unk118_0 = 1; + paletteData->unk11c = 0; // wtf is that? FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, - (struct TextPrinter *)param0, + (struct TextPrinter *)paletteData, (u32)(-2)); } } @@ -138,10 +138,10 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *param0, return r6; } -THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) +THUMB_FUNC u8 IsPaletteSelected(u16 selectedPalettes, u16 index) { u32 r3 = 1; - if ((param0 & (1 << param1)) == 0) + if ((selectedPalettes & (1 << index)) == 0) { r3 = 0; } @@ -151,7 +151,7 @@ THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1) THUMB_FUNC void FUN_02003328(struct PaletteData *param0, u16 param1) { - if (FUN_02003314(param0->unk11a_0, param1) != 1) + if (IsPaletteSelected(param0->unk11a_0, param1) != 1) { param0->unk11a_0 |= 1 << param1; } @@ -178,37 +178,37 @@ THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) *param2 &= r4; } -THUMB_FUNC void FUN_020033A4(struct PaletteControl *param0, - u16 param1, - s16 param2, - u8 param3, - u8 param4, - u16 param5) +THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, + u16 selectedPalettes, + s16 delay, + u8 startY, + u8 targetY, + u16 color) { - if (param2 < 0) + if (delay < 0) { - param0->unk06_0 = abs(param2) + 2; - param0->unk02_0 = 0; + paletteFade->deltaY = abs(delay) + 2; + paletteFade->delay = 0; } else { - param0->unk06_0 = 2; - param0->unk02_0 = param2; + paletteFade->deltaY = 2; + paletteFade->delay = delay; } - param0->unk00 = param1; - param0->unk02_6 = param3; - param0->unk02_b = param4; - param0->unk04_0 = param5; + paletteFade->selectedPalettes = selectedPalettes; + paletteFade->y = startY; + paletteFade->targetY = targetY; + paletteFade->blendColor = color; - param0->unk06_4 = param0->unk02_0; + paletteFade->delayCounter = paletteFade->delay; - if (param3 < param4) + if (startY < targetY) { - param0->unk04_f = 0; + paletteFade->yDec = 0; return; } - param0->unk04_f = 1; + paletteFade->yDec = 1; } THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) @@ -217,7 +217,7 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) { param1->unk11c = 0; param1->unk11a_0 = 0; - param1->unk118_2 = 0; + param1->activeFadePalettes = 0; param1->unk11a_e = 0; FUN_0200CAB4((s32)param0); return; @@ -225,11 +225,11 @@ THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) if (param1->unk118_0 == 1) { - param1->unk11a_0 = param1->unk118_2; + param1->unk11a_0 = param1->activeFadePalettes; FUN_02003500(param1); FUN_02003520(param1); - if (param1->unk118_2 == 0) + if (param1->activeFadePalettes == 0) { param1->unk11a_e = 0; FUN_0200CAB4((s32)param0); @@ -253,232 +253,233 @@ THUMB_FUNC void FUN_02003520(struct PaletteData *param0) } } -THUMB_FUNC void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2) +THUMB_FUNC void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 param2) { - if (FUN_02003314(param0->unk118_2, param1) != 0) + if (IsPaletteSelected(paletteData->activeFadePalettes, index) != 0) { - if (param0->pltt[param1].unk0c.unk06_4 < param0->pltt[param1].unk0c.unk02_0) + if (paletteData->pltt[index].fadeCtrl.delayCounter < paletteData->pltt[index].fadeCtrl.delay) { - param0->pltt[param1].unk0c.unk06_4++; + paletteData->pltt[index].fadeCtrl.delayCounter++; return; } - param0->pltt[param1].unk0c.unk06_4 = 0; - FUN_0200359C(param0, param1, param2); + paletteData->pltt[index].fadeCtrl.delayCounter = 0; + FUN_0200359C(paletteData, index, param2); } } -THUMB_FUNC void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 param2) { - for (u32 r6 = 0; r6 < 0x10; r6++) + for (u32 i = 0; i < 0x10; i++) { - if (FUN_02003314(param0->pltt[param1].unk0c.unk00, (u16)r6) != 0) + if (IsPaletteSelected(paletteData->pltt[index].fadeCtrl.selectedPalettes, (u16)i) != 0) { - FUN_020035F8(param0->pltt[param1].unfadedBuf + param2 * r6, - param0->pltt[param1].fadedBuf + param2 * r6, - ¶m0->pltt[param1].unk0c, + FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, + paletteData->pltt[index].fadedBuf + param2 * i, + &paletteData->pltt[index].fadeCtrl, param2); } } - FUN_02003684(param0, (u8)param1, ¶m0->pltt[param1].unk0c); + FUN_02003684(paletteData, (u8)index, &paletteData->pltt[index].fadeCtrl); } THUMB_FUNC void FUN_020035F8( - u16 *param0, u16 *param1, struct PaletteControl *param2, u32 param3) + u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) { - for (u32 i = 0; i < param3; i++) + for (u32 i = 0; i < numEntries; i++) { - u8 lo = (u8)((param0[i] & 0x1f) + - ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4)); + u8 lo = (u8)((src[i] & 0x1f) + + ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); - u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + - (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * - param2->unk02_6) >> + u8 hi = (u8)(((src[i] >> 10) & 0x1f) + + (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * + fadeCtrl->y) >> 4)); - u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + - (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * - param2->unk02_6) >> + u8 mid = (u8)(((src[i] >> 5) & 0x1f) + + (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * + fadeCtrl->y) >> 4)); - param1[i] = (u16)((hi << 10) | (mid << 5) | lo); + dest[i] = (u16)((hi << 10) | (mid << 5) | lo); } } THUMB_FUNC void FUN_02003684( - struct PaletteData *param0, u8 param1, struct PaletteControl *param2) + struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) { - s16 r4; - if (param2->unk02_6 == param2->unk02_b) + if (fadeCtrl->y == fadeCtrl->targetY) { - if ((param0->unk118_2 & (1 << param1)) == 0) + if ((paletteData->activeFadePalettes & (1 << index)) == 0) { return; } - param0->unk118_2 ^= (1 << param1); + paletteData->activeFadePalettes ^= (1 << index); return; } - if (param2->unk04_f == 0) + + s16 val; + if (fadeCtrl->yDec == 0) { - r4 = (s16)param2->unk02_6; - r4 += param2->unk06_0; - if (r4 > param2->unk02_b) + val = (s16)fadeCtrl->y; + val += fadeCtrl->deltaY; + if (val > fadeCtrl->targetY) { - r4 = (s16)param2->unk02_b; + val = (s16)fadeCtrl->targetY; } - param2->unk02_6 = r4; + fadeCtrl->y = val; return; } - r4 = (s16)param2->unk02_6; - r4 -= param2->unk06_0; - if (r4 < param2->unk02_b) + val = (s16)fadeCtrl->y; + val -= fadeCtrl->deltaY; + if (val < fadeCtrl->targetY) { - r4 = (s16)param2->unk02_b; + val = (s16)fadeCtrl->targetY; } - param2->unk02_6 = r4; + fadeCtrl->y = val; } -THUMB_FUNC void FUN_0200372C(struct PaletteData *param0) +THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) { - if (param0->unk11a_f == 0 && param0->unk118_0 != 1) + if (paletteData->unk11a_f == 0 && paletteData->unk118_0 != 1) { return; } - for (s32 r5 = 0; r5 < 14; r5++) + for (s32 i = 0; i < 14; i++) { - if (param0->unk11a_f != 0 || - (param0->pltt[r5].fadedBuf != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0)) + if (paletteData->unk11a_f != 0 || + (paletteData->pltt[i].fadedBuf != 0 && IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) { - DC_FlushRange(param0->pltt[r5].fadedBuf, param0->pltt[r5].bufSize); + DC_FlushRange(paletteData->pltt[i].fadedBuf, paletteData->pltt[i].bufSize); - switch (r5) + switch (i) { case 0: - GX_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 1: - GXS_LoadBGPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 2: - GX_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 3: - GXS_LoadOBJPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); break; case 4: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 5: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 6: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 7: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 8: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 9: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x2000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 10: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x4000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 11: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(param0->pltt[r5].fadedBuf, 0x6000, param0->pltt[r5].bufSize); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 12: GX_BeginLoadOBJExtPltt(); - GX_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GX_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadOBJExtPltt(); break; case 13: GXS_BeginLoadOBJExtPltt(); - GXS_LoadOBJExtPltt(param0->pltt[r5].fadedBuf, 0, param0->pltt[r5].bufSize); + GXS_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadOBJExtPltt(); break; } } } - param0->unk11a_0 = param0->unk118_2; - if (param0->unk11a_0 == 0) + paletteData->unk11a_0 = paletteData->activeFadePalettes; + if (paletteData->unk11a_0 == 0) { - param0->unk118_0 = 0; + paletteData->unk118_0 = 0; } } -THUMB_FUNC u16 FUN_020038E4(struct PaletteData *param0) +THUMB_FUNC u16 FUN_020038E4(struct PaletteData *paletteData) { - return param0->unk118_2; + return paletteData->activeFadePalettes; } -THUMB_FUNC void FUN_020038F0(struct PaletteData *param0, u32 param1) +THUMB_FUNC void FUN_020038F0(struct PaletteData *paletteData, u32 param1) { - param0->unk11a_f = param1; + paletteData->unk11a_f = param1; } -THUMB_FUNC void FUN_02003914( - struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5) +THUMB_FUNC void PaletteData_FillPalette( + struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset) { - GF_ASSERT(param5 * 2 <= param0->pltt[param1].bufSize); - if (param2 - 1 <= 1) + GF_ASSERT(endOffset * 2 <= paletteData->pltt[index].bufSize); + if (selection == 1 || selection == 2) { - MI_CpuFill16(¶m0->pltt[param1].unfadedBuf[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); } - if (param2 == 0 || param2 == 2) + if (selection == 0 || selection == 2) { - MI_CpuFill16(¶m0->pltt[param1].fadedBuf[param4], param3, (u32)((param5 - param4) * 2)); + MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); } } #ifdef NONMATCHING -THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) { - s32 r12 = ((u32)(param4 << 0x1b)) >> 0x1b; - s32 lr = ((u32)(param4 << 0x16)) >> 0x1b; - s32 st8 = ((u32)(param4 << 0x11)) >> 0x1b; + s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; + s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; + s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; s32 lo, mid, hi; - for (u16 i = 0; i < param2; i++) + for (u16 i = 0; i < numEntries; i++) { - lo = (((u32)(param0[i] << 0x1b)) >> 0x1b); - mid = (((u32)(param0[i] << 0x16)) >> 0x1b); - hi = (((u32)(param0[i] << 0x11)) >> 0x1b); + lo = (((u32)(src[i] << 0x1b)) >> 0x1b); + mid = (((u32)(src[i] << 0x16)) >> 0x1b); + hi = (((u32)(src[i] << 0x11)) >> 0x1b); - param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | - (hi + ((st8 - hi) * param3) >> 4) << 10; + dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | + (hi + ((st8 - hi) * coeff) >> 4) << 10; } } #else -asm void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) { // clang-format off push {r4-r7, lr} @@ -544,97 +545,93 @@ _020039E2: } #endif -THUMB_FUNC void FUN_020039E8( - struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5) +THUMB_FUNC void BlendPaletteUnfaded( + struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor) { BOOL r0 = FALSE; - if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) { r0 = TRUE; } GF_ASSERT(r0); - FUN_02003974(param0->pltt[param1].unfadedBuf + param2, - param0->pltt[param1].fadedBuf + param2, - param3, - param4, - param5); + BlendPalette(paletteData->pltt[index].unfadedBuf + offset, + paletteData->pltt[index].fadedBuf + offset, + numEntries, + coeff, + blendColor); } -THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor) { - while (param2 != 0) + while (selectedPalettes != 0) { - if ((param2 & 1) != 0) + if ((selectedPalettes & 1) != 0) { - FUN_02003974(param0, param1, 0x10, param3, param4); + BlendPalette(src, dest, 0x10, coeff, blendColor); } - param2 >>= 1; - param1 += 0x10; - param0 += 0x10; + selectedPalettes >>= 1; + dest += 0x10; + src += 0x10; } } -THUMB_FUNC void FUN_02003A64( - struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4) +THUMB_FUNC void BlendPalettesUnfaded( + struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) { u32 r4 = 0; BOOL r0 = FALSE; - if (param0->pltt[param1].unfadedBuf != 0 && param0->pltt[param1].fadedBuf != 0) + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) { r0 = TRUE; } GF_ASSERT(r0); - while (param2 != 0) + while (selectedPalettes != 0) { - if ((param2 & 1) != 0) + if ((selectedPalettes & 1) != 0) { - FUN_020039E8(param0, param1, (u16)r4, 0x10, param3, param4); + BlendPaletteUnfaded(paletteData, index, (u16)r4, 0x10, coeff, blendColor); } - param2 >>= 1; + selectedPalettes >>= 1; r4 += 0x10; } } #ifdef NONMATCHING -THUMB_FUNC void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) { - s32 r4, lo, mid, hi, add; - for (r4 = 0; r4 < param1; r4++) + s32 r, g, b, i; + u32 gray; + + for (i = 0; i < count; i++) { - lo = ((param0[r4]) & 0x1f); - mid = ((param0[r4] >> 5) & 0x1f); - hi = ((param0[r4] >> 10) & 0x1f); + r = (*palette >> 0) & 0x1F; + g = (*palette >> 5) & 0x1F; + b = (*palette >> 10) & 0x1F; - add = (lo * 0x4c + mid * 0x97 + hi * 0x1d) >> 8; + gray = (r *76 + g * 151 + b * 29) >> 8; - lo = (u16)(add * param2) >> 8; - mid = (u16)(add * param3) >> 8; - hi = (u16)(add * param4) >> 8; + r = (u16)((rTone * gray)) >> 8; + g = (u16)((gTone * gray)) >> 8; + b = (u16)((bTone * gray)) >> 8; - if (lo > 0x1f) - { - lo = 0x1f; - } - if (mid > 0x1f) - { - mid = 0x1f; - } - if (hi > 0x1f) - { - hi = 0x1f; - } + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; - param0[r4] = (hi << 10) | (mid << 5) | lo; + *palette++ = (b << 10) | (g << 5) | (r << 0); } } #else -asm void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +asm void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) { // clang-format off push {r3-r7, lr} @@ -707,28 +704,28 @@ _02003B3C: } #endif -THUMB_FUNC void FUN_02003B40(struct PaletteData *param0, +THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, - u32 param4, - u32 param5, - u16 param6, - u32 param7, - u32 param8, - u32 param9) + u32 index, + u32 size, + u16 offset, + u32 rTone, + u32 gTone, + u32 bTone) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); GF_ASSERT(ptr != NULL); - if (param5 == 0) + if (size == 0) { - param5 = pltData->szByte; + size = pltData->szByte; } - FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9); - PaletteData_LoadPalette(param0, pltData->pRawData, param4, param6, (u16)param5); + TintPalette_CustomTone(pltData->pRawData, 0x10, rTone, gTone, bTone); + PaletteData_LoadPalette(paletteData, pltData->pRawData, index, offset, (u16)size); FreeToHeap(ptr); } diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index d5553eb2..c4bfeddd 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -5,19 +5,28 @@ #include "gf_gfx_loader.h" #include "string16.h" -struct PaletteControl + +struct PlttData +{ + u16 r:5; // red + u16 g:5; // green + u16 b:5; // blue + u16 unused_15:1; +}; + +struct PaletteFadeControl { - u16 unk00; + u16 selectedPalettes; - u16 unk02_0 : 6; - u16 unk02_6 : 5; - u16 unk02_b : 5; + u16 delay : 6; + u16 y : 5; + u16 targetY : 5; - u16 unk04_0 : 15; - u16 unk04_f : 1; + u16 blendColor : 15; + u16 yDec : 1; - u16 unk06_0 : 4; - u16 unk06_4 : 6; + u16 deltaY : 4; + u16 delayCounter : 6; u16 unk06_a : 6; }; @@ -26,7 +35,7 @@ struct Palette u16 *unfadedBuf; u16 *fadedBuf; u32 bufSize; - struct PaletteControl unk0c; + struct PaletteFadeControl fadeCtrl; }; struct PaletteData @@ -34,7 +43,7 @@ struct PaletteData struct Palette pltt[14]; u16 unk118_0 : 2; - u16 unk118_2 : 14; + u16 activeFadePalettes : 14; u16 unk11a_0 : 14; u16 unk11a_e : 1; u16 unk11a_f : 1; diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h index 346b9715..bf71ca7f 100644 --- a/include/unk_020030E8.h +++ b/include/unk_020030E8.h @@ -3,11 +3,11 @@ #include "unk_02002F08.h" void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3); -void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); -void FUN_020031B8( +void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); +void PaletteData_CopyPalette( struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); -u16 *FUN_020031FC(struct PaletteData *param0, u32 param1); -u16 *FUN_02003204(struct PaletteData *param0, u32 param1); +u16 *PaletteData_GetUnfadedBuf(struct PaletteData *param0, u32 param1); +u16 *PaletteData_GetFadedBuf(struct PaletteData *param0, u32 param1); u32 FUN_02003210(struct PaletteData *param0, u16 param1, u16 param2, @@ -15,10 +15,10 @@ u32 FUN_02003210(struct PaletteData *param0, u8 param6, u8 param7, u16 param8); -u8 FUN_02003314(u16 param0, u16 param1); +u8 IsPaletteSelected(u16 param0, u16 param1); void FUN_02003328(struct PaletteData *param0, u16 param1); void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2); -void FUN_020033A4(struct PaletteControl *param0, +void FUN_020033A4(struct PaletteFadeControl *param0, u16 param1, s16 param2, u8 param3, @@ -29,20 +29,20 @@ void FUN_02003500(struct PaletteData *param0); void FUN_02003520(struct PaletteData *param0); void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2); void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2); -void FUN_020035F8(u16 *param0, u16 *param1, struct PaletteControl *param2, u32 param3); +void FUN_020035F8(u16 *param0, u16 *param1, struct PaletteFadeControl *param2, u32 param3); void FUN_02003684( - struct PaletteData *param0, u8 param1, struct PaletteControl *param2); + struct PaletteData *param0, u8 param1, struct PaletteFadeControl *param2); void FUN_0200372C(struct PaletteData *param0); u16 FUN_020038E4(struct PaletteData *param0); void FUN_020038F0(struct PaletteData *param0, u32 param1); -void FUN_02003914( +void PaletteData_FillPalette( struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); -void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void FUN_020039E8( +void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); +void BlendPaletteUnfaded( struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); -void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void FUN_02003A64(struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4); -void FUN_02003AC4(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4); +void BlendPalettes(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); +void BlendPalettesUnfaded(struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4); +void TintPalette_CustomTone(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4); void FUN_02003B40(struct PaletteData *param0, NarcId narcId, s32 memberId, -- cgit v1.2.3 From a89d505d8364ce739756750a45983312980a1ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 12:28:22 +0200 Subject: rename unk_020030E8.c to palette.c --- arm9/arm9.lsf | 2 +- arm9/src/palette.c | 683 ++++++++++++++++++++++++++++++++++++++++++++ arm9/src/unk_02002F08.c | 26 +- arm9/src/unk_020030E8.c | 731 ------------------------------------------------ include/palette.h | 31 ++ include/unk_02002F08.h | 27 +- include/unk_020030E8.h | 55 ---- 7 files changed, 726 insertions(+), 829 deletions(-) create mode 100644 arm9/src/palette.c delete mode 100644 arm9/src/unk_020030E8.c create mode 100644 include/palette.h delete mode 100644 include/unk_020030E8.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 66c41c14..346d40b7 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -12,7 +12,7 @@ Static arm9 Object render_text.o Object font.o Object unk_02002F08.o - Object unk_020030E8.o + Object palette.o Object sound.o Object unk_020040F4.o Object unk_020051F4.o diff --git a/arm9/src/palette.c b/arm9/src/palette.c new file mode 100644 index 00000000..5ffab028 --- /dev/null +++ b/arm9/src/palette.c @@ -0,0 +1,683 @@ +#include "global.h" +#include "palette.h" +#include "MI_memory.h" +#include "unk_02002F08.h" +#include "unk_0200CA44.h" + +extern void *FUN_020222E8(); +extern void *FUN_020222F8(); +extern void *FUN_02022308(); +extern void *FUN_02022310(); +extern int abs(int); + +THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size) +{ + GF_ASSERT(offset * 2 + size <= paletteData->pltt[index].bufSize); + + u16 *ptr; + switch (index) + { + case 0: + ptr = FUN_020222E8(); + break; + case 1: + ptr = FUN_020222F8(); + break; + case 2: + ptr = FUN_02022308(); + break; + case 3: + ptr = FUN_02022310(); + break; + default: + GF_ASSERT(FALSE); + return; + } + + PaletteData_LoadPalette(paletteData, ptr + offset, index, offset, (u16)size); +} + +THUMB_FUNC void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) +{ + NNSG2dPaletteData *pltData; + + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + GF_ASSERT(ptr != NULL); + + if (size == 0) + { + size = pltData->szByte; + } + + MI_CpuCopy16(pltData->pRawData + offset * 2, dest, size); + + FreeToHeap(ptr); +} + +THUMB_FUNC void PaletteData_CopyPalette(struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size) +{ + + MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].unfadedBuf + destOffset, size); + MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].fadedBuf + destOffset, size); +} + +THUMB_FUNC u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index) +{ + return paletteData->pltt[index].unfadedBuf; +} + +THUMB_FUNC u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index) +{ + return paletteData->pltt[index].fadedBuf; +} + +THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, s16 delay, u8 startY, u8 targetY, u16 color) +{ + + u16 stc = param2; + u32 r6 = 0; + + for (u8 i = 0; i < 14; i++) + { + if (IsPaletteSelected(param1, i) != 1) + { + continue; + } + + if (IsPaletteSelected(paletteData->activeFadePalettes, i) != 0) + { + continue; + } + + FUN_02003368(i, &paletteData->pltt[i], ¶m2); + + FUN_020033A4(&paletteData->pltt[i].fadeCtrl, param2, delay, startY, targetY, color); + + FUN_02003328(paletteData, i); + + if (i >= 4) + { + FUN_0200359C(paletteData, i, 0x100); + } + else + { + FUN_0200359C(paletteData, i, 0x10); + } + + param2 = stc; + r6 = 1; + } + + if (r6 == 1) + { + paletteData->activeFadePalettes |= param1; + if (paletteData->unk11a_e == 0) + { + paletteData->unk11a_e = 1; + + paletteData->unk118_0 = 1; + paletteData->unk11c = 0; + + // wtf is that? + FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)paletteData, (u32)(-2)); + } + } + + return r6; +} + +THUMB_FUNC u8 IsPaletteSelected(u16 selectedPalettes, u16 index) +{ + u32 r3 = 1; + if ((selectedPalettes & (1 << index)) == 0) + { + r3 = 0; + } + + return (u8)r3; +} + +THUMB_FUNC void FUN_02003328(struct PaletteData *param0, u16 param1) +{ + if (IsPaletteSelected(param0->unk11a_0, param1) != 1) + { + param0->unk11a_0 |= 1 << param1; + } +} + +THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) +{ + u8 r0; + if (param0 < 4) + { + r0 = (u8)(param1->bufSize >> 5); + } + else + { + r0 = (u8)(param1->bufSize >> 9); + } + + u16 r4 = 0; + for (u8 i = 0; i < r0; i++) + { + r4 += 1 << i; + } + + *param2 &= r4; +} + +THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, u16 selectedPalettes, s16 delay, u8 startY, u8 targetY, u16 color) +{ + if (delay < 0) + { + paletteFade->deltaY = abs(delay) + 2; + paletteFade->delay = 0; + } + else + { + paletteFade->deltaY = 2; + paletteFade->delay = delay; + } + + paletteFade->selectedPalettes = selectedPalettes; + paletteFade->y = startY; + paletteFade->targetY = targetY; + paletteFade->blendColor = color; + + paletteFade->delayCounter = paletteFade->delay; + + if (startY < targetY) + { + paletteFade->yDec = 0; + return; + } + paletteFade->yDec = 1; +} + +THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) +{ + if (param1->unk11c == 1) + { + param1->unk11c = 0; + param1->unk11a_0 = 0; + param1->activeFadePalettes = 0; + param1->unk11a_e = 0; + FUN_0200CAB4((s32)param0); + return; + } + + if (param1->unk118_0 == 1) + { + param1->unk11a_0 = param1->activeFadePalettes; + FUN_02003500(param1); + FUN_02003520(param1); + + if (param1->activeFadePalettes == 0) + { + param1->unk11a_e = 0; + FUN_0200CAB4((s32)param0); + } + } +} + +THUMB_FUNC void FUN_02003500(struct PaletteData *param0) +{ + for (u8 i = 0; i < 4; i++) + { + FUN_02003540(param0, i, 0x10); + } +} + +THUMB_FUNC void FUN_02003520(struct PaletteData *param0) +{ + for (u8 i = 4; i < 14; i++) + { + FUN_02003540(param0, i, 0x100); + } +} + +THUMB_FUNC void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 param2) +{ + if (IsPaletteSelected(paletteData->activeFadePalettes, index) != 0) + { + if (paletteData->pltt[index].fadeCtrl.delayCounter < paletteData->pltt[index].fadeCtrl.delay) + { + paletteData->pltt[index].fadeCtrl.delayCounter++; + return; + } + + paletteData->pltt[index].fadeCtrl.delayCounter = 0; + FUN_0200359C(paletteData, index, param2); + } +} + +THUMB_FUNC void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 param2) +{ + + for (u32 i = 0; i < 0x10; i++) + { + if (IsPaletteSelected(paletteData->pltt[index].fadeCtrl.selectedPalettes, (u16)i) != 0) + { + FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, paletteData->pltt[index].fadedBuf + param2 * i, &paletteData->pltt[index].fadeCtrl, param2); + } + } + + FUN_02003684(paletteData, (u8)index, &paletteData->pltt[index].fadeCtrl); +} + +THUMB_FUNC void FUN_020035F8(u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) +{ + for (u32 i = 0; i < numEntries; i++) + { + u8 lo = (u8)((src[i] & 0x1f) + ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); + + u8 hi = (u8)(((src[i] >> 10) & 0x1f) + (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * fadeCtrl->y) >> 4)); + u8 mid = (u8)(((src[i] >> 5) & 0x1f) + (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * fadeCtrl->y) >> 4)); + + dest[i] = (u16)((hi << 10) | (mid << 5) | lo); + } +} + +THUMB_FUNC void FUN_02003684(struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) +{ + if (fadeCtrl->y == fadeCtrl->targetY) + { + if ((paletteData->activeFadePalettes & (1 << index)) == 0) + { + return; + } + + paletteData->activeFadePalettes ^= (1 << index); + + return; + } + + s16 val; + if (fadeCtrl->yDec == 0) + { + val = (s16)fadeCtrl->y; + val += fadeCtrl->deltaY; + if (val > fadeCtrl->targetY) + { + val = (s16)fadeCtrl->targetY; + } + + fadeCtrl->y = val; + return; + } + + val = (s16)fadeCtrl->y; + val -= fadeCtrl->deltaY; + if (val < fadeCtrl->targetY) + { + val = (s16)fadeCtrl->targetY; + } + + fadeCtrl->y = val; +} + +THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) +{ + if (paletteData->unk11a_f == 0 && paletteData->unk118_0 != 1) + { + return; + } + + for (s32 i = 0; i < 14; i++) + { + if (paletteData->unk11a_f != 0 || (paletteData->pltt[i].fadedBuf != 0 && IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) + { + DC_FlushRange(paletteData->pltt[i].fadedBuf, paletteData->pltt[i].bufSize); + + switch (i) + { + case 0: + GX_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + break; + case 1: + GXS_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + break; + case 2: + GX_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + break; + case 3: + GXS_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + break; + case 4: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GX_EndLoadBGExtPltt(); + break; + case 5: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); + GX_EndLoadBGExtPltt(); + break; + case 6: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); + GX_EndLoadBGExtPltt(); + break; + case 7: + GX_BeginLoadBGExtPltt(); + GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); + GX_EndLoadBGExtPltt(); + break; + case 8: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GXS_EndLoadBGExtPltt(); + break; + case 9: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); + GXS_EndLoadBGExtPltt(); + break; + case 10: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); + GXS_EndLoadBGExtPltt(); + break; + case 11: + GXS_BeginLoadBGExtPltt(); + GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); + GXS_EndLoadBGExtPltt(); + break; + case 12: + GX_BeginLoadOBJExtPltt(); + GX_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GX_EndLoadOBJExtPltt(); + break; + case 13: + GXS_BeginLoadOBJExtPltt(); + GXS_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GXS_EndLoadOBJExtPltt(); + break; + } + } + } + + paletteData->unk11a_0 = paletteData->activeFadePalettes; + if (paletteData->unk11a_0 == 0) + { + paletteData->unk118_0 = 0; + } +} + +THUMB_FUNC u16 FUN_020038E4(struct PaletteData *paletteData) +{ + return paletteData->activeFadePalettes; +} + +THUMB_FUNC void FUN_020038F0(struct PaletteData *paletteData, u32 param1) +{ + paletteData->unk11a_f = param1; +} + +THUMB_FUNC void PaletteData_FillPalette(struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset) +{ + GF_ASSERT(endOffset * 2 <= paletteData->pltt[index].bufSize); + if (selection == 1 || selection == 2) + { + MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); + } + + if (selection == 0 || selection == 2) + { + MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); + } +} + +#ifdef NONMATCHING +THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) +{ + s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; + s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; + s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; + s32 lo, mid, hi; + + for (u16 i = 0; i < numEntries; i++) + { + lo = (((u32)(src[i] << 0x1b)) >> 0x1b); + mid = (((u32)(src[i] << 0x16)) >> 0x1b); + hi = (((u32)(src[i] << 0x11)) >> 0x1b); + + dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | (hi + ((st8 - hi) * coeff) >> 4) << 10; + } +} +#else +asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) +{ + // clang-format off + push {r4-r7, lr} + sub sp, #0xc + str r0, [sp, #0x0] + add r0, sp, #0x10 + ldrh r0, [r0, #0x10] + str r1, [sp, #0x4] + add r7, r2, #0x0 + lsl r1, r0, #0x1b + lsr r1, r1, #0x1b + mov r12, r1 + lsl r1, r0, #0x16 + lsl r0, r0, #0x11 + lsr r1, r1, #0x1b + lsr r0, r0, #0x1b + mov r2, #0x0 + mov lr, r1 + str r0, [sp, #0x8] + cmp r7, #0x0 + bls _020039E2 +_0200399A: + ldr r0, [sp, #0x0] + lsl r6, r2, #0x1 + ldrh r4, [r0, r6] + lsl r0, r4, #0x1b + lsr r1, r0, #0x1b + lsl r0, r4, #0x16 + lsl r4, r4, #0x11 + lsr r5, r4, #0x1b + ldr r4, [sp, #0x8] + lsr r0, r0, #0x1b + sub r4, r4, r5 + mul r4, r3 + asr r4, r4, #0x4 + add r4, r5, r4 + lsl r5, r4, #0xa + mov r4, r12 + sub r4, r4, r1 + mul r4, r3 + asr r4, r4, #0x4 + add r1, r1, r4 + mov r4, lr + sub r4, r4, r0 + mul r4, r3 + asr r4, r4, #0x4 + add r0, r0, r4 + lsl r0, r0, #0x5 + orr r0, r1 + add r1, r5, #0x0 + orr r1, r0 + ldr r0, [sp, #0x4] + strh r1, [r0, r6] + add r0, r2, #0x1 + lsl r0, r0, #0x10 + lsr r2, r0, #0x10 + cmp r2, r7 + blo _0200399A +_020039E2: + add sp, #0xc + pop {r4-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor) +{ + BOOL r0 = FALSE; + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) + { + r0 = TRUE; + } + + GF_ASSERT(r0); + + BlendPalette(paletteData->pltt[index].unfadedBuf + offset, paletteData->pltt[index].fadedBuf + offset, numEntries, coeff, blendColor); +} + +THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor) +{ + while (selectedPalettes != 0) + { + if ((selectedPalettes & 1) != 0) + { + BlendPalette(src, dest, 0x10, coeff, blendColor); + } + + selectedPalettes >>= 1; + dest += 0x10; + src += 0x10; + } +} + +THUMB_FUNC void BlendPalettesUnfaded(struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) +{ + u32 r4 = 0; + BOOL r0 = FALSE; + if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) + { + r0 = TRUE; + } + + GF_ASSERT(r0); + + while (selectedPalettes != 0) + { + if ((selectedPalettes & 1) != 0) + { + BlendPaletteUnfaded(paletteData, index, (u16)r4, 0x10, coeff, blendColor); + } + + selectedPalettes >>= 1; + r4 += 0x10; + } +} + +#ifdef NONMATCHING +THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) +{ + s32 r, g, b, i; + u32 gray; + + for (i = 0; i < count; i++) + { + r = (*palette >> 0) & 0x1F; + g = (*palette >> 5) & 0x1F; + b = (*palette >> 10) & 0x1F; + + gray = (r * 76 + g * 151 + b * 29) >> 8; + + r = (u16)((rTone * gray)) >> 8; + g = (u16)((gTone * gray)) >> 8; + b = (u16)((bTone * gray)) >> 8; + + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; + + *palette++ = (b << 10) | (g << 5) | (r << 0); + } +} +#else +asm void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) +{ + // clang-format off + push {r3-r7, lr} + mov lr, r1 + mov r12, r2 + add r7, r3, #0x0 + mov r4, #0x0 + cmp r1, #0x0 + ble _02003B3C + ldr r6, [sp, #0x18] +_02003AD4: + ldrh r3, [r0, #0x0] + mov r1, #0x1f + add r2, r3, #0x0 + asr r5, r3, #0xa + and r2, r1 + and r5, r1 + mov r1, #0x1d + mul r1, r5 + mov r5, #0x4c + mul r5, r2 + asr r3, r3, #0x5 + mov r2, #0x1f + and r3, r2 + mov r2, #0x97 + mul r2, r3 + add r2, r5, r2 + add r1, r1, r2 + asr r3, r1, #0x8 + mov r1, r12 + add r2, r1, #0x0 + mul r2, r3 + lsl r1, r2, #0x10 + lsr r1, r1, #0x10 + asr r2, r1, #0x8 + add r1, r7, #0x0 + mul r1, r3 + mul r3, r6 + lsl r1, r1, #0x10 + lsl r3, r3, #0x10 + lsr r1, r1, #0x10 + lsr r3, r3, #0x10 + asr r1, r1, #0x8 + asr r3, r3, #0x8 + cmp r2, #0x1f + ble _02003B1C + mov r2, #0x1f +_02003B1C: + cmp r1, #0x1f + ble _02003B22 + mov r1, #0x1f +_02003B22: + cmp r3, #0x1f + ble _02003B28 + mov r3, #0x1f +_02003B28: + lsl r3, r3, #0xa + lsl r1, r1, #0x5 + orr r1, r3 + orr r1, r2 + strh r1, [r0, #0x0] + add r4, r4, #0x1 + mov r1, lr + add r0, r0, #0x2 + cmp r4, r1 + blt _02003AD4 +_02003B3C: + pop {r3-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u32 rTone, u32 gTone, u32 bTone) +{ + NNSG2dPaletteData *pltData; + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + GF_ASSERT(ptr != NULL); + + if (size == 0) + { + size = pltData->szByte; + } + + TintPalette_CustomTone(pltData->pRawData, 0x10, rTone, gTone, bTone); + PaletteData_LoadPalette(paletteData, pltData->pRawData, index, offset, (u16)size); + + FreeToHeap(ptr); +} diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c index 20a22b7d..de1c270c 100644 --- a/arm9/src/unk_02002F08.c +++ b/arm9/src/unk_02002F08.c @@ -56,8 +56,7 @@ THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) { GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); - return StringGetWidth_SingleLine_HandleClearToControlCode( - UNK_02106FC8->unk94[param0], String_c_str(str)); + return StringGetWidth_SingleLine_HandleClearToControlCode(UNK_02106FC8->unk94[param0], String_c_str(str)); } THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) @@ -73,8 +72,7 @@ THUMB_FUNC void FUN_02002FEC(struct PaletteData *ptr) FreeToHeap(ptr); } -THUMB_FUNC void PaletteData_SetBuffers( - struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) +THUMB_FUNC void PaletteData_SetBuffers(struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) { paletteData->pltt[index].unfadedBuf = unfadedBuf; paletteData->pltt[index].fadedBuf = fadedBuf; @@ -95,21 +93,13 @@ THUMB_FUNC void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 ind FreeToHeap(paletteData->pltt[index].fadedBuf); } -THUMB_FUNC void PaletteData_LoadPalette( - struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) +THUMB_FUNC void PaletteData_LoadPalette(struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) { MIi_CpuCopy16(src, paletteData->pltt[index].unfadedBuf + offset, size); MIi_CpuCopy16(src, paletteData->pltt[index].fadedBuf + offset, size); } -THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset, - u16 param7) +THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u16 param7) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); @@ -127,13 +117,7 @@ THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, FreeToHeap(ptr); } -THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset) +THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset) { PaletteData_LoadFromNarc(paletteData, narcId, memberId, heap_id, index, size, offset, 0); } diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c deleted file mode 100644 index d9e410dc..00000000 --- a/arm9/src/unk_020030E8.c +++ /dev/null @@ -1,731 +0,0 @@ -#include "global.h" -#include "unk_020030E8.h" -#include "MI_memory.h" -#include "unk_02002F08.h" -#include "unk_0200CA44.h" - -extern void *FUN_020222E8(); -extern void *FUN_020222F8(); -extern void *FUN_02022308(); -extern void *FUN_02022310(); -extern int abs(int); - -THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size) -{ - GF_ASSERT(offset * 2 + size <= paletteData->pltt[index].bufSize); - - u16 *ptr; - switch (index) - { - case 0: - ptr = FUN_020222E8(); - break; - case 1: - ptr = FUN_020222F8(); - break; - case 2: - ptr = FUN_02022308(); - break; - case 3: - ptr = FUN_02022310(); - break; - default: - GF_ASSERT(FALSE); - return; - } - - PaletteData_LoadPalette(paletteData, ptr + offset, index, offset, (u16)size); -} - -THUMB_FUNC void CopyPaletteFromNarc( - NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) -{ - NNSG2dPaletteData *pltData; - - void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); - GF_ASSERT(ptr != NULL); - - if (size == 0) - { - size = pltData->szByte; - } - - MI_CpuCopy16(pltData->pRawData + offset * 2, dest, size); - - FreeToHeap(ptr); -} - -THUMB_FUNC void PaletteData_CopyPalette( - struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size) -{ - - MI_CpuCopy16( - paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].unfadedBuf + destOffset, size); - MI_CpuCopy16( - paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].fadedBuf + destOffset, size); -} - -THUMB_FUNC u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index) -{ - return paletteData->pltt[index].unfadedBuf; -} - -THUMB_FUNC u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index) -{ - return paletteData->pltt[index].fadedBuf; -} - -THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, - u16 param1, - u16 param2, - s16 delay, - u8 startY, - u8 targetY, - u16 color) -{ - - u16 stc = param2; - u32 r6 = 0; - - for (u8 i = 0; i < 14; i++) - { - if (IsPaletteSelected(param1, i) != 1) - { - continue; - } - - if (IsPaletteSelected(paletteData->activeFadePalettes, i) != 0) - { - continue; - } - - FUN_02003368(i, &paletteData->pltt[i], ¶m2); - - FUN_020033A4(&paletteData->pltt[i].fadeCtrl, param2, delay, startY, targetY, color); - - FUN_02003328(paletteData, i); - - if (i >= 4) - { - FUN_0200359C(paletteData, i, 0x100); - } - else - { - FUN_0200359C(paletteData, i, 0x10); - } - - param2 = stc; - r6 = 1; - } - - if (r6 == 1) - { - paletteData->activeFadePalettes |= param1; - if (paletteData->unk11a_e == 0) - { - paletteData->unk11a_e = 1; - - paletteData->unk118_0 = 1; - paletteData->unk11c = 0; - - // wtf is that? - FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, - (struct TextPrinter *)paletteData, - (u32)(-2)); - } - } - - return r6; -} - -THUMB_FUNC u8 IsPaletteSelected(u16 selectedPalettes, u16 index) -{ - u32 r3 = 1; - if ((selectedPalettes & (1 << index)) == 0) - { - r3 = 0; - } - - return (u8)r3; -} - -THUMB_FUNC void FUN_02003328(struct PaletteData *param0, u16 param1) -{ - if (IsPaletteSelected(param0->unk11a_0, param1) != 1) - { - param0->unk11a_0 |= 1 << param1; - } -} - -THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) -{ - u8 r0; - if (param0 < 4) - { - r0 = (u8)(param1->bufSize >> 5); - } - else - { - r0 = (u8)(param1->bufSize >> 9); - } - - u16 r4 = 0; - for (u8 i = 0; i < r0; i++) - { - r4 += 1 << i; - } - - *param2 &= r4; -} - -THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, - u16 selectedPalettes, - s16 delay, - u8 startY, - u8 targetY, - u16 color) -{ - if (delay < 0) - { - paletteFade->deltaY = abs(delay) + 2; - paletteFade->delay = 0; - } - else - { - paletteFade->deltaY = 2; - paletteFade->delay = delay; - } - - paletteFade->selectedPalettes = selectedPalettes; - paletteFade->y = startY; - paletteFade->targetY = targetY; - paletteFade->blendColor = color; - - paletteFade->delayCounter = paletteFade->delay; - - if (startY < targetY) - { - paletteFade->yDec = 0; - return; - } - paletteFade->yDec = 1; -} - -THUMB_FUNC void FUN_02003464(u32 param0, struct PaletteData *param1) -{ - if (param1->unk11c == 1) - { - param1->unk11c = 0; - param1->unk11a_0 = 0; - param1->activeFadePalettes = 0; - param1->unk11a_e = 0; - FUN_0200CAB4((s32)param0); - return; - } - - if (param1->unk118_0 == 1) - { - param1->unk11a_0 = param1->activeFadePalettes; - FUN_02003500(param1); - FUN_02003520(param1); - - if (param1->activeFadePalettes == 0) - { - param1->unk11a_e = 0; - FUN_0200CAB4((s32)param0); - } - } -} - -THUMB_FUNC void FUN_02003500(struct PaletteData *param0) -{ - for (u8 i = 0; i < 4; i++) - { - FUN_02003540(param0, i, 0x10); - } -} - -THUMB_FUNC void FUN_02003520(struct PaletteData *param0) -{ - for (u8 i = 4; i < 14; i++) - { - FUN_02003540(param0, i, 0x100); - } -} - -THUMB_FUNC void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 param2) -{ - if (IsPaletteSelected(paletteData->activeFadePalettes, index) != 0) - { - if (paletteData->pltt[index].fadeCtrl.delayCounter < paletteData->pltt[index].fadeCtrl.delay) - { - paletteData->pltt[index].fadeCtrl.delayCounter++; - return; - } - - paletteData->pltt[index].fadeCtrl.delayCounter = 0; - FUN_0200359C(paletteData, index, param2); - } -} - -THUMB_FUNC void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 param2) -{ - - for (u32 i = 0; i < 0x10; i++) - { - if (IsPaletteSelected(paletteData->pltt[index].fadeCtrl.selectedPalettes, (u16)i) != 0) - { - FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, - paletteData->pltt[index].fadedBuf + param2 * i, - &paletteData->pltt[index].fadeCtrl, - param2); - } - } - - FUN_02003684(paletteData, (u8)index, &paletteData->pltt[index].fadeCtrl); -} - -THUMB_FUNC void FUN_020035F8( - u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) -{ - for (u32 i = 0; i < numEntries; i++) - { - u8 lo = (u8)((src[i] & 0x1f) + - ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); - - u8 hi = (u8)(((src[i] >> 10) & 0x1f) + - (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * - fadeCtrl->y) >> - 4)); - u8 mid = (u8)(((src[i] >> 5) & 0x1f) + - (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * - fadeCtrl->y) >> - 4)); - - dest[i] = (u16)((hi << 10) | (mid << 5) | lo); - } -} - -THUMB_FUNC void FUN_02003684( - struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) -{ - if (fadeCtrl->y == fadeCtrl->targetY) - { - if ((paletteData->activeFadePalettes & (1 << index)) == 0) - { - return; - } - - paletteData->activeFadePalettes ^= (1 << index); - - return; - } - - - s16 val; - if (fadeCtrl->yDec == 0) - { - val = (s16)fadeCtrl->y; - val += fadeCtrl->deltaY; - if (val > fadeCtrl->targetY) - { - val = (s16)fadeCtrl->targetY; - } - - fadeCtrl->y = val; - return; - } - - val = (s16)fadeCtrl->y; - val -= fadeCtrl->deltaY; - if (val < fadeCtrl->targetY) - { - val = (s16)fadeCtrl->targetY; - } - - fadeCtrl->y = val; -} - -THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) -{ - if (paletteData->unk11a_f == 0 && paletteData->unk118_0 != 1) - { - return; - } - - for (s32 i = 0; i < 14; i++) - { - if (paletteData->unk11a_f != 0 || - (paletteData->pltt[i].fadedBuf != 0 && IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) - { - DC_FlushRange(paletteData->pltt[i].fadedBuf, paletteData->pltt[i].bufSize); - - switch (i) - { - case 0: - GX_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - break; - case 1: - GXS_LoadBGPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - break; - case 2: - GX_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - break; - case 3: - GXS_LoadOBJPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - break; - case 4: - GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - GX_EndLoadBGExtPltt(); - break; - case 5: - GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); - GX_EndLoadBGExtPltt(); - break; - case 6: - GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); - GX_EndLoadBGExtPltt(); - break; - case 7: - GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); - GX_EndLoadBGExtPltt(); - break; - case 8: - GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - GXS_EndLoadBGExtPltt(); - break; - case 9: - GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); - GXS_EndLoadBGExtPltt(); - break; - case 10: - GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); - GXS_EndLoadBGExtPltt(); - break; - case 11: - GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); - GXS_EndLoadBGExtPltt(); - break; - case 12: - GX_BeginLoadOBJExtPltt(); - GX_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - GX_EndLoadOBJExtPltt(); - break; - case 13: - GXS_BeginLoadOBJExtPltt(); - GXS_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); - GXS_EndLoadOBJExtPltt(); - break; - } - } - } - - paletteData->unk11a_0 = paletteData->activeFadePalettes; - if (paletteData->unk11a_0 == 0) - { - paletteData->unk118_0 = 0; - } -} - -THUMB_FUNC u16 FUN_020038E4(struct PaletteData *paletteData) -{ - return paletteData->activeFadePalettes; -} - -THUMB_FUNC void FUN_020038F0(struct PaletteData *paletteData, u32 param1) -{ - paletteData->unk11a_f = param1; -} - -THUMB_FUNC void PaletteData_FillPalette( - struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset) -{ - GF_ASSERT(endOffset * 2 <= paletteData->pltt[index].bufSize); - if (selection == 1 || selection == 2) - { - MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); - } - - if (selection == 0 || selection == 2) - { - MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); - } -} - -#ifdef NONMATCHING -THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) -{ - s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; - s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; - s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; - s32 lo, mid, hi; - - for (u16 i = 0; i < numEntries; i++) - { - lo = (((u32)(src[i] << 0x1b)) >> 0x1b); - mid = (((u32)(src[i] << 0x16)) >> 0x1b); - hi = (((u32)(src[i] << 0x11)) >> 0x1b); - - dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | - (hi + ((st8 - hi) * coeff) >> 4) << 10; - } -} -#else -asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) -{ - // clang-format off - push {r4-r7, lr} - sub sp, #0xc - str r0, [sp, #0x0] - add r0, sp, #0x10 - ldrh r0, [r0, #0x10] - str r1, [sp, #0x4] - add r7, r2, #0x0 - lsl r1, r0, #0x1b - lsr r1, r1, #0x1b - mov r12, r1 - lsl r1, r0, #0x16 - lsl r0, r0, #0x11 - lsr r1, r1, #0x1b - lsr r0, r0, #0x1b - mov r2, #0x0 - mov lr, r1 - str r0, [sp, #0x8] - cmp r7, #0x0 - bls _020039E2 -_0200399A: - ldr r0, [sp, #0x0] - lsl r6, r2, #0x1 - ldrh r4, [r0, r6] - lsl r0, r4, #0x1b - lsr r1, r0, #0x1b - lsl r0, r4, #0x16 - lsl r4, r4, #0x11 - lsr r5, r4, #0x1b - ldr r4, [sp, #0x8] - lsr r0, r0, #0x1b - sub r4, r4, r5 - mul r4, r3 - asr r4, r4, #0x4 - add r4, r5, r4 - lsl r5, r4, #0xa - mov r4, r12 - sub r4, r4, r1 - mul r4, r3 - asr r4, r4, #0x4 - add r1, r1, r4 - mov r4, lr - sub r4, r4, r0 - mul r4, r3 - asr r4, r4, #0x4 - add r0, r0, r4 - lsl r0, r0, #0x5 - orr r0, r1 - add r1, r5, #0x0 - orr r1, r0 - ldr r0, [sp, #0x4] - strh r1, [r0, r6] - add r0, r2, #0x1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - cmp r2, r7 - blo _0200399A -_020039E2: - add sp, #0xc - pop {r4-r7, pc} - // clang-format on -} -#endif - -THUMB_FUNC void BlendPaletteUnfaded( - struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor) -{ - BOOL r0 = FALSE; - if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) - { - r0 = TRUE; - } - - GF_ASSERT(r0); - - BlendPalette(paletteData->pltt[index].unfadedBuf + offset, - paletteData->pltt[index].fadedBuf + offset, - numEntries, - coeff, - blendColor); -} - -THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor) -{ - while (selectedPalettes != 0) - { - if ((selectedPalettes & 1) != 0) - { - BlendPalette(src, dest, 0x10, coeff, blendColor); - } - - selectedPalettes >>= 1; - dest += 0x10; - src += 0x10; - } -} - -THUMB_FUNC void BlendPalettesUnfaded( - struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) -{ - u32 r4 = 0; - BOOL r0 = FALSE; - if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) - { - r0 = TRUE; - } - - GF_ASSERT(r0); - - while (selectedPalettes != 0) - { - if ((selectedPalettes & 1) != 0) - { - BlendPaletteUnfaded(paletteData, index, (u16)r4, 0x10, coeff, blendColor); - } - - selectedPalettes >>= 1; - r4 += 0x10; - } -} - -#ifdef NONMATCHING -THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) -{ - s32 r, g, b, i; - u32 gray; - - for (i = 0; i < count; i++) - { - r = (*palette >> 0) & 0x1F; - g = (*palette >> 5) & 0x1F; - b = (*palette >> 10) & 0x1F; - - gray = (r *76 + g * 151 + b * 29) >> 8; - - r = (u16)((rTone * gray)) >> 8; - g = (u16)((gTone * gray)) >> 8; - b = (u16)((bTone * gray)) >> 8; - - if (r > 31) - r = 31; - if (g > 31) - g = 31; - if (b > 31) - b = 31; - - *palette++ = (b << 10) | (g << 5) | (r << 0); - } -} -#else -asm void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) -{ - // clang-format off - push {r3-r7, lr} - mov lr, r1 - mov r12, r2 - add r7, r3, #0x0 - mov r4, #0x0 - cmp r1, #0x0 - ble _02003B3C - ldr r6, [sp, #0x18] -_02003AD4: - ldrh r3, [r0, #0x0] - mov r1, #0x1f - add r2, r3, #0x0 - asr r5, r3, #0xa - and r2, r1 - and r5, r1 - mov r1, #0x1d - mul r1, r5 - mov r5, #0x4c - mul r5, r2 - asr r3, r3, #0x5 - mov r2, #0x1f - and r3, r2 - mov r2, #0x97 - mul r2, r3 - add r2, r5, r2 - add r1, r1, r2 - asr r3, r1, #0x8 - mov r1, r12 - add r2, r1, #0x0 - mul r2, r3 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - asr r2, r1, #0x8 - add r1, r7, #0x0 - mul r1, r3 - mul r3, r6 - lsl r1, r1, #0x10 - lsl r3, r3, #0x10 - lsr r1, r1, #0x10 - lsr r3, r3, #0x10 - asr r1, r1, #0x8 - asr r3, r3, #0x8 - cmp r2, #0x1f - ble _02003B1C - mov r2, #0x1f -_02003B1C: - cmp r1, #0x1f - ble _02003B22 - mov r1, #0x1f -_02003B22: - cmp r3, #0x1f - ble _02003B28 - mov r3, #0x1f -_02003B28: - lsl r3, r3, #0xa - lsl r1, r1, #0x5 - orr r1, r3 - orr r1, r2 - strh r1, [r0, #0x0] - add r4, r4, #0x1 - mov r1, lr - add r0, r0, #0x2 - cmp r4, r1 - blt _02003AD4 -_02003B3C: - pop {r3-r7, pc} - // clang-format on -} -#endif - -THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset, - u32 rTone, - u32 gTone, - u32 bTone) -{ - NNSG2dPaletteData *pltData; - void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); - GF_ASSERT(ptr != NULL); - - if (size == 0) - { - size = pltData->szByte; - } - - TintPalette_CustomTone(pltData->pRawData, 0x10, rTone, gTone, bTone); - PaletteData_LoadPalette(paletteData, pltData->pRawData, index, offset, (u16)size); - - FreeToHeap(ptr); -} diff --git a/include/palette.h b/include/palette.h new file mode 100644 index 00000000..3ef00fcb --- /dev/null +++ b/include/palette.h @@ -0,0 +1,31 @@ +#include "global.h" +#include "filesystem.h" +#include "unk_02002F08.h" + +void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size); +void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); +void PaletteData_CopyPalette(struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size); +u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index); +u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index); +u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, s16 delay, u8 startY, u8 targetY, u16 color); +u8 IsPaletteSelected(u16 selectedPalettes, u16 index); +void FUN_02003328(struct PaletteData *param0, u16 param1); +void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2); +void FUN_020033A4(struct PaletteFadeControl *paletteFade, u16 selectedPalettes, s16 delay, u8 startY, u8 targetY, u16 color); +void FUN_02003464(u32 param0, struct PaletteData *param1); +void FUN_02003500(struct PaletteData *param0); +void FUN_02003520(struct PaletteData *param0); +void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 param2); +void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 param2); +void FUN_020035F8(u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries); +void FUN_02003684(struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl); +void FUN_0200372C(struct PaletteData *paletteData); +u16 FUN_020038E4(struct PaletteData *paletteData); +void FUN_020038F0(struct PaletteData *paletteData, u32 param1); +void PaletteData_FillPalette(struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset); +void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor); +void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor); +void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor); +void BlendPalettesUnfaded(struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor); +void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone); +void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u32 rTone, u32 gTone, u32 bTone); diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index c4bfeddd..e155f716 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -59,26 +59,11 @@ u32 FUN_02002F90(struct String *str); s32 FUN_02002F9C(u32 param0, struct String *str); struct PaletteData *FUN_02002FD0(u32 heap_id); void FUN_02002FEC(struct PaletteData *ptr); -void PaletteData_SetBuffers( - struct PaletteData *param0, u32 param1, void *param2, void *param3, u32 size); -void PaletteData_AllocBuffers(struct PaletteData *param0, u32 param1, u32 size, u32 heap_id); -void PaletteData_FreeBuffers(struct PaletteData *param0, u32 param1); -void PaletteData_LoadPalette( - struct PaletteData *param0, const void *param1, u32 param2, u32 offset, u16 size); -void PaletteData_LoadFromNarc(struct PaletteData *param0, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 param4, - u32 size, - u16 offset, - u16 param7); -void PaletteData_LoadNarc(struct PaletteData *param0, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 param4, - u32 size, - u16 offset); +void PaletteData_SetBuffers(struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size); +void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id); +void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index); +void PaletteData_LoadPalette(struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size); +void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u16 param7); +void PaletteData_LoadNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset); #endif // POKEDIAMOND_UNK_02002F08_H diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h deleted file mode 100644 index bf71ca7f..00000000 --- a/include/unk_020030E8.h +++ /dev/null @@ -1,55 +0,0 @@ -#include "global.h" -#include "filesystem.h" -#include "unk_02002F08.h" - -void FUN_02003108(struct PaletteData *param0, u32 param1, u16 param2, u32 param3); -void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); -void PaletteData_CopyPalette( - struct PaletteData *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5); -u16 *PaletteData_GetUnfadedBuf(struct PaletteData *param0, u32 param1); -u16 *PaletteData_GetFadedBuf(struct PaletteData *param0, u32 param1); -u32 FUN_02003210(struct PaletteData *param0, - u16 param1, - u16 param2, - s16 param3, - u8 param6, - u8 param7, - u16 param8); -u8 IsPaletteSelected(u16 param0, u16 param1); -void FUN_02003328(struct PaletteData *param0, u16 param1); -void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2); -void FUN_020033A4(struct PaletteFadeControl *param0, - u16 param1, - s16 param2, - u8 param3, - u8 param4, - u16 param5); -void FUN_02003464(u32 param0, struct PaletteData *param1); -void FUN_02003500(struct PaletteData *param0); -void FUN_02003520(struct PaletteData *param0); -void FUN_02003540(struct PaletteData *param0, u8 param1, u32 param2); -void FUN_0200359C(struct PaletteData *param0, u32 param1, u32 param2); -void FUN_020035F8(u16 *param0, u16 *param1, struct PaletteFadeControl *param2, u32 param3); -void FUN_02003684( - struct PaletteData *param0, u8 param1, struct PaletteFadeControl *param2); -void FUN_0200372C(struct PaletteData *param0); -u16 FUN_020038E4(struct PaletteData *param0); -void FUN_020038F0(struct PaletteData *param0, u32 param1); -void PaletteData_FillPalette( - struct PaletteData *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5); -void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void BlendPaletteUnfaded( - struct PaletteData *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5); -void BlendPalettes(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4); -void BlendPalettesUnfaded(struct PaletteData *param0, u32 param1, u16 param2, u8 param3, u16 param4); -void TintPalette_CustomTone(u16 *param0, u32 param1, u32 param2, u32 param3, u32 param4); -void FUN_02003B40(struct PaletteData *param0, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 param4, - u32 param5, - u16 param6, - u32 param7, - u32 param8, - u32 param9); -- cgit v1.2.3 From 8dcbcd270574fceed1d2b10053eb11e70170b444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 12:29:23 +0200 Subject: format --- arm9/src/palette.c | 143 +++++++++++++++++++++++++++++++++++++----------- arm9/src/unk_02002F08.c | 29 ++++++++-- include/palette.h | 53 +++++++++++++++--- include/unk_02002F08.h | 32 ++++++++--- 4 files changed, 201 insertions(+), 56 deletions(-) diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 5ffab028..525574e7 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -37,7 +37,8 @@ THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 off PaletteData_LoadPalette(paletteData, ptr + offset, index, offset, (u16)size); } -THUMB_FUNC void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) +THUMB_FUNC void CopyPaletteFromNarc( + NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest) { NNSG2dPaletteData *pltData; @@ -54,11 +55,20 @@ THUMB_FUNC void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u3 FreeToHeap(ptr); } -THUMB_FUNC void PaletteData_CopyPalette(struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size) +THUMB_FUNC void PaletteData_CopyPalette(struct PaletteData *paletteData, + u32 srcIdx, + u16 srcOffset, + u32 destIdx, + u16 destOffset, + u16 size) { - MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].unfadedBuf + destOffset, size); - MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, paletteData->pltt[destIdx].fadedBuf + destOffset, size); + MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, + paletteData->pltt[destIdx].unfadedBuf + destOffset, + size); + MI_CpuCopy16(paletteData->pltt[srcIdx].unfadedBuf + srcOffset, + paletteData->pltt[destIdx].fadedBuf + destOffset, + size); } THUMB_FUNC u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index) @@ -71,7 +81,13 @@ THUMB_FUNC u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 ind return paletteData->pltt[index].fadedBuf; } -THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, s16 delay, u8 startY, u8 targetY, u16 color) +THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, + u16 param1, + u16 param2, + s16 delay, + u8 startY, + u8 targetY, + u16 color) { u16 stc = param2; @@ -119,7 +135,9 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 par paletteData->unk11c = 0; // wtf is that? - FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)paletteData, (u32)(-2)); + FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, + (struct TextPrinter *)paletteData, + (u32)(-2)); } } @@ -166,7 +184,12 @@ THUMB_FUNC void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2) *param2 &= r4; } -THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, u16 selectedPalettes, s16 delay, u8 startY, u8 targetY, u16 color) +THUMB_FUNC void FUN_020033A4(struct PaletteFadeControl *paletteFade, + u16 selectedPalettes, + s16 delay, + u8 startY, + u8 targetY, + u16 color) { if (delay < 0) { @@ -240,7 +263,8 @@ THUMB_FUNC void FUN_02003540(struct PaletteData *paletteData, u8 index, u32 para { if (IsPaletteSelected(paletteData->activeFadePalettes, index) != 0) { - if (paletteData->pltt[index].fadeCtrl.delayCounter < paletteData->pltt[index].fadeCtrl.delay) + if (paletteData->pltt[index].fadeCtrl.delayCounter < + paletteData->pltt[index].fadeCtrl.delay) { paletteData->pltt[index].fadeCtrl.delayCounter++; return; @@ -258,27 +282,39 @@ THUMB_FUNC void FUN_0200359C(struct PaletteData *paletteData, u32 index, u32 par { if (IsPaletteSelected(paletteData->pltt[index].fadeCtrl.selectedPalettes, (u16)i) != 0) { - FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, paletteData->pltt[index].fadedBuf + param2 * i, &paletteData->pltt[index].fadeCtrl, param2); + FUN_020035F8(paletteData->pltt[index].unfadedBuf + param2 * i, + paletteData->pltt[index].fadedBuf + param2 * i, + &paletteData->pltt[index].fadeCtrl, + param2); } } FUN_02003684(paletteData, (u8)index, &paletteData->pltt[index].fadeCtrl); } -THUMB_FUNC void FUN_020035F8(u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) +THUMB_FUNC void FUN_020035F8( + u16 *src, u16 *dest, struct PaletteFadeControl *fadeCtrl, u32 numEntries) { for (u32 i = 0; i < numEntries; i++) { - u8 lo = (u8)((src[i] & 0x1f) + ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); + u8 lo = (u8)((src[i] & 0x1f) + + ((((fadeCtrl->blendColor & 0x1f) - (src[i] & 0x1f)) * fadeCtrl->y) >> 4)); - u8 hi = (u8)(((src[i] >> 10) & 0x1f) + (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * fadeCtrl->y) >> 4)); - u8 mid = (u8)(((src[i] >> 5) & 0x1f) + (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * fadeCtrl->y) >> 4)); + u8 hi = (u8)(((src[i] >> 10) & 0x1f) + + (((((fadeCtrl->blendColor >> 10) & 0x1f) - ((src[i] >> 10) & 0x1f)) * + fadeCtrl->y) >> + 4)); + u8 mid = + (u8)(((src[i] >> 5) & 0x1f) + + (((((fadeCtrl->blendColor >> 5) & 0x1f) - ((src[i] >> 5) & 0x1f)) * fadeCtrl->y) >> + 4)); dest[i] = (u16)((hi << 10) | (mid << 5) | lo); } } -THUMB_FUNC void FUN_02003684(struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) +THUMB_FUNC void FUN_02003684( + struct PaletteData *paletteData, u8 index, struct PaletteFadeControl *fadeCtrl) { if (fadeCtrl->y == fadeCtrl->targetY) { @@ -325,7 +361,9 @@ THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) for (s32 i = 0; i < 14; i++) { - if (paletteData->unk11a_f != 0 || (paletteData->pltt[i].fadedBuf != 0 && IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) + if (paletteData->unk11a_f != 0 || + (paletteData->pltt[i].fadedBuf != 0 && + IsPaletteSelected(paletteData->unk11a_0, (u16)i) != 0)) { DC_FlushRange(paletteData->pltt[i].fadedBuf, paletteData->pltt[i].bufSize); @@ -345,52 +383,62 @@ THUMB_FUNC void FUN_0200372C(struct PaletteData *paletteData) break; case 4: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GX_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 5: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); + GX_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 6: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); + GX_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 7: GX_BeginLoadBGExtPltt(); - GX_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); + GX_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GX_EndLoadBGExtPltt(); break; case 8: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GXS_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 9: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); + GXS_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x2000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 10: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); + GXS_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x4000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 11: GXS_BeginLoadBGExtPltt(); - GXS_LoadBGExtPltt(paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); + GXS_LoadBGExtPltt( + paletteData->pltt[i].fadedBuf, 0x6000, paletteData->pltt[i].bufSize); GXS_EndLoadBGExtPltt(); break; case 12: GX_BeginLoadOBJExtPltt(); - GX_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GX_LoadOBJExtPltt( + paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GX_EndLoadOBJExtPltt(); break; case 13: GXS_BeginLoadOBJExtPltt(); - GXS_LoadOBJExtPltt(paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); + GXS_LoadOBJExtPltt( + paletteData->pltt[i].fadedBuf, 0, paletteData->pltt[i].bufSize); GXS_EndLoadOBJExtPltt(); break; } @@ -414,17 +462,26 @@ THUMB_FUNC void FUN_020038F0(struct PaletteData *paletteData, u32 param1) paletteData->unk11a_f = param1; } -THUMB_FUNC void PaletteData_FillPalette(struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset) +THUMB_FUNC void PaletteData_FillPalette(struct PaletteData *paletteData, + u32 index, + u32 selection, + u16 value, + u16 startOffset, + u16 endOffset) { GF_ASSERT(endOffset * 2 <= paletteData->pltt[index].bufSize); if (selection == 1 || selection == 2) { - MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); + MI_CpuFill16(&paletteData->pltt[index].unfadedBuf[startOffset], + value, + (u32)((endOffset - startOffset) * 2)); } if (selection == 0 || selection == 2) { - MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], value, (u32)((endOffset - startOffset) * 2)); + MI_CpuFill16(&paletteData->pltt[index].fadedBuf[startOffset], + value, + (u32)((endOffset - startOffset) * 2)); } } @@ -442,7 +499,8 @@ THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 mid = (((u32)(src[i] << 0x16)) >> 0x1b); hi = (((u32)(src[i] << 0x11)) >> 0x1b); - dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | (hi + ((st8 - hi) * coeff) >> 4) << 10; + dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | + (hi + ((st8 - hi) * coeff) >> 4) << 10; } } #else @@ -512,7 +570,12 @@ _020039E2: } #endif -THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor) +THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, + u32 index, + u16 offset, + u16 numEntries, + u8 coeff, + u16 blendColor) { BOOL r0 = FALSE; if (paletteData->pltt[index].unfadedBuf != 0 && paletteData->pltt[index].fadedBuf != 0) @@ -522,7 +585,11 @@ THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, GF_ASSERT(r0); - BlendPalette(paletteData->pltt[index].unfadedBuf + offset, paletteData->pltt[index].fadedBuf + offset, numEntries, coeff, blendColor); + BlendPalette(paletteData->pltt[index].unfadedBuf + offset, + paletteData->pltt[index].fadedBuf + offset, + numEntries, + coeff, + blendColor); } THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor) @@ -540,7 +607,8 @@ THUMB_FUNC void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coef } } -THUMB_FUNC void BlendPalettesUnfaded(struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) +THUMB_FUNC void BlendPalettesUnfaded( + struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor) { u32 r4 = 0; BOOL r0 = FALSE; @@ -665,7 +733,16 @@ _02003B3C: } #endif -THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u32 rTone, u32 gTone, u32 bTone) +THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u32 rTone, + u32 gTone, + u32 bTone) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c index de1c270c..5a1eca36 100644 --- a/arm9/src/unk_02002F08.c +++ b/arm9/src/unk_02002F08.c @@ -56,7 +56,8 @@ THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) { GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); - return StringGetWidth_SingleLine_HandleClearToControlCode(UNK_02106FC8->unk94[param0], String_c_str(str)); + return StringGetWidth_SingleLine_HandleClearToControlCode( + UNK_02106FC8->unk94[param0], String_c_str(str)); } THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) @@ -72,14 +73,16 @@ THUMB_FUNC void FUN_02002FEC(struct PaletteData *ptr) FreeToHeap(ptr); } -THUMB_FUNC void PaletteData_SetBuffers(struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) +THUMB_FUNC void PaletteData_SetBuffers( + struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) { paletteData->pltt[index].unfadedBuf = unfadedBuf; paletteData->pltt[index].fadedBuf = fadedBuf; paletteData->pltt[index].bufSize = size; } -THUMB_FUNC void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id) +THUMB_FUNC void PaletteData_AllocBuffers( + struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id) { void *ptr = AllocFromHeap(heap_id, size); void *ptr2 = AllocFromHeap(heap_id, size); @@ -93,13 +96,21 @@ THUMB_FUNC void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 ind FreeToHeap(paletteData->pltt[index].fadedBuf); } -THUMB_FUNC void PaletteData_LoadPalette(struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) +THUMB_FUNC void PaletteData_LoadPalette( + struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) { MIi_CpuCopy16(src, paletteData->pltt[index].unfadedBuf + offset, size); MIi_CpuCopy16(src, paletteData->pltt[index].fadedBuf + offset, size); } -THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u16 param7) +THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u16 param7) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); @@ -117,7 +128,13 @@ THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId FreeToHeap(ptr); } -THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset) +THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset) { PaletteData_LoadFromNarc(paletteData, narcId, memberId, heap_id, index, size, offset, 0); } diff --git a/include/palette.h b/include/palette.h index 3ef00fcb..2eac3a6a 100644 --- a/include/palette.h +++ b/include/palette.h @@ -3,15 +3,32 @@ #include "unk_02002F08.h" void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size); -void CopyPaletteFromNarc(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); -void PaletteData_CopyPalette(struct PaletteData *paletteData, u32 srcIdx, u16 srcOffset, u32 destIdx, u16 destOffset, u16 size); +void CopyPaletteFromNarc( + NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); +void PaletteData_CopyPalette(struct PaletteData *paletteData, + u32 srcIdx, + u16 srcOffset, + u32 destIdx, + u16 destOffset, + u16 size); u16 *PaletteData_GetUnfadedBuf(struct PaletteData *paletteData, u32 index); u16 *PaletteData_GetFadedBuf(struct PaletteData *paletteData, u32 index); -u32 FUN_02003210(struct PaletteData *paletteData, u16 param1, u16 param2, s16 delay, u8 startY, u8 targetY, u16 color); +u32 FUN_02003210(struct PaletteData *paletteData, + u16 param1, + u16 param2, + s16 delay, + u8 startY, + u8 targetY, + u16 color); u8 IsPaletteSelected(u16 selectedPalettes, u16 index); void FUN_02003328(struct PaletteData *param0, u16 param1); void FUN_02003368(s32 param0, struct Palette *param1, u16 *param2); -void FUN_020033A4(struct PaletteFadeControl *paletteFade, u16 selectedPalettes, s16 delay, u8 startY, u8 targetY, u16 color); +void FUN_020033A4(struct PaletteFadeControl *paletteFade, + u16 selectedPalettes, + s16 delay, + u8 startY, + u8 targetY, + u16 color); void FUN_02003464(u32 param0, struct PaletteData *param1); void FUN_02003500(struct PaletteData *param0); void FUN_02003520(struct PaletteData *param0); @@ -22,10 +39,30 @@ void FUN_02003684(struct PaletteData *paletteData, u8 index, struct PaletteFadeC void FUN_0200372C(struct PaletteData *paletteData); u16 FUN_020038E4(struct PaletteData *paletteData); void FUN_020038F0(struct PaletteData *paletteData, u32 param1); -void PaletteData_FillPalette(struct PaletteData *paletteData, u32 index, u32 selection, u16 value, u16 startOffset, u16 endOffset); +void PaletteData_FillPalette(struct PaletteData *paletteData, + u32 index, + u32 selection, + u16 value, + u16 startOffset, + u16 endOffset); void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor); -void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, u16 offset, u16 numEntries, u8 coeff, u16 blendColor); +void BlendPaletteUnfaded(struct PaletteData *paletteData, + u32 index, + u16 offset, + u16 numEntries, + u8 coeff, + u16 blendColor); void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor); -void BlendPalettesUnfaded(struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor); +void BlendPalettesUnfaded( + struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor); void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone); -void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u32 rTone, u32 gTone, u32 bTone); +void FUN_02003B40(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u32 rTone, + u32 gTone, + u32 bTone); diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h index e155f716..be551dc4 100644 --- a/include/unk_02002F08.h +++ b/include/unk_02002F08.h @@ -5,13 +5,12 @@ #include "gf_gfx_loader.h" #include "string16.h" - struct PlttData { - u16 r:5; // red - u16 g:5; // green - u16 b:5; // blue - u16 unused_15:1; + u16 r : 5; // red + u16 g : 5; // green + u16 b : 5; // blue + u16 unused_15 : 1; }; struct PaletteFadeControl @@ -59,11 +58,26 @@ u32 FUN_02002F90(struct String *str); s32 FUN_02002F9C(u32 param0, struct String *str); struct PaletteData *FUN_02002FD0(u32 heap_id); void FUN_02002FEC(struct PaletteData *ptr); -void PaletteData_SetBuffers(struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size); +void PaletteData_SetBuffers( + struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size); void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id); void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index); -void PaletteData_LoadPalette(struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size); -void PaletteData_LoadFromNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset, u16 param7); -void PaletteData_LoadNarc(struct PaletteData *paletteData, NarcId narcId, s32 memberId, u32 heap_id, u32 index, u32 size, u16 offset); +void PaletteData_LoadPalette( + struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size); +void PaletteData_LoadFromNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u16 param7); +void PaletteData_LoadNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset); #endif // POKEDIAMOND_UNK_02002F08_H -- cgit v1.2.3 From c7b7cb66d44554ea4cd2873826deabbade5a52ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 12:36:01 +0200 Subject: add header guards --- include/palette.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/palette.h b/include/palette.h index 2eac3a6a..469c680f 100644 --- a/include/palette.h +++ b/include/palette.h @@ -1,3 +1,6 @@ +#ifndef POKEDIAMOND_PALETTE_H +#define POKEDIAMOND_PALETTE_H + #include "global.h" #include "filesystem.h" #include "unk_02002F08.h" @@ -66,3 +69,5 @@ void FUN_02003B40(struct PaletteData *paletteData, u32 rTone, u32 gTone, u32 bTone); + +#endif // POKEDIAMOND_PALETTE_H -- cgit v1.2.3 From f25705c13445a2b2fc95313d230d810eae14a656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 14:59:42 +0200 Subject: match BlendPalette with help from pokeemerald --- arm9/src/palette.c | 85 +++++------------------------------------------------- 1 file changed, 8 insertions(+), 77 deletions(-) diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 525574e7..75dd4d90 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -485,90 +485,21 @@ THUMB_FUNC void PaletteData_FillPalette(struct PaletteData *paletteData, } } -#ifdef NONMATCHING THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 blendColor) { - s32 r12 = ((u32)(blendColor << 0x1b)) >> 0x1b; - s32 lr = ((u32)(blendColor << 0x16)) >> 0x1b; - s32 st8 = ((u32)(blendColor << 0x11)) >> 0x1b; - s32 lo, mid, hi; - + s32 r2 = ((struct PlttData *)&blendColor)->r; + s32 g2 = ((struct PlttData *)&blendColor)->g; + s32 b2 = ((struct PlttData *)&blendColor)->b; for (u16 i = 0; i < numEntries; i++) { - lo = (((u32)(src[i] << 0x1b)) >> 0x1b); - mid = (((u32)(src[i] << 0x16)) >> 0x1b); - hi = (((u32)(src[i] << 0x11)) >> 0x1b); + s32 r = ((struct PlttData *)&src[i])->r; + s32 g = ((struct PlttData *)&src[i])->g; + s32 b = ((struct PlttData *)&src[i])->b; - dest[i] = (lo + ((r12 - lo) * coeff) >> 4) | (mid + ((lr - mid) * coeff) >> 4) << 5 | - (hi + ((st8 - hi) * coeff) >> 4) << 10; + dest[i] = ((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | + ((b + (((b2 - b) * coeff) >> 4)) << 10); } } -#else -asm void BlendPalette(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4) -{ - // clang-format off - push {r4-r7, lr} - sub sp, #0xc - str r0, [sp, #0x0] - add r0, sp, #0x10 - ldrh r0, [r0, #0x10] - str r1, [sp, #0x4] - add r7, r2, #0x0 - lsl r1, r0, #0x1b - lsr r1, r1, #0x1b - mov r12, r1 - lsl r1, r0, #0x16 - lsl r0, r0, #0x11 - lsr r1, r1, #0x1b - lsr r0, r0, #0x1b - mov r2, #0x0 - mov lr, r1 - str r0, [sp, #0x8] - cmp r7, #0x0 - bls _020039E2 -_0200399A: - ldr r0, [sp, #0x0] - lsl r6, r2, #0x1 - ldrh r4, [r0, r6] - lsl r0, r4, #0x1b - lsr r1, r0, #0x1b - lsl r0, r4, #0x16 - lsl r4, r4, #0x11 - lsr r5, r4, #0x1b - ldr r4, [sp, #0x8] - lsr r0, r0, #0x1b - sub r4, r4, r5 - mul r4, r3 - asr r4, r4, #0x4 - add r4, r5, r4 - lsl r5, r4, #0xa - mov r4, r12 - sub r4, r4, r1 - mul r4, r3 - asr r4, r4, #0x4 - add r1, r1, r4 - mov r4, lr - sub r4, r4, r0 - mul r4, r3 - asr r4, r4, #0x4 - add r0, r0, r4 - lsl r0, r0, #0x5 - orr r0, r1 - add r1, r5, #0x0 - orr r1, r0 - ldr r0, [sp, #0x4] - strh r1, [r0, r6] - add r0, r2, #0x1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - cmp r2, r7 - blo _0200399A -_020039E2: - add sp, #0xc - pop {r4-r7, pc} - // clang-format on -} -#endif THUMB_FUNC void BlendPaletteUnfaded(struct PaletteData *paletteData, u32 index, -- cgit v1.2.3 From b04c61007e9df8f672d71cd6403cc5d25ad55e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 15:06:48 +0200 Subject: match TintPalette_CustomTone from pokeemerald --- arm9/src/palette.c | 76 +----------------------------------------------------- include/palette.h | 2 +- 2 files changed, 2 insertions(+), 76 deletions(-) diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 75dd4d90..41a00d76 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -562,8 +562,7 @@ THUMB_FUNC void BlendPalettesUnfaded( } } -#ifdef NONMATCHING -THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) +THUMB_FUNC void TintPalette_CustomTone(u16 *palette, s32 count, s32 rTone, s32 gTone, s32 bTone) { s32 r, g, b, i; u32 gray; @@ -590,79 +589,6 @@ THUMB_FUNC void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 g *palette++ = (b << 10) | (g << 5) | (r << 0); } } -#else -asm void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone) -{ - // clang-format off - push {r3-r7, lr} - mov lr, r1 - mov r12, r2 - add r7, r3, #0x0 - mov r4, #0x0 - cmp r1, #0x0 - ble _02003B3C - ldr r6, [sp, #0x18] -_02003AD4: - ldrh r3, [r0, #0x0] - mov r1, #0x1f - add r2, r3, #0x0 - asr r5, r3, #0xa - and r2, r1 - and r5, r1 - mov r1, #0x1d - mul r1, r5 - mov r5, #0x4c - mul r5, r2 - asr r3, r3, #0x5 - mov r2, #0x1f - and r3, r2 - mov r2, #0x97 - mul r2, r3 - add r2, r5, r2 - add r1, r1, r2 - asr r3, r1, #0x8 - mov r1, r12 - add r2, r1, #0x0 - mul r2, r3 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - asr r2, r1, #0x8 - add r1, r7, #0x0 - mul r1, r3 - mul r3, r6 - lsl r1, r1, #0x10 - lsl r3, r3, #0x10 - lsr r1, r1, #0x10 - lsr r3, r3, #0x10 - asr r1, r1, #0x8 - asr r3, r3, #0x8 - cmp r2, #0x1f - ble _02003B1C - mov r2, #0x1f -_02003B1C: - cmp r1, #0x1f - ble _02003B22 - mov r1, #0x1f -_02003B22: - cmp r3, #0x1f - ble _02003B28 - mov r3, #0x1f -_02003B28: - lsl r3, r3, #0xa - lsl r1, r1, #0x5 - orr r1, r3 - orr r1, r2 - strh r1, [r0, #0x0] - add r4, r4, #0x1 - mov r1, lr - add r0, r0, #0x2 - cmp r4, r1 - blt _02003AD4 -_02003B3C: - pop {r3-r7, pc} - // clang-format on -} -#endif THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, diff --git a/include/palette.h b/include/palette.h index 469c680f..2f0e585b 100644 --- a/include/palette.h +++ b/include/palette.h @@ -58,7 +58,7 @@ void BlendPaletteUnfaded(struct PaletteData *paletteData, void BlendPalettes(u16 *src, u16 *dest, u16 selectedPalettes, u8 coeff, u16 blendColor); void BlendPalettesUnfaded( struct PaletteData *paletteData, u32 index, u16 selectedPalettes, u8 coeff, u16 blendColor); -void TintPalette_CustomTone(u16 *palette, u32 count, u32 rTone, u32 gTone, u32 bTone); +void TintPalette_CustomTone(u16 *palette, s32 count, s32 rTone, s32 gTone, s32 bTone); void FUN_02003B40(struct PaletteData *paletteData, NarcId narcId, s32 memberId, -- cgit v1.2.3 From 7a3c5d315180fb2d1adef1b7a032ab26bf227ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 15:11:53 +0200 Subject: fix warnings --- arm9/src/palette.c | 14 +++++++------- include/palette.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 41a00d76..5f437120 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -496,8 +496,8 @@ THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 s32 g = ((struct PlttData *)&src[i])->g; s32 b = ((struct PlttData *)&src[i])->b; - dest[i] = ((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | - ((b + (((b2 - b) * coeff) >> 4)) << 10); + dest[i] = (u16)(((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | + ((b + (((b2 - b) * coeff) >> 4)) << 10)); } } @@ -573,7 +573,7 @@ THUMB_FUNC void TintPalette_CustomTone(u16 *palette, s32 count, s32 rTone, s32 g g = (*palette >> 5) & 0x1F; b = (*palette >> 10) & 0x1F; - gray = (r * 76 + g * 151 + b * 29) >> 8; + gray = (u32)((r * 76 + g * 151 + b * 29) >> 8); r = (u16)((rTone * gray)) >> 8; g = (u16)((gTone * gray)) >> 8; @@ -586,7 +586,7 @@ THUMB_FUNC void TintPalette_CustomTone(u16 *palette, s32 count, s32 rTone, s32 g if (b > 31) b = 31; - *palette++ = (b << 10) | (g << 5) | (r << 0); + *palette++ = (u16)((b << 10) | (g << 5) | (r << 0)); } } @@ -597,9 +597,9 @@ THUMB_FUNC void FUN_02003B40(struct PaletteData *paletteData, u32 index, u32 size, u16 offset, - u32 rTone, - u32 gTone, - u32 bTone) + s32 rTone, + s32 gTone, + s32 bTone) { NNSG2dPaletteData *pltData; void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); diff --git a/include/palette.h b/include/palette.h index 2f0e585b..def12c70 100644 --- a/include/palette.h +++ b/include/palette.h @@ -66,8 +66,8 @@ void FUN_02003B40(struct PaletteData *paletteData, u32 index, u32 size, u16 offset, - u32 rTone, - u32 gTone, - u32 bTone); + s32 rTone, + s32 gTone, + s32 bTone); #endif // POKEDIAMOND_PALETTE_H -- cgit v1.2.3 From eb17a2e3aa326e613e09c8f6300b2ab10b3f7389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 27 Jun 2021 15:20:28 +0200 Subject: fix file split --- arm9/arm9.lsf | 1 - arm9/src/font.c | 66 +++++++++++++++++++++-- arm9/src/palette.c | 84 ++++++++++++++++++++++++++++- arm9/src/unk_02002F08.c | 140 ------------------------------------------------ include/font.h | 5 ++ include/palette.h | 70 +++++++++++++++++++++++- include/unk_02002F08.h | 83 ---------------------------- 7 files changed, 218 insertions(+), 231 deletions(-) delete mode 100644 arm9/src/unk_02002F08.c delete mode 100644 include/unk_02002F08.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 346d40b7..0f29630c 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -11,7 +11,6 @@ Static arm9 Object string_util.o Object render_text.o Object font.o - Object unk_02002F08.o Object palette.o Object sound.o Object unk_020040F4.o diff --git a/arm9/src/font.c b/arm9/src/font.c index e09b0341..6c838892 100644 --- a/arm9/src/font.c +++ b/arm9/src/font.c @@ -1,16 +1,17 @@ #include "global.h" #include "font.h" #include "gf_gfx_loader.h" +#include "graphic/font.naix" #include "render_text.h" #include "string16.h" #include "text.h" -#include "graphic/font.naix" +#include "unk_0201B8B8.h" struct UnkStruct_02002C14 *UNK_02106FC8; struct UnkStruct_02002C14 UNK_02106FCC; -const u16 UNK_020ECB54[4][2] = { {0, 0}, {1, 0}, {2, 0}, {3, 0} }; +const u16 UNK_020ECB54[4][2] = { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 } }; const struct FontInfo gFontInfos[5] = { { 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02 }, @@ -164,10 +165,67 @@ THUMB_FUNC s32 GetFontAttribute(u8 fontId, s32 attr) THUMB_FUNC void FUN_02002ED0(u32 layer, u32 baseAddr, u32 heap_id) { - GfGfxLoader_GXLoadPal(NARC_GRAPHIC_FONT, NARC_font_narc_0006_NCLR, layer, baseAddr, 0x20, heap_id); + GfGfxLoader_GXLoadPal( + NARC_GRAPHIC_FONT, NARC_font_narc_0006_NCLR, layer, baseAddr, 0x20, heap_id); } THUMB_FUNC void FUN_02002EEC(u32 layer, u32 baseAddr, u32 heap_id) { - GfGfxLoader_GXLoadPal(NARC_GRAPHIC_FONT, NARC_font_narc_0007_NCLR, layer, baseAddr, 0x20, heap_id); + GfGfxLoader_GXLoadPal( + NARC_GRAPHIC_FONT, NARC_font_narc_0007_NCLR, layer, baseAddr, 0x20, heap_id); +} + +THUMB_FUNC s32 FUN_02002F08(u32 param0, struct String *str, u32 param2) +{ + GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); + + return StringGetWidth(UNK_02106FC8->unk94[param0], String_c_str(str), param2); +} + +THUMB_FUNC u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3) +{ + u32 r0 = FUN_02002E14(param0, str, param2); + if (r0 < param3) + { + return (param3 - r0) / 2; + } + + return 0; +} + +THUMB_FUNC u32 FUN_02002F58(const u16 *str) +{ + u32 r5 = 1; + while (*str != EOS) + { + if (*str == 0xFFFE) + { + str = MsgArray_SkipControlCode(str); + continue; + } + + if (*str == 0xE000) + { + r5++; + str++; + continue; + } + + str++; + } + + return r5; +} + +THUMB_FUNC u32 FUN_02002F90(struct String *str) +{ + return FUN_02002F58(String_c_str(str)); +} + +THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) +{ + GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); + + return StringGetWidth_SingleLine_HandleClearToControlCode( + UNK_02106FC8->unk94[param0], String_c_str(str)); } diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 5f437120..6726a0ec 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -1,7 +1,7 @@ #include "global.h" #include "palette.h" #include "MI_memory.h" -#include "unk_02002F08.h" +#include "gf_gfx_loader.h" #include "unk_0200CA44.h" extern void *FUN_020222E8(); @@ -10,6 +10,85 @@ extern void *FUN_02022308(); extern void *FUN_02022310(); extern int abs(int); +THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) +{ + struct PaletteData *ptr = AllocFromHeap(heap_id, sizeof(struct PaletteData)); + MI_CpuFill8(ptr, 0, sizeof(struct PaletteData)); + + return ptr; +} + +THUMB_FUNC void FUN_02002FEC(struct PaletteData *ptr) +{ + FreeToHeap(ptr); +} + +THUMB_FUNC void PaletteData_SetBuffers( + struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) +{ + paletteData->pltt[index].unfadedBuf = unfadedBuf; + paletteData->pltt[index].fadedBuf = fadedBuf; + paletteData->pltt[index].bufSize = size; +} + +THUMB_FUNC void PaletteData_AllocBuffers( + struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id) +{ + void *ptr = AllocFromHeap(heap_id, size); + void *ptr2 = AllocFromHeap(heap_id, size); + + PaletteData_SetBuffers(paletteData, index, ptr, ptr2, size); +} + +THUMB_FUNC void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index) +{ + FreeToHeap(paletteData->pltt[index].unfadedBuf); + FreeToHeap(paletteData->pltt[index].fadedBuf); +} + +THUMB_FUNC void PaletteData_LoadPalette( + struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) +{ + MIi_CpuCopy16(src, paletteData->pltt[index].unfadedBuf + offset, size); + MIi_CpuCopy16(src, paletteData->pltt[index].fadedBuf + offset, size); +} + +THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u16 param7) +{ + NNSG2dPaletteData *pltData; + void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); + + GF_ASSERT(ptr != NULL); + + if (size == 0) + { + size = pltData->szByte; + } + + GF_ASSERT(size + offset * 2 <= paletteData->pltt[index].bufSize); + + PaletteData_LoadPalette(paletteData, pltData->pRawData + param7 * 2, index, offset, (u16)size); + FreeToHeap(ptr); +} + +THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset) +{ + PaletteData_LoadFromNarc(paletteData, narcId, memberId, heap_id, index, size, offset, 0); +} + THUMB_FUNC void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size) { GF_ASSERT(offset * 2 + size <= paletteData->pltt[index].bufSize); @@ -496,7 +575,8 @@ THUMB_FUNC void BlendPalette(u16 *src, u16 *dest, u16 numEntries, u8 coeff, u16 s32 g = ((struct PlttData *)&src[i])->g; s32 b = ((struct PlttData *)&src[i])->b; - dest[i] = (u16)(((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | + dest[i] = + (u16)(((r + (((r2 - r) * coeff) >> 4)) << 0) | ((g + (((g2 - g) * coeff) >> 4)) << 5) | ((b + (((b2 - b) * coeff) >> 4)) << 10)); } } diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c deleted file mode 100644 index 5a1eca36..00000000 --- a/arm9/src/unk_02002F08.c +++ /dev/null @@ -1,140 +0,0 @@ -#include "global.h" -#include "unk_02002F08.h" -#include "font.h" -#include "gf_gfx_loader.h" -#include "string16.h" -#include "unk_0201B8B8.h" - -THUMB_FUNC s32 FUN_02002F08(u32 param0, struct String *str, u32 param2) -{ - GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); - - return StringGetWidth(UNK_02106FC8->unk94[param0], String_c_str(str), param2); -} - -THUMB_FUNC u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3) -{ - u32 r0 = FUN_02002E14(param0, str, param2); - if (r0 < param3) - { - return (param3 - r0) / 2; - } - - return 0; -} - -THUMB_FUNC u32 FUN_02002F58(const u16 *str) -{ - u32 r5 = 1; - while (*str != EOS) - { - if (*str == 0xFFFE) - { - str = MsgArray_SkipControlCode(str); - continue; - } - - if (*str == 0xE000) - { - r5++; - str++; - continue; - } - - str++; - } - - return r5; -} - -THUMB_FUNC u32 FUN_02002F90(struct String *str) -{ - return FUN_02002F58(String_c_str(str)); -} - -THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str) -{ - GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL); - - return StringGetWidth_SingleLine_HandleClearToControlCode( - UNK_02106FC8->unk94[param0], String_c_str(str)); -} - -THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) -{ - struct PaletteData *ptr = AllocFromHeap(heap_id, sizeof(struct PaletteData)); - MI_CpuFill8(ptr, 0, sizeof(struct PaletteData)); - - return ptr; -} - -THUMB_FUNC void FUN_02002FEC(struct PaletteData *ptr) -{ - FreeToHeap(ptr); -} - -THUMB_FUNC void PaletteData_SetBuffers( - struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size) -{ - paletteData->pltt[index].unfadedBuf = unfadedBuf; - paletteData->pltt[index].fadedBuf = fadedBuf; - paletteData->pltt[index].bufSize = size; -} - -THUMB_FUNC void PaletteData_AllocBuffers( - struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id) -{ - void *ptr = AllocFromHeap(heap_id, size); - void *ptr2 = AllocFromHeap(heap_id, size); - - PaletteData_SetBuffers(paletteData, index, ptr, ptr2, size); -} - -THUMB_FUNC void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index) -{ - FreeToHeap(paletteData->pltt[index].unfadedBuf); - FreeToHeap(paletteData->pltt[index].fadedBuf); -} - -THUMB_FUNC void PaletteData_LoadPalette( - struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size) -{ - MIi_CpuCopy16(src, paletteData->pltt[index].unfadedBuf + offset, size); - MIi_CpuCopy16(src, paletteData->pltt[index].fadedBuf + offset, size); -} - -THUMB_FUNC void PaletteData_LoadFromNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset, - u16 param7) -{ - NNSG2dPaletteData *pltData; - void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id); - - GF_ASSERT(ptr != NULL); - - if (size == 0) - { - size = pltData->szByte; - } - - GF_ASSERT(size + offset * 2 <= paletteData->pltt[index].bufSize); - - PaletteData_LoadPalette(paletteData, pltData->pRawData + param7 * 2, index, offset, (u16)size); - FreeToHeap(ptr); -} - -THUMB_FUNC void PaletteData_LoadNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset) -{ - PaletteData_LoadFromNarc(paletteData, narcId, memberId, heap_id, index, size, offset, 0); -} diff --git a/include/font.h b/include/font.h index 6617f8ef..963e36bc 100644 --- a/include/font.h +++ b/include/font.h @@ -27,5 +27,10 @@ u32 FUN_02002E14(u32 param0, struct String *str, u32 param2); s32 GetFontAttribute(u8 fontId, s32 attr); void FUN_02002ED0(u32 layer, u32 baseAddr, u32 heap_id); void FUN_02002EEC(u32 layer, u32 baseAddr, u32 heap_id); +s32 FUN_02002F08(u32 param0, struct String *str, u32 param2); +u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3); +u32 FUN_02002F58(const u16 *str); +u32 FUN_02002F90(struct String *str); +s32 FUN_02002F9C(u32 param0, struct String *str); #endif // POKEDIAMOND_FONT_H diff --git a/include/palette.h b/include/palette.h index def12c70..7f14ddb4 100644 --- a/include/palette.h +++ b/include/palette.h @@ -3,8 +3,76 @@ #include "global.h" #include "filesystem.h" -#include "unk_02002F08.h" +struct PlttData +{ + u16 r : 5; // red + u16 g : 5; // green + u16 b : 5; // blue + u16 unused_15 : 1; +}; + +struct PaletteFadeControl +{ + u16 selectedPalettes; + + u16 delay : 6; + u16 y : 5; + u16 targetY : 5; + + u16 blendColor : 15; + u16 yDec : 1; + + u16 deltaY : 4; + u16 delayCounter : 6; + u16 unk06_a : 6; +}; + +struct Palette +{ + u16 *unfadedBuf; + u16 *fadedBuf; + u32 bufSize; + struct PaletteFadeControl fadeCtrl; +}; + +struct PaletteData +{ + struct Palette pltt[14]; + + u16 unk118_0 : 2; + u16 activeFadePalettes : 14; + u16 unk11a_0 : 14; + u16 unk11a_e : 1; + u16 unk11a_f : 1; + u8 unk11c; + u8 unk11d; + u16 unk11e; +}; + +struct PaletteData *FUN_02002FD0(u32 heap_id); +void FUN_02002FEC(struct PaletteData *ptr); +void PaletteData_SetBuffers( + struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size); +void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id); +void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index); +void PaletteData_LoadPalette( + struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size); +void PaletteData_LoadFromNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset, + u16 param7); +void PaletteData_LoadNarc(struct PaletteData *paletteData, + NarcId narcId, + s32 memberId, + u32 heap_id, + u32 index, + u32 size, + u16 offset); void FUN_02003108(struct PaletteData *paletteData, u32 index, u16 offset, u32 size); void CopyPaletteFromNarc( NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest); diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h deleted file mode 100644 index be551dc4..00000000 --- a/include/unk_02002F08.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef POKEDIAMOND_UNK_02002F08_H -#define POKEDIAMOND_UNK_02002F08_H - -#include "global.h" -#include "gf_gfx_loader.h" -#include "string16.h" - -struct PlttData -{ - u16 r : 5; // red - u16 g : 5; // green - u16 b : 5; // blue - u16 unused_15 : 1; -}; - -struct PaletteFadeControl -{ - u16 selectedPalettes; - - u16 delay : 6; - u16 y : 5; - u16 targetY : 5; - - u16 blendColor : 15; - u16 yDec : 1; - - u16 deltaY : 4; - u16 delayCounter : 6; - u16 unk06_a : 6; -}; - -struct Palette -{ - u16 *unfadedBuf; - u16 *fadedBuf; - u32 bufSize; - struct PaletteFadeControl fadeCtrl; -}; - -struct PaletteData -{ - struct Palette pltt[14]; - - u16 unk118_0 : 2; - u16 activeFadePalettes : 14; - u16 unk11a_0 : 14; - u16 unk11a_e : 1; - u16 unk11a_f : 1; - u8 unk11c; - u8 unk11d; - u16 unk11e; -}; - -s32 FUN_02002F08(u32 param0, struct String *str, u32 param2); -u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3); -u32 FUN_02002F58(const u16 *str); -u32 FUN_02002F90(struct String *str); -s32 FUN_02002F9C(u32 param0, struct String *str); -struct PaletteData *FUN_02002FD0(u32 heap_id); -void FUN_02002FEC(struct PaletteData *ptr); -void PaletteData_SetBuffers( - struct PaletteData *paletteData, u32 index, void *unfadedBuf, void *fadedBuf, u32 size); -void PaletteData_AllocBuffers(struct PaletteData *paletteData, u32 index, u32 size, u32 heap_id); -void PaletteData_FreeBuffers(struct PaletteData *paletteData, u32 index); -void PaletteData_LoadPalette( - struct PaletteData *paletteData, const void *src, u32 index, u32 offset, u16 size); -void PaletteData_LoadFromNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset, - u16 param7); -void PaletteData_LoadNarc(struct PaletteData *paletteData, - NarcId narcId, - s32 memberId, - u32 heap_id, - u32 index, - u32 size, - u16 offset); - -#endif // POKEDIAMOND_UNK_02002F08_H -- cgit v1.2.3 From 58b831b027e56480daa516c352d1e74323d53579 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 27 Jun 2021 22:31:26 +0100 Subject: WM_ks decomp, plus some mod63 docs --- arm9/asm/WM_ks.s | 26 -------------- arm9/lib/include/WM.h | 61 ++++++++++++++++++++++++++++++++ arm9/lib/include/WM_ks.h | 9 +++++ arm9/lib/src/WM_ks.c | 15 ++++++++ arm9/modules/63/include/mod63_021DB450.h | 6 ++-- arm9/modules/63/src/mod63_021DB450.c | 4 +-- 6 files changed, 90 insertions(+), 31 deletions(-) delete mode 100644 arm9/asm/WM_ks.s create mode 100644 arm9/lib/include/WM.h create mode 100644 arm9/lib/include/WM_ks.h create mode 100644 arm9/lib/src/WM_ks.c diff --git a/arm9/asm/WM_ks.s b/arm9/asm/WM_ks.s deleted file mode 100644 index 3dd46c1b..00000000 --- a/arm9/asm/WM_ks.s +++ /dev/null @@ -1,26 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start WM_EndKeySharing -WM_EndKeySharing: ; 0x020DAD3C - ldr ip, _020DAD44 ; =WM_EndDataSharing - bx r12 - .balign 4 -_020DAD44: .word WM_EndDataSharing - - arm_func_start WM_StartKeySharing -WM_StartKeySharing: ; 0x020DAD48 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DAD70 ; =0x0000FFFF - mov r12, #0x1 - mov r3, #0x2 - str r12, [sp, #0x0] - bl WM_StartDataSharing - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DAD70: .word 0x0000FFFF diff --git a/arm9/lib/include/WM.h b/arm9/lib/include/WM.h new file mode 100644 index 00000000..ad287292 --- /dev/null +++ b/arm9/lib/include/WM.h @@ -0,0 +1,61 @@ +#ifndef POKEDIAMOND_WM_H +#define POKEDIAMOND_WM_H + +#include "nitro/types.h" + +typedef struct WMDataSet +{ + u16 aidBitmap; + u16 receivedBitmap; + u16 data[508 / sizeof(u16)]; +} WMDataSet; + +typedef struct WMDataSharingInfo +{ + WMDataSet ds[4]; + u16 seqNum[4]; + u16 writeIndex; + u16 sendIndex; + u16 readIndex; + u16 aidBitmap; + u16 dataLength; + u16 stationNumber; + u16 dataSetLength; + u16 port; + u16 doubleMode; + u16 currentSeqNum; + u16 state; + u16 reserved[1]; +} WMDataSharingInfo; + +typedef WMDataSharingInfo WMKeySetBuf; + +typedef enum WMErrCode +{ + WM_ERRCODE_SUCCESS = 0, + WM_ERRCODE_FAILED = 1, + WM_ERRCODE_OPERATING = 2, + WM_ERRCODE_ILLEGAL_STATE = 3, + WM_ERRCODE_WM_DISABLE = 4, + WM_ERRCODE_NO_KEYSET = 5, + WM_ERRCODE_NO_DATASET = 5, + WM_ERRCODE_INVALID_PARAM = 6, + WM_ERRCODE_NO_CHILD = 7, + WM_ERRCODE_FIFO_ERROR = 8, + WM_ERRCODE_TIMEOUT = 9, + WM_ERRCODE_SEND_QUEUE_FULL = 10, + WM_ERRCODE_NO_ENTRY = 11, + WM_ERRCODE_OVER_MAX_ENTRY = 12, + WM_ERRCODE_INVALID_POLLBITMAP = 13, + WM_ERRCODE_NO_DATA = 14, + WM_ERRCODE_SEND_FAILED = 15, + + WM_ERRCODE_DCF_TEST, + WM_ERRCODE_WL_INVALID_PARAM, + WM_ERRCODE_WL_LENGTH_ERR, + + WM_ERRCODE_FLASH_ERROR, + WM_ERRCODE_MAX +} WMErrCode; + +#endif //POKEDIAMOND_WM_H diff --git a/arm9/lib/include/WM_ks.h b/arm9/lib/include/WM_ks.h new file mode 100644 index 00000000..0eeb6b1b --- /dev/null +++ b/arm9/lib/include/WM_ks.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_WM_KS_H +#define POKEDIAMOND_WM_KS_H + +#include "WM.h" + +WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port); +WMErrCode WM_EndKeySharing(WMKeySetBuf *buf); + +#endif //POKEDIAMOND_WM_KS_H diff --git a/arm9/lib/src/WM_ks.c b/arm9/lib/src/WM_ks.c new file mode 100644 index 00000000..93e96f89 --- /dev/null +++ b/arm9/lib/src/WM_ks.c @@ -0,0 +1,15 @@ +#include "WM_ks.h" +#include "function_target.h" + +extern WMErrCode WM_StartDataSharing(WMKeySetBuf *buf, u16 port, u16 aidBitmap, u16 dataLength, BOOL doubleMode); +extern WMErrCode WM_EndDataSharing(WMKeySetBuf *buf); + +ARM_FUNC WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port) +{ + return WM_StartDataSharing(buf, port, 0xffff, 2, TRUE); +} + +ARM_FUNC WMErrCode WM_EndKeySharing(WMKeySetBuf *buf) +{ + return WM_EndDataSharing(buf); +} diff --git a/arm9/modules/63/include/mod63_021DB450.h b/arm9/modules/63/include/mod63_021DB450.h index e5ecc7df..ac3da1b6 100644 --- a/arm9/modules/63/include/mod63_021DB450.h +++ b/arm9/modules/63/include/mod63_021DB450.h @@ -3,10 +3,10 @@ #include "global.h" -typedef struct UnkStruct63_021DB450 +typedef struct UnkStruct63_021DB450 //intro base struct type { - struct UnkStruct63_021DB450 * field_00; - u32 field_04[3]; + struct UnkStruct63_021DB450 * field_00; //oddly requires this to be set to progress past copyright/pokemon screen. + u32 field_04[3]; //mon animations? u32 field_10; void * field_14; void * field_18; diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c index 84461fe1..454b2b19 100644 --- a/arm9/modules/63/src/mod63_021DB450.c +++ b/arm9/modules/63/src/mod63_021DB450.c @@ -69,12 +69,12 @@ THUMB_FUNC u32 MOD63_021DB498(void) return 32; } -THUMB_FUNC void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB450 * arg0) +THUMB_FUNC void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB450 * arg0) //TODO: this does a lot more than setup anim sprites { struct UnkStruct63_021DB49C sp1C; int introMonArray[3] = {SPECIES_TURTWIG, SPECIES_CHIMCHAR, SPECIES_PIPLUP}; - arg0->field_00 = FUN_02006D98(76); + arg0->field_00 = FUN_02006D98(76); //this is needed to get into the world view, otherwise it is just black for (u8 i = 0; i < 3; i++) //some kind of animation assignment TODO: investigate further { -- cgit v1.2.3 From 17f024a5179351f68eba823f61f02f2c2f934112 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Sun, 27 Jun 2021 19:03:01 -0400 Subject: Decompile unk_02088DD8.s --- arm9/asm/unk_02088DD8.s | 172 ----------------------------------- arm9/global.inc | 2 +- arm9/src/scrcmd_24.c | 8 +- arm9/src/unk_02088DD8.c | 76 ++++++++++++++++ files/graphic/poketch/narc_0010.NCGR | Bin 0 -> 2112 bytes include/unk_02088DD8.h | 9 ++ 6 files changed, 88 insertions(+), 179 deletions(-) delete mode 100644 arm9/asm/unk_02088DD8.s create mode 100644 arm9/src/unk_02088DD8.c create mode 100644 files/graphic/poketch/narc_0010.NCGR diff --git a/arm9/asm/unk_02088DD8.s b/arm9/asm/unk_02088DD8.s deleted file mode 100644 index 3df58ffe..00000000 --- a/arm9/asm/unk_02088DD8.s +++ /dev/null @@ -1,172 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02088DD8 -FUN_02088DD8: ; 0x02088DD8 - push {r3, lr} - mov r1, #0x18 - bl AllocFromHeap - add r3, r0, #0x0 - mov r2, #0x18 - mov r1, #0x0 -_02088DE6: - strb r1, [r3, #0x0] - add r3, r3, #0x1 - sub r2, r2, #0x1 - bne _02088DE6 - pop {r3, pc} - - thumb_func_start FUN_02088DF0 -FUN_02088DF0: ; 0x02088DF0 - ldr r3, _02088DF4 ; =FreeToHeap - bx r3 - .balign 4 -_02088DF4: .word FreeToHeap - - thumb_func_start FUN_02088DF8 -FUN_02088DF8: ; 0x02088DF8 - push {r3-r7, lr} - sub sp, #0x18 - str r1, [sp, #0x0] - mov r1, #0x5 - mov r2, #0x0 - add r5, r0, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0xc] - add r0, r5, #0x0 - mov r1, #0x70 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x8] - add r0, r5, #0x0 - mov r1, #0xa0 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - mov r4, #0x0 - str r0, [sp, #0x4] - add r7, r4, #0x0 - add r6, sp, #0x10 -_02088E34: - add r1, r4, #0x0 - add r0, r5, #0x0 - add r1, #0x36 - add r2, r7, #0x0 - bl GetMonData - lsl r1, r4, #0x1 - strh r0, [r6, r1] - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x4 - blo _02088E34 - ldr r0, [sp, #0x0] - mov r1, #0x2c - bl AllocFromHeap - add r7, r0, #0x0 - ldr r0, [sp, #0x0] - mov r1, #0x2c - bl AllocFromHeap - add r4, r0, #0x0 - ldr r0, [sp, #0xc] - ldr r1, [sp, #0x8] - add r2, r7, #0x0 - bl LoadWotbl_HandleAlternateForme - mov r2, #0x0 - mov r12, r2 -_02088E70: - mov r0, r12 - lsl r0, r0, #0x1 - ldrh r5, [r7, r0] - ldr r6, _02088EF4 ; =0x0000FFFF - cmp r5, r6 - bne _02088E82 - lsl r0, r2, #0x1 - strh r6, [r4, r0] - b _02088EE8 -_02088E82: - mov r1, #0xfe - lsl r1, r1, #0x8 - and r1, r5 - asr r3, r1, #0x9 - ldr r1, [sp, #0x4] - cmp r3, r1 - bgt _02088EDA - lsr r1, r6, #0x7 - and r1, r5 - strh r1, [r7, r0] - ldrh r3, [r7, r0] - mov r1, #0x0 - add r6, sp, #0x10 -_02088E9C: - lsl r5, r1, #0x1 - ldrh r5, [r6, r5] - cmp r3, r5 - beq _02088EAE - add r1, r1, #0x1 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, #0x4 - blo _02088E9C -_02088EAE: - cmp r1, #0x4 - bne _02088EDA - mov r1, #0x0 - cmp r2, #0x0 - bls _02088ECA -_02088EB8: - lsl r5, r1, #0x1 - ldrh r5, [r4, r5] - cmp r5, r3 - beq _02088ECA - add r1, r1, #0x1 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r2 - blo _02088EB8 -_02088ECA: - cmp r1, r2 - bne _02088EDA - ldrh r1, [r7, r0] - lsl r0, r2, #0x1 - strh r1, [r4, r0] - add r0, r2, #0x1 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 -_02088EDA: - mov r0, r12 - add r0, r0, #0x1 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - mov r12, r0 - cmp r0, #0x16 - blo _02088E70 -_02088EE8: - add r0, r7, #0x0 - bl FreeToHeap - add r0, r4, #0x0 - add sp, #0x18 - pop {r3-r7, pc} - .balign 4 -_02088EF4: .word 0x0000FFFF - - thumb_func_start FUN_02088EF8 -FUN_02088EF8: ; 0x02088EF8 - ldrh r1, [r0, #0x0] - ldr r0, _02088F08 ; =0x0000FFFF - cmp r1, r0 - beq _02088F04 - mov r0, #0x1 - bx lr -_02088F04: - mov r0, #0x0 - bx lr - .balign 4 -_02088F08: .word 0x0000FFFF diff --git a/arm9/global.inc b/arm9/global.inc index 086d9b5f..e1952cc2 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5450,7 +5450,7 @@ .extern FUN_02088DBC .extern FUN_02088DD8 .extern FUN_02088DF0 -.extern FUN_02088DF8 +.extern Maybe_GetEligibleLevelUpMoves .extern FUN_02088EF8 .extern FUN_02088F0C .extern FUN_02088F4C diff --git a/arm9/src/scrcmd_24.c b/arm9/src/scrcmd_24.c index b38ed05a..f4330150 100644 --- a/arm9/src/scrcmd_24.c +++ b/arm9/src/scrcmd_24.c @@ -10,10 +10,6 @@ extern struct UnkStruct_02037CF0* FUN_02037CF0(u32 heap_id, struct UnkSavStruct8 extern u8 FUN_02037D5C(struct UnkStruct_02037CF0*); extern void FUN_02038864(struct UnkSavStruct80*, struct UnkStruct_02088DD8*); extern BOOL FUN_0203BC04(struct ScriptContext* ctx); -extern struct UnkStruct_02088DD8* FUN_02088DD8(u32 heap_id); -extern void FUN_02088DF0(struct UnkStruct_02037CF0*); -extern void* FUN_02088DF8(struct Pokemon* pokemon, u32 heap_id); -extern BOOL FUN_02088EF8(void*); THUMB_FUNC BOOL ScrCmd_Unk01C6(struct ScriptContext* ctx) { @@ -57,7 +53,7 @@ THUMB_FUNC BOOL ScrCmd_Unk021F(struct ScriptContext* ctx) u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2); struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); - void* unk_ptr = FUN_02088DF8(pokemon, 32); + void* unk_ptr = Maybe_GetEligibleLevelUpMoves(pokemon, 32); *ret_ptr = (u16)FUN_02088EF8(unk_ptr); FreeToHeap(unk_ptr); @@ -96,7 +92,7 @@ THUMB_FUNC BOOL ScrCmd_Unk0221(struct ScriptContext* ctx) u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2); struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); - void* unk_ptr = FUN_02088DF8(pokemon, 32); + void* unk_ptr = Maybe_GetEligibleLevelUpMoves(pokemon, 32); FUN_02045E74(ctx, 1, pokemon, unk_ptr); return TRUE; diff --git a/arm9/src/unk_02088DD8.c b/arm9/src/unk_02088DD8.c new file mode 100644 index 00000000..acc59701 --- /dev/null +++ b/arm9/src/unk_02088DD8.c @@ -0,0 +1,76 @@ +#include "global.h" +#include "heap.h" +#include "pokemon.h" +#include "unk_02088DD8.h" + +THUMB_FUNC struct UnkStruct_02088DD8* FUN_02088DD8(u32 r0) { + struct UnkStruct_02088DD8 *returnPointer = AllocFromHeap(r0, 24); + __builtin__clear(returnPointer, 24); + return returnPointer; +} + +THUMB_FUNC void FUN_02088DF0(struct UnkStruct_02037CF0 *r0) { + FreeToHeap(r0); +} + +#define WOTBL_END 0xFFFF +#define WOTBL_MOVE_MASK 0x01FF +#define WOTBL_MOVE_SHIFT 0 +#define WOTBL_LVL_MASK 0xFE00 +#define WOTBL_LVL_SHIFT 9 +#define WOTBL_MOVE(x) ((u16)(((x) & WOTBL_MOVE_MASK) >> WOTBL_MOVE_SHIFT)) +#define WOTBL_LVL(x) (/*(u8)*/(((x) & WOTBL_LVL_MASK) >> WOTBL_LVL_SHIFT)) +// i don't know why either. + +THUMB_FUNC void* Maybe_GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { + u16 species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, 0); + u8 forme = (u8)GetMonData(pokemon, MON_DATA_FORME, 0); + u8 level = (u8)GetMonData(pokemon, MON_DATA_LEVEL, 0); + u16 moves[4]; + + for (u8 i = 0; i < 4; ++i) { + moves[i] = (u16)GetMonData(pokemon, MON_DATA_MOVE1 + i, 0); + } + + u16 *tableFromFile = AllocFromHeap(heap_id, 44); + u16 *returnTable = AllocFromHeap(heap_id, 44); + + LoadWotbl_HandleAlternateForme(species, forme, tableFromFile); + + for (u8 i = 0, j, k = 0; i < 22; i++) { + if (tableFromFile[i] == WOTBL_END) { + returnTable[k] = WOTBL_END; + break; + } + else { + if (WOTBL_LVL(tableFromFile[i]) > level) continue; + + tableFromFile[i] = WOTBL_MOVE(tableFromFile[i]); + + j = 0; + for (; j < 4; j++) { + if (tableFromFile[i] == moves[j]) break; + } + if (j != 4) continue; + + j = 0; + if (k >= 0) { + // don't know when that would be false + for (; j < k; j++) { + if (returnTable[j] == tableFromFile[i]) break; + } + } + if (j != k) continue; + + returnTable[k] = tableFromFile[i]; + k++; + } + } + + FreeToHeap(tableFromFile); + return returnTable; +} + +THUMB_FUNC BOOL FUN_02088EF8(u16 *r0) { + return *r0 != 0xFFFF; +} \ No newline at end of file diff --git a/files/graphic/poketch/narc_0010.NCGR b/files/graphic/poketch/narc_0010.NCGR new file mode 100644 index 00000000..9dcdc01b Binary files /dev/null and b/files/graphic/poketch/narc_0010.NCGR differ diff --git a/include/unk_02088DD8.h b/include/unk_02088DD8.h index 318a98fb..41e7232e 100644 --- a/include/unk_02088DD8.h +++ b/include/unk_02088DD8.h @@ -1,6 +1,10 @@ #ifndef POKEDIAMOND_UNK_02088DD8_H #define POKEDIAMOND_UNK_02088DD8_H +#include "unk_020377F0.h" + +extern void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl); + struct Options; struct PlayerData; struct Pokemon; @@ -16,4 +20,9 @@ struct UnkStruct_02088DD8 u8 padding2[0x2]; }; +struct UnkStruct_02088DD8* FUN_02088DD8(u32 r0); +void FUN_02088DF0(struct UnkStruct_02037CF0 *r0); +void* Maybe_GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id); +BOOL FUN_02088EF8(u16 *r0); + #endif -- cgit v1.2.3 From 93c3498a65ff4e47367a5d98bd9c6f8fe1f33f89 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Sun, 27 Jun 2021 19:16:57 -0400 Subject: Not maybe, if I am wrong let me be corrected --- arm9/global.inc | 2 +- arm9/src/scrcmd_24.c | 4 ++-- arm9/src/unk_02088DD8.c | 2 +- include/unk_02088DD8.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arm9/global.inc b/arm9/global.inc index e1952cc2..590bf428 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5450,7 +5450,7 @@ .extern FUN_02088DBC .extern FUN_02088DD8 .extern FUN_02088DF0 -.extern Maybe_GetEligibleLevelUpMoves +.extern GetEligibleLevelUpMoves .extern FUN_02088EF8 .extern FUN_02088F0C .extern FUN_02088F4C diff --git a/arm9/src/scrcmd_24.c b/arm9/src/scrcmd_24.c index f4330150..bfa737be 100644 --- a/arm9/src/scrcmd_24.c +++ b/arm9/src/scrcmd_24.c @@ -53,7 +53,7 @@ THUMB_FUNC BOOL ScrCmd_Unk021F(struct ScriptContext* ctx) u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2); struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); - void* unk_ptr = Maybe_GetEligibleLevelUpMoves(pokemon, 32); + void* unk_ptr = GetEligibleLevelUpMoves(pokemon, 32); *ret_ptr = (u16)FUN_02088EF8(unk_ptr); FreeToHeap(unk_ptr); @@ -92,7 +92,7 @@ THUMB_FUNC BOOL ScrCmd_Unk0221(struct ScriptContext* ctx) u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); struct PlayerParty* party = SavArray_PlayerParty_get(ctx->unk80->saveBlock2); struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); - void* unk_ptr = Maybe_GetEligibleLevelUpMoves(pokemon, 32); + void* unk_ptr = GetEligibleLevelUpMoves(pokemon, 32); FUN_02045E74(ctx, 1, pokemon, unk_ptr); return TRUE; diff --git a/arm9/src/unk_02088DD8.c b/arm9/src/unk_02088DD8.c index acc59701..d0a08f20 100644 --- a/arm9/src/unk_02088DD8.c +++ b/arm9/src/unk_02088DD8.c @@ -22,7 +22,7 @@ THUMB_FUNC void FUN_02088DF0(struct UnkStruct_02037CF0 *r0) { #define WOTBL_LVL(x) (/*(u8)*/(((x) & WOTBL_LVL_MASK) >> WOTBL_LVL_SHIFT)) // i don't know why either. -THUMB_FUNC void* Maybe_GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { +THUMB_FUNC void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { u16 species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, 0); u8 forme = (u8)GetMonData(pokemon, MON_DATA_FORME, 0); u8 level = (u8)GetMonData(pokemon, MON_DATA_LEVEL, 0); diff --git a/include/unk_02088DD8.h b/include/unk_02088DD8.h index 41e7232e..78ff4827 100644 --- a/include/unk_02088DD8.h +++ b/include/unk_02088DD8.h @@ -22,7 +22,7 @@ struct UnkStruct_02088DD8 struct UnkStruct_02088DD8* FUN_02088DD8(u32 r0); void FUN_02088DF0(struct UnkStruct_02037CF0 *r0); -void* Maybe_GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id); +void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id); BOOL FUN_02088EF8(u16 *r0); #endif -- cgit v1.2.3 From e22de9da55977f1dce79c7fcebd4a8a60f272b5b Mon Sep 17 00:00:00 2001 From: SNBeast Date: Sun, 27 Jun 2021 22:55:50 -0400 Subject: Minor naming tweak and sizeof As suggested by review --- arm9/src/unk_02088DD8.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arm9/src/unk_02088DD8.c b/arm9/src/unk_02088DD8.c index d0a08f20..572d274f 100644 --- a/arm9/src/unk_02088DD8.c +++ b/arm9/src/unk_02088DD8.c @@ -3,9 +3,9 @@ #include "pokemon.h" #include "unk_02088DD8.h" -THUMB_FUNC struct UnkStruct_02088DD8* FUN_02088DD8(u32 r0) { - struct UnkStruct_02088DD8 *returnPointer = AllocFromHeap(r0, 24); - __builtin__clear(returnPointer, 24); +THUMB_FUNC struct UnkStruct_02088DD8* FUN_02088DD8(u32 heap_id) { + struct UnkStruct_02088DD8 *returnPointer = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02088DD8)); + __builtin__clear(returnPointer, sizeof(struct UnkStruct_02088DD8)); return returnPointer; } -- cgit v1.2.3 From 029dab952d33320442fe2a46879b32175c536a79 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Mon, 28 Jun 2021 23:18:38 -0400 Subject: Another code review's suggestions --- arm9/src/unk_02088DD8.c | 12 ++++++------ files/graphic/poketch/narc_0010.NCGR | Bin 2112 -> 0 bytes include/unk_02088DD8.h | 6 ++---- 3 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 files/graphic/poketch/narc_0010.NCGR diff --git a/arm9/src/unk_02088DD8.c b/arm9/src/unk_02088DD8.c index 572d274f..b4633d25 100644 --- a/arm9/src/unk_02088DD8.c +++ b/arm9/src/unk_02088DD8.c @@ -3,6 +3,8 @@ #include "pokemon.h" #include "unk_02088DD8.h" +extern void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl); + THUMB_FUNC struct UnkStruct_02088DD8* FUN_02088DD8(u32 heap_id) { struct UnkStruct_02088DD8 *returnPointer = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02088DD8)); __builtin__clear(returnPointer, sizeof(struct UnkStruct_02088DD8)); @@ -22,7 +24,7 @@ THUMB_FUNC void FUN_02088DF0(struct UnkStruct_02037CF0 *r0) { #define WOTBL_LVL(x) (/*(u8)*/(((x) & WOTBL_LVL_MASK) >> WOTBL_LVL_SHIFT)) // i don't know why either. -THUMB_FUNC void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { +THUMB_FUNC u16* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { u16 species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, 0); u8 forme = (u8)GetMonData(pokemon, MON_DATA_FORME, 0); u8 level = (u8)GetMonData(pokemon, MON_DATA_LEVEL, 0); @@ -47,16 +49,14 @@ THUMB_FUNC void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { tableFromFile[i] = WOTBL_MOVE(tableFromFile[i]); - j = 0; - for (; j < 4; j++) { + for (j = 0; j < 4; j++) { if (tableFromFile[i] == moves[j]) break; } if (j != 4) continue; - j = 0; if (k >= 0) { // don't know when that would be false - for (; j < k; j++) { + for (j = 0; j < k; j++) { if (returnTable[j] == tableFromFile[i]) break; } } @@ -73,4 +73,4 @@ THUMB_FUNC void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id) { THUMB_FUNC BOOL FUN_02088EF8(u16 *r0) { return *r0 != 0xFFFF; -} \ No newline at end of file +} diff --git a/files/graphic/poketch/narc_0010.NCGR b/files/graphic/poketch/narc_0010.NCGR deleted file mode 100644 index 9dcdc01b..00000000 Binary files a/files/graphic/poketch/narc_0010.NCGR and /dev/null differ diff --git a/include/unk_02088DD8.h b/include/unk_02088DD8.h index 78ff4827..7b023c56 100644 --- a/include/unk_02088DD8.h +++ b/include/unk_02088DD8.h @@ -3,8 +3,6 @@ #include "unk_020377F0.h" -extern void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl); - struct Options; struct PlayerData; struct Pokemon; @@ -20,9 +18,9 @@ struct UnkStruct_02088DD8 u8 padding2[0x2]; }; -struct UnkStruct_02088DD8* FUN_02088DD8(u32 r0); +struct UnkStruct_02088DD8* FUN_02088DD8(u32 heap_id); void FUN_02088DF0(struct UnkStruct_02037CF0 *r0); -void* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id); +u16* GetEligibleLevelUpMoves(struct Pokemon* pokemon, u32 heap_id); BOOL FUN_02088EF8(u16 *r0); #endif -- cgit v1.2.3 From 837cd799f76c81e762113bb46dd50176ac614dde Mon Sep 17 00:00:00 2001 From: tgsm Date: Tue, 29 Jun 2021 02:46:32 -0500 Subject: Decompile unk_02034188 --- arm9/asm/unk_02034188.s | 242 ------------------------------------------------ arm9/global.inc | 2 +- arm9/src/main.c | 4 +- arm9/src/unk_02034188.c | 151 ++++++++++++++++++++++++++++++ include/unk_02034188.h | 6 ++ 5 files changed, 160 insertions(+), 245 deletions(-) delete mode 100644 arm9/asm/unk_02034188.s create mode 100644 arm9/src/unk_02034188.c create mode 100644 include/unk_02034188.h diff --git a/arm9/asm/unk_02034188.s b/arm9/asm/unk_02034188.s deleted file mode 100644 index 66bb542c..00000000 --- a/arm9/asm/unk_02034188.s +++ /dev/null @@ -1,242 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - .global UNK_020EECF8 -UNK_020EECF8: ; 0x020EECF8 - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020EED00 -UNK_020EED00: ; 0x020EED00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EED10 -UNK_020EED10: ; 0x020EED10 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EED2C -UNK_020EED2C: ; 0x020EED2C - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .text - - thumb_func_start FUN_02034188 -FUN_02034188: ; 0x02034188 - push {r4-r7, lr} - sub sp, #0x24 - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - bl FUN_02015EF4 - mov r0, #0x0 - add r1, r0, #0x0 - bl Main_SetVBlankIntrCB - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_02015F34 - bl GX_DisableEngineALayers - bl GX_DisableEngineBLayers - mov r2, #0x1 - lsl r2, r2, #0x1a - ldr r1, [r2, #0x0] - ldr r0, _02034368 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0203436C ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _02034370 ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _02034374 ; =0x04000050 - mov r0, #0x0 - strh r0, [r3, #0x0] - ldr r2, _02034378 ; =0x04001050 - sub r3, #0x50 - strh r0, [r2, #0x0] - ldr r1, [r3, #0x0] - ldr r0, _0203437C ; =0xFFFF1FFF - sub r2, #0x50 - and r1, r0 - str r1, [r3, #0x0] - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - ldr r0, _02034380 ; =UNK_020EED2C - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - str r0, [sp, #0x10] - ldr r0, _02034384 ; =UNK_020EED00 - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r0, [sp, #0x10] - ldr r2, _02034388 ; =UNK_020EED10 - add r3, r1, #0x0 - bl InitBgFromTemplate - ldr r0, [sp, #0x10] - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r0, [sp, #0x10] - ldr r2, _0203438C ; =0x000001F7 - mov r3, #0x2 - str r4, [sp, #0x4] - bl FUN_0200CB00 - mov r0, #0x0 - mov r1, #0x20 - add r2, r4, #0x0 - bl FUN_02002ED0 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - add r3, r4, #0x0 - bl BG_ClearCharDataRange - ldr r1, _02034390 ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _02034390 ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - ldr r2, _02034394 ; =0x00000265 - mov r0, #0x1 - mov r1, #0x1a - add r3, r4, #0x0 - bl NewMsgDataFromNarc - str r0, [sp, #0xc] - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r0, [sp, #0x10] - ldr r2, _02034398 ; =UNK_020EECF8 - add r1, sp, #0x14 - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x14 - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _0203438C ; =0x000001F7 - add r0, sp, #0x14 - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - ldr r0, [sp, #0xc] - mov r1, #0xf - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0x14 - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #0x0 - bl String_dtor - bl GX_BothDispOn - mov r0, #0x0 - bl FUN_0200E394 - mov r0, #0x1 - bl FUN_0200E394 - mov r0, #0x0 - mov r1, #0x3f - mov r2, #0x3 - bl FUN_0200A274 - ldr r4, _0203439C ; =0x04000130 - ldr r6, _020343A0 ; =0x027FFFA8 - mov r7, #0x1 -_020342E4: - ldrh r1, [r4, #0x0] - ldrh r0, [r6, #0x0] - orr r1, r0 - ldr r0, _020343A4 ; =0x00002FFF - eor r1, r0 - and r0, r1 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - bl HandleDSLidAction - add r0, r5, #0x0 - tst r0, r7 - bne _02034308 - mov r0, #0x1 - add r1, r0, #0x0 - bl OS_WaitIrq - b _020342E4 -_02034308: - add r0, sp, #0x14 - bl RemoveWindow - ldr r0, [sp, #0xc] - bl DestroyMsgData - mov r0, #0x0 - add r1, r0, #0x0 - bl ToggleBgLayer - mov r0, #0x1 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x2 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x3 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x4 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x5 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x6 - mov r1, #0x0 - bl ToggleBgLayer - mov r0, #0x7 - mov r1, #0x0 - bl ToggleBgLayer - ldr r0, [sp, #0x10] - mov r1, #0x0 - bl FreeBgTilemapBuffer - ldr r0, [sp, #0x10] - bl FreeToHeap - add sp, #0x24 - pop {r4-r7, pc} - nop -_02034368: .word 0xFFFFE0FF -_0203436C: .word 0x04001000 -_02034370: .word gMain + 0x60 -_02034374: .word 0x04000050 -_02034378: .word 0x04001050 -_0203437C: .word 0xFFFF1FFF -_02034380: .word UNK_020EED2C -_02034384: .word UNK_020EED00 -_02034388: .word UNK_020EED10 -_0203438C: .word 0x000001F7 -_02034390: .word 0x00006C21 -_02034394: .word 0x00000265 -_02034398: .word UNK_020EECF8 -_0203439C: .word 0x04000130 -_020343A0: .word 0x027FFFA8 -_020343A4: .word 0x00002FFF diff --git a/arm9/global.inc b/arm9/global.inc index 086d9b5f..4d1057b4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2472,7 +2472,7 @@ .extern FUN_02033F04 .extern FUN_02033F20 .extern FUN_02033F70 -.extern FUN_02034188 +.extern ShowWFCUserInfoWarning .extern FUN_02034494 .extern FUN_020344AC .extern FUN_020344D0 diff --git a/arm9/src/main.c b/arm9/src/main.c index 46f8add7..11d22cfe 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -14,6 +14,7 @@ #include "timer3.h" #include "unk_02031734.h" #include "unk_0202F150.h" +#include "unk_02034188.h" #include "module_52.h" #include "font.h" @@ -29,7 +30,6 @@ struct UnkStruct_02016FA8 UNK_02016FA8; extern void FUN_02022294(void); extern void GF_InitRTCWork(void); extern int FUN_020337E8(int); -extern void FUN_02034188(int, int); extern void FUN_02089D90(int); extern void FUN_0200A2AC(void); extern void FUN_02015E30(void); @@ -69,7 +69,7 @@ THUMB_FUNC void NitroMain(void) InitSoundData(Sav2_Chatot_get(UNK_02016FA8.unk18), Sav2_PlayerData_GetOptionsAddr(UNK_02016FA8.unk18)); Init_Timer3(); if (FUN_020337E8(3) == 3) - FUN_02034188(3, 0); + ShowWFCUserInfoWarning(3, 0); if (FUN_020227FC(UNK_02016FA8.unk18) == 0) { FUN_02089D90(0); diff --git a/arm9/src/unk_02034188.c b/arm9/src/unk_02034188.c new file mode 100644 index 00000000..1872a8cc --- /dev/null +++ b/arm9/src/unk_02034188.c @@ -0,0 +1,151 @@ +#include "global.h" +#include "bg_window.h" +#include "filesystem.h" +#include "game_init.h" +#include "GX_layers.h" +#include "main.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "PAD_pad.h" +#include "string16.h" +#include "text.h" +#include "unk_02034188.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +extern void FUN_0200A274(fx32 brightness, fx32, u32); +extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); +extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); +extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); +extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); + +static const struct WindowTemplate sWFCWarningMsgWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +static const struct GraphicsModes sWFCWarningMsgGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +static const struct BgTemplate sWFCWarningMsgBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .size = GF_BG_SCR_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x0000, + .charBase = GX_BG_CHARBASE_0x18000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 1, + .areaOver = GX_BG_AREAOVER_XLU, + .unk17 = 0, + .mosaic = FALSE, +}; + +static const struct GraphicsBanks sWFCWarningMsgGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void ShowWFCUserInfoWarning(u32 heap_id, u32 a1) +{ +#pragma unused(a1) + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + FUN_02015EF4(); + Main_SetVBlankIntrCB(NULL, NULL); + FUN_02015F34(NULL, NULL); + + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + + SetKeyRepeatTimers(4, 8); + + gMain.unk65 = 0; + + GX_SwapDisplay(); + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); + GX_SetBanks(&sWFCWarningMsgGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sWFCWarningMsgGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sWFCWarningMsgBgTemplate, 0); + BgClearTilemapBufferAndCommit(bg_config, 0); + FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); + BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); + BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); + BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); + + struct MsgData* warning_messages_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0613_bin, heap_id); + struct String* warning_message = String_ctor(384, heap_id); + FUN_0201BD5C(); + AddWindow(bg_config, &window, &sWFCWarningMsgWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(warning_messages_data, 15, warning_message); + AddTextPrinterParameterized(&window, 0, warning_message, 0, 0, 0, 0); + String_dtor(warning_message); + + GX_BothDispOn(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3F, 3); + + while (TRUE) + { + u16 pressed_buttons = PAD_Read(); + + HandleDSLidAction(); + + if (pressed_buttons & PAD_BUTTON_A) + { + break; + } + + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } + + RemoveWindow(&window); + DestroyMsgData(warning_messages_data); + + ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); + + FreeBgTilemapBuffer(bg_config, 0); + FreeToHeap(bg_config); +} diff --git a/include/unk_02034188.h b/include/unk_02034188.h new file mode 100644 index 00000000..02ade1f0 --- /dev/null +++ b/include/unk_02034188.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_UNK_02034188_H +#define POKEDIAMOND_UNK_02034188_H + +void ShowWFCUserInfoWarning(u32 heap_id, u32 a1); + +#endif -- cgit v1.2.3 From 0b35e2ff770f77b17504f7e72780f8af6c4a6e2d Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 30 Jun 2021 19:11:50 -0500 Subject: unk_02064E20 matching --- arm9/asm/unk_02064E20.s | 25 ------------------------- arm9/src/unk_02064E20.c | 18 ++++++++++++++++++ include/unk_02064E20.h | 6 ++++++ 3 files changed, 24 insertions(+), 25 deletions(-) delete mode 100644 arm9/asm/unk_02064E20.s create mode 100644 arm9/src/unk_02064E20.c create mode 100644 include/unk_02064E20.h diff --git a/arm9/asm/unk_02064E20.s b/arm9/asm/unk_02064E20.s deleted file mode 100644 index 19ada5a3..00000000 --- a/arm9/asm/unk_02064E20.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02064E20 -FUN_02064E20: ; 0x02064E20 - push {r4, lr} - bl ScriptEnvironment_GetSav2Ptr - bl FUN_02024ED8 - add r4, r0, #0x0 - bl FUN_020254B4 - cmp r0, #0x6 - beq _02064E48 - add r0, r4, #0x0 - mov r1, #0x6 - bl FUN_02025490 - add r0, r4, #0x0 - mov r1, #0x6 - bl FUN_020254A0 - mov r1, #0x2 - strh r1, [r0, #0x0] -_02064E48: - pop {r4, pc} - .balign 4 diff --git a/arm9/src/unk_02064E20.c b/arm9/src/unk_02064E20.c new file mode 100644 index 00000000..270004c5 --- /dev/null +++ b/arm9/src/unk_02064E20.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "script.h" +#include "scrcmd.h" +#include "unk_02025484.h" +#include "unk_02024E64.h" +#include "unk_02064E20.h" + +THUMB_FUNC void FUN_02064E20(struct UnkSavStruct80* unk0) +{ + struct unk_2025484 * r4 = (struct unk_2025484 *)FUN_02024ED8(ScriptEnvironment_GetSav2Ptr(unk0)); + if((u32)FUN_020254B4(r4) == 6) + { + return; + } + FUN_02025490(r4, 6); + u16 * ptr0 = (u16 *)FUN_020254A0(r4 , 6); + ptr0[0] = 2; +} diff --git a/include/unk_02064E20.h b/include/unk_02064E20.h new file mode 100644 index 00000000..5a00f5d1 --- /dev/null +++ b/include/unk_02064E20.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_UNK_02064E20_H +#define POKEDIAMOND_UNK_02064E20_H + +void FUN_02064E20(struct UnkSavStruct80* unk0); + +#endif // POKEDIAMOND_UNK_02064E20_H -- cgit v1.2.3 From 2b644a764835f018c78778f99efbfbaaa3471016 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 30 Jun 2021 20:18:05 -0500 Subject: unk_020061E8 matching --- arm9/asm/unk_020061E8.s | 45 --------------------------------------------- arm9/src/unk_020061E8.c | 35 +++++++++++++++++++++++++++++++++++ include/unk_020061E8.h | 9 +++++++++ 3 files changed, 44 insertions(+), 45 deletions(-) delete mode 100644 arm9/asm/unk_020061E8.s create mode 100644 arm9/src/unk_020061E8.c create mode 100644 include/unk_020061E8.h diff --git a/arm9/asm/unk_020061E8.s b/arm9/asm/unk_020061E8.s deleted file mode 100644 index 22f390c7..00000000 --- a/arm9/asm/unk_020061E8.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - - thumb_func_start FUN_020061E8 -FUN_020061E8: ; 0x020061E8 - push {r3-r7, lr} - add r5, r1, #0x0 - add r6, r0, #0x0 - add r7, r2, #0x0 - cmp r5, #0x0 - beq _0200620C - add r0, r3, #0x0 - bl AllocFromHeap - add r4, r0, #0x0 - bne _02006202 - mov r0, #0x0 - pop {r3-r7, pc} -_02006202: - mov r1, #0x0 - add r2, r5, #0x0 - bl memset - b _0200620E -_0200620C: - mov r4, #0x0 -_0200620E: - add r0, r6, #0x0 - add r1, r4, #0x0 - add r2, r7, #0x0 - bl FUN_0200CA44 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_0200621C -FUN_0200621C: ; 0x0200621C - push {r4, lr} - add r4, r0, #0x0 - bl FUN_0201B6C8 - cmp r0, #0x0 - beq _0200622C - bl FreeToHeap -_0200622C: - add r0, r4, #0x0 - bl FUN_0200CAB4 - pop {r4, pc} diff --git a/arm9/src/unk_020061E8.c b/arm9/src/unk_020061E8.c new file mode 100644 index 00000000..da8eac1b --- /dev/null +++ b/arm9/src/unk_020061E8.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" +#include "unk_020061E8.h" + +extern struct TextPrinter *FUN_0201B6C8(void); + +THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 r2, u32 r3) +{ + void * r4; + if(r1 != 0) + { + r4 = AllocFromHeap(r3, r1); + if(r4 == 0) + { + return FALSE; + } // _02006202 + memset(r4, 0, r1); + } // _0200620C + else + { + r4 = NULL; + } // _0200620E + return FUN_0200CA44(r0, r4, r2); +} + +THUMB_FUNC void FUN_0200621C(s32 r4) +{ + struct TextPrinter * r0 = FUN_0201B6C8(); + if(r0 != NULL) + { + FreeToHeap(r0); + } + FUN_0200CAB4(r4); +} diff --git a/include/unk_020061E8.h b/include/unk_020061E8.h new file mode 100644 index 00000000..a2d571bf --- /dev/null +++ b/include/unk_020061E8.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_UNK_020061E8_H +#define POKEDIAMOND_UNK_020061E8_H + +#include "text.h" + +BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 r2, u32 r3); +void FUN_0200621C(s32 r0); + +#endif // POKEDIAMOND_UNK_020061E8_H -- cgit v1.2.3 From 24f7cbde0538943fed6ab2185122e7d0c0522795 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 30 Jun 2021 20:42:04 -0500 Subject: unk_020222E8 matching --- arm9/asm/unk_020222E8.s | 46 ---------------------------------------------- arm9/src/palette.c | 5 +---- arm9/src/unk_020222E8.c | 33 +++++++++++++++++++++++++++++++++ include/unk_020222E8.h | 11 +++++++++++ 4 files changed, 45 insertions(+), 50 deletions(-) delete mode 100644 arm9/asm/unk_020222E8.s create mode 100644 arm9/src/unk_020222E8.c create mode 100644 include/unk_020222E8.h diff --git a/arm9/asm/unk_020222E8.s b/arm9/asm/unk_020222E8.s deleted file mode 100644 index 047712a5..00000000 --- a/arm9/asm/unk_020222E8.s +++ /dev/null @@ -1,46 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_020222E8 -FUN_020222E8: ; 0x020222E8 - mov r0, #0x5 - lsl r0, r0, #0x18 - bx lr - .balign 4 - - thumb_func_start FUN_020222F0 -FUN_020222F0: ; 0x020222F0 - mov r0, #0x2 - lsl r0, r0, #0x8 - bx lr - .balign 4 - - thumb_func_start FUN_020222F8 -FUN_020222F8: ; 0x020222F8 - ldr r0, _020222FC ; =0x05000400 - bx lr - .balign 4 -_020222FC: .word 0x05000400 - - thumb_func_start FUN_02022300 -FUN_02022300: ; 0x02022300 - mov r0, #0x2 - lsl r0, r0, #0x8 - bx lr - .balign 4 - - thumb_func_start FUN_02022308 -FUN_02022308: ; 0x02022308 - ldr r0, _0202230C ; =0x05000200 - bx lr - .balign 4 -_0202230C: .word 0x05000200 - - thumb_func_start FUN_02022310 -FUN_02022310: ; 0x02022310 - ldr r0, _02022314 ; =0x05000600 - bx lr - .balign 4 -_02022314: .word 0x05000600 diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 6726a0ec..e4c42cc4 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -3,11 +3,8 @@ #include "MI_memory.h" #include "gf_gfx_loader.h" #include "unk_0200CA44.h" +#include "unk_020222E8.h" -extern void *FUN_020222E8(); -extern void *FUN_020222F8(); -extern void *FUN_02022308(); -extern void *FUN_02022310(); extern int abs(int); THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) diff --git a/arm9/src/unk_020222E8.c b/arm9/src/unk_020222E8.c new file mode 100644 index 00000000..30a2a2c4 --- /dev/null +++ b/arm9/src/unk_020222E8.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "unk_020222E8.h" + +THUMB_FUNC void * FUN_020222E8() +{ + return 0x5 << 0x18; +} + +THUMB_FUNC void * FUN_020222F0() +{ + return 0x2 << 0x8; +} + +THUMB_FUNC void * FUN_020222F8() +{ + return 0x05000400; +} + +THUMB_FUNC void * FUN_02022300() +{ + return 0x2 << 0x8; +} + +THUMB_FUNC void * FUN_02022308() +{ + return 0x05000200; +} + +THUMB_FUNC void * FUN_02022310() +{ + return 0x05000600; +} + diff --git a/include/unk_020222E8.h b/include/unk_020222E8.h new file mode 100644 index 00000000..ac6e1932 --- /dev/null +++ b/include/unk_020222E8.h @@ -0,0 +1,11 @@ +#ifndef POKEDIAMOND_UNK_020222E8_H +#define POKEDIAMOND_UNK_020222E8_H + +void * FUN_020222E8(); +void * FUN_020222F0(); +void * FUN_020222F8(); +void * FUN_02022300(); +void * FUN_02022308(); +void * FUN_02022310(); + +#endif // POKEDIAMOND_UNK_020222E8_H -- cgit v1.2.3 From 5ddd65e0c3e9d669252c4d1e0bab3ca652afe171 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 30 Jun 2021 20:49:53 -0500 Subject: Beautify --- arm9/src/unk_020061E8.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arm9/src/unk_020061E8.c b/arm9/src/unk_020061E8.c index da8eac1b..424fea34 100644 --- a/arm9/src/unk_020061E8.c +++ b/arm9/src/unk_020061E8.c @@ -14,13 +14,13 @@ THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 if(r4 == 0) { return FALSE; - } // _02006202 + } memset(r4, 0, r1); - } // _0200620C + } else { r4 = NULL; - } // _0200620E + } return FUN_0200CA44(r0, r4, r2); } -- cgit v1.2.3 From c2bf79632520de7963788973b32649db3c55ff97 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Wed, 30 Jun 2021 21:19:22 -0500 Subject: Added some includes --- arm9/src/unk_02064E20.c | 1 - include/unk_020061E8.h | 1 + include/unk_02064E20.h | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arm9/src/unk_02064E20.c b/arm9/src/unk_02064E20.c index 270004c5..8586981b 100644 --- a/arm9/src/unk_02064E20.c +++ b/arm9/src/unk_02064E20.c @@ -1,5 +1,4 @@ #include "global.h" -#include "script.h" #include "scrcmd.h" #include "unk_02025484.h" #include "unk_02024E64.h" diff --git a/include/unk_020061E8.h b/include/unk_020061E8.h index a2d571bf..d94ea88f 100644 --- a/include/unk_020061E8.h +++ b/include/unk_020061E8.h @@ -1,6 +1,7 @@ #ifndef POKEDIAMOND_UNK_020061E8_H #define POKEDIAMOND_UNK_020061E8_H +#include "nitro/types.h" #include "text.h" BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 r2, u32 r3); diff --git a/include/unk_02064E20.h b/include/unk_02064E20.h index 5a00f5d1..a9bcd0e0 100644 --- a/include/unk_02064E20.h +++ b/include/unk_02064E20.h @@ -1,6 +1,8 @@ #ifndef POKEDIAMOND_UNK_02064E20_H #define POKEDIAMOND_UNK_02064E20_H +#include "script.h" + void FUN_02064E20(struct UnkSavStruct80* unk0); #endif // POKEDIAMOND_UNK_02064E20_H -- cgit v1.2.3 From 50cfe8341dd239857d0d1a0c87dbb08849de51d0 Mon Sep 17 00:00:00 2001 From: tgsm Date: Wed, 30 Jun 2021 21:47:57 -0500 Subject: Name unk_02034188 -> wfc_user_info_warning --- arm9/arm9.lsf | 2 +- arm9/src/main.c | 2 +- arm9/src/unk_02034188.c | 151 --------------------------------------- arm9/src/wfc_user_info_warning.c | 151 +++++++++++++++++++++++++++++++++++++++ include/unk_02034188.h | 6 -- include/wfc_user_info_warning.h | 6 ++ 6 files changed, 159 insertions(+), 159 deletions(-) delete mode 100644 arm9/src/unk_02034188.c create mode 100644 arm9/src/wfc_user_info_warning.c delete mode 100644 include/unk_02034188.h create mode 100644 include/wfc_user_info_warning.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0f29630c..8b49cc27 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -139,7 +139,7 @@ Static arm9 Object unk_02033874.o Object unk_02033B68.o Object unk_02033F50.o - Object unk_02034188.o + Object wfc_user_info_warning.o Object unk_020343A8.o Object map_header.o Object unk_02034A28.o diff --git a/arm9/src/main.c b/arm9/src/main.c index 11d22cfe..d1a60190 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -14,7 +14,7 @@ #include "timer3.h" #include "unk_02031734.h" #include "unk_0202F150.h" -#include "unk_02034188.h" +#include "wfc_user_info_warning.h" #include "module_52.h" #include "font.h" diff --git a/arm9/src/unk_02034188.c b/arm9/src/unk_02034188.c deleted file mode 100644 index 1872a8cc..00000000 --- a/arm9/src/unk_02034188.c +++ /dev/null @@ -1,151 +0,0 @@ -#include "global.h" -#include "bg_window.h" -#include "filesystem.h" -#include "game_init.h" -#include "GX_layers.h" -#include "main.h" -#include "msgdata.h" -#include "msgdata/msg.naix" -#include "PAD_pad.h" -#include "string16.h" -#include "text.h" -#include "unk_02034188.h" - -extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); -extern void FUN_0200A274(fx32 brightness, fx32, u32); -extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); -extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); -extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); -extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); - -static const struct WindowTemplate sWFCWarningMsgWindowTemplate = { - .bgId = GF_BG_LYR_MAIN_0, - .tilemapLeft = 3, - .tilemapTop = 3, - .width = 26, - .height = 18, - .paletteNum = 0x01, - .baseTile = 0x23, -}; - -static const struct GraphicsModes sWFCWarningMsgGraphicsModes = { - .dispMode = GX_DISPMODE_GRAPHICS, - .bgMode = GX_BGMODE_0, - .subMode = GX_BGMODE_0, - ._2d3dMode = GX_BG0_AS_2D, -}; - -static const struct BgTemplate sWFCWarningMsgBgTemplate = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0, - .size = GF_BG_SCR_SIZE_256x256, - .colorMode = GX_BG_COLORMODE_16, - .screenBase = GX_BG_SCRBASE_0x0000, - .charBase = GX_BG_CHARBASE_0x18000, - .bgExtPltt = GX_BG_EXTPLTT_01, - .priority = 1, - .areaOver = GX_BG_AREAOVER_XLU, - .unk17 = 0, - .mosaic = FALSE, -}; - -static const struct GraphicsBanks sWFCWarningMsgGraphicsBanks = { - .bg = 3, - .bgextpltt = 0, - .subbg = 0, - .subbgextpltt = 0, - .obj = 0, - .objextpltt = 0, - .subobj = 0, - .subobjextpltt = 0, - .tex = 0, - .texpltt = 0, -}; - -THUMB_FUNC void ShowWFCUserInfoWarning(u32 heap_id, u32 a1) -{ -#pragma unused(a1) - struct Window window; - - FUN_0200E3A0(PM_LCD_TOP, 0); - FUN_0200E3A0(PM_LCD_BOTTOM, 0); - - FUN_02015EF4(); - Main_SetVBlankIntrCB(NULL, NULL); - FUN_02015F34(NULL, NULL); - - GX_DisableEngineALayers(); - GX_DisableEngineBLayers(); - reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; - reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; - - SetKeyRepeatTimers(4, 8); - - gMain.unk65 = 0; - - GX_SwapDisplay(); - reg_G2_BLDCNT = 0; - reg_G2S_DB_BLDCNT = 0; - reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); - reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); - GX_SetBanks(&sWFCWarningMsgGraphicsBanks); - - struct BgConfig* bg_config = BgConfig_Alloc(heap_id); - - SetBothScreensModesAndDisable(&sWFCWarningMsgGraphicsModes); - - InitBgFromTemplate(bg_config, 0, &sWFCWarningMsgBgTemplate, 0); - BgClearTilemapBufferAndCommit(bg_config, 0); - FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); - FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); - BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); - BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); - BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); - - struct MsgData* warning_messages_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0613_bin, heap_id); - struct String* warning_message = String_ctor(384, heap_id); - FUN_0201BD5C(); - AddWindow(bg_config, &window, &sWFCWarningMsgWindowTemplate); - FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); - FUN_0200CCA4(&window, FALSE, 0x01F7, 2); - - ReadMsgDataIntoString(warning_messages_data, 15, warning_message); - AddTextPrinterParameterized(&window, 0, warning_message, 0, 0, 0, 0); - String_dtor(warning_message); - - GX_BothDispOn(); - FUN_0200E394(0); - FUN_0200E394(1); - FUN_0200A274(0, 0x3F, 3); - - while (TRUE) - { - u16 pressed_buttons = PAD_Read(); - - HandleDSLidAction(); - - if (pressed_buttons & PAD_BUTTON_A) - { - break; - } - - OS_WaitIrq(TRUE, OS_IE_V_BLANK); - } - - RemoveWindow(&window); - DestroyMsgData(warning_messages_data); - - ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); - ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); - - FreeBgTilemapBuffer(bg_config, 0); - FreeToHeap(bg_config); -} diff --git a/arm9/src/wfc_user_info_warning.c b/arm9/src/wfc_user_info_warning.c new file mode 100644 index 00000000..d9edd94c --- /dev/null +++ b/arm9/src/wfc_user_info_warning.c @@ -0,0 +1,151 @@ +#include "global.h" +#include "bg_window.h" +#include "filesystem.h" +#include "game_init.h" +#include "GX_layers.h" +#include "main.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "PAD_pad.h" +#include "string16.h" +#include "text.h" +#include "wfc_user_info_warning.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +extern void FUN_0200A274(fx32 brightness, fx32, u32); +extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); +extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); +extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); +extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); + +static const struct WindowTemplate sWFCWarningMsgWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +static const struct GraphicsModes sWFCWarningMsgGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +static const struct BgTemplate sWFCWarningMsgBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .size = GF_BG_SCR_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x0000, + .charBase = GX_BG_CHARBASE_0x18000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 1, + .areaOver = GX_BG_AREAOVER_XLU, + .unk17 = 0, + .mosaic = FALSE, +}; + +static const struct GraphicsBanks sWFCWarningMsgGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void ShowWFCUserInfoWarning(u32 heap_id, u32 a1) +{ +#pragma unused(a1) + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + FUN_02015EF4(); + Main_SetVBlankIntrCB(NULL, NULL); + FUN_02015F34(NULL, NULL); + + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + + SetKeyRepeatTimers(4, 8); + + gMain.unk65 = 0; + + GX_SwapDisplay(); + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); + GX_SetBanks(&sWFCWarningMsgGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sWFCWarningMsgGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sWFCWarningMsgBgTemplate, 0); + BgClearTilemapBufferAndCommit(bg_config, 0); + FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); + BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); + BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); + BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); + + struct MsgData* warning_messages_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0613_bin, heap_id); + struct String* warning_message = String_ctor(384, heap_id); + FUN_0201BD5C(); + AddWindow(bg_config, &window, &sWFCWarningMsgWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(warning_messages_data, 15, warning_message); + AddTextPrinterParameterized(&window, 0, warning_message, 0, 0, 0, 0); + String_dtor(warning_message); + + GX_BothDispOn(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3F, 3); + + while (TRUE) + { + u16 pressed_buttons = PAD_Read(); + + HandleDSLidAction(); + + if (pressed_buttons & PAD_BUTTON_A) + { + break; + } + + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } + + RemoveWindow(&window); + DestroyMsgData(warning_messages_data); + + ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); + + FreeBgTilemapBuffer(bg_config, 0); + FreeToHeap(bg_config); +} diff --git a/include/unk_02034188.h b/include/unk_02034188.h deleted file mode 100644 index 02ade1f0..00000000 --- a/include/unk_02034188.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEDIAMOND_UNK_02034188_H -#define POKEDIAMOND_UNK_02034188_H - -void ShowWFCUserInfoWarning(u32 heap_id, u32 a1); - -#endif diff --git a/include/wfc_user_info_warning.h b/include/wfc_user_info_warning.h new file mode 100644 index 00000000..2ddb8890 --- /dev/null +++ b/include/wfc_user_info_warning.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_WFC_USER_INFO_WARNING_H +#define POKEDIAMOND_WFC_USER_INFO_WARNING_H + +void ShowWFCUserInfoWarning(u32 heap_id, u32 a1); + +#endif -- cgit v1.2.3 From 3c51990185e8c46d32dd7cb74fdb0501cf0fab89 Mon Sep 17 00:00:00 2001 From: tgsm Date: Thu, 1 Jul 2021 23:54:19 -0500 Subject: Document more of map_header --- arm9/asm/unk_02035068.s | 4 +- arm9/asm/unk_020476CC.s | 4 +- arm9/asm/unk_02048904.s | 4 +- arm9/asm/unk_0205CE48.s | 8 +-- arm9/asm/unk_0205F7A0.s | 2 +- arm9/asm/unk_0206367C.s | 2 +- arm9/asm/unk_02063948.s | 2 +- arm9/asm/unk_0207550C.s | 2 +- arm9/global.inc | 20 +++---- arm9/modules/05/asm/mod05_021D74E0.s | 2 +- arm9/modules/05/asm/mod05_021D80E8.s | 8 +-- arm9/modules/06/asm/module_06.s | 4 +- arm9/modules/07/asm/module_07.s | 2 +- arm9/modules/42/asm/module_42.s | 4 +- arm9/modules/43/asm/module_43.s | 4 +- arm9/src/map_header.c | 100 ++++++++++++++++++++--------------- include/map_header.h | 26 ++++----- 17 files changed, 107 insertions(+), 91 deletions(-) diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s index f2ef44dc..94c65983 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -341,7 +341,7 @@ _0203529A: _020352AC: ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_020349CC + bl MapHeader_MapIsAmitySquare cmp r0, #0x1 bne _020352BC mov r0, #0x6 @@ -2145,7 +2145,7 @@ _02036170: add r7, r0, #0x0 ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod strh r0, [r7, #0x2] mov r0, #0x0 strb r0, [r7, #0x1] diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index be2b4770..cfbae230 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -536,7 +536,7 @@ FUN_02047A78: ; 0x02047A78 str r0, [r5, r1] ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod mov r1, #0x59 lsl r1, r1, #0x2 str r0, [r5, r1] @@ -1161,7 +1161,7 @@ FUN_0204806C: ; 0x0204806C add r6, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl MapHeader_GetField17_0 + bl MapHeader_GetBattleBg mov r1, #0x15 lsl r1, r1, #0x4 str r0, [r5, r1] diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index 597444e9..eb461974 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -506,7 +506,7 @@ FUN_02048CDC: ; 0x02048CDC add r4, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_020349E4 + bl MapHeader_MapIsPokemonCenterSecondFloor cmp r0, #0x0 beq _02048CFE ldr r1, [r4, #0x1c] @@ -860,7 +860,7 @@ FUN_02048FC8: ; 0x02048FC8 add r4, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034998 + bl MapHeader_MapIsUnionRoom cmp r0, #0x0 bne _02049000 add r0, r4, #0x0 diff --git a/arm9/asm/unk_0205CE48.s b/arm9/asm/unk_0205CE48.s index ba92a404..ccff7b32 100644 --- a/arm9/asm/unk_0205CE48.s +++ b/arm9/asm/unk_0205CE48.s @@ -440,7 +440,7 @@ FUN_0205D170: ; 0x0205D170 pop {r3-r5, pc} _0205D184: ldr r0, [r5, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 bne _0205D194 mov r0, #0x0 @@ -1178,7 +1178,7 @@ _0205D730: .word 0x000022F6 FUN_0205D734: ; 0x0205D734 push {r3, lr} ldr r0, [r0, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _0205D744 mov r0, #0x0 @@ -1595,7 +1595,7 @@ _0205DA8E: cmp r0, #0x1 bne _0205DAA6 ldr r0, [r4, #0x0] - bl MapHeader_GetField17_6 + bl MapHeader_IsEscapeRopeAllowed cmp r0, #0x1 bne _0205DAA6 mov r0, #0x0 @@ -1675,7 +1675,7 @@ _0205DB1A: pop {r3-r5, pc} _0205DB30: ldr r0, [r4, #0x0] - bl FUN_020349D8 + bl MapHeader_MapIsSpearPillar cmp r0, #0x0 beq _0205DB3E mov r0, #0x0 diff --git a/arm9/asm/unk_0205F7A0.s b/arm9/asm/unk_0205F7A0.s index 60706108..73e22dfa 100644 --- a/arm9/asm/unk_0205F7A0.s +++ b/arm9/asm/unk_0205F7A0.s @@ -55,7 +55,7 @@ FUN_0205F7A0: ; 0x0205F7A0 asr r1, r1, #0x5 asr r2, r2, #0x5 bl FUN_0203451C - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _0205F806 str r4, [r5, #0x0] diff --git a/arm9/asm/unk_0206367C.s b/arm9/asm/unk_0206367C.s index b475c1e5..3a92648f 100644 --- a/arm9/asm/unk_0206367C.s +++ b/arm9/asm/unk_0206367C.s @@ -122,7 +122,7 @@ _0206377C: _02063786: ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _020637A6 ldr r0, [r5, #0xc] diff --git a/arm9/asm/unk_02063948.s b/arm9/asm/unk_02063948.s index 1b2bc0a5..632e129d 100644 --- a/arm9/asm/unk_02063948.s +++ b/arm9/asm/unk_02063948.s @@ -1129,7 +1129,7 @@ _020641BE: cmp r0, #0x1 bne _020641D2 ldr r0, [r4, #0x0] - bl MapHeader_GetField17_6 + bl MapHeader_IsEscapeRopeAllowed cmp r0, #0x1 beq _020641D6 _020641D2: diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s index ee3ba62f..0ad8aad2 100644 --- a/arm9/asm/unk_0207550C.s +++ b/arm9/asm/unk_0207550C.s @@ -2248,7 +2248,7 @@ _02076814: ldr r0, [r0, #0x1c] ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod add r3, r0, #0x0 ldr r0, _02076878 ; =0x000005A4 lsl r3, r3, #0x10 diff --git a/arm9/global.inc b/arm9/global.inc index 284d26bf..46de1414 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2504,23 +2504,23 @@ .extern MapHeader_GetMapSec .extern MapHeader_GetWeatherType .extern MapHeader_GetCameraType -.extern MapHeader_GetField17_0 -.extern MapHeader_GetField17_6 +.extern MapHeader_GetBattleBg +.extern MapHeader_IsEscapeRopeAllowed .extern MapHeader_IsFlyAllowed .extern MapHeader_IsBikeAllowed .extern FUN_020348E4 -.extern MapHeader_MapIsOnOverworldMatrix +.extern MapHeader_MapIsOnMainMatrix .extern FUN_02034930 .extern FUN_02034944 .extern FUN_02034964 .extern FUN_02034984 -.extern FUN_02034998 -.extern FUN_020349AC -.extern FUN_020349B8 -.extern FUN_020349CC -.extern FUN_020349D8 -.extern FUN_020349E4 -.extern FUN_02034A04 +.extern MapHeader_MapIsUnionRoom +.extern MapHeader_MapIsMtCoronetFeebasRoom +.extern MapHeader_MapIsTrophyGarden +.extern MapHeader_MapIsAmitySquare +.extern MapHeader_MapIsSpearPillar +.extern MapHeader_MapIsPokemonCenterSecondFloor +.extern MapHeader_GetMapEvolutionMethod .extern FUN_02034A28 .extern FUN_02034A48 .extern FUN_02034A60 diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index 9cea7a32..82339e4e 100644 --- a/arm9/modules/05/asm/mod05_021D74E0.s +++ b/arm9/modules/05/asm/mod05_021D74E0.s @@ -542,7 +542,7 @@ MOD05_021D79B4: ; 0x021D79B4 add r5, r0, #0 ldr r0, [r5, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _021D79FE ldr r0, [r5, #0xc] diff --git a/arm9/modules/05/asm/mod05_021D80E8.s b/arm9/modules/05/asm/mod05_021D80E8.s index bda94277..7af8c0ec 100644 --- a/arm9/modules/05/asm/mod05_021D80E8.s +++ b/arm9/modules/05/asm/mod05_021D80E8.s @@ -2216,11 +2216,11 @@ MOD05_021D9290: ; 0x021D9290 beq _021D92DA ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] @@ -2246,11 +2246,11 @@ _021D92DA: beq _021D931C ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 0701bc8c..5140203c 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -4775,7 +4775,7 @@ MOD06_0223B9A8: ; 0x0223B9A8 ldr r0, [r0] add r6, r2, #0 add r7, r3, #0 - bl FUN_020349B8 + bl MapHeader_MapIsTrophyGarden cmp r0, #0 beq _0223B9FC add r1, sp, #0 @@ -5248,7 +5248,7 @@ _0223BD8A: ldr r0, [sp, #8] ldr r0, [r0, #0x1c] ldr r0, [r0] - bl FUN_020349AC + bl MapHeader_MapIsMtCoronetFeebasRoom cmp r0, #0 beq _0223BDFC ldr r0, [sp, #8] diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index dbf02f8d..6e4f14c2 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -5037,7 +5037,7 @@ MOD07_02214720: ; 0x02214720 mov r0, #0x57 lsl r0, r0, #2 ldr r0, [r1, r0] - bl FUN_02034998 + bl MapHeader_MapIsUnionRoom cmp r0, #1 bne _0221479C mov r0, #1 diff --git a/arm9/modules/42/asm/module_42.s b/arm9/modules/42/asm/module_42.s index 9e502906..3a2eb2e3 100644 --- a/arm9/modules/42/asm/module_42.s +++ b/arm9/modules/42/asm/module_42.s @@ -139,7 +139,7 @@ _02254932: add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254984 ldr r0, [r4, #0x1c] @@ -527,7 +527,7 @@ MOD42_02254C04: ; 0x02254C04 add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254C3C ldr r1, [r4, #0x1c] diff --git a/arm9/modules/43/asm/module_43.s b/arm9/modules/43/asm/module_43.s index 59f7e81d..cb9d4f4d 100644 --- a/arm9/modules/43/asm/module_43.s +++ b/arm9/modules/43/asm/module_43.s @@ -62,7 +62,7 @@ MOD43_0225489C: ; 0x0225489C add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _022548E0 ldr r0, [r4, #0x1c] @@ -395,7 +395,7 @@ MOD43_02254AF8: ; 0x02254AF8 add r7, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254B36 ldr r1, [r4, #0x1c] diff --git a/arm9/src/map_header.c b/arm9/src/map_header.c index 644a590b..49f8e986 100644 --- a/arm9/src/map_header.c +++ b/arm9/src/map_header.c @@ -1,39 +1,55 @@ #include "global.h" #include "map_header.h" #include "constants/map_sections.h" +#include "pokemon.h" #pragma thumb on // Static decls u32 MapNumberBoundsCheck(u32 mapno); -const u16 UNK_020EED54[] = { - 0x01A5, 0x01AD, 0x01B4, 0x01BC, 0x01C5, 0x01CC, 0x0007, 0x0025, - 0x0031, 0x01EF, 0x0046, 0x0066, 0x007C, 0x0087, 0x0098, 0x00A9, - 0x00AE, 0x00BE +static const u16 sPokemonCenterSecondFloorMaps[] = { + 421, + 429, + 436, + 444, + 453, + 460, + 7, + 37, + 49, + 495, + 70, + 102, + 124, + 135, + 152, + 169, + 174, + 190 }; -const u16 UNK_020EED78[] = { - 0x0181, 0x001A, - 0x00CB, 0x0019, - 0x00CF, 0x0018, - 0x00D0, 0x0018, - 0x00D1, 0x0018, - 0x00D2, 0x0018, - 0x00D3, 0x0018, - 0x00D4, 0x0018, - 0x00D5, 0x0018, - 0x00D6, 0x0018, - 0x00D7, 0x0018, - 0x00D8, 0x0018, - 0x00D9, 0x0018, - 0x00DA, 0x0018, - 0x00DB, 0x0018, - 0x00DC, 0x0018, - 0x00DD, 0x0018, +static const u16 sMapEvolutionMethods[] = { + 385, EVO_ROUTE217, + 203, EVO_ETERNA, + 207, EVO_CORONET, + 208, EVO_CORONET, + 209, EVO_CORONET, + 210, EVO_CORONET, + 211, EVO_CORONET, + 212, EVO_CORONET, + 213, EVO_CORONET, + 214, EVO_CORONET, + 215, EVO_CORONET, + 216, EVO_CORONET, + 217, EVO_CORONET, + 218, EVO_CORONET, + 219, EVO_CORONET, + 220, EVO_CORONET, + 221, EVO_CORONET, }; -const struct MapHeader sMapHeaders[] = { +static const struct MapHeader sMapHeaders[] = { { 0x0, 0x0, 0x0, 0x170, 0x33b, 0x12, 0x3e8, 0x3e8, 0xffff, 0x0, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x2, 3, TRUE, TRUE, TRUE, FALSE }, { 0x0, 0x0, 0x0, 0x170, 0x33b, 0x12, 0x3e8, 0x3e8, 0xffff, 0x0, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x0, 3, FALSE, FALSE, FALSE, FALSE }, { 0x2, 0x2, 0x2, 0x413, 0x3ca, 0x236, 0x424, 0x424, 0xffff, 0x1, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x6, 3, FALSE, FALSE, FALSE, FALSE }, @@ -694,16 +710,16 @@ u8 MapHeader_GetCameraType(u32 mapno) return sMapHeaders[mapno].camera_type; } -u8 MapHeader_GetField17_0(u32 mapno) +u8 MapHeader_GetBattleBg(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_0; + return sMapHeaders[mapno].battle_bg; } -u8 MapHeader_GetField17_6(u32 mapno) +u8 MapHeader_IsEscapeRopeAllowed(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_6; + return sMapHeaders[mapno].is_escape_rope_allowed; } u8 MapHeader_IsFlyAllowed(u32 mapno) @@ -733,7 +749,7 @@ BOOL FUN_020348E4(u32 mapno) return FALSE; } -BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno) +BOOL MapHeader_MapIsOnMainMatrix(u32 mapno) { return MapHeader_GetMatrixId(mapno) == 0; } @@ -760,56 +776,56 @@ BOOL FUN_02034964(u32 mapno) BOOL FUN_02034984(u32 mapno) { - return !!FUN_0203491C(mapno); + return FUN_0203491C(mapno) != FALSE; } -BOOL FUN_02034998(u32 mapno) +BOOL MapHeader_MapIsUnionRoom(u32 mapno) { return mapno == 466; } -BOOL FUN_020349AC(u32 mapno) +BOOL MapHeader_MapIsMtCoronetFeebasRoom(u32 mapno) { return mapno == 219; } -BOOL FUN_020349B8(u32 mapno) +BOOL MapHeader_MapIsTrophyGarden(u32 mapno) { return mapno == 287; } -BOOL FUN_020349CC(u32 mapno) +BOOL MapHeader_MapIsAmitySquare(u32 mapno) { return mapno == 253; } -BOOL FUN_020349D8(u32 mapno) +BOOL MapHeader_MapIsSpearPillar(u32 mapno) { return mapno == 220; } -BOOL FUN_020349E4(u16 a0) +BOOL MapHeader_MapIsPokemonCenterSecondFloor(u32 mapno) { int i; - for (i = 0; i < NELEMS(UNK_020EED54); i++) + for (i = 0; i < NELEMS(sPokemonCenterSecondFloorMaps); i++) { - if (a0 == UNK_020EED54[i]) + if (mapno == sPokemonCenterSecondFloorMaps[i]) return TRUE; } return FALSE; } -u16 FUN_02034A04(u16 a0) +u16 MapHeader_GetMapEvolutionMethod(u32 mapno) { int i; - for (i = 0; i < NELEMS(UNK_020EED78); i += 2) + for (i = 0; i < NELEMS(sMapEvolutionMethods); i += 2) { - if (a0 == UNK_020EED78[i + 0]) - return UNK_020EED78[i + 1]; + if (mapno == sMapEvolutionMethods[i + 0]) + return sMapEvolutionMethods[i + 1]; } - return 0; + return EVO_NONE; } diff --git a/include/map_header.h b/include/map_header.h index 20677025..60c8baaf 100644 --- a/include/map_header.h +++ b/include/map_header.h @@ -17,10 +17,10 @@ struct MapHeader u8 weather_type; u8 camera_type; u8 unk16; - u8 unk17_0:4; + u8 battle_bg:4; u8 is_bike_allowed:1; - u8 unk17_5:1; - u8 unk17_6:1; + u8 is_running_allowed:1; // unused + u8 is_escape_rope_allowed:1; u8 is_fly_allowed:1; }; @@ -38,24 +38,24 @@ u16 MapHeader_GetEventsBank(u32 mapno); u16 MapHeader_GetMapSec(u32 mapno); u8 MapHeader_GetWeatherType(u32 mapno); u8 MapHeader_GetCameraType(u32 mapno); -u8 MapHeader_GetField17_0(u32 mapno); -u8 MapHeader_GetField17_6(u32 mapno); +u8 MapHeader_GetBattleBg(u32 mapno); +u8 MapHeader_IsEscapeRopeAllowed(u32 mapno); u8 MapHeader_IsFlyAllowed(u32 mapno); u8 MapHeader_IsBikeAllowed(u32 mapno); u8 MapHeader_GetField16(u32 mapno); BOOL FUN_020348E4(u32 mapno); -BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno); +BOOL MapHeader_MapIsOnMainMatrix(u32 mapno); BOOL FUN_0203491C(u32 mapno); BOOL FUN_02034930(u32 mapno); BOOL FUN_02034944(u32 mapno); BOOL FUN_02034964(u32 mapno); BOOL FUN_02034984(u32 mapno); -BOOL FUN_02034998(u32 mapno); -BOOL FUN_020349AC(u32 mapno); -BOOL FUN_020349B8(u32 mapno); -BOOL FUN_020349CC(u32 mapno); -BOOL FUN_020349D8(u32 mapno); -BOOL FUN_020349E4(u16 a0); -u16 FUN_02034A04(u16 a0); +BOOL MapHeader_MapIsUnionRoom(u32 mapno); +BOOL MapHeader_MapIsMtCoronetFeebasRoom(u32 mapno); +BOOL MapHeader_MapIsTrophyGarden(u32 mapno); +BOOL MapHeader_MapIsAmitySquare(u32 mapno); +BOOL MapHeader_MapIsSpearPillar(u32 mapno); +BOOL MapHeader_MapIsPokemonCenterSecondFloor(u32 mapno); +u16 MapHeader_GetMapEvolutionMethod(u32 mapno); #endif //POKEDIAMOND_MAP_HEADER_H -- cgit v1.2.3 From 50d1f49f2b2b73663c447ae09e0fb3c602a1a973 Mon Sep 17 00:00:00 2001 From: Gogume1er Date: Fri, 2 Jul 2021 18:22:29 +0200 Subject: decompile unk_020343A8 to map_matrix --- arm9/arm9.lsf | 2 +- arm9/asm/unk_020343A8.s | 481 ----------------------------------- arm9/asm/unk_020372D4.s | 4 +- arm9/asm/unk_02048904.s | 2 +- arm9/asm/unk_0204A368.s | 6 +- arm9/asm/unk_0204A498.s | 8 +- arm9/asm/unk_0205DD18.s | 2 +- arm9/asm/unk_0205F7A0.s | 2 +- arm9/global.inc | 30 +-- arm9/modules/05/asm/mod05_021D74E0.s | 2 +- arm9/modules/05/asm/module_05.s | 20 +- arm9/modules/06/asm/module_06.s | 10 +- arm9/modules/18/asm/module_18.s | 4 +- arm9/modules/66/asm/module_66.s | 8 +- arm9/src/map_matrix.c | 231 +++++++++++++++++ include/map_matrix.h | 54 ++++ 16 files changed, 335 insertions(+), 531 deletions(-) delete mode 100644 arm9/asm/unk_020343A8.s create mode 100644 arm9/src/map_matrix.c create mode 100644 include/map_matrix.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 8b49cc27..0153f5e3 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -140,7 +140,7 @@ Static arm9 Object unk_02033B68.o Object unk_02033F50.o Object wfc_user_info_warning.o - Object unk_020343A8.o + Object map_matrix.o Object map_header.o Object unk_02034A28.o Object unk_02034D7C.o diff --git a/arm9/asm/unk_020343A8.s b/arm9/asm/unk_020343A8.s deleted file mode 100644 index 38e95c4f..00000000 --- a/arm9/asm/unk_020343A8.s +++ /dev/null @@ -1,481 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_020343A8 -FUN_020343A8: ; 0x020343A8 - push {r4-r7, lr} - sub sp, #0xc - add r4, r0, #0x0 - str r2, [sp, #0x0] - mov r2, #0x0 - strb r2, [r4, #0x1] - mov r0, #0xe1 - ldr r7, _02034488 ; =0x0000070A - ldr r6, _0203448C ; =0x00000A8E - mov r12, r1 - strb r2, [r4, #0x0] - add r3, r4, #0x0 - add r5, r2, #0x0 - lsl r0, r0, #0x2 -_020343C4: - add r1, r4, r2 - strh r5, [r3, #0x2] - strb r5, [r1, r7] - strh r5, [r3, r6] - add r2, r2, #0x1 - add r3, r3, #0x2 - cmp r2, r0 - blt _020343C4 - ldr r0, _02034490 ; =0x00001196 - mov r2, #0x0 -_020343D8: - add r1, r4, r5 - add r5, r5, #0x1 - strb r2, [r1, r0] - cmp r5, #0x10 - blt _020343D8 - mov r0, #0x29 - mov r1, r12 - mov r2, #0xb - bl AllocAtEndAndReadWholeNarcMemberByIdPair - add r6, r0, #0x0 - ldrb r0, [r6, #0x0] - add r5, r6, #0x5 - strb r0, [r4, #0x1] - ldrb r0, [r6, #0x1] - strb r0, [r4, #0x0] - ldrb r0, [r6, #0x2] - str r0, [sp, #0x8] - ldrb r0, [r6, #0x3] - str r0, [sp, #0x4] - ldrb r7, [r6, #0x4] - cmp r7, #0x10 - bls _0203440A - bl GF_AssertFail -_0203440A: - ldr r1, _02034490 ; =0x00001196 - add r0, r5, #0x0 - add r1, r4, r1 - add r2, r7, #0x0 - bl MI_CpuCopy8 - ldr r0, [sp, #0x8] - add r5, r5, r7 - cmp r0, #0x0 - beq _0203443A - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - add r0, r5, #0x0 - add r1, r4, #0x2 - mul r2, r3 - lsl r2, r2, #0x1 - bl MI_CpuCopy8 - ldrb r1, [r4, #0x1] - ldrb r0, [r4, #0x0] - mul r0, r1 - lsl r0, r0, #0x1 - add r5, r5, r0 - b _0203444E -_0203443A: - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r0, [sp, #0x0] - add r1, r4, #0x2 - lsl r0, r0, #0x10 - mul r2, r3 - lsr r0, r0, #0x10 - lsl r2, r2, #0x1 - bl MIi_CpuClear16 -_0203444E: - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _0203446C - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r1, _02034488 ; =0x0000070A - add r0, r5, #0x0 - add r1, r4, r1 - mul r2, r3 - bl MI_CpuCopy8 - ldrb r1, [r4, #0x1] - ldrb r0, [r4, #0x0] - mul r0, r1 - add r5, r5, r0 -_0203446C: - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r1, _0203448C ; =0x00000A8E - add r0, r5, #0x0 - mul r2, r3 - add r1, r4, r1 - lsl r2, r2, #0x1 - bl MI_CpuCopy8 - add r0, r6, #0x0 - bl FreeToHeap - add sp, #0xc - pop {r4-r7, pc} - .balign 4 -_02034488: .word 0x0000070A -_0203448C: .word 0x00000A8E -_02034490: .word 0x00001196 - - thumb_func_start FUN_02034494 -FUN_02034494: ; 0x02034494 - push {r3, lr} - ldr r1, _020344A8 ; =0x000011AA - mov r0, #0xb - bl AllocFromHeap - mov r1, #0x0 - strb r1, [r0, #0x0] - strb r1, [r0, #0x1] - strb r1, [r0, #0x2] - pop {r3, pc} - .balign 4 -_020344A8: .word 0x000011AA - - thumb_func_start FUN_020344AC -FUN_020344AC: ; 0x020344AC - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl MapHeader_GetMatrixId - add r6, r0, #0x0 - add r0, r4, #0x4 - add r1, r6, #0x0 - add r2, r5, #0x0 - bl FUN_020343A8 - strb r6, [r4, #0x2] - ldrb r0, [r4, #0x4] - strb r0, [r4, #0x1] - ldrb r0, [r4, #0x5] - strb r0, [r4, #0x0] - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020344D0 -FUN_020344D0: ; 0x020344D0 - ldr r3, _020344D4 ; =FreeToHeap - bx r3 - .balign 4 -_020344D4: .word FreeToHeap - - thumb_func_start FUN_020344D8 -FUN_020344D8: ; 0x020344D8 - push {r3-r5, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - ldrb r1, [r4, #0x0] - ldrb r0, [r4, #0x1] - mul r0, r1 - cmp r5, r0 - blt _020344EC - bl GF_AssertFail -_020344EC: - lsl r0, r5, #0x1 - add r1, r4, r0 - ldr r0, _020344F8 ; =0x00000A92 - ldrh r0, [r1, r0] - pop {r3-r5, pc} - nop -_020344F8: .word 0x00000A92 - - thumb_func_start FUN_020344FC -FUN_020344FC: ; 0x020344FC - push {r4, lr} - add r4, r0, #0x0 - bne _02034506 - bl GF_AssertFail -_02034506: - ldrb r0, [r4, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0203450C -FUN_0203450C: ; 0x0203450C - push {r4, lr} - add r4, r0, #0x0 - bne _02034516 - bl GF_AssertFail -_02034516: - ldrb r0, [r4, #0x1] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0203451C -FUN_0203451C: ; 0x0203451C - push {r3-r7, lr} - add r7, r0, #0x0 - ldrb r0, [r7, #0x1] - add r5, r1, #0x0 - add r4, r2, #0x0 - ldrb r6, [r7, #0x0] - str r0, [sp, #0x0] - cmp r5, #0x0 - blt _02034532 - cmp r5, r6 - blt _02034536 -_02034532: - bl GF_AssertFail -_02034536: - cmp r4, #0x0 - blt _02034540 - ldr r0, [sp, #0x0] - cmp r4, r0 - blt _02034544 -_02034540: - bl GF_AssertFail -_02034544: - add r0, r4, #0x0 - mul r0, r6 - add r0, r5, r0 - lsl r0, r0, #0x1 - add r0, r7, r0 - ldrh r0, [r0, #0x6] - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02034554 -FUN_02034554: ; 0x02034554 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - ldrb r1, [r5, #0x0] - ldrb r0, [r5, #0x1] - mul r0, r1 - cmp r4, #0x0 - blt _02034568 - cmp r4, r0 - blt _0203456C -_02034568: - bl GF_AssertFail -_0203456C: - lsl r0, r4, #0x1 - add r0, r5, r0 - ldrh r0, [r0, #0x6] - pop {r3-r5, pc} - - thumb_func_start FUN_02034574 -FUN_02034574: ; 0x02034574 - ldrb r0, [r0, #0x2] - bx lr - - thumb_func_start FUN_02034578 -FUN_02034578: ; 0x02034578 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, [sp, #0x10] - add r4, r2, #0x0 - add r6, r3, #0x0 - cmp r4, r0 - blt _0203458A - bl GF_AssertFail -_0203458A: - ldr r0, [sp, #0x10] - mul r0, r6 - add r4, r4, r0 - mov r0, #0xe1 - lsl r0, r0, #0x2 - cmp r4, r0 - blt _0203459C - bl GF_AssertFail -_0203459C: - ldr r0, _020345A4 ; =0x0000070E - add r1, r5, r4 - ldrb r0, [r1, r0] - pop {r4-r6, pc} - .balign 4 -_020345A4: .word 0x0000070E - - thumb_func_start FUN_020345A8 -FUN_020345A8: ; 0x020345A8 - push {r3-r5, lr} - ldr r1, _020345D8 ; =0x00000708 - add r4, r0, #0x0 - bl AllocFromHeap - add r5, r0, #0x0 - mov r0, #0x29 - mov r1, #0x0 - add r2, r4, #0x0 - bl AllocAtEndAndReadWholeNarcMemberByIdPair - add r4, r0, #0x0 - ldrb r1, [r4, #0x4] - add r0, r4, #0x5 - ldr r2, _020345D8 ; =0x00000708 - add r0, r0, r1 - add r1, r5, #0x0 - bl MI_CpuCopy8 - add r0, r4, #0x0 - bl FreeToHeap - add r0, r5, #0x0 - pop {r3-r5, pc} - .balign 4 -_020345D8: .word 0x00000708 - - thumb_func_start FUN_020345DC -FUN_020345DC: ; 0x020345DC - push {r4, lr} - add r4, r0, #0x0 - bne _020345E6 - bl GF_AssertFail -_020345E6: - add r0, r4, #0x0 - bl FreeToHeap - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020345F0 -FUN_020345F0: ; 0x020345F0 - mov r3, #0x1e - mul r3, r2 - add r1, r1, r3 - lsl r1, r1, #0x1 - ldrh r0, [r0, r1] - bx lr - - thumb_func_start FUN_020345FC -FUN_020345FC: ; 0x020345FC - push {r3-r5, lr} - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1c8 - add r3, r0, #0x0 - add r5, r1, #0x0 - lsl r1, r3, #0x10 - add r4, r2, #0x0 - add r0, sp, #0x0 - lsr r1, r1, #0x10 - mov r2, #0x0 - bl FUN_020343A8 - add r0, sp, #0x0 - ldrb r0, [r0, #0x1] - cmp r5, r0 - blt _0203462E - bl GF_AssertFail -_0203462E: - add r0, sp, #0x0 - ldrb r0, [r0, #0x0] - cmp r4, r0 - blt _0203463A - bl GF_AssertFail -_0203463A: - add r0, sp, #0x0 - ldrb r0, [r0, #0x1] - mul r0, r4 - add r0, r5, r0 - lsl r1, r0, #0x1 - add r0, sp, #0x0 - add r0, #0x2 - ldrh r0, [r0, r1] - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1c8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02034660 -FUN_02034660: ; 0x02034660 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bne _0203466C - bl GF_AssertFail -_0203466C: - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_020344D8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02034678 -FUN_02034678: ; 0x02034678 - push {r4-r7} - ldr r1, _020346C4 ; =0x00000A92 - ldrb r7, [r0, #0x0] - add r2, r0, r1 - ldr r1, _020346C8 ; =0x0000070E - add r1, r0, r1 - ldrb r0, [r0, #0x2] - cmp r0, #0x0 - bne _020346BE - mov r0, #0x15 - add r6, r7, #0x0 - mul r6, r0 - add r5, r6, #0x0 - add r5, #0x17 - mov r4, #0xb0 - lsl r0, r5, #0x1 - add r6, #0x18 - strh r4, [r2, r0] - lsl r0, r6, #0x1 - strh r4, [r2, r0] - mov r0, #0x16 - add r3, r7, #0x0 - mul r3, r0 - add r0, r3, #0x0 - add r0, #0x17 - lsl r7, r0, #0x1 - add r3, #0x18 - strh r4, [r2, r7] - lsl r7, r3, #0x1 - strh r4, [r2, r7] - mov r2, #0x2 - strb r2, [r1, r5] - strb r2, [r1, r6] - strb r2, [r1, r0] - strb r2, [r1, r3] -_020346BE: - pop {r4-r7} - bx lr - nop -_020346C4: .word 0x00000A92 -_020346C8: .word 0x0000070E - - thumb_func_start FUN_020346CC -FUN_020346CC: ; 0x020346CC - push {r3-r4} - ldr r1, _0203470C ; =0x00000A92 - add r2, r0, r1 - ldrb r1, [r0, #0x0] - ldrb r0, [r0, #0x2] - cmp r0, #0x0 - bne _02034706 - mov r0, #0xf - mul r0, r1 - add r0, #0x1c - mov r3, #0x77 - lsl r0, r0, #0x1 - strh r3, [r2, r0] - lsl r0, r1, #0x4 - add r3, r0, #0x0 - add r3, #0x1b - mov r4, #0x78 - lsl r3, r3, #0x1 - strh r4, [r2, r3] - add r3, r0, #0x0 - add r3, #0x1c - add r0, r1, r0 - add r0, #0x1b - mov r4, #0x79 - lsl r3, r3, #0x1 - strh r4, [r2, r3] - mov r3, #0x7a - lsl r0, r0, #0x1 - strh r3, [r2, r0] -_02034706: - pop {r3-r4} - bx lr - nop -_0203470C: .word 0x00000A92 diff --git a/arm9/asm/unk_020372D4.s b/arm9/asm/unk_020372D4.s index 88845239..42b6d930 100644 --- a/arm9/asm/unk_020372D4.s +++ b/arm9/asm/unk_020372D4.s @@ -227,7 +227,7 @@ FUN_02037400: ; 0x02037400 bl FUN_02034E30 bl FUN_02034DC0 str r0, [r4, #0x1c] - bl FUN_02034494 + bl MapMatrix_New str r0, [r4, #0x28] add r0, r4, #0x0 mov r1, #0xb @@ -262,7 +262,7 @@ FUN_020374B0: ; 0x020374B0 bl OverlayManager_GetData add r4, r0, #0x0 ldr r0, [r4, #0x28] - bl FUN_020344D0 + bl MapMatrix_Free add r0, r4, #0x0 bl FUN_02034A48 add r0, r4, #0x0 diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index 597444e9..a3631340 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -346,7 +346,7 @@ _02048BA2: ldr r0, [r4, #0x1c] ldr r1, [r4, #0x28] ldr r0, [r0, #0x0] - bl FUN_020344AC + bl MapMatrix_Load ldr r0, [r4, #0xc] bl SavArray_Flags_get mov r1, #0x3 diff --git a/arm9/asm/unk_0204A368.s b/arm9/asm/unk_0204A368.s index 4b9f5a98..dee2d54b 100644 --- a/arm9/asm/unk_0204A368.s +++ b/arm9/asm/unk_0204A368.s @@ -56,10 +56,10 @@ FUN_0204A3B0: ; 0x0204A3B0 mov r2, #0x0 add r1, sp, #0x18 strb r2, [r1, #0x0] - bl FUN_020344FC + bl MapMatrix_GetWidth add r6, r0, #0x0 ldr r0, [sp, #0x4] - bl FUN_0203450C + bl MapMatrix_GetHeight str r0, [sp, #0x10] mov r0, #0x0 str r0, [sp, #0x14] @@ -77,7 +77,7 @@ _0204A3E0: lsr r4, r0, #0x10 ldr r1, [sp, #0x4] add r0, r4, #0x0 - bl FUN_020344D8 + bl MapMatrix_GetMapData add r1, sp, #0x18 add r1, #0x2 add r2, sp, #0x18 diff --git a/arm9/asm/unk_0204A498.s b/arm9/asm/unk_0204A498.s index 3e0580b3..6b7e034d 100644 --- a/arm9/asm/unk_0204A498.s +++ b/arm9/asm/unk_0204A498.s @@ -39,7 +39,7 @@ FUN_0204A4A4: ; 0x0204A4A4 str r1, [sp, #0x4] str r0, [sp, #0x8] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp, #0x24] lsl r0, r0, #0x5 str r0, [sp, #0xc] @@ -247,7 +247,7 @@ FUN_0204A640: ; 0x0204A640 add r4, r2, #0x0 add r5, r1, #0x0 add r7, r3, #0x0 - bl FUN_020344FC + bl MapMatrix_GetWidth asr r2, r4, #0x4 asr r1, r5, #0x4 lsr r2, r2, #0x1b @@ -617,7 +617,7 @@ _0204A8D4: add r4, r0, #0x0 ldr r0, [sp, #0x0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0x0 add r0, r4, #0x0 add r2, sp, #0x10 @@ -685,7 +685,7 @@ _0204A95C: add r6, r0, #0x0 ldr r0, [sp, #0x0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0x0 add r0, r6, #0x0 add r2, sp, #0x10 diff --git a/arm9/asm/unk_0205DD18.s b/arm9/asm/unk_0205DD18.s index 5f01125f..b5431d9c 100644 --- a/arm9/asm/unk_0205DD18.s +++ b/arm9/asm/unk_0205DD18.s @@ -622,7 +622,7 @@ _0205E180: ldr r0, [r7, #0x28] asr r1, r1, #0x5 asr r2, r2, #0x5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader ldr r1, [r7, #0x1c] ldr r1, [r1, #0x0] cmp r1, r0 diff --git a/arm9/asm/unk_0205F7A0.s b/arm9/asm/unk_0205F7A0.s index 60706108..3ad96b92 100644 --- a/arm9/asm/unk_0205F7A0.s +++ b/arm9/asm/unk_0205F7A0.s @@ -54,7 +54,7 @@ FUN_0205F7A0: ; 0x0205F7A0 ldr r0, [r0, #0x28] asr r1, r1, #0x5 asr r2, r2, #0x5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0x0 beq _0205F806 diff --git a/arm9/global.inc b/arm9/global.inc index 284d26bf..a788fcac 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2473,21 +2473,21 @@ .extern FUN_02033F20 .extern FUN_02033F70 .extern ShowWFCUserInfoWarning -.extern FUN_02034494 -.extern FUN_020344AC -.extern FUN_020344D0 -.extern FUN_020344D8 -.extern FUN_020344FC -.extern FUN_0203450C -.extern FUN_0203451C -.extern FUN_02034554 -.extern FUN_02034574 -.extern FUN_02034578 -.extern FUN_020345A8 -.extern FUN_020345DC -.extern FUN_020345F0 -.extern FUN_020345FC -.extern FUN_02034660 +.extern MapMatrix_New +.extern MapMatrix_Load +.extern MapMatrix_Free +.extern MapMatrix_GetMapData +.extern MapMatrix_GetWidth +.extern MapMatrix_GetHeight +.extern MapMatrix_GetMapHeader +.extern MapMatrix_GetMapHeaderFromID +.extern MapMatrix_GetMatrixID +.extern MapMatrix_GetMapAltitude +.extern MapMatrix_MapData_New +.extern MapMatrix_MapData_Free +.extern MapMatrix_MapData_GetData +.extern GetMapHeader +.extern GetMapData .extern FUN_02034678 .extern FUN_020346CC .extern MapHeader_GetAreaDataBank diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index 9cea7a32..e523b28d 100644 --- a/arm9/modules/05/asm/mod05_021D74E0.s +++ b/arm9/modules/05/asm/mod05_021D74E0.s @@ -424,7 +424,7 @@ MOD05_021D7894: ; 0x021D7894 asr r2, r1, #5 ldr r0, [r5, #0x28] add r1, r4, #0 - bl FUN_0203451C + bl MapMatrix_GetMapHeader add r4, r0, #0 ldr r0, [r5, #0x1c] ldr r6, [r0] diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 0157aedb..36143bb3 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -11251,7 +11251,7 @@ MOD05_021EE114: ; 0x021EE114 cmp r0, r1 bge _021EE1D0 add r1, r2, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE1D4 ; =0x0000FFFF cmp r1, r0 @@ -11356,7 +11356,7 @@ MOD05_021EE1E4: ; 0x021EE1E4 mul r3, r2 cmp r0, r3 bge _021EE286 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE298 ; =0x0000FFFF cmp r1, r0 @@ -11440,7 +11440,7 @@ MOD05_021EE2A4: ; 0x021EE2A4 cmp r1, r5 bge _021EE37A add r1, r3, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE380 ; =0x0000FFFF cmp r1, r0 @@ -11556,7 +11556,7 @@ MOD05_021EE38C: ; 0x021EE38C cmp r1, r2 bge _021EE43E add r1, r3, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE450 ; =0x0000FFFF cmp r1, r0 @@ -13633,17 +13633,17 @@ MOD05_021EF300: ; 0x021EF300 lsl r0, r0, #0x10 lsr r4, r0, #0x10 add r0, r7, #0 - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp, #8] add r0, r7, #0 - bl FUN_02034574 + bl MapMatrix_GetMatrixID add r1, r0, #0 ldr r0, [sp, #8] add r2, r6, #0 str r0, [sp] add r0, r7, #0 add r3, r4, #0 - bl FUN_02034578 + bl MapMatrix_GetMapAltitude lsl r0, r0, #0xf str r0, [r5, #4] ldr r1, [r5] @@ -13707,12 +13707,12 @@ _021EF3AE: add r0, #0xbc str r5, [r0] add r0, r5, #0 - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r4, #0 add r1, #0xc0 str r0, [r1] add r0, r5, #0 - bl FUN_0203450C + bl MapMatrix_GetHeight add r1, r4, #0 add r1, #0xc4 str r0, [r1] @@ -25857,7 +25857,7 @@ MOD05_021F5068: ; 0x021F5068 ldr r0, [r5, #0x28] add r7, r1, #0 add r1, r2, #0 - bl FUN_02034554 + bl MapMatrix_GetMapHeaderFromID bl MOD05_021F50FC add r4, r0, #0 cmp r4, #0x15 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 0701bc8c..8d26492c 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -23774,7 +23774,7 @@ MOD06_02245198: ; 0x02245198 lsl r2, r2, #0xb lsr r1, r1, #0x10 lsr r2, r2, #0x10 - bl FUN_020345FC + bl GetMapHeader b _022451D6 _022451BA: cmp r5, #5 @@ -23790,7 +23790,7 @@ _022451C2: ldr r0, [r0, #0x28] lsr r1, r1, #5 lsr r2, r2, #5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader _022451D6: lsl r3, r5, #2 add r1, r4, r3 @@ -38544,7 +38544,7 @@ MOD06_0224C27C: ; 0x0224C27C strb r0, [r4, #0xe] strb r0, [r4, #0xf] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0 ldr r0, [sp] add r2, sp, #0x14 @@ -39797,7 +39797,7 @@ _0224CC80: add r2, sp, #0x14 bl FUN_020572B8 ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp] mov r0, #0 str r0, [sp, #4] @@ -42943,7 +42943,7 @@ MOD06_0224E554: ; 0x0224E554 strb r0, [r4, #0xe] strb r0, [r4, #0xf] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0 ldr r0, [sp] add r2, sp, #0x14 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 074ed1e0..85c8a425 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -405,7 +405,7 @@ MOD18_02239994: ; 0x02239994 ldr r0, [r0] ldr r0, [r0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth sub r0, r0, #2 lsl r0, r0, #0x15 lsr r6, r0, #0x10 @@ -413,7 +413,7 @@ MOD18_02239994: ; 0x02239994 ldr r0, [r0] ldr r0, [r0] ldr r0, [r0, #0x28] - bl FUN_0203450C + bl MapMatrix_GetHeight sub r0, r0, #2 lsl r0, r0, #0x15 lsr r4, r0, #0x10 diff --git a/arm9/modules/66/asm/module_66.s b/arm9/modules/66/asm/module_66.s index 95660bd2..ca8faeb0 100644 --- a/arm9/modules/66/asm/module_66.s +++ b/arm9/modules/66/asm/module_66.s @@ -259,7 +259,7 @@ _021D7694: add r1, #0x88 str r0, [r1] ldr r0, [r4, #4] - bl FUN_020345A8 + bl MapMatrix_MapData_New str r0, [r4, #0x30] ldr r0, _021D7744 ; =0x021D9AA0 ldr r1, [r4, #4] @@ -345,7 +345,7 @@ _021D7782: ldr r0, [r5, #0x40] bl MOD66_021D9544 ldr r0, [r5, #0x30] - bl FUN_020345DC + bl MapMatrix_MapData_Free add r0, r5, #0 add r0, #0x88 ldr r0, [r0] @@ -1648,7 +1648,7 @@ MOD66_021D818C: ; 0x021D818C ldr r0, [r5, #0x30] ldr r1, [r4, #0x18] ldr r2, [r4, #0x1c] - bl FUN_020345F0 + bl MapMatrix_MapData_GetData str r0, [r4, #0x20] ldrh r3, [r5, #2] ldr r0, [r5, #0x40] @@ -1932,7 +1932,7 @@ MOD66_021D8380: ; 0x021D8380 ldr r0, [r6, #0x30] ldr r1, [sp, #4] add r2, r7, #0 - bl FUN_020345F0 + bl MapMatrix_MapData_GetData add r1, r5, #0 add r2, r0, #0 ldr r3, [sp, #4] diff --git a/arm9/src/map_matrix.c b/arm9/src/map_matrix.c new file mode 100644 index 00000000..1808d82c --- /dev/null +++ b/arm9/src/map_matrix.c @@ -0,0 +1,231 @@ +#include "global.h" +#include "map_matrix.h" +#include "MI_memory.h" +#include "filesystem.h" +#include "heap.h" +#include "map_header.h" + +THUMB_FUNC static void MapMatrix_MapMatrixData_Load( + struct MapMatrixData *map_matrix, u16 file_id, u32 map_id) +{ + map_matrix->width = 0; + map_matrix->height = 0; + + s32 i; + for (i = 0; i < MAP_MATRIX_MAX_SIZE; i++) + { + map_matrix->headers[i] = 0; + map_matrix->altitudes[i] = 0; + map_matrix->maps.data[i] = 0; + } + + for (i = 0; i < MAP_MATRIX_MAX_NAME_LENGTH; i++) + { + map_matrix->name[i] = 0; + } + + void *buffer = + AllocAtEndAndReadWholeNarcMemberByIdPair(NARC_FIELDDATA_MAPMATRIX_MAP_MATRIX, file_id, 11); + u8 *cursor = (u8 *)buffer; + + map_matrix->width = *(cursor++); + map_matrix->height = *(cursor++); + u8 has_headers_section = *(cursor++); + u8 has_altitudes_section = *(cursor++); + u8 name_length = *(cursor++); + + GF_ASSERT(name_length <= MAP_MATRIX_MAX_NAME_LENGTH); + + MI_CpuCopy8(cursor, &map_matrix->name, name_length); + cursor += name_length; + + if (has_headers_section != 0) + { + MI_CpuCopy8( + cursor, &map_matrix->headers, map_matrix->width * map_matrix->height * sizeof(u16)); + cursor += map_matrix->width * map_matrix->height * sizeof(u16); + } + else + { + MIi_CpuClear16((u16)map_id, + &map_matrix->headers, + map_matrix->width * map_matrix->height * sizeof(u16)); + } + + if (has_altitudes_section != 0) + { + MI_CpuCopy8( + cursor, &map_matrix->altitudes, map_matrix->width * map_matrix->height * sizeof(u8)); + cursor += map_matrix->width * map_matrix->height * sizeof(u8); + } + + MI_CpuCopy8( + cursor, map_matrix->maps.data, map_matrix->width * map_matrix->height * sizeof(u16)); + FreeToHeap(buffer); +} + +THUMB_FUNC struct MapMatrix *MapMatrix_New(void) +{ + struct MapMatrix *map_matrix = AllocFromHeap(11, sizeof(struct MapMatrix)); + + map_matrix->width = 0; + map_matrix->height = 0; + map_matrix->matrix_id = 0; + + return map_matrix; +} + +THUMB_FUNC void MapMatrix_Load(u16 map_id, struct MapMatrix *map_matrix) +{ + u16 matrix_id = MapHeader_GetMatrixId(map_id); + + MapMatrix_MapMatrixData_Load(&map_matrix->data, matrix_id, map_id); + + map_matrix->matrix_id = (u8)matrix_id; + map_matrix->height = map_matrix->data.height; + map_matrix->width = map_matrix->data.width; +} + +THUMB_FUNC void MapMatrix_Free(struct MapMatrix *map_matrix) +{ + FreeToHeap(map_matrix); +} + +THUMB_FUNC u16 MapMatrix_GetMapData(s32 map_id, struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_id < map_matrix->width * map_matrix->height); + + return map_matrix->data.maps.data[map_id]; +} + +THUMB_FUNC u8 MapMatrix_GetWidth(struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + + return map_matrix->width; +} + +THUMB_FUNC u8 MapMatrix_GetHeight(struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + + return map_matrix->height; +} + +THUMB_FUNC u16 MapMatrix_GetMapHeader(struct MapMatrix *map_matrix, s32 x, s32 y) +{ + s32 width = map_matrix->width; + s32 height = map_matrix->height; + + GF_ASSERT(x >= 0 && x < width); + GF_ASSERT(y >= 0 && y < height); + + return map_matrix->data.headers[y * width + x]; +} + +THUMB_FUNC u16 MapMatrix_GetMapHeaderFromID(struct MapMatrix *map_matrix, s32 map_id) +{ + s32 max_map_id = map_matrix->width * map_matrix->height; + + GF_ASSERT(0 <= map_id && map_id < max_map_id); + + return map_matrix->data.headers[map_id]; +} + +THUMB_FUNC u8 MapMatrix_GetMatrixID(struct MapMatrix *map_matrix) +{ + return map_matrix->matrix_id; +} + +THUMB_FUNC u32 MapMatrix_GetMapAltitude( + struct MapMatrix *map_matrix, u8 param1, s16 x, s16 y, int matrix_width) +{ +#pragma unused(param1) + GF_ASSERT(x < matrix_width); + GF_ASSERT(y * matrix_width + x < MAP_MATRIX_MAX_SIZE); + + return map_matrix->data.altitudes[y * matrix_width + x]; +} + +THUMB_FUNC struct MapData *MapMatrix_MapData_New(u32 heap_id) +{ + struct MapData *map_data = AllocFromHeap(heap_id, sizeof(struct MapData)); + void *buffer = + AllocAtEndAndReadWholeNarcMemberByIdPair(NARC_FIELDDATA_MAPMATRIX_MAP_MATRIX, 0, heap_id); + u8 *cursor = (u8 *)buffer; + + cursor += 4; + u8 name_length = *cursor; + cursor++; + cursor += name_length; + + MI_CpuCopy8(cursor, map_data, sizeof(struct MapData)); + FreeToHeap(buffer); + + return map_data; +} + +THUMB_FUNC void MapMatrix_MapData_Free(struct MapData *map_data) +{ + GF_ASSERT(map_data != NULL); + FreeToHeap(map_data); +} + +THUMB_FUNC u16 MapMatrix_MapData_GetData(struct MapData *map_data, s32 x, s32 y) +{ + return map_data->data[MAP_MATRIX_MAX_WIDTH * y + x]; +} + +THUMB_FUNC u16 GetMapHeader(u32 file_id, u16 x, u16 y) +{ + struct MapMatrixData map_matrix; + + MapMatrix_MapMatrixData_Load(&map_matrix, (u16)file_id, 0); + GF_ASSERT(x < map_matrix.width); + GF_ASSERT(y < map_matrix.height); + + return map_matrix.headers[y * map_matrix.width + x]; +} + +THUMB_FUNC u16 GetMapData(s32 map_id, struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + return MapMatrix_GetMapData(map_id, map_matrix); +} + +THUMB_FUNC void FUN_02034678(struct MapMatrix *map_matrix) +{ + u16 *maps = map_matrix->data.maps.data; + u8 *altitudes = map_matrix->data.altitudes; + u8 width = map_matrix->width; + + if (map_matrix->matrix_id != 0) + { + return; + } + + maps[width * 0x15 + 0x17] = 0xB0; + maps[width * 0x15 + 0x18] = 0xB0; + maps[width * 0x16 + 0x17] = 0xB0; + maps[width * 0x16 + 0x18] = 0xB0; + altitudes[width * 0x15 + 0x17] = 2; + altitudes[width * 0x15 + 0x18] = 2; + altitudes[width * 0x16 + 0x17] = 2; + altitudes[width * 0x16 + 0x18] = 2; +} + +THUMB_FUNC void FUN_020346CC(struct MapMatrix *map_matrix) +{ + u16 *maps = map_matrix->data.maps.data; + u8 width = map_matrix->width; + + if (map_matrix->matrix_id != 0) + { + return; + } + + maps[width * 0x0F + 0x1C] = 0x77; + maps[width * 0x10 + 0x1B] = 0x78; + maps[width * 0x10 + 0x1C] = 0x79; + maps[width * 0x11 + 0x1B] = 0x7A; +} diff --git a/include/map_matrix.h b/include/map_matrix.h new file mode 100644 index 00000000..87e732dc --- /dev/null +++ b/include/map_matrix.h @@ -0,0 +1,54 @@ +#ifndef POKEDIAMOND_MAP_MATRIX_H +#define POKEDIAMOND_MAP_MATRIX_H + +#define MAP_MATRIX_MAX_WIDTH 30 +#define MAP_MATRIX_MAX_HEIGHT 30 +#define MAP_MATRIX_MAX_SIZE (MAP_MATRIX_MAX_WIDTH * MAP_MATRIX_MAX_HEIGHT) + +#define MAP_MATRIX_MAX_NAME_LENGTH 16 + +struct MapData +{ + u16 data[MAP_MATRIX_MAX_SIZE]; +}; + +struct MapMatrixData +{ + u8 height; + u8 width; + u16 headers[MAP_MATRIX_MAX_SIZE]; + u8 altitudes[MAP_MATRIX_MAX_SIZE]; + struct MapData maps; + u8 name[MAP_MATRIX_MAX_NAME_LENGTH]; +}; + +struct MapMatrix +{ + u8 width; + u8 height; + u8 matrix_id; + struct MapMatrixData data; +}; + +struct MapMatrix *MapMatrix_New(void); +void MapMatrix_Load(u16 map_id, struct MapMatrix *map_matrix); +void MapMatrix_Free(struct MapMatrix *map_matrix); +u16 MapMatrix_GetMapData(s32 map_id, struct MapMatrix *map_matrix); +u8 MapMatrix_GetWidth(struct MapMatrix *map_matrix); +u8 MapMatrix_GetHeight(struct MapMatrix *map_matrix); +u16 MapMatrix_GetMapHeader(struct MapMatrix *map_matrix, s32 x, s32 y); +u16 MapMatrix_GetMapHeaderFromID(struct MapMatrix *map_matrix, s32 map_id); +u8 MapMatrix_GetMatrixID(struct MapMatrix *map_matrix); +u32 MapMatrix_GetMapAltitude( + struct MapMatrix *map_matrix, u8 param1, s16 x, s16 y, int matrix_width); + +struct MapData *MapMatrix_MapData_New(u32 heap_id); +void MapMatrix_MapData_Free(struct MapData *map_data); +u16 MapMatrix_MapData_GetData(struct MapData *map_data, s32 x, s32 y); + +u16 GetMapHeader(u32 file_id, u16 x, u16 y); +u16 GetMapData(s32 map_id, struct MapMatrix *map_matrix); +void FUN_02034678(struct MapMatrix *map_matrix); +void FUN_020346CC(struct MapMatrix *map_matrix); + +#endif // POKEDIAMOND_MAP_MATRIX_H -- cgit v1.2.3 From b64711e776fde3adbe663f35f9a62cc3a6ab2a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Fri, 2 Jul 2021 22:03:56 +0200 Subject: decompile unk_020040F4.s --- arm9/asm/unk_020040F4.s | 2288 ----------------------------------------------- arm9/src/unk_020040F4.c | 1424 +++++++++++++++++++++++++++++ 2 files changed, 1424 insertions(+), 2288 deletions(-) delete mode 100644 arm9/asm/unk_020040F4.s create mode 100644 arm9/src/unk_020040F4.c diff --git a/arm9/asm/unk_020040F4.s b/arm9/asm/unk_020040F4.s deleted file mode 100644 index cfd9551f..00000000 --- a/arm9/asm/unk_020040F4.s +++ /dev/null @@ -1,2288 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - .global UNK_021C3DD8 -UNK_021C3DD8: ; 0x021C3DD8 - .space 0x8 - - .global UNK_021C3DE0 -UNK_021C3DE0: ; 0x021C3DE0 - .space 0x7d0 - - .section .rodata - - .global UNK_020ECB8C -UNK_020ECB8C: ; 0x020ECB8C - .byte 2, 3, 4, 5, 6, 7, 8, 9, 10 - - .text - - thumb_func_start FUN_020040F4 -FUN_020040F4: ; 0x020040F4 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x5 - bl FUN_02003D38 - strb r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004104 -FUN_02004104: ; 0x02004104 - push {r3, lr} - mov r0, #0x5 - bl FUN_02003D38 - ldrb r0, [r0, #0x0] - pop {r3, pc} - - thumb_func_start FUN_02004110 -FUN_02004110: ; 0x02004110 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x9 - bl FUN_02003D38 - strh r4, [r0, #0x0] - mov r0, #0x0 - bl FUN_02004130 - pop {r4, pc} - - thumb_func_start FUN_02004124 -FUN_02004124: ; 0x02004124 - push {r3, lr} - mov r0, #0x9 - bl FUN_02003D38 - ldrh r0, [r0, #0x0] - pop {r3, pc} - - thumb_func_start FUN_02004130 -FUN_02004130: ; 0x02004130 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0xa - bl FUN_02003D38 - strh r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004140 -FUN_02004140: ; 0x02004140 - push {r3, lr} - mov r0, #0xa - bl FUN_02003D38 - ldrh r0, [r0, #0x0] - pop {r3, pc} - - thumb_func_start FUN_0200414C -FUN_0200414C: ; 0x0200414C - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x1f - bl FUN_02003D38 - strh r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0200415C -FUN_0200415C: ; 0x0200415C - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x14 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x15 - bl FUN_02003D38 - cmp r5, #0x33 - bhs _0200417A - strb r5, [r4, #0x0] - mov r1, #0x0 - strb r1, [r0, #0x0] - pop {r3-r5, pc} -_0200417A: - strb r5, [r0, #0x0] - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02004180 -FUN_02004180: ; 0x02004180 - push {r3, lr} - cmp r0, #0x39 - bgt _020041DE - blt _0200418A - b _020042C8 -_0200418A: - cmp r0, #0x35 - bgt _020041CC - blt _02004192 - b _0200429A -_02004192: - cmp r0, #0x33 - bgt _020041C6 - bge _0200427C - cmp r0, #0xe - bhi _020041CA - add r2, r0, r0 - add r2, pc - ldrh r2, [r2, #0x6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 -_020041A8: ; jump table (using 16-bit offset) - .short _0200432C - _020041A8 - 2; case 0 - .short _02004222 - _020041A8 - 2; case 1 - .short _0200422C - _020041A8 - 2; case 2 - .short _02004236 - _020041A8 - 2; case 3 - .short _02004240 - _020041A8 - 2; case 4 - .short _0200424A - _020041A8 - 2; case 5 - .short _0200425E - _020041A8 - 2; case 6 - .short _0200429A - _020041A8 - 2; case 7 - .short _02004268 - _020041A8 - 2; case 8 - .short _02004222 - _020041A8 - 2; case 9 - .short _02004222 - _020041A8 - 2; case 10 - .short _02004254 - _020041A8 - 2; case 11 - .short _02004272 - _020041A8 - 2; case 12 - .short _0200422C - _020041A8 - 2; case 13 - .short _02004222 - _020041A8 - 2; case 14 -_020041C6: - cmp r0, #0x34 - beq _02004290 -_020041CA: - b _0200432C -_020041CC: - cmp r0, #0x37 - bgt _020041D8 - bge _020042AE - cmp r0, #0x36 - beq _020042A4 - b _0200432C -_020041D8: - cmp r0, #0x38 - beq _020042BE - b _0200432C -_020041DE: - cmp r0, #0x3d - bgt _020041F8 - blt _020041E6 - b _020042F0 -_020041E6: - cmp r0, #0x3b - bgt _020041F2 - bge _020042DC - cmp r0, #0x3a - beq _020042D2 - b _0200432C -_020041F2: - cmp r0, #0x3c - beq _020042E6 - b _0200432C -_020041F8: - cmp r0, #0x3f - bgt _02004206 - blt _02004200 - b _02004304 -_02004200: - cmp r0, #0x3e - beq _020042FA - b _0200432C -_02004206: - sub r0, #0x40 - cmp r0, #0x3 - bls _0200420E - b _0200432C -_0200420E: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_0200421A: ; jump table (using 16-bit offset) - .short _0200430E - _0200421A - 2; case 0 - .short _0200431E - _0200421A - 2; case 1 - .short _02004286 - _0200421A - 2; case 2 - .short _020042AE - _0200421A - 2; case 3 -_02004222: - mov r0, #0x1 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200422C: - mov r0, #0x2 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004236: - mov r0, #0xd - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004240: - mov r0, #0x1 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200424A: - mov r0, #0x2 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004254: - mov r0, #0x1 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200425E: - mov r0, #0xb - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004268: - mov r0, #0x1 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004272: - mov r0, #0xe - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200427C: - mov r0, #0x3 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004286: - mov r0, #0x6 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004290: - mov r0, #0x5 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200429A: - mov r0, #0x9 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042A4: - mov r0, #0xa - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042AE: - ldr r0, _02004330 ; =0x000005E5 - bl GF_Snd_LoadBank - ldr r0, _02004330 ; =0x000005E5 - bl GF_Snd_LoadWaveArc - add r1, r0, #0x0 - b _0200432C -_020042BE: - mov r0, #0xc - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042C8: - mov r0, #0x7 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042D2: - mov r0, #0x8 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042DC: - mov r0, #0xf - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042E6: - mov r0, #0x3 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042F0: - mov r0, #0x5 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_020042FA: - mov r0, #0xf - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_02004304: - mov r0, #0x4 - bl GF_Snd_LoadGroup - add r1, r0, #0x0 - b _0200432C -_0200430E: - ldr r0, _02004334 ; =0x000005ED - bl GF_Snd_LoadBank - ldr r0, _02004334 ; =0x000005ED - bl GF_Snd_LoadWaveArc - add r1, r0, #0x0 - b _0200432C -_0200431E: - ldr r0, _02004338 ; =0x000005EC - bl GF_Snd_LoadBank - ldr r0, _02004338 ; =0x000005EC - bl GF_Snd_LoadWaveArc - add r1, r0, #0x0 -_0200432C: - add r0, r1, #0x0 - pop {r3, pc} - .balign 4 -_02004330: .word 0x000005E5 -_02004334: .word 0x000005ED -_02004338: .word 0x000005EC - - thumb_func_start FUN_0200433C -FUN_0200433C: ; 0x0200433C - push {r3-r7, lr} - sub sp, #0x8 - add r4, r0, #0x0 - mov r0, #0x14 - add r5, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02003D38 - str r0, [sp, #0x0] - mov r0, #0x15 - bl FUN_02003D38 - str r0, [sp, #0x4] - mov r0, #0xd - bl FUN_02003D38 - add r7, r0, #0x0 - cmp r4, #0x33 - bhs _02004370 - ldr r0, [sp, #0x0] - ldrb r0, [r0, #0x0] - cmp r0, r4 - bne _0200437E - add sp, #0x8 - mov r0, #0x0 - pop {r3-r7, pc} -_02004370: - ldr r0, [sp, #0x4] - ldrb r0, [r0, #0x0] - cmp r0, r4 - bne _0200437E - add sp, #0x8 - mov r0, #0x0 - pop {r3-r7, pc} -_0200437E: - add r0, r4, #0x0 - bl FUN_0200415C - cmp r4, #0x39 - bgt _020043DC - bge _02004458 - cmp r4, #0x35 - bgt _020043CA - bge _02004458 - cmp r4, #0x33 - bgt _020043C4 - bge _02004458 - cmp r4, #0xe - bhi _020043C8 - add r0, r4, r4 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_020043A6: ; jump table (using 16-bit offset) - .short _020044A0 - _020043A6 - 2; case 0 - .short _02004460 - _020043A6 - 2; case 1 - .short _02004484 - _020043A6 - 2; case 2 - .short _02004496 - _020043A6 - 2; case 3 - .short _0200441C - _020043A6 - 2; case 4 - .short _02004430 - _020043A6 - 2; case 5 - .short _02004444 - _020043A6 - 2; case 6 - .short _0200444E - _020043A6 - 2; case 7 - .short _02004496 - _020043A6 - 2; case 8 - .short _02004496 - _020043A6 - 2; case 9 - .short _02004496 - _020043A6 - 2; case 10 - .short _0200443A - _020043A6 - 2; case 11 - .short _02004496 - _020043A6 - 2; case 12 - .short _02004496 - _020043A6 - 2; case 13 - .short _02004472 - _020043A6 - 2; case 14 -_020043C4: - cmp r4, #0x34 - beq _02004458 -_020043C8: - b _020044A0 -_020043CA: - cmp r4, #0x37 - bgt _020043D6 - bge _02004458 - cmp r4, #0x36 - beq _02004458 - b _020044A0 -_020043D6: - cmp r4, #0x38 - beq _02004458 - b _020044A0 -_020043DC: - cmp r4, #0x3d - bgt _020043F4 - bge _02004458 - cmp r4, #0x3b - bgt _020043EE - bge _02004458 - cmp r4, #0x3a - beq _02004458 - b _020044A0 -_020043EE: - cmp r4, #0x3c - beq _02004458 - b _020044A0 -_020043F4: - cmp r4, #0x3f - bgt _02004400 - bge _02004458 - cmp r4, #0x3e - beq _02004458 - b _020044A0 -_02004400: - add r0, r4, #0x0 - sub r0, #0x40 - cmp r0, #0x3 - bhi _020044A0 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02004414: ; jump table (using 16-bit offset) - .short _02004458 - _02004414 - 2; case 0 - .short _02004458 - _02004414 - 2; case 1 - .short _02004458 - _02004414 - 2; case 2 - .short _02004458 - _02004414 - 2; case 3 -_0200441C: - mov r0, #0x0 - bl FUN_0200516C - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_020044D4 - mov r0, #0x0 - strh r0, [r7, #0x0] - b _020044A0 -_02004430: - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_02004648 - b _020044A0 -_0200443A: - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_02004680 - b _020044A0 -_02004444: - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_020046A0 - b _020044A0 -_0200444E: - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_020046C4 - b _020044A0 -_02004458: - add r0, r4, #0x0 - bl FUN_020046E8 - b _020044A0 -_02004460: - mov r0, #0x1 - bl FUN_0200516C - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - bl FUN_02004704 - b _020044A0 -_02004472: - mov r0, #0x2 - bl FUN_0200516C - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - bl FUN_02004704 - b _020044A0 -_02004484: - mov r0, #0x0 - bl FUN_0200516C - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - bl FUN_02004704 - b _020044A0 -_02004496: - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - bl FUN_02004704 -_020044A0: - mov r0, #0x1 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_020044A8 -FUN_020044A8: ; 0x020044A8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - ldr r0, [r0, #0x0] - bl GF_Snd_RestoreState - mov r0, #0x18 - bl FUN_02003D38 - bl GF_Snd_SaveState - add r0, r4, #0x0 - bl FUN_02004180 - mov r0, #0x19 - bl FUN_02003D38 - bl GF_Snd_SaveState - pop {r4, pc} - - thumb_func_start FUN_020044D4 -FUN_020044D4: ; 0x020044D4 - push {r4-r6, lr} - add r5, r0, #0x0 - mov r0, #0xb - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - mov r0, #0x1f - bl FUN_02003D38 - mov r0, #0x0 - bl FUN_02003FF4 - bl FUN_020048EC - add r4, r0, #0x0 - ldrb r0, [r6, #0x0] - cmp r0, #0x0 - bne _0200450E - cmp r4, r5 - bne _0200450E - bl FUN_02004140 - mov r1, #0x12 - lsl r1, r1, #0x6 - cmp r0, r1 - bne _02004566 -_0200450E: - mov r0, #0x1 - bl FUN_02004DBC - bl FUN_02005454 - cmp r4, r5 - beq _02004528 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_020047C8 - bl FUN_0200541C -_02004528: - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - bne _02004560 - mov r0, #0x2 - bl FUN_02004748 - bl GF_Snd_RestoreState - mov r0, #0x4 - bl FUN_02004180 - mov r0, #0x19 - bl FUN_02003D38 - bl GF_Snd_SaveState - cmp r4, r5 - beq _02004554 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_020047C8 -_02004554: - lsl r1, r4, #0x10 - add r0, r5, #0x0 - lsr r1, r1, #0x10 - bl FUN_02004568 - pop {r4-r6, pc} -_02004560: - add r0, r5, #0x0 - bl FUN_0200521C -_02004566: - pop {r4-r6, pc} - - thumb_func_start FUN_02004568 -FUN_02004568: ; 0x02004568 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x1f - bl FUN_02003D38 - add r4, r0, #0x0 - ldrh r0, [r4, #0x0] - bl FUN_02004900 - ldr r1, _020045C0 ; =0x000003E9 - cmp r0, r1 - beq _02004594 - add r1, r1, #0x2 - cmp r0, r1 - beq _02004594 - add r0, r5, #0x0 - mov r1, #0x4 - bl GF_Snd_LoadSeqEx - bl GF_AssertFail - b _0200459C -_02004594: - ldrh r0, [r4, #0x0] - mov r1, #0x6 - bl GF_Snd_LoadSeqEx -_0200459C: - mov r0, #0x1a - bl FUN_02003D38 - bl GF_Snd_SaveState - mov r0, #0x1 - mov r1, #0x0 - bl FUN_020047C8 - mov r0, #0x7f - mov r1, #0x28 - mov r2, #0x0 - bl FUN_0200538C - mov r0, #0x0 - bl FUN_02004DBC - pop {r3-r5, pc} - .balign 4 -_020045C0: .word 0x000003E9 - - thumb_func_start FUN_020045C4 -FUN_020045C4: ; 0x020045C4 - push {r3-r7, lr} - add r7, r0, #0x0 - mov r0, #0x12 - add r5, r1, #0x0 - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x1f - bl FUN_02003D38 - add r4, r0, #0x0 - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - beq _020045E4 - cmp r5, #0x0 - bne _02004642 -_020045E4: - mov r0, #0x1 - bl FUN_02004748 - bl GF_Snd_RestoreState - ldrh r0, [r4, #0x0] - mov r1, #0x2 - bl GF_Snd_LoadSeqEx - mov r0, #0x18 - bl FUN_02003D38 - bl GF_Snd_SaveState - mov r0, #0x4 - bl FUN_02004180 - mov r0, #0x19 - bl FUN_02003D38 - bl GF_Snd_SaveState - ldrh r0, [r4, #0x0] - bl FUN_02004900 - ldr r1, _02004644 ; =0x000003E9 - cmp r0, r1 - beq _02004630 - add r1, r1, #0x2 - cmp r0, r1 - beq _02004630 - add r0, r7, #0x0 - mov r1, #0x4 - bl GF_Snd_LoadSeqEx - bl GF_AssertFail - b _02004638 -_02004630: - ldrh r0, [r4, #0x0] - mov r1, #0x4 - bl GF_Snd_LoadSeqEx -_02004638: - mov r0, #0x1a - bl FUN_02003D38 - bl GF_Snd_SaveState -_02004642: - pop {r3-r7, pc} - .balign 4 -_02004644: .word 0x000003E9 - - thumb_func_start FUN_02004648 -FUN_02004648: ; 0x02004648 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - bl FUN_020051AC - mov r0, #0x2 - bl FUN_02004748 - bl GF_Snd_RestoreState - mov r0, #0x5 - bl FUN_02004180 - mov r0, #0x19 - bl FUN_02003D38 - bl GF_Snd_SaveState - mov r0, #0x1 - bl FUN_02004DBC - add r0, r4, #0x0 - bl FUN_0200521C - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004680 -FUN_02004680: ; 0x02004680 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - bl FUN_0200541C - bl FUN_02004810 - mov r0, #0x4 - bl FUN_020044A8 - add r0, r4, #0x0 - bl FUN_0200521C - pop {r4, pc} - - thumb_func_start FUN_020046A0 -FUN_020046A0: ; 0x020046A0 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - bl FUN_0200541C - mov r0, #0x6 - bl FUN_020044A8 - mov r0, #0x1 - bl FUN_02004DBC - add r0, r4, #0x0 - bl FUN_0200521C - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020046C4 -FUN_020046C4: ; 0x020046C4 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x17 - bl FUN_02003D38 - bl FUN_0200541C - mov r0, #0x7 - bl FUN_020044A8 - mov r0, #0x1 - bl FUN_02004DBC - add r0, r4, #0x0 - bl FUN_0200521C - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020046E8 -FUN_020046E8: ; 0x020046E8 - push {r4, lr} - add r4, r0, #0x0 - bl FUN_02004738 - add r0, r4, #0x0 - bl FUN_02004180 - mov r0, #0x1b - bl FUN_02003D38 - bl GF_Snd_SaveState - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004704 -FUN_02004704: ; 0x02004704 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x17 - add r4, r1, #0x0 - bl FUN_02003D38 - bl FUN_0200541C - add r0, r5, #0x0 - bl FUN_020044A8 - add r0, r4, #0x0 - bl FUN_0200521C - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02004724 -FUN_02004724: ; 0x02004724 - push {r4, lr} - add r4, r0, #0x0 - bl GetSoundDataPointer - bl FUN_020051AC - add r0, r4, #0x0 - bl FUN_0200521C - pop {r4, pc} - - thumb_func_start FUN_02004738 -FUN_02004738: ; 0x02004738 - push {r3, lr} - mov r0, #0x4 - bl FUN_02004748 - bl GF_Snd_RestoreState - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02004748 -FUN_02004748: ; 0x02004748 - push {r3-r5, lr} - add r4, r0, #0x0 - bl GetSoundDataPointer - cmp r4, #0x7 - blt _02004762 - bl GF_AssertFail - mov r0, #0x1a - bl FUN_02003D38 - ldr r0, [r0, #0x0] - pop {r3-r5, pc} -_02004762: - cmp r4, #0x6 - bhi _020047C4 - add r0, r4, r4 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02004772: ; jump table (using 16-bit offset) - .short _02004780 - _02004772 - 2; case 0 - .short _0200478A - _02004772 - 2; case 1 - .short _02004794 - _02004772 - 2; case 2 - .short _0200479E - _02004772 - 2; case 3 - .short _020047A8 - _02004772 - 2; case 4 - .short _020047B2 - _02004772 - 2; case 5 - .short _020047BC - _02004772 - 2; case 6 -_02004780: - mov r0, #0x16 - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_0200478A: - mov r0, #0x17 - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_02004794: - mov r0, #0x18 - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_0200479E: - mov r0, #0x19 - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_020047A8: - mov r0, #0x1a - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_020047B2: - mov r0, #0x1b - bl FUN_02003D38 - add r5, r0, #0x0 - b _020047C4 -_020047BC: - mov r0, #0x1c - bl FUN_02003D38 - add r5, r0, #0x0 -_020047C4: - ldr r0, [r5, #0x0] - pop {r3-r5, pc} - - thumb_func_start FUN_020047C8 -FUN_020047C8: ; 0x020047C8 - push {r4-r6, lr} - add r5, r1, #0x0 - cmp r0, #0x1 - bne _020047DC - mov r0, #0xb - bl FUN_02003D38 - add r6, r0, #0x0 - mov r4, #0x0 - b _020047EA -_020047DC: - cmp r0, #0x7 - bne _0200480E - mov r0, #0xc - bl FUN_02003D38 - add r6, r0, #0x0 - mov r4, #0x7 -_020047EA: - cmp r5, #0x0 - bne _02004800 - add r0, r4, #0x0 - bl FUN_02003FF4 - bl FUN_020048EC - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02004110 -_02004800: - add r0, r4, #0x0 - bl FUN_02003FF4 - add r1, r5, #0x0 - bl NNS_SndPlayerPause - strb r5, [r6, #0x0] -_0200480E: - pop {r4-r6, pc} - - thumb_func_start FUN_02004810 -FUN_02004810: ; 0x02004810 - push {r4, lr} - mov r0, #0xb - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0xc - bl FUN_02003D38 - mov r1, #0x0 - strb r1, [r4, #0x0] - strb r1, [r0, #0x0] - pop {r4, pc} - - thumb_func_start FUN_02004828 -FUN_02004828: ; 0x02004828 - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_02003FF4 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl NNS_SndPlayerMoveVolume - pop {r3-r5, pc} - - thumb_func_start FUN_0200483C -FUN_0200483C: ; 0x0200483C - push {r4, lr} - add r4, r1, #0x0 - bpl _02004844 - mov r4, #0x0 -_02004844: - cmp r4, #0x7f - ble _0200484A - mov r4, #0x7f -_0200484A: - bl FUN_02003FF4 - add r1, r4, #0x0 - bl NNS_SndPlayerSetInitialVolume - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004858 -FUN_02004858: ; 0x02004858 - push {r3-r5, lr} - add r5, r1, #0x0 - bl NNS_SndArcGetSeqParam - cmp r5, #0x1 - beq _02004868 - cmp r5, #0x8 - bne _0200486C -_02004868: - mov r4, #0x7f - b _02004872 -_0200486C: - cmp r0, #0x0 - beq _0200488A - ldrb r4, [r0, #0x2] -_02004872: - bl FUN_020313EC - cmp r0, #0x1 - bne _0200488A - add r0, r4, #0x0 - mov r1, #0x5 - bl _s32_div_f - add r1, r0, #0x0 - add r0, r5, #0x0 - bl FUN_0200483C -_0200488A: - pop {r3-r5, pc} - - thumb_func_start FUN_0200488C -FUN_0200488C: ; 0x0200488C - push {r4, lr} - add r4, r1, #0x0 - bl FUN_020048D0 - bl FUN_02004018 - add r1, r4, #0x0 - bl FUN_0200483C - pop {r4, pc} - - thumb_func_start FUN_020048A0 -FUN_020048A0: ; 0x020048A0 - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_02003FF4 - mov r2, #0x0 - mvn r2, r2 - add r1, r5, #0x0 - add r3, r2, #0x0 - str r4, [sp, #0x0] - bl NNS_SndArcPlayerStartSeqEx - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020048BC -FUN_020048BC: ; 0x020048BC - push {r4, lr} - add r4, r0, #0x0 - bpl _020048C6 - bl GF_AssertFail -_020048C6: - add r0, r4, #0x0 - bl NNS_SndPlayerCountPlayingSeqByPlayerNo - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020048D0 -FUN_020048D0: ; 0x020048D0 - push {r3, lr} - cmp r0, #0x0 - bne _020048DA - mov r0, #0xff - pop {r3, pc} -_020048DA: - bl NNS_SndArcGetSeqParam - cmp r0, #0x0 - bne _020048E6 - mov r0, #0xff - pop {r3, pc} -_020048E6: - ldrb r0, [r0, #0x5] - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_020048EC -FUN_020048EC: ; 0x020048EC - ldr r3, _020048F0 ; =NNS_SndPlayerGetSeqNo - bx r3 - .balign 4 -_020048F0: .word NNS_SndPlayerGetSeqNo - - thumb_func_start FUN_020048F4 -FUN_020048F4: ; 0x020048F4 - push {r3, lr} - bl FUN_02004900 - bl NNS_SndArcGetBankInfo - pop {r3, pc} - - thumb_func_start FUN_02004900 -FUN_02004900: ; 0x02004900 - push {r3, lr} - bl NNS_SndArcGetSeqParam - cmp r0, #0x0 - bne _0200490E - mov r0, #0x0 - pop {r3, pc} -_0200490E: - ldrh r0, [r0, #0x0] - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02004914 -FUN_02004914: ; 0x02004914 - ldr r3, _02004918 ; =MIC_StartAutoSampling - bx r3 - .balign 4 -_02004918: .word MIC_StartAutoSampling - - thumb_func_start FUN_0200491C -FUN_0200491C: ; 0x0200491C - push {r3, lr} - bl GetSoundDataPointer - bl MIC_StopAutoSampling - pop {r3, pc} - - thumb_func_start FUN_02004928 -FUN_02004928: ; 0x02004928 - push {r3, lr} - bl MIC_DoSamplingAsync - pop {r3, pc} - - thumb_func_start FUN_02004930 -FUN_02004930: ; 0x02004930 - push {r4-r6, lr} - add r5, r0, #0x0 - bl GetSoundDataPointer - mov r0, #0xf - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - cmp r5, #0xe - beq _02004954 - cmp r5, #0xf - beq _02004954 - bl GF_AssertFail -_02004954: - cmp r5, #0xe - bne _02004962 - ldrb r0, [r6, #0x0] - cmp r0, #0x0 - bne _02004962 - bl GF_AssertFail -_02004962: - cmp r5, #0xf - bne _02004970 - ldrb r0, [r4, #0x0] - cmp r0, #0x0 - bne _02004970 - bl GF_AssertFail -_02004970: - cmp r5, #0xe - bne _0200497C - mov r0, #0x0 - bl FUN_02003D38 - pop {r4-r6, pc} -_0200497C: - mov r0, #0x1 - bl FUN_02003D38 - pop {r4-r6, pc} - - thumb_func_start FUN_02004984 -FUN_02004984: ; 0x02004984 - push {r4-r6, lr} - add r5, r0, #0x0 - bl GetSoundDataPointer - mov r0, #0xf - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - cmp r5, #0xe - beq _020049A8 - cmp r5, #0xf - beq _020049A8 - bl GF_AssertFail -_020049A8: - cmp r5, #0xe - bne _020049D6 - ldrb r0, [r6, #0x0] - cmp r0, #0x0 - bne _020049D0 - mov r0, #0x0 - bl FUN_02003D38 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl NNS_SndWaveOutAllocChannel - str r0, [r4, #0x0] - cmp r0, #0x0 - bne _020049CA - mov r0, #0x0 - pop {r4-r6, pc} -_020049CA: - mov r0, #0x1 - strb r0, [r6, #0x0] - b _020049FE -_020049D0: - bl GF_AssertFail - b _020049FE -_020049D6: - ldrb r0, [r4, #0x0] - cmp r0, #0x0 - bne _020049FA - mov r0, #0x1 - bl FUN_02003D38 - add r6, r0, #0x0 - add r0, r5, #0x0 - bl NNS_SndWaveOutAllocChannel - str r0, [r6, #0x0] - cmp r0, #0x0 - bne _020049F4 - mov r0, #0x0 - pop {r4-r6, pc} -_020049F4: - mov r0, #0x1 - strb r0, [r4, #0x0] - b _020049FE -_020049FA: - bl GF_AssertFail -_020049FE: - mov r0, #0x1 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02004A04 -FUN_02004A04: ; 0x02004A04 - push {r4-r6, lr} - add r5, r0, #0x0 - bl GetSoundDataPointer - mov r0, #0xf - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - cmp r5, #0xe - beq _02004A2A - cmp r5, #0xf - beq _02004A2A - bl GF_AssertFail - pop {r4-r6, pc} -_02004A2A: - cmp r5, #0xe - bne _02004A4C - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - bne _02004A46 - add r0, r5, #0x0 - bl FUN_02004930 - ldr r0, [r0, #0x0] - bl NNS_SndWaveOutFreeChannel - mov r0, #0x0 - strb r0, [r6, #0x0] - pop {r4-r6, pc} -_02004A46: - bl GF_AssertFail - pop {r4-r6, pc} -_02004A4C: - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _02004A64 - add r0, r5, #0x0 - bl FUN_02004930 - ldr r0, [r0, #0x0] - bl NNS_SndWaveOutFreeChannel - mov r0, #0x0 - strb r0, [r4, #0x0] - pop {r4-r6, pc} -_02004A64: - bl GF_AssertFail - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02004A6C -FUN_02004A6C: ; 0x02004A6C - push {r3-r5, lr} - sub sp, #0x18 - add r3, r0, #0x0 - ldr r0, [r3, #0x10] - add r4, r1, #0x0 - str r0, [sp, #0x0] - ldr r0, [r3, #0x14] - str r0, [sp, #0x4] - ldr r0, [r3, #0x18] - str r0, [sp, #0x8] - ldr r0, [r3, #0x1c] - str r0, [sp, #0xc] - ldr r0, [r3, #0x20] - str r0, [sp, #0x10] - ldr r0, [r3, #0x24] - str r0, [sp, #0x14] - ldr r0, [r3, #0x0] - ldr r1, [r3, #0x4] - ldr r2, [r3, #0x8] - ldr r0, [r0, #0x0] - ldr r3, [r3, #0xc] - bl NNS_SndWaveOutStart - add r5, r0, #0x0 - bne _02004AA4 - add r0, r4, #0x0 - bl FUN_02004A04 -_02004AA4: - add r0, r5, #0x0 - add sp, #0x18 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02004AAC -FUN_02004AAC: ; 0x02004AAC - push {r3, lr} - bl FUN_02004930 - ldr r0, [r0, #0x0] - bl NNS_SndWaveOutStop - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02004ABC -FUN_02004ABC: ; 0x02004ABC - push {r3, lr} - bl FUN_02004930 - ldr r0, [r0, #0x0] - bl NNS_SndWaveOutIsPlaying - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02004ACC -FUN_02004ACC: ; 0x02004ACC - push {r4, lr} - add r4, r1, #0x0 - cmp r4, #0x7f - bls _02004AD6 - mov r4, #0x7f -_02004AD6: - bl FUN_02004930 - ldr r0, [r0, #0x0] - add r1, r4, #0x0 - bl NNS_SndWaveOutSetPan - pop {r4, pc} - - thumb_func_start FUN_02004AE4 -FUN_02004AE4: ; 0x02004AE4 - push {r4, lr} - add r4, r1, #0x0 - bl FUN_02004930 - ldr r0, [r0, #0x0] - add r1, r4, #0x0 - bl NNS_SndWaveOutSetSpeed - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004AF8 -FUN_02004AF8: ; 0x02004AF8 - push {r3-r5, lr} - add r4, r0, #0x0 - add r5, r1, #0x0 - bl FUN_020313EC - cmp r0, #0x1 - bne _02004B20 - add r0, r4, #0x0 - bl FUN_02004930 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x5 - bl _s32_div_f - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl NNS_SndWaveOutSetVolume - pop {r3-r5, pc} -_02004B20: - add r0, r4, #0x0 - bl FUN_02004930 - ldr r0, [r0, #0x0] - add r1, r5, #0x0 - bl NNS_SndWaveOutSetVolume - pop {r3-r5, pc} - - thumb_func_start FUN_02004B30 -FUN_02004B30: ; 0x02004B30 - push {r3-r7, lr} - sub sp, #0x30 - add r6, r0, #0x0 - str r1, [sp, #0x0] - str r2, [sp, #0x4] - add r5, r3, #0x0 - bl GetSoundDataPointer - mov r0, #0x21 - bl FUN_02003D38 - add r4, r0, #0x0 - cmp r5, #0xe - beq _02004B54 - cmp r5, #0xf - beq _02004B54 - bl GF_AssertFail -_02004B54: - add r0, r6, #0x0 - bl NNS_SndArcGetWaveArcInfo - add r7, r0, #0x0 - bne _02004B68 - bl GF_AssertFail - add sp, #0x30 - mov r0, #0x0 - pop {r3-r7, pc} -_02004B68: - ldr r0, [r7, #0x0] - lsl r0, r0, #0x8 - lsr r0, r0, #0x8 - bl NNS_SndArcGetFileSize - add r6, r0, #0x0 - bne _02004B80 - bl GF_AssertFail - add sp, #0x30 - mov r0, #0x0 - pop {r3-r7, pc} -_02004B80: - cmp r5, #0xe - bne _02004BCE - ldr r0, [sp, #0x48] - add r1, r6, #0x0 - bl AllocFromHeap - str r0, [r4, #0x0] - cmp r0, #0x0 - bne _02004B9C - bl GF_AssertFail - add sp, #0x30 - mov r0, #0x0 - pop {r3-r7, pc} -_02004B9C: - mov r1, #0x0 - add r2, r6, #0x0 - bl memset - ldr r0, [r7, #0x0] - ldr r1, [r4, #0x0] - lsl r0, r0, #0x8 - lsr r0, r0, #0x8 - add r2, r6, #0x0 - mov r3, #0x0 - bl NNS_SndArcReadFile - mov r1, #0x0 - mvn r1, r1 - cmp r0, r1 - bne _02004BC6 - bl GF_AssertFail - add sp, #0x30 - mov r0, #0x0 - pop {r3-r7, pc} -_02004BC6: - ldr r0, [r4, #0x0] - add r1, r6, #0x0 - bl FUN_02004C1C -_02004BCE: - add r0, r5, #0x0 - bl FUN_02004930 - mov r1, #0x0 - str r1, [sp, #0xc] - str r0, [sp, #0x8] - ldr r0, [r4, #0x0] - str r0, [sp, #0x10] - ldr r0, _02004C18 ; =0x00003443 - str r1, [sp, #0x14] - str r0, [sp, #0x20] - ldr r0, [sp, #0x0] - str r1, [sp, #0x18] - str r0, [sp, #0x24] - mov r0, #0x6 - lsl r0, r0, #0xc - str r0, [sp, #0x28] - ldr r0, [sp, #0x4] - add r1, r5, #0x0 - str r0, [sp, #0x2c] - add r0, sp, #0x8 - str r6, [sp, #0x1c] - bl FUN_02004A6C - add r4, r0, #0x0 - ldr r1, [sp, #0x0] - add r0, r5, #0x0 - bl FUN_02004AF8 - mov r0, #0xe - bl FUN_02003D38 - mov r1, #0x1 - strb r1, [r0, #0x0] - add r0, r4, #0x0 - add sp, #0x30 - pop {r3-r7, pc} - .balign 4 -_02004C18: .word 0x00003443 - - thumb_func_start FUN_02004C1C -FUN_02004C1C: ; 0x02004C1C - push {r3-r6} - mov r5, #0x0 - lsr r6, r1, #0x1 - beq _02004C36 - sub r2, r1, #0x1 -_02004C26: - sub r3, r2, r5 - ldrb r4, [r0, r5] - ldrb r1, [r0, r3] - strb r1, [r0, r5] - add r5, r5, #0x1 - strb r4, [r0, r3] - cmp r5, r6 - blo _02004C26 -_02004C36: - pop {r3-r6} - bx lr - .balign 4 - - thumb_func_start FUN_02004C3C -FUN_02004C3C: ; 0x02004C3C - push {r4-r6, lr} - add r5, r0, #0x0 - bl GetSoundDataPointer - mov r0, #0xe - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x21 - bl FUN_02003D38 - add r6, r0, #0x0 - cmp r5, #0xe - beq _02004C60 - cmp r5, #0xf - beq _02004C60 - bl GF_AssertFail -_02004C60: - add r0, r5, #0x0 - bl FUN_02004AAC - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _02004C76 - mov r0, #0x0 - strb r0, [r4, #0x0] - ldr r0, [r6, #0x0] - bl FreeToHeap -_02004C76: - pop {r4-r6, pc} - - thumb_func_start FUN_02004C78 -FUN_02004C78: ; 0x02004C78 - ldr r3, _02004C7C ; =NNS_SndCaptureIsActive - bx r3 - .balign 4 -_02004C7C: .word NNS_SndCaptureIsActive - - thumb_func_start FUN_02004C80 -FUN_02004C80: ; 0x02004C80 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - bl GetSoundDataPointer - mov r0, #0x3 - bl FUN_02003D38 - mov r1, #0x1 - mov r3, #0xfa - lsl r1, r1, #0xc - mov r2, #0x0 - lsl r3, r3, #0x6 - str r4, [sp, #0x0] - bl NNS_SndCaptureStartReverb - add sp, #0x4 - pop {r3-r4, pc} - - thumb_func_start FUN_02004CA4 -FUN_02004CA4: ; 0x02004CA4 - ldr r3, _02004CA8 ; =NNS_SndCaptureStopReverb - bx r3 - .balign 4 -_02004CA8: .word NNS_SndCaptureStopReverb - - thumb_func_start FUN_02004CAC -FUN_02004CAC: ; 0x02004CAC - ldr r3, _02004CB0 ; =NNS_SndCaptureSetReverbVolume - bx r3 - .balign 4 -_02004CB0: .word NNS_SndCaptureSetReverbVolume - - thumb_func_start FUN_02004CB4 -FUN_02004CB4: ; 0x02004CB4 - push {r3-r4, lr} - sub sp, #0xc - bl GetSoundDataPointer - mov r0, #0x4 - bl FUN_02003D38 - mov r1, #0x0 - mov r2, #0x1c - bl MI_CpuFill8 - mov r0, #0x3 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x4 - bl FUN_02003D38 - mov r2, #0x2 - ldr r1, _02004CF4 ; =FUN_02005068 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - str r0, [sp, #0x8] - lsl r1, r2, #0xb - ldr r3, _02004CF8 ; =0x000055F0 - add r0, r4, #0x0 - mov r2, #0x0 - bl NNS_SndCaptureStartEffect - add sp, #0xc - pop {r3-r4, pc} - nop -_02004CF4: .word FUN_02005068 -_02004CF8: .word 0x000055F0 - - thumb_func_start FUN_02004CFC -FUN_02004CFC: ; 0x02004CFC - ldr r3, _02004D00 ; =NNS_SndCaptureStopEffect - bx r3 - .balign 4 -_02004D00: .word NNS_SndCaptureStopEffect - - thumb_func_start FUN_02004D04 -FUN_02004D04: ; 0x02004D04 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x13 - bl FUN_02003D38 - cmp r4, #0x8 - ble _02004D16 - mov r4, #0x8 - b _02004D1C -_02004D16: - cmp r4, #0x0 - bge _02004D1C - mov r4, #0x0 -_02004D1C: - strb r4, [r0, #0x0] - pop {r4, pc} - - thumb_func_start FUN_02004D20 -FUN_02004D20: ; 0x02004D20 - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_02003FF4 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl NNS_SndPlayerSetTrackPitch - pop {r3-r5, pc} - - thumb_func_start FUN_02004D34 -FUN_02004D34: ; 0x02004D34 - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_020048D0 - bl FUN_02004018 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl FUN_02004D20 - pop {r3-r5, pc} - - thumb_func_start FUN_02004D4C -FUN_02004D4C: ; 0x02004D4C - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_02003FF4 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl NNS_SndPlayerSetTrackPan - pop {r3-r5, pc} - - thumb_func_start FUN_02004D60 -FUN_02004D60: ; 0x02004D60 - push {r4, lr} - add r4, r0, #0x0 - bl NNS_SndSetMonoFlag - ldr r0, _02004D70 ; =UNK_021C3DD8 - str r4, [r0, #0x0] - pop {r4, pc} - nop -_02004D70: .word UNK_021C3DD8 - - thumb_func_start FUN_02004D74 -FUN_02004D74: ; 0x02004D74 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x6 - bl FUN_02003D38 - str r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004D84 -FUN_02004D84: ; 0x02004D84 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x7 - bl FUN_02003D38 - str r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004D94 -FUN_02004D94: ; 0x02004D94 - push {r3, lr} - mov r0, #0x7 - bl FUN_02003D38 - ldrh r1, [r0, #0x0] - cmp r1, #0x0 - bne _02004DAA - mov r1, #0x0 - strh r1, [r0, #0x0] - add r0, r1, #0x0 - pop {r3, pc} -_02004DAA: - sub r1, r1, #0x1 - strh r1, [r0, #0x0] - ldrh r0, [r0, #0x0] - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02004DB4 -FUN_02004DB4: ; 0x02004DB4 - ldr r0, _02004DB8 ; =UNK_021C3DE0 - bx lr - .balign 4 -_02004DB8: .word UNK_021C3DE0 - - thumb_func_start FUN_02004DBC -FUN_02004DBC: ; 0x02004DBC - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x12 - bl FUN_02003D38 - strb r4, [r0, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02004DCC -FUN_02004DCC: ; 0x02004DCC - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - mov r0, #0x15 - add r6, r1, #0x0 - add r7, r2, #0x0 - str r3, [sp, #0x8] - bl FUN_02003D38 - add r4, r0, #0x0 - add r0, sp, #0x10 - ldrb r0, [r0, #0x10] - ldr r3, [sp, #0x8] - add r1, r6, #0x0 - str r0, [sp, #0x0] - ldr r0, [sp, #0x24] - add r2, r7, #0x0 - str r0, [sp, #0x4] - add r0, r5, #0x0 - bl FUN_02004E44 - mov r0, #0x0 - strb r0, [r4, #0x0] - mov r0, #0x5 - bl FUN_02003CE8 - mov r0, #0x1 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_02004E08 -FUN_02004E08: ; 0x02004E08 - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - mov r0, #0x8 - add r6, r1, #0x0 - add r7, r2, #0x0 - str r3, [sp, #0x8] - bl FUN_02003D38 - add r4, r0, #0x0 - add r0, sp, #0x10 - ldrb r0, [r0, #0x14] - ldr r3, [sp, #0x8] - add r1, r6, #0x0 - str r0, [sp, #0x0] - ldr r0, [sp, #0x28] - add r2, r7, #0x0 - str r0, [sp, #0x4] - add r0, r5, #0x0 - bl FUN_02004E44 - ldr r0, [sp, #0x20] - str r0, [r4, #0x0] - mov r0, #0x6 - bl FUN_02003CE8 - mov r0, #0x1 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_02004E44 -FUN_02004E44: ; 0x02004E44 - push {r3-r7, lr} - add r6, r2, #0x0 - mov r0, #0x2 - add r5, r1, #0x0 - add r7, r3, #0x0 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r6, #0x0 - bl FUN_020053CC - mov r0, #0x0 - bl FUN_02004110 - add r0, r5, #0x0 - bl FUN_02004130 - add r0, r7, #0x0 - bl FUN_02004D84 - add r0, r5, #0x0 - bl FUN_020048F4 - str r0, [r4, #0x0] - add r0, sp, #0x8 - ldrb r0, [r0, #0x10] - bl FUN_02004DBC - pop {r3-r7, pc} - - thumb_func_start FUN_02004E80 -FUN_02004E80: ; 0x02004E80 - cmp r0, #0x0 - bne _02004E88 - mov r0, #0x0 - bx lr -_02004E88: - add r0, #0xc - bx lr - - thumb_func_start FUN_02004E8C -FUN_02004E8C: ; 0x02004E8C - cmp r0, #0x0 - bne _02004E94 - mov r0, #0x0 - bx lr -_02004E94: - ldr r0, [r0, #0x8] - bx lr - - thumb_func_start FUN_02004E98 -FUN_02004E98: ; 0x02004E98 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x5 - bl FUN_02004748 - bl GF_Snd_RestoreState - lsl r0, r5, #0x10 - lsr r4, r0, #0x10 - ldr r0, _02004ECC ; =0x000001B9 - cmp r4, r0 - beq _02004EBC - add r0, #0x36 - cmp r5, r0 - bgt _02004EBA - cmp r5, #0x0 - bne _02004EBC -_02004EBA: - mov r4, #0x1 -_02004EBC: - add r0, r4, #0x0 - bl GF_Snd_LoadWaveArc - add r0, r4, #0x0 - bl FUN_02004ED0 - pop {r3-r5, pc} - nop -_02004ECC: .word 0x000001B9 - - thumb_func_start FUN_02004ED0 -FUN_02004ED0: ; 0x02004ED0 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x20 - bl FUN_02003D38 - add r4, r0, #0x0 - lsl r0, r5, #0x10 - ldr r1, _02004F24 ; =0x000001B9 - lsr r0, r0, #0x10 - cmp r0, r1 - beq _02004EF2 - add r1, #0x36 - cmp r5, r1 - bgt _02004EF0 - cmp r5, #0x0 - bne _02004EF2 -_02004EF0: - mov r0, #0x1 -_02004EF2: - bl NNS_SndArcGetWaveArcInfo - cmp r0, #0x0 - bne _02004F02 - bl GF_AssertFail - mov r0, #0x0 - pop {r3-r5, pc} -_02004F02: - ldr r0, [r0, #0x0] - lsl r0, r0, #0x8 - lsr r0, r0, #0x8 - bl NNS_SndArcGetFileAddress - cmp r0, #0x0 - bne _02004F18 - bl GF_AssertFail - mov r0, #0x0 - pop {r3-r5, pc} -_02004F18: - mov r1, #0x0 - bl SND_GetWaveDataAddress - str r0, [r4, #0x0] - pop {r3-r5, pc} - nop -_02004F24: .word 0x000001B9 - - thumb_func_start FUN_02004F28 -FUN_02004F28: ; 0x02004F28 - push {r4-r6, lr} - mov r0, #0x1 - add r5, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02004F64 - mov r1, #0x3 - add r4, r0, #0x0 - add r0, r6, #0x0 - lsl r1, r1, #0x8 - ldr r5, [r5, #0x8] - bl _s32_div_f - lsl r1, r0, #0x1 - bpl _02004F50 - mov r0, #0x20 - bl _s32_div_f - neg r0, r0 - b _02004F5A -_02004F50: - cmp r1, #0x0 - bne _02004F58 - mov r0, #0x20 - b _02004F5A -_02004F58: - lsl r0, r1, #0x5 -_02004F5A: - mul r0, r4 - cmp r0, r5 - blo _02004F62 - mov r0, #0x0 -_02004F62: - pop {r4-r6, pc} - - thumb_func_start FUN_02004F64 -FUN_02004F64: ; 0x02004F64 - push {r3, lr} - bl FUN_02003FF4 - bl NNS_SndPlayerGetTick - pop {r3, pc} - - thumb_func_start FUN_02004F70 -FUN_02004F70: ; 0x02004F70 - push {r3-r7, lr} - sub sp, #0x8 - str r0, [sp, #0x0] - add r4, r1, #0x0 - add r6, r2, #0x0 - ldr r1, [sp, #0x0] - mov r0, #0x1 - add r2, r3, #0x0 - bl FUN_02004F28 - add r1, r0, #0x0 - mov r12, r0 - sub r1, #0x64 - bpl _02004F8E - mov r1, #0x0 -_02004F8E: - ldr r0, [sp, #0x0] - mov r3, #0x0 - add r0, r0, r1 - ldrb r0, [r0, #0xc] - add r7, r3, #0x0 - cmp r0, #0x80 - bhs _02004FA0 - mov r0, #0x1 - b _02004FA2 -_02004FA0: - sub r0, r3, #0x1 -_02004FA2: - lsl r0, r0, #0x18 - asr r5, r0, #0x18 - mov r0, r12 - cmp r1, r0 - bhs _02005022 -_02004FAC: - mov r0, #0x0 - cmp r5, #0x0 - ble _02004FC6 - ldr r2, [sp, #0x0] - add r2, r2, r1 - str r2, [sp, #0x4] - ldrb r2, [r2, #0xc] - cmp r2, #0x80 - bls _02004FC2 - mov r0, #0x1 - b _02004FD8 -_02004FC2: - add r3, r3, #0x1 - b _02004FD8 -_02004FC6: - ldr r2, [sp, #0x0] - add r2, r2, r1 - str r2, [sp, #0x4] - ldrb r2, [r2, #0xc] - cmp r2, #0x80 - bhs _02004FD6 - mov r0, #0x1 - b _02004FD8 -_02004FD6: - add r3, r3, #0x1 -_02004FD8: - cmp r0, #0x1 - bne _0200501A - ldr r5, _02005064 ; =UNK_020ECB8C - mov r2, #0x0 -_02004FE0: - ldrb r0, [r5, #0x0] - cmp r3, r0 - bge _02004FEA - add r7, r2, #0x0 - b _02004FF2 -_02004FEA: - add r2, r2, #0x1 - add r5, r5, #0x1 - cmp r2, #0x9 - blt _02004FE0 -_02004FF2: - cmp r7, r6 - blt _02004FF8 - sub r7, r6, #0x1 -_02004FF8: - cmp r3, #0x0 - beq _02005006 - sub r0, r6, #0x1 - sub r0, r0, r7 - ldrb r2, [r4, r0] - add r2, r2, #0x1 - strb r2, [r4, r0] -_02005006: - ldr r0, [sp, #0x4] - mov r3, #0x0 - ldrb r0, [r0, #0xc] - cmp r0, #0x80 - bhs _02005014 - mov r0, #0x1 - b _02005016 -_02005014: - sub r0, r3, #0x1 -_02005016: - lsl r0, r0, #0x18 - asr r5, r0, #0x18 -_0200501A: - add r1, r1, #0x2 - mov r0, r12 - cmp r1, r0 - blo _02004FAC -_02005022: - mov r2, #0x0 - cmp r6, #0x0 - ble _02005038 - mov r0, #0x9 -_0200502A: - ldrb r1, [r4, r2] - cmp r1, #0xa - blo _02005032 - strb r0, [r4, r2] -_02005032: - add r2, r2, #0x1 - cmp r2, r6 - blt _0200502A -_02005038: - sub r2, r6, #0x1 - mov r3, #0x0 - cmp r2, #0x0 - ble _02005060 -_02005040: - ldrb r0, [r4, r3] - add r1, r4, r3 - cmp r0, #0x0 - bne _0200505A - ldrb r0, [r1, #0x1] - cmp r0, #0x0 - beq _0200505A - add r0, r3, #0x1 - ldrb r0, [r4, r0] - add sp, #0x8 - lsr r0, r0, #0x1 - strb r0, [r1, #0x0] - pop {r3-r7, pc} -_0200505A: - add r3, r3, #0x1 - cmp r3, r2 - blt _02005040 -_02005060: - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 -_02005064: .word UNK_020ECB8C - - thumb_func_start FUN_02005068 -FUN_02005068: ; 0x02005068 - push {r3-r7, lr} - sub sp, #0x30 - add r5, r0, #0x0 - ldr r0, [sp, #0x48] - add r6, r1, #0x0 - str r0, [sp, #0xc] - mov r0, #0x13 - str r2, [sp, #0x0] - add r4, r3, #0x0 - bl FUN_02003D38 - add r7, r0, #0x0 - cmp r4, #0x1 - beq _0200508A - ldr r0, [sp, #0x0] - lsr r0, r0, #0x1 - str r0, [sp, #0x0] -_0200508A: - ldrb r2, [r7, #0x0] - cmp r2, #0x0 - beq _0200515A - mov r0, #0x0 - cmp r2, #0x0 - ble _020050BC - add r1, sp, #0x10 -_02005098: - ldr r3, [sp, #0x0] - sub r2, r3, r2 - add r2, r0, r2 - lsl r2, r2, #0x1 - ldrsh r2, [r5, r2] - strh r2, [r1, #0x0] - ldrb r3, [r7, #0x0] - ldr r2, [sp, #0x0] - sub r2, r2, r3 - add r2, r0, r2 - lsl r2, r2, #0x1 - ldrsh r2, [r6, r2] - add r0, r0, #0x1 - strh r2, [r1, #0x2] - ldrb r2, [r7, #0x0] - add r1, r1, #0x4 - cmp r0, r2 - blt _02005098 -_020050BC: - ldr r0, [sp, #0x0] - sub r4, r0, #0x1 - sub r0, r2, #0x1 - cmp r4, r0 - blt _02005126 - lsl r1, r4, #0x1 - add r0, r5, r1 - str r0, [sp, #0x8] - add r0, r6, r1 - str r0, [sp, #0x4] -_020050D0: - mov r0, #0x0 - add r1, r0, #0x0 - cmp r2, #0x0 - ble _020050E6 -_020050D8: - sub r3, r4, r1 - lsl r3, r3, #0x1 - ldrsh r3, [r5, r3] - add r1, r1, #0x1 - add r0, r0, r3 - cmp r1, r2 - blt _020050D8 -_020050E6: - add r1, r2, #0x0 - bl _s32_div_f - ldr r1, [sp, #0x8] - strh r0, [r1, #0x0] - mov r0, #0x0 - ldrb r1, [r7, #0x0] - add r2, r0, #0x0 - cmp r1, #0x0 - ble _02005108 -_020050FA: - sub r3, r4, r2 - lsl r3, r3, #0x1 - ldrsh r3, [r6, r3] - add r2, r2, #0x1 - add r0, r0, r3 - cmp r2, r1 - blt _020050FA -_02005108: - bl _s32_div_f - ldr r1, [sp, #0x4] - sub r4, r4, #0x1 - strh r0, [r1, #0x0] - ldr r0, [sp, #0x8] - ldrb r2, [r7, #0x0] - sub r0, r0, #0x2 - str r0, [sp, #0x8] - add r0, r1, #0x0 - sub r0, r0, #0x2 - str r0, [sp, #0x4] - sub r0, r2, #0x1 - cmp r4, r0 - bge _020050D0 -_02005126: - mov r1, #0x0 - cmp r2, #0x0 - ble _0200514A - add r0, sp, #0x10 - mov r4, #0x2 -_02005130: - mov r2, #0x0 - ldrsh r3, [r0, r2] - ldr r2, [sp, #0xc] - add r1, r1, #0x1 - strh r3, [r2, #0x0] - ldrsh r3, [r0, r4] - add r0, r0, #0x4 - strh r3, [r2, #0x2] - add r2, r2, #0x4 - str r2, [sp, #0xc] - ldrb r2, [r7, #0x0] - cmp r1, r2 - blt _02005130 -_0200514A: - ldr r1, [sp, #0x0] - add r0, r5, #0x0 - bl DC_FlushRange - ldr r1, [sp, #0x0] - add r0, r6, #0x0 - bl DC_FlushRange -_0200515A: - add sp, #0x30 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02005160 -FUN_02005160: ; 0x02005160 - ldr r3, _02005168 ; =NNS_SndPlayerSetAllocatableChannel - add r1, r0, #0x0 - mov r0, #0x7 - bx r3 - .balign 4 -_02005168: .word NNS_SndPlayerSetAllocatableChannel - - thumb_func_start FUN_0200516C -FUN_0200516C: ; 0x0200516C - push {r3, lr} - cmp r0, #0x0 - bne _02005180 - ldr r0, _020051A4 ; =0x000007FF - bl FUN_02005160 - mov r0, #0x0 - bl FUN_02004CA4 - b _0200519C -_02005180: - cmp r0, #0x1 - ldr r0, _020051A8 ; =0x00007FFF - bne _02005192 - bl FUN_02005160 - mov r0, #0x1e - bl FUN_02004C80 - b _0200519C -_02005192: - bl FUN_02005160 - mov r0, #0xf - bl FUN_02004C80 -_0200519C: - bl FUN_02004C78 - pop {r3, pc} - nop -_020051A4: .word 0x000007FF -_020051A8: .word 0x00007FFF - - thumb_func_start FUN_020051AC -FUN_020051AC: ; 0x020051AC - push {r3, lr} - bl FUN_02005404 - cmp r0, #0x0 - bne _020051E0 - mov r0, #0x0 - bl FUN_02003FF4 - bl FUN_020048EC - mov r1, #0x0 - mvn r1, r1 - cmp r0, r1 - beq _020051E0 - bl FUN_02004124 - ldr r1, _020051E8 ; =0x0000047E - cmp r0, r1 - beq _020051E0 - bl FUN_02005454 - mov r0, #0x1 - add r1, r0, #0x0 - bl FUN_020047C8 - pop {r3, pc} -_020051E0: - bl FUN_0200541C - pop {r3, pc} - nop -_020051E8: .word 0x0000047E - - thumb_func_start FUN_020051EC -FUN_020051EC: ; 0x020051EC - ldr r3, _020051F0 ; =NNS_SndPlayerSetPlayerVolume - bx r3 - .balign 4 -_020051F0: .word NNS_SndPlayerSetPlayerVolume diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c new file mode 100644 index 00000000..df1240c3 --- /dev/null +++ b/arm9/src/unk_020040F4.c @@ -0,0 +1,1424 @@ +#include "global.h" +#include "OS_cache.h" +#include "sound.h" +#include "unk_0202F150.h" + +u32 UNK_021C3DD8[2]; + +u8 UNK_021C3DE0[0x7d0]; + +const u8 UNK_020ECB8C[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + +THUMB_FUNC void FUN_020040F4(u8 param0) +{ + u8 *ptr = FUN_02003D38(5); + *ptr = param0; +} + +THUMB_FUNC u8 FUN_02004104() +{ + u8 *ptr = FUN_02003D38(5); + + return *ptr; +} + +extern void FUN_02004130(u16 param0); + +THUMB_FUNC void FUN_02004110(u16 param0) +{ + u16 *ptr = FUN_02003D38(9); + *ptr = param0; + + FUN_02004130(0); +} + +THUMB_FUNC u16 FUN_02004124() +{ + u16 *ptr = FUN_02003D38(9); + + return *ptr; +} + +THUMB_FUNC void FUN_02004130(u16 param0) +{ + u16 *ptr = FUN_02003D38(10); + *ptr = param0; +} + +THUMB_FUNC u16 FUN_02004140() +{ + u16 *ptr = FUN_02003D38(10); + + return *ptr; +} + +THUMB_FUNC void FUN_0200414C(u16 param0) +{ + u16 *ptr = FUN_02003D38(31); + *ptr = param0; +} + +THUMB_FUNC void FUN_0200415C(u8 param0) +{ + u8 *ptr = FUN_02003D38(20); + u8 *ptr2 = FUN_02003D38(21); + + if (param0 < 51) + { + *ptr = param0; + *ptr2 = 0; + } + else + { + *ptr2 = param0; + } +} + +THUMB_FUNC BOOL FUN_02004180(s32 param0) +{ + BOOL res; + switch (param0) + { + case 1: + case 9: + case 10: + case 14: + res = GF_Snd_LoadGroup(1); + break; + case 2: + case 13: + res = GF_Snd_LoadGroup(2); + break; + case 3: + res = GF_Snd_LoadGroup(13); + break; + case 4: + res = GF_Snd_LoadGroup(1); + break; + case 5: + res = GF_Snd_LoadGroup(2); + break; + case 11: + res = GF_Snd_LoadGroup(1); + break; + case 6: + res = GF_Snd_LoadGroup(11); + break; + case 8: + res = GF_Snd_LoadGroup(1); + break; + case 12: + res = GF_Snd_LoadGroup(14); + break; + case 51: + res = GF_Snd_LoadGroup(3); + break; + case 66: + res = GF_Snd_LoadGroup(6); + break; + case 52: + res = GF_Snd_LoadGroup(5); + break; + case 7: + case 53: + res = GF_Snd_LoadGroup(9); + break; + case 54: + res = GF_Snd_LoadGroup(10); + break; + case 55: + case 67: + res = GF_Snd_LoadBank(0x5e5); + res = GF_Snd_LoadWaveArc(0x5e5); + break; + case 56: + res = GF_Snd_LoadGroup(12); + break; + case 57: + res = GF_Snd_LoadGroup(7); + break; + case 58: + res = GF_Snd_LoadGroup(8); + break; + case 59: + res = GF_Snd_LoadGroup(15); + break; + case 60: + res = GF_Snd_LoadGroup(3); + break; + case 61: + res = GF_Snd_LoadGroup(5); + break; + case 62: + res = GF_Snd_LoadGroup(15); + break; + case 63: + res = GF_Snd_LoadGroup(4); + break; + case 64: + res = GF_Snd_LoadBank(0x5ed); + res = GF_Snd_LoadWaveArc(0x5ed); + break; + case 65: + res = GF_Snd_LoadBank(0x5ec); + res = GF_Snd_LoadWaveArc(0x5ec); + break; + } + + return res; +} + +extern void FUN_0200516C(u32 param0); +extern void FUN_020044D4(u32 param0, u32 param1); +extern void FUN_02004648(u32 param0, u32 param1); +extern void FUN_02004680(u32 param0, u32 param1); +extern void FUN_020046A0(u32 param0, u32 param1); +extern void FUN_020046C4(u32 param0, u32 param1); +extern void FUN_020046E8(u32 param0); +extern void FUN_02004704(u32 param0, u32 param1, u32 param2); + +THUMB_FUNC u32 FUN_0200433C(u8 param0, u32 param1, u32 param2) +{ + u8 *st0 = FUN_02003D38(20); + u8 *st4 = FUN_02003D38(21); + u16 *r7 = FUN_02003D38(13); + + if (param0 < 51) + { + if (*st0 == param0) + { + return 0; + } + } + else + { + if (*st4 == param0) + { + return 0; + } + } + + FUN_0200415C(param0); + + switch (param0) + { + case 4: + FUN_0200516C(0); + FUN_020044D4(param1, param2); + *r7 = 0; + break; + case 5: + FUN_02004648(param1, param2); + break; + case 11: + FUN_02004680(param1, param2); + break; + case 6: + FUN_020046A0(param1, param2); + break; + case 7: + FUN_020046C4(param1, param2); + break; + case 57: + case 53: + case 51: + case 52: + case 54: + case 55: + case 56: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + FUN_020046E8(param0); + break; + case 1: + FUN_0200516C(1); + FUN_02004704(param0, param1, param2); + break; + case 14: + FUN_0200516C(2); + FUN_02004704(param0, param1, param2); + break; + case 2: + FUN_0200516C(0); + FUN_02004704(param0, param1, param2); + break; + case 3: + case 8: + case 9: + case 10: + case 12: + case 13: + FUN_02004704(param0, param1, param2); + break; + } + + return 1; +} + +THUMB_FUNC void FUN_020044A8(s32 param0) +{ + int *ptr = FUN_02003D38(23); + GF_Snd_RestoreState(*ptr); + + int *ptr2 = FUN_02003D38(24); + GF_Snd_SaveState(ptr2); + + FUN_02004180(param0); + + int *ptr3 = FUN_02003D38(25); + GF_Snd_SaveState(ptr3); +} + +extern u32 FUN_020048EC(u32 *param0); +extern void FUN_02004DBC(u8 param0); +extern void FUN_02005454(); +extern void FUN_020047C8(u8, u8); +extern void FUN_0200541C(); +extern u32 FUN_02004748(s32); +extern void FUN_02004568(int, u16); +extern void FUN_0200521C(int); + +THUMB_FUNC void FUN_020044D4(u32 param0, u32 param1) +{ + u8 *ptr = FUN_02003D38(11); + + FUN_02003D38(23); + FUN_02003D38(31); + u32 r4 = FUN_020048EC(FUN_02003FF4(0)); + + if (*ptr == 0 && r4 == param0 && FUN_02004140() != 1152) + { + return; + } + + FUN_02004DBC(1); + FUN_02005454(); + + if (r4 != param0) + { + FUN_020047C8(1, 0); + FUN_0200541C(); + } + + if (*ptr == 1) + { + GF_Snd_RestoreState(FUN_02004748(2)); + FUN_02004180(4); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + + if (r4 != param0) + { + FUN_020047C8(1, 0); + } + FUN_02004568(param0, r4); + return; + } + + FUN_0200521C(param0); +} + +extern u16 FUN_02004900(u16); +extern void FUN_0200538C(u32, u16, u32); + +THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) +{ + u16 *ptr = FUN_02003D38(31); + + u32 r0 = FUN_02004900(*ptr); + if (r0 != 1001 && r0 != 1003) + { + GF_Snd_LoadSeqEx(seqNo, 4); + GF_ASSERT(FALSE); + } + else + { + GF_Snd_LoadSeqEx(*ptr, 6); + } + + GF_Snd_SaveState((int *)FUN_02003D38(26)); + FUN_020047C8(1, 0); + FUN_0200538C(0x7f, 0x28, 0); + FUN_02004DBC(0); +} + +THUMB_FUNC void FUN_020045C4(u32 param0, u32 param1) +{ + u8 *ptr = FUN_02003D38(18); + u16 *ptr2 = FUN_02003D38(31); + + if (*ptr != 1 && param1 != 0) + { + return; + } + + GF_Snd_RestoreState(FUN_02004748(1)); + GF_Snd_LoadSeqEx(*ptr2, 2); + GF_Snd_SaveState((int *)FUN_02003D38(24)); + + FUN_02004180(4); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + + u32 r0 = FUN_02004900(*ptr2); + if (r0 != 1001 && r0 != 1003) + { + GF_Snd_LoadSeqEx(param0, 4); + GF_ASSERT(FALSE); + } + else + { + GF_Snd_LoadSeqEx(*ptr2, 4); + } + + GF_Snd_SaveState((int *)FUN_02003D38(26)); +} + +extern void FUN_020051AC(); + +THUMB_FUNC void FUN_02004648(u32 param0, u32 param1) +{ + FUN_02003D38(23); + FUN_020051AC(); + + GF_Snd_RestoreState(FUN_02004748(2)); + FUN_02004180(5); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +extern void FUN_02004810(); + +THUMB_FUNC void FUN_02004680(u32 param0, u32 param1) +{ + FUN_02003D38(23); + FUN_0200541C(); + FUN_02004810(); + FUN_020044A8(4); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_020046A0(u32 param0, u32 param1) +{ + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(6); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_020046C4(u32 param0, u32 param1) +{ + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(7); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +extern void FUN_02004738(); + +THUMB_FUNC void FUN_020046E8(u32 param0) +{ + FUN_02004738(); + FUN_02004180(param0); + GF_Snd_SaveState((int *)FUN_02003D38(27)); +} + +THUMB_FUNC void FUN_02004704(u32 param0, u32 param1, u32 param2) +{ + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(param0); + FUN_0200521C(param1); +} + +THUMB_FUNC void FUN_02004724(u32 param0) +{ + GetSoundDataPointer(); + FUN_020051AC(); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_02004738() +{ + GF_Snd_RestoreState(FUN_02004748(4)); +} + +THUMB_FUNC u32 FUN_02004748(s32 param0) +{ + GetSoundDataPointer(); + + if (param0 >= 7) + { + GF_AssertFail(); + return *(u32 *)FUN_02003D38(26); + } + + u32 *r5; + switch (param0) + { + case 0: + r5 = FUN_02003D38(22); + break; + case 1: + r5 = FUN_02003D38(23); + break; + case 2: + r5 = FUN_02003D38(24); + break; + case 3: + r5 = FUN_02003D38(25); + break; + case 4: + r5 = FUN_02003D38(26); + break; + case 5: + r5 = FUN_02003D38(27); + break; + case 6: + r5 = FUN_02003D38(28); + break; + } + + return *r5; +} + +extern void NNS_SndPlayerPause(u32 *, u8); + +THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) +{ + u8 *ptr; + u32 r4; + if (param0 == 1) + { + ptr = FUN_02003D38(11); + r4 = 0; + } + else + { + if (param0 != 7) + { + return; + } + + ptr = FUN_02003D38(12); + r4 = 7; + } + + if (param1 == 0) + { + FUN_02004110(FUN_020048EC(FUN_02003FF4(r4))); + } + + NNS_SndPlayerPause(FUN_02003FF4(r4), param1); + *ptr = param1; +} + +THUMB_FUNC void FUN_02004810() +{ + u8 *ptr = FUN_02003D38(11); + u8 *ptr2 = FUN_02003D38(12); + *ptr = 0; + *ptr2 = 0; +} + +extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); + +THUMB_FUNC void FUN_02004828(u32 param0, u32 param1, u32 param2) +{ + NNS_SndPlayerMoveVolume(FUN_02003FF4(param0), param1, param2); +} + +extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); + +THUMB_FUNC void FUN_0200483C(u32 param0, s32 param1) +{ + if (param1 < 0) + { + param1 = 0; + } + + if (param1 > 127) + { + param1 = 127; + } + + NNS_SndPlayerSetInitialVolume(FUN_02003FF4(param0), param1); +} + +extern void *NNS_SndArcGetSeqParam(u32); + +THUMB_FUNC void FUN_02004858(u32 param0, u32 param1) +{ + u8 *ret = NNS_SndArcGetSeqParam(param0); + u8 r4; + if (param1 == 1 || param1 == 8) + { + r4 = 127; + } + else + { + if (ret == NULL) + { + return; + } + + r4 = ret[2]; + } + + if (FUN_020313EC() == 1) + { + FUN_0200483C(param1, r4 / 5); + } +} + +extern u8 FUN_020048D0(u16); + +THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) +{ + FUN_0200483C(FUN_02004018(FUN_020048D0(param0)), param1); +} + +extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); + +THUMB_FUNC void FUN_020048A0(int param0, u32 param1, u32 param2) +{ + NNS_SndArcPlayerStartSeqEx(FUN_02003FF4(param0), param1, -1, -1, param2); +} + +extern BOOL NNS_SndPlayerCountPlayingSeqByPlayerNo(int); + +THUMB_FUNC BOOL FUN_020048BC(int param0) +{ + GF_ASSERT(param0 >= 0); + + return NNS_SndPlayerCountPlayingSeqByPlayerNo(param0); +} + +THUMB_FUNC u8 FUN_020048D0(u16 param0) +{ + if (param0 == 0) + { + return 0xff; + } + + u8 *ptr = NNS_SndArcGetSeqParam(param0); + if (ptr == NULL) + { + return 0xff; + } + + return ptr[5]; +} + +extern u32 NNS_SndPlayerGetSeqNo(u32 *); + +THUMB_FUNC u32 FUN_020048EC(u32 *param0) +{ + return NNS_SndPlayerGetSeqNo(param0); +} + +extern u32 NNS_SndArcGetBankInfo(u32); + +THUMB_FUNC u32 FUN_020048F4(u16 param0) +{ + NNS_SndArcGetBankInfo(FUN_02004900(param0)); +} + +THUMB_FUNC u16 FUN_02004900(u16 param0) +{ + u16 *ptr = NNS_SndArcGetSeqParam(param0); + if (ptr == NULL) + { + return 0; + } + + return *ptr; +} + +extern u32 MIC_StartAutoSampling(u32); + +THUMB_FUNC u32 FUN_02004914(u32 param0) +{ + return MIC_StartAutoSampling(param0); +} + +extern u32 MIC_StopAutoSampling(); + +THUMB_FUNC u32 FUN_0200491C(u32 param0) +{ + GetSoundDataPointer(); + return MIC_StopAutoSampling(); +} + +extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); + +THUMB_FUNC u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3) +{ + return MIC_DoSamplingAsync(param0, param1, param2, param3); +} + +THUMB_FUNC void *FUN_02004930(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + GF_ASSERT(param0 == 14 || param0 == 15); + GF_ASSERT(param0 != 14 || *ptr != 0); + GF_ASSERT(param0 != 15 || *ptr2 != 0); + + if (param0 == 14) + { + return FUN_02003D38(0); + } + + return FUN_02003D38(1); +} + +extern u32 NNS_SndWaveOutAllocChannel(u32); + +THUMB_FUNC u32 FUN_02004984(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + GF_ASSERT(param0 == 14 || param0 == 15); + + if (param0 == 14) + { + if (*ptr == 0) + { + u32 *r4 = FUN_02003D38(0); + *r4 = NNS_SndWaveOutAllocChannel(param0); + if (*r4 == 0) + { + return 0; + } + *ptr = 1; + } + else + { + GF_AssertFail(); + } + } + else + { + if (*ptr2 == 0) + { + u32 *r6 = FUN_02003D38(1); + *r6 = NNS_SndWaveOutAllocChannel(param0); + if (*r6 == 0) + { + return 0; + } + + *ptr2 = 1; + } + else + { + GF_AssertFail(); + } + } + + return 1; +} + +extern void NNS_SndWaveOutFreeChannel(u32); + +THUMB_FUNC void FUN_02004A04(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + if (param0 != 14 && param0 != 15) + { + GF_AssertFail(); + return; + } + + if (param0 == 14) + { + if (*ptr == 1) + { + NNS_SndWaveOutFreeChannel(*(u32 *)FUN_02004930(param0)); + *ptr = 0; + return; + } + else + { + GF_AssertFail(); + return; + } + } + + if (*ptr2 == 1) + { + NNS_SndWaveOutFreeChannel(*(u32 *)FUN_02004930(param0)); + *ptr2 = 0; + return; + } + else + { + GF_AssertFail(); + } +} + +extern u32 NNS_SndWaveOutStart(u32, u32, u32, u32, u32, u32, u32, u32, u32, u32); + +THUMB_FUNC u32 FUN_02004A6C(u32 *param0, u32 param1) +{ + u32 res = NNS_SndWaveOutStart(*(u32 *)param0[0], + param0[1], + param0[2], + param0[3], + param0[4], + param0[5], + param0[6], + param0[7], + param0[8], + param0[9]); + if (res == 0) + { + FUN_02004A04(param1); + } + + return res; +} + +extern void NNS_SndWaveOutStop(u32); + +THUMB_FUNC void FUN_02004AAC(u32 param0) +{ + NNS_SndWaveOutStop(*(u32 *)FUN_02004930(param0)); +} + +extern void NNS_SndWaveOutIsPlaying(u32); + +THUMB_FUNC void FUN_02004ABC(u32 param0) +{ + NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); +} + +extern void NNS_SndWaveOutSetPan(u32, u32); + +THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) +{ + if (param1 > 127) + { + param1 = 127; + } + + NNS_SndWaveOutSetPan(*(u32 *)FUN_02004930(param0), param1); +} + +extern void NNS_SndWaveOutSetSpeed(u32, u32); + +THUMB_FUNC void FUN_02004AE4(u32 param0, u32 param1) +{ + NNS_SndWaveOutSetSpeed(*(u32 *)FUN_02004930(param0), param1); +} + +extern void NNS_SndWaveOutSetVolume(u32, u32); + +THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) +{ + if (FUN_020313EC() == 1) + { + NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1 / 5); + return; + } + + NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1); +} + +struct WaveArcInfo +{ + u32 unk00 : 24; +}; + +extern struct WaveArcInfo *NNS_SndArcGetWaveArcInfo(u32); +extern u32 NNS_SndArcGetFileSize(u32); +extern s32 NNS_SndArcReadFile(u32, u32, u32, u32); +extern void FUN_02004C1C(u8 *, u32); + +THUMB_FUNC u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4) +{ + GetSoundDataPointer(); + + u32 *r4 = FUN_02003D38(33); + GF_ASSERT(param3 == 14 || param3 == 15); + + struct WaveArcInfo *r7 = NNS_SndArcGetWaveArcInfo(param0); + if (r7 == 0) + { + GF_AssertFail(); + return 0; + } + + u32 r6 = NNS_SndArcGetFileSize(r7->unk00); + if (r6 == 0) + { + GF_AssertFail(); + return 0; + } + + if (param3 == 14) + { + void *ptr = AllocFromHeap(param4, r6); + *r4 = ptr; + if (ptr == NULL) + { + GF_AssertFail(); + return 0; + } + + memset(ptr, 0, r6); + if (NNS_SndArcReadFile(r7->unk00, *r4, r6, 0) == -1) + { + GF_AssertFail(); + return 0; + } + + FUN_02004C1C(*r4, r6); + } + + void *res = FUN_02004930(param3); + + u32 st8[10]; + + st8[1] = 0; + st8[0] = res; + st8[2] = *r4; + st8[3] = 0; + st8[6] = 0x3443; + st8[4] = 0; + st8[7] = param1; + st8[8] = 0x6000; + st8[9] = param2; + st8[5] = r6; + + u32 ret = FUN_02004A6C(st8, param3); + FUN_02004AF8(param3, param1); + u8 *r0 = FUN_02003D38(14); + *r0 = 1; + + return ret; +} + +THUMB_FUNC void FUN_02004C1C(u8 *param0, u32 param1) +{ + for (u32 r5 = 0; r5 < param1 / 2; r5++) + { + u8 r4 = param0[r5]; + param0[r5] = param0[param1 - 1 - r5]; + param0[param1 - 1 - r5] = r4; + } +} + +THUMB_FUNC void FUN_02004C3C(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(14); + u32 *ptr2 = FUN_02003D38(33); + + GF_ASSERT(param0 == 14 || param0 == 15); + + FUN_02004AAC(param0); + + if (*ptr == 1) + { + *ptr = 0; + FreeToHeap(*ptr2); + } +} + +extern BOOL NNS_SndCaptureIsActive(); + +THUMB_FUNC BOOL FUN_02004C78() +{ + return NNS_SndCaptureIsActive(); +} + +extern u32 NNS_SndCaptureStartReverb(u32, u32, u32, u32, u32); + +THUMB_FUNC u32 FUN_02004C80(u32 param0) +{ + GetSoundDataPointer(); + + return NNS_SndCaptureStartReverb(FUN_02003D38(3), 0x1000, 0, 0x3E80, param0); +} + +extern void NNS_SndCaptureStopReverb(u32); + +THUMB_FUNC void FUN_02004CA4(u32 param0) +{ + NNS_SndCaptureStopReverb(param0); +} + +extern void NNS_SndCaptureSetReverbVolume(); + +THUMB_FUNC void FUN_02004CAC() +{ + NNS_SndCaptureSetReverbVolume(); +} + +extern u32 NNS_SndCaptureStartEffect(u32, u32, u32, u32, u32, void (*)(), u32); +extern void FUN_02005068(); + +THUMB_FUNC void FUN_02004CB4() +{ + GetSoundDataPointer(); + + MI_CpuFill8(FUN_02003D38(4), 0, 0x1c); + + void *r4 = FUN_02003D38(3); + void *st8 = FUN_02003D38(4); + + NNS_SndCaptureStartEffect(r4, 0x1000, 0, 0x55F0, 2, FUN_02005068, st8); +} + +extern void NNS_SndCaptureStopEffect(); + +THUMB_FUNC void FUN_02004CFC() +{ + NNS_SndCaptureStopEffect(); +} + +THUMB_FUNC void FUN_02004D04(s32 param0) +{ + u8 *ptr = FUN_02003D38(19); + + if (param0 > 8) + { + param0 = 8; + } + else if (param0 < 0) + { + param0 = 0; + } + + *ptr = param0; +} + +extern void NNS_SndPlayerSetTrackPitch(u32, u32, u32); + +THUMB_FUNC void FUN_02004D20(u32 param0, u32 param1, u32 param2) +{ + NNS_SndPlayerSetTrackPitch(FUN_02003FF4(param0), param1, param2); +} + +THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) +{ + FUN_02004D20(FUN_02004018(FUN_020048D0(param0)), param1, param2); +} + +extern void NNS_SndPlayerSetTrackPan(u32, u32, u32); + +THUMB_FUNC void FUN_02004D4C(u32 param0, u32 param1, u32 param2) +{ + NNS_SndPlayerSetTrackPan(FUN_02003FF4(param0), param1, param2); +} + +extern void NNS_SndSetMonoFlag(u32 param0); + +THUMB_FUNC void FUN_02004D60(u32 param0) +{ + NNS_SndSetMonoFlag(param0); + UNK_021C3DD8[0] = param0; +} + +THUMB_FUNC void FUN_02004D74(u32 param0) +{ + *(u32 *)FUN_02003D38(6) = param0; +} + +THUMB_FUNC void FUN_02004D84(u32 param0) +{ + *(u32 *)FUN_02003D38(7) = param0; +} + +THUMB_FUNC u16 FUN_02004D94() +{ + u16 *ptr = FUN_02003D38(7); + + if (*ptr == 0) + { + *ptr = 0; + return 0; + } + + return --(*ptr); +} + +THUMB_FUNC u8 *FUN_02004DB4() +{ + return UNK_021C3DE0; +} + +THUMB_FUNC void FUN_02004DBC(u8 param0) +{ + *(u8 *)FUN_02003D38(18) = param0; +} + +extern void FUN_02004E44(u32, u16, u32, u32, u8, u32); +extern void FUN_02003CE8(u32); + +THUMB_FUNC u32 FUN_02004DCC(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) +{ + u8 *ptr = FUN_02003D38(21); + + FUN_02004E44(param0, param1, param2, param3, param4, param5); + + *ptr = 0; + FUN_02003CE8(5); + return 1; +} + +THUMB_FUNC u32 FUN_02004E08( + u32 param0, u16 param1, u32 param2, u32 param3, u32 param35, u8 param4, u32 param5) +{ + u32 *ptr = FUN_02003D38(8); + + FUN_02004E44(param0, param1, param2, param3, param4, param5); + + *ptr = param35; + FUN_02003CE8(6); + return 1; +} + +extern void FUN_020053CC(u32, u32); + +THUMB_FUNC void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) +{ + u32 *ptr = FUN_02003D38(2); + + FUN_020053CC(0, param2); + FUN_02004110(0); + FUN_02004130(param1); + FUN_02004D84(param3); + *ptr = FUN_020048F4(param1); + + FUN_02004DBC(param4); +} + +THUMB_FUNC u32 FUN_02004E80(u32 param0) +{ + if (param0 == 0) + { + return 0; + } + + return param0 + 12; +} + +THUMB_FUNC u32 FUN_02004E8C(u32 *param0) +{ + if (param0 == NULL) + { + return 0; + } + + return param0[2]; +} + +extern u32 FUN_02004ED0(s32); + +THUMB_FUNC u32 FUN_02004E98(s32 param0) +{ + GF_Snd_RestoreState(FUN_02004748(5)); + + u16 r4 = (u16)param0; + + if (r4 != 0x1B9 && (param0 > 0x1ef || param0 == 0)) + { + r4 = 1; + } + + GF_Snd_LoadWaveArc(r4); + return FUN_02004ED0(r4); +} + +extern u32 NNS_SndArcGetFileAddress(u32); +extern u32 SND_GetWaveDataAddress(u32, u32); + +THUMB_FUNC u32 FUN_02004ED0(s32 param0) +{ + u32 *ptr = FUN_02003D38(32); + + u16 r4 = (u16)param0; + + if (r4 != 0x1B9 && (param0 > 0x1ef || param0 == 0)) + { + r4 = 1; + } + + struct WaveArcInfo *info = NNS_SndArcGetWaveArcInfo(r4); + if (info == NULL) + { + GF_AssertFail(); + return 0; + } + + u32 address = NNS_SndArcGetFileAddress(info->unk00); + if (address == 0) + { + GF_AssertFail(); + return 0; + } + + *ptr = SND_GetWaveDataAddress(address, 0); + return *ptr; +} + +extern u32 FUN_02004F64(int); + +THUMB_FUNC u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2) +{ + u32 r4 = FUN_02004F64(1); + u32 r5 = param1[2]; + + s32 r1 = (param2 / (3 * 0x100)) << 1; + if (r1 < 0) + { + r1 = 32 / r1; + r1 = -r1; + } + else if (r1 == 0) + { + r1 = 32; + } + else + { + r1 = 32 * r1; + } + + u32 r0 = r4 * r1; + if (r0 >= r5) + { + r0 = 0; + } + + return r0; +} + +extern u32 NNS_SndPlayerGetTick(u32); + +THUMB_FUNC u32 FUN_02004F64(int param0) +{ + return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); +} + +THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) +{ + int r0, r1; + int i, j; + u32 r12 = FUN_02004F28(1, param0, param3); + r1 = r12 - 100; + if (r1 < 0) + { + r1 = 0; + } + + int r3 = 0; + int r7 = 0; + s8 r5; + if ((param0 + 12)[r1] < 0x80) + { + r5 = 1; + } + else + { + r5 = -1; + } + r5 = (s8)(s32)r5; + + for (i = r1; i < r12; i += 2) + { + r0 = 0; + if (r5 > 0) + { + if ((param0 + 12)[i] > 0x80) + { + r0 = 1; + } + else + { + r3++; + } + } + else + { + if ((param0 + 12)[i] < 0x80) + { + r0 = 1; + } + else + { + r3++; + } + } + + if (r0 == 1) + { + for (j = 0; j < 9; j++) + { + if (r3 < UNK_020ECB8C[j]) + { + r7 = j; + break; + } + } + + if (r7 >= param2) + { + r7 = param2 - 1; + } + + if (r3 != 0) + { + param1[param2 - 1 - r7]++; + } + + r3 = 0; + r0 = 0; + if ((param0 + 12)[i] < 0x80) + { + r5 = 1; + } + else + { + r5 = -1; + } + r5 = (s8)(s32)r5; + } + } + + for (i = 0; i < param2; i++) + { + if (param1[i] >= 10) + { + param1[i] = 9; + } + } + + for (i = 0; i < param2 - 1; i++) + { + if (param1[i] == 0 && param1[i + 1] != 0) + { + param1[i] = param1[i + 1] / 2; + return; + } + } +} + +THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4) +{ + s16 st10[8][2]; + s16(*st0)[2] = param4; + u8 *r7 = FUN_02003D38(19); + + int r0; + int i, j; + + if (param3 != 1) + { + param2 /= 2; + } + + if (*r7 == 0) + { + return; + } + + for (i = 0; i < *r7; i++) + { + st10[i][0] = param0[param2 - (*r7) + i]; + st10[i][1] = param1[param2 - (*r7) + i]; + } + + for (i = param2 - 1; i >= *r7 - 1; i--) + { + r0 = 0; + for (j = 0; j < *r7; j++) + { + r0 += param0[i - j]; + } + + param0[i] = r0 / (*r7); + + r0 = 0; + for (j = 0; j < *r7; j++) + { + r0 += param1[i - j]; + } + + param1[i] = r0 / (*r7); + } + + for (i = 0; i < *r7; i++) + { + st0[i][0] = st10[i][0]; + st0[i][1] = st10[i][1]; + } + + DC_FlushRange(param0, param2); + DC_FlushRange(param1, param2); +} + +extern void NNS_SndPlayerSetAllocatableChannel(u32, u32); + +THUMB_FUNC void FUN_02005160(u32 param0) +{ + NNS_SndPlayerSetAllocatableChannel(7, param0); +} + +THUMB_FUNC void FUN_0200516C(u32 param0) +{ + if (param0 == 0) + { + FUN_02005160(0x7ff); + FUN_02004CA4(0); + } + else if (param0 == 1) + { + FUN_02005160(0x7fff); + FUN_02004C80(30); + } + else + { + FUN_02005160(0x7fff); + FUN_02004C80(15); + } + + FUN_02004C78(); +} + +extern BOOL FUN_02005404(void); + +THUMB_FUNC void FUN_020051AC() +{ + if (FUN_02005404() == FALSE && FUN_020048EC(FUN_02003FF4(0)) != -1 && FUN_02004124() != 0x47e) + { + + FUN_02005454(); + FUN_020047C8(1, 1); + return; + } + + FUN_0200541C(); +} + +extern void NNS_SndPlayerSetPlayerVolume(u32, u8); + +THUMB_FUNC void FUN_020051EC(u32 param0, u8 param1) +{ + NNS_SndPlayerSetPlayerVolume(param0, param1); +} -- cgit v1.2.3 From 067a94af916cdc506fd468aaff3de336f5a9cbcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Fri, 2 Jul 2021 22:17:13 +0200 Subject: add header --- arm9/src/unk_020040F4.c | 164 ++++++++++++++---------------------------------- include/unk_020040F4.h | 84 +++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 116 deletions(-) create mode 100644 include/unk_020040F4.h diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index df1240c3..6b7dbab3 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -1,4 +1,5 @@ #include "global.h" +#include "unk_020040F4.h" #include "OS_cache.h" #include "sound.h" #include "unk_0202F150.h" @@ -9,6 +10,50 @@ u8 UNK_021C3DE0[0x7d0]; const u8 UNK_020ECB8C[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; +extern void FUN_02005454(); +extern void FUN_0200541C(); +extern void FUN_0200521C(int); +extern void FUN_0200538C(u32, u16, u32); +extern void NNS_SndPlayerPause(u32 *, u8); +extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); +extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); +extern void *NNS_SndArcGetSeqParam(u32); +extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); +extern BOOL NNS_SndPlayerCountPlayingSeqByPlayerNo(int); +extern u32 NNS_SndPlayerGetSeqNo(u32 *); +extern u32 NNS_SndArcGetBankInfo(u32); +extern u32 MIC_StartAutoSampling(u32); +extern u32 MIC_StopAutoSampling(); +extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); +extern u32 NNS_SndWaveOutAllocChannel(u32); +extern void NNS_SndWaveOutFreeChannel(u32); +extern u32 NNS_SndWaveOutStart(u32, u32, u32, u32, u32, u32, u32, u32, u32, u32); +extern void NNS_SndWaveOutStop(u32); +extern void NNS_SndWaveOutIsPlaying(u32); +extern void NNS_SndWaveOutSetPan(u32, u32); +extern void NNS_SndWaveOutSetSpeed(u32, u32); +extern void NNS_SndWaveOutSetVolume(u32, u32); +extern struct WaveArcInfo *NNS_SndArcGetWaveArcInfo(u32); +extern u32 NNS_SndArcGetFileSize(u32); +extern s32 NNS_SndArcReadFile(u32, u32, u32, u32); +extern BOOL NNS_SndCaptureIsActive(); +extern u32 NNS_SndCaptureStartReverb(u32, u32, u32, u32, u32); +extern void NNS_SndCaptureStopReverb(u32); +extern void NNS_SndCaptureSetReverbVolume(); +extern u32 NNS_SndCaptureStartEffect(u32, u32, u32, u32, u32, void (*)(), u32); +extern void NNS_SndCaptureStopEffect(); +extern void NNS_SndPlayerSetTrackPitch(u32, u32, u32); +extern void NNS_SndPlayerSetTrackPan(u32, u32, u32); +extern void NNS_SndSetMonoFlag(u32 param0); +extern void FUN_02003CE8(u32); +extern void FUN_020053CC(u32, u32); +extern u32 NNS_SndArcGetFileAddress(u32); +extern u32 SND_GetWaveDataAddress(u32, u32); +extern u32 NNS_SndPlayerGetTick(u32); +extern void NNS_SndPlayerSetAllocatableChannel(u32, u32); +extern BOOL FUN_02005404(void); +extern void NNS_SndPlayerSetPlayerVolume(u32, u8); + THUMB_FUNC void FUN_020040F4(u8 param0) { u8 *ptr = FUN_02003D38(5); @@ -22,8 +67,6 @@ THUMB_FUNC u8 FUN_02004104() return *ptr; } -extern void FUN_02004130(u16 param0); - THUMB_FUNC void FUN_02004110(u16 param0) { u16 *ptr = FUN_02003D38(9); @@ -168,15 +211,6 @@ THUMB_FUNC BOOL FUN_02004180(s32 param0) return res; } -extern void FUN_0200516C(u32 param0); -extern void FUN_020044D4(u32 param0, u32 param1); -extern void FUN_02004648(u32 param0, u32 param1); -extern void FUN_02004680(u32 param0, u32 param1); -extern void FUN_020046A0(u32 param0, u32 param1); -extern void FUN_020046C4(u32 param0, u32 param1); -extern void FUN_020046E8(u32 param0); -extern void FUN_02004704(u32 param0, u32 param1, u32 param2); - THUMB_FUNC u32 FUN_0200433C(u8 param0, u32 param1, u32 param2) { u8 *st0 = FUN_02003D38(20); @@ -277,16 +311,7 @@ THUMB_FUNC void FUN_020044A8(s32 param0) GF_Snd_SaveState(ptr3); } -extern u32 FUN_020048EC(u32 *param0); -extern void FUN_02004DBC(u8 param0); -extern void FUN_02005454(); -extern void FUN_020047C8(u8, u8); -extern void FUN_0200541C(); -extern u32 FUN_02004748(s32); -extern void FUN_02004568(int, u16); -extern void FUN_0200521C(int); - -THUMB_FUNC void FUN_020044D4(u32 param0, u32 param1) +THUMB_FUNC void FUN_020044D4(int param0, u32 param1) { u8 *ptr = FUN_02003D38(11); @@ -318,16 +343,13 @@ THUMB_FUNC void FUN_020044D4(u32 param0, u32 param1) { FUN_020047C8(1, 0); } - FUN_02004568(param0, r4); + FUN_02004568(param0, (u16)r4); return; } FUN_0200521C(param0); } -extern u16 FUN_02004900(u16); -extern void FUN_0200538C(u32, u16, u32); - THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) { u16 *ptr = FUN_02003D38(31); @@ -380,8 +402,6 @@ THUMB_FUNC void FUN_020045C4(u32 param0, u32 param1) GF_Snd_SaveState((int *)FUN_02003D38(26)); } -extern void FUN_020051AC(); - THUMB_FUNC void FUN_02004648(u32 param0, u32 param1) { FUN_02003D38(23); @@ -394,8 +414,6 @@ THUMB_FUNC void FUN_02004648(u32 param0, u32 param1) FUN_0200521C(param0); } -extern void FUN_02004810(); - THUMB_FUNC void FUN_02004680(u32 param0, u32 param1) { FUN_02003D38(23); @@ -423,8 +441,6 @@ THUMB_FUNC void FUN_020046C4(u32 param0, u32 param1) FUN_0200521C(param0); } -extern void FUN_02004738(); - THUMB_FUNC void FUN_020046E8(u32 param0) { FUN_02004738(); @@ -452,7 +468,7 @@ THUMB_FUNC void FUN_02004738() GF_Snd_RestoreState(FUN_02004748(4)); } -THUMB_FUNC u32 FUN_02004748(s32 param0) +THUMB_FUNC int FUN_02004748(s32 param0) { GetSoundDataPointer(); @@ -491,8 +507,6 @@ THUMB_FUNC u32 FUN_02004748(s32 param0) return *r5; } -extern void NNS_SndPlayerPause(u32 *, u8); - THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) { u8 *ptr; @@ -530,15 +544,11 @@ THUMB_FUNC void FUN_02004810() *ptr2 = 0; } -extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); - THUMB_FUNC void FUN_02004828(u32 param0, u32 param1, u32 param2) { NNS_SndPlayerMoveVolume(FUN_02003FF4(param0), param1, param2); } -extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); - THUMB_FUNC void FUN_0200483C(u32 param0, s32 param1) { if (param1 < 0) @@ -554,8 +564,6 @@ THUMB_FUNC void FUN_0200483C(u32 param0, s32 param1) NNS_SndPlayerSetInitialVolume(FUN_02003FF4(param0), param1); } -extern void *NNS_SndArcGetSeqParam(u32); - THUMB_FUNC void FUN_02004858(u32 param0, u32 param1) { u8 *ret = NNS_SndArcGetSeqParam(param0); @@ -580,22 +588,16 @@ THUMB_FUNC void FUN_02004858(u32 param0, u32 param1) } } -extern u8 FUN_020048D0(u16); - THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) { FUN_0200483C(FUN_02004018(FUN_020048D0(param0)), param1); } -extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); - THUMB_FUNC void FUN_020048A0(int param0, u32 param1, u32 param2) { NNS_SndArcPlayerStartSeqEx(FUN_02003FF4(param0), param1, -1, -1, param2); } -extern BOOL NNS_SndPlayerCountPlayingSeqByPlayerNo(int); - THUMB_FUNC BOOL FUN_020048BC(int param0) { GF_ASSERT(param0 >= 0); @@ -619,15 +621,11 @@ THUMB_FUNC u8 FUN_020048D0(u16 param0) return ptr[5]; } -extern u32 NNS_SndPlayerGetSeqNo(u32 *); - THUMB_FUNC u32 FUN_020048EC(u32 *param0) { return NNS_SndPlayerGetSeqNo(param0); } -extern u32 NNS_SndArcGetBankInfo(u32); - THUMB_FUNC u32 FUN_020048F4(u16 param0) { NNS_SndArcGetBankInfo(FUN_02004900(param0)); @@ -644,23 +642,17 @@ THUMB_FUNC u16 FUN_02004900(u16 param0) return *ptr; } -extern u32 MIC_StartAutoSampling(u32); - THUMB_FUNC u32 FUN_02004914(u32 param0) { return MIC_StartAutoSampling(param0); } -extern u32 MIC_StopAutoSampling(); - THUMB_FUNC u32 FUN_0200491C(u32 param0) { GetSoundDataPointer(); return MIC_StopAutoSampling(); } -extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); - THUMB_FUNC u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3) { return MIC_DoSamplingAsync(param0, param1, param2, param3); @@ -683,8 +675,6 @@ THUMB_FUNC void *FUN_02004930(u32 param0) return FUN_02003D38(1); } -extern u32 NNS_SndWaveOutAllocChannel(u32); - THUMB_FUNC u32 FUN_02004984(u32 param0) { GetSoundDataPointer(); @@ -731,8 +721,6 @@ THUMB_FUNC u32 FUN_02004984(u32 param0) return 1; } -extern void NNS_SndWaveOutFreeChannel(u32); - THUMB_FUNC void FUN_02004A04(u32 param0) { GetSoundDataPointer(); @@ -771,8 +759,6 @@ THUMB_FUNC void FUN_02004A04(u32 param0) } } -extern u32 NNS_SndWaveOutStart(u32, u32, u32, u32, u32, u32, u32, u32, u32, u32); - THUMB_FUNC u32 FUN_02004A6C(u32 *param0, u32 param1) { u32 res = NNS_SndWaveOutStart(*(u32 *)param0[0], @@ -793,22 +779,16 @@ THUMB_FUNC u32 FUN_02004A6C(u32 *param0, u32 param1) return res; } -extern void NNS_SndWaveOutStop(u32); - THUMB_FUNC void FUN_02004AAC(u32 param0) { NNS_SndWaveOutStop(*(u32 *)FUN_02004930(param0)); } -extern void NNS_SndWaveOutIsPlaying(u32); - THUMB_FUNC void FUN_02004ABC(u32 param0) { NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); } -extern void NNS_SndWaveOutSetPan(u32, u32); - THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) { if (param1 > 127) @@ -819,15 +799,11 @@ THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) NNS_SndWaveOutSetPan(*(u32 *)FUN_02004930(param0), param1); } -extern void NNS_SndWaveOutSetSpeed(u32, u32); - THUMB_FUNC void FUN_02004AE4(u32 param0, u32 param1) { NNS_SndWaveOutSetSpeed(*(u32 *)FUN_02004930(param0), param1); } -extern void NNS_SndWaveOutSetVolume(u32, u32); - THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) { if (FUN_020313EC() == 1) @@ -844,11 +820,6 @@ struct WaveArcInfo u32 unk00 : 24; }; -extern struct WaveArcInfo *NNS_SndArcGetWaveArcInfo(u32); -extern u32 NNS_SndArcGetFileSize(u32); -extern s32 NNS_SndArcReadFile(u32, u32, u32, u32); -extern void FUN_02004C1C(u8 *, u32); - THUMB_FUNC u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4) { GetSoundDataPointer(); @@ -940,15 +911,11 @@ THUMB_FUNC void FUN_02004C3C(u32 param0) } } -extern BOOL NNS_SndCaptureIsActive(); - THUMB_FUNC BOOL FUN_02004C78() { return NNS_SndCaptureIsActive(); } -extern u32 NNS_SndCaptureStartReverb(u32, u32, u32, u32, u32); - THUMB_FUNC u32 FUN_02004C80(u32 param0) { GetSoundDataPointer(); @@ -956,23 +923,16 @@ THUMB_FUNC u32 FUN_02004C80(u32 param0) return NNS_SndCaptureStartReverb(FUN_02003D38(3), 0x1000, 0, 0x3E80, param0); } -extern void NNS_SndCaptureStopReverb(u32); - THUMB_FUNC void FUN_02004CA4(u32 param0) { NNS_SndCaptureStopReverb(param0); } -extern void NNS_SndCaptureSetReverbVolume(); - THUMB_FUNC void FUN_02004CAC() { NNS_SndCaptureSetReverbVolume(); } -extern u32 NNS_SndCaptureStartEffect(u32, u32, u32, u32, u32, void (*)(), u32); -extern void FUN_02005068(); - THUMB_FUNC void FUN_02004CB4() { GetSoundDataPointer(); @@ -985,8 +945,6 @@ THUMB_FUNC void FUN_02004CB4() NNS_SndCaptureStartEffect(r4, 0x1000, 0, 0x55F0, 2, FUN_02005068, st8); } -extern void NNS_SndCaptureStopEffect(); - THUMB_FUNC void FUN_02004CFC() { NNS_SndCaptureStopEffect(); @@ -1008,8 +966,6 @@ THUMB_FUNC void FUN_02004D04(s32 param0) *ptr = param0; } -extern void NNS_SndPlayerSetTrackPitch(u32, u32, u32); - THUMB_FUNC void FUN_02004D20(u32 param0, u32 param1, u32 param2) { NNS_SndPlayerSetTrackPitch(FUN_02003FF4(param0), param1, param2); @@ -1020,15 +976,11 @@ THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) FUN_02004D20(FUN_02004018(FUN_020048D0(param0)), param1, param2); } -extern void NNS_SndPlayerSetTrackPan(u32, u32, u32); - THUMB_FUNC void FUN_02004D4C(u32 param0, u32 param1, u32 param2) { NNS_SndPlayerSetTrackPan(FUN_02003FF4(param0), param1, param2); } -extern void NNS_SndSetMonoFlag(u32 param0); - THUMB_FUNC void FUN_02004D60(u32 param0) { NNS_SndSetMonoFlag(param0); @@ -1068,9 +1020,6 @@ THUMB_FUNC void FUN_02004DBC(u8 param0) *(u8 *)FUN_02003D38(18) = param0; } -extern void FUN_02004E44(u32, u16, u32, u32, u8, u32); -extern void FUN_02003CE8(u32); - THUMB_FUNC u32 FUN_02004DCC(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) { u8 *ptr = FUN_02003D38(21); @@ -1094,8 +1043,6 @@ THUMB_FUNC u32 FUN_02004E08( return 1; } -extern void FUN_020053CC(u32, u32); - THUMB_FUNC void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) { u32 *ptr = FUN_02003D38(2); @@ -1129,8 +1076,6 @@ THUMB_FUNC u32 FUN_02004E8C(u32 *param0) return param0[2]; } -extern u32 FUN_02004ED0(s32); - THUMB_FUNC u32 FUN_02004E98(s32 param0) { GF_Snd_RestoreState(FUN_02004748(5)); @@ -1146,9 +1091,6 @@ THUMB_FUNC u32 FUN_02004E98(s32 param0) return FUN_02004ED0(r4); } -extern u32 NNS_SndArcGetFileAddress(u32); -extern u32 SND_GetWaveDataAddress(u32, u32); - THUMB_FUNC u32 FUN_02004ED0(s32 param0) { u32 *ptr = FUN_02003D38(32); @@ -1178,8 +1120,6 @@ THUMB_FUNC u32 FUN_02004ED0(s32 param0) return *ptr; } -extern u32 FUN_02004F64(int); - THUMB_FUNC u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2) { u32 r4 = FUN_02004F64(1); @@ -1209,8 +1149,6 @@ THUMB_FUNC u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2) return r0; } -extern u32 NNS_SndPlayerGetTick(u32); - THUMB_FUNC u32 FUN_02004F64(int param0) { return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); @@ -1373,8 +1311,6 @@ THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, v DC_FlushRange(param1, param2); } -extern void NNS_SndPlayerSetAllocatableChannel(u32, u32); - THUMB_FUNC void FUN_02005160(u32 param0) { NNS_SndPlayerSetAllocatableChannel(7, param0); @@ -1401,8 +1337,6 @@ THUMB_FUNC void FUN_0200516C(u32 param0) FUN_02004C78(); } -extern BOOL FUN_02005404(void); - THUMB_FUNC void FUN_020051AC() { if (FUN_02005404() == FALSE && FUN_020048EC(FUN_02003FF4(0)) != -1 && FUN_02004124() != 0x47e) @@ -1416,8 +1350,6 @@ THUMB_FUNC void FUN_020051AC() FUN_0200541C(); } -extern void NNS_SndPlayerSetPlayerVolume(u32, u8); - THUMB_FUNC void FUN_020051EC(u32 param0, u8 param1) { NNS_SndPlayerSetPlayerVolume(param0, param1); diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h new file mode 100644 index 00000000..56f43d40 --- /dev/null +++ b/include/unk_020040F4.h @@ -0,0 +1,84 @@ +#include "global.h" + +void FUN_020040F4(u8 param0); +u8 FUN_02004104(); +void FUN_02004110(u16 param0); +u16 FUN_02004124(); +void FUN_02004130(u16 param0); +u16 FUN_02004140(); +void FUN_0200414C(u16 param0); +void FUN_0200415C(u8 param0); +BOOL FUN_02004180(s32 param0); +u32 FUN_0200433C(u8 param0, u32 param1, u32 param2); +void FUN_020044A8(s32 param0); +void FUN_020044D4(int param0, u32 param1); +void FUN_02004568(int seqNo, u16 param1); +void FUN_020045C4(u32 param0, u32 param1); +void FUN_02004648(u32 param0, u32 param1); +void FUN_02004680(u32 param0, u32 param1); +void FUN_020046A0(u32 param0, u32 param1); +void FUN_020046C4(u32 param0, u32 param1); +void FUN_020046E8(u32 param0); +void FUN_02004704(u32 param0, u32 param1, u32 param2); +void FUN_02004724(u32 param0); +void FUN_02004738(); +int FUN_02004748(s32 param0); +void FUN_020047C8(u8 param0, u8 param1); +void FUN_02004810(); +void FUN_02004828(u32 param0, u32 param1, u32 param2); +void FUN_0200483C(u32 param0, s32 param1); +void FUN_02004858(u32 param0, u32 param1); +void FUN_0200488C(u16 param0, u16 param1); +void FUN_020048A0(int param0, u32 param1, u32 param2); +BOOL FUN_020048BC(int param0); +u8 FUN_020048D0(u16 param0); +u32 FUN_020048EC(u32 *param0); +u32 FUN_020048F4(u16 param0); +u16 FUN_02004900(u16 param0); +u32 FUN_02004914(u32 param0); +u32 FUN_0200491C(u32 param0); +u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3); +void *FUN_02004930(u32 param0); +u32 FUN_02004984(u32 param0); +void FUN_02004A04(u32 param0); +u32 FUN_02004A6C(u32 *param0, u32 param1); +void FUN_02004AAC(u32 param0); +void FUN_02004ABC(u32 param0); +void FUN_02004ACC(u32 param0, u32 param1); +void FUN_02004AE4(u32 param0, u32 param1); +void FUN_02004AF8(u32 param0, s32 param1); +u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4); +void FUN_02004C1C(u8 *param0, u32 param1); +void FUN_02004C3C(u32 param0); +BOOL FUN_02004C78(); +u32 FUN_02004C80(u32 param0); +void FUN_02004CA4(u32 param0); +void FUN_02004CAC(); +void FUN_02004CB4(); +void FUN_02004CFC(); +void FUN_02004D04(s32 param0); +void FUN_02004D20(u32 param0, u32 param1, u32 param2); +void FUN_02004D34(u16 param0, u32 param1, u32 param2); +void FUN_02004D4C(u32 param0, u32 param1, u32 param2); +void FUN_02004D60(u32 param0); +void FUN_02004D74(u32 param0); +void FUN_02004D84(u32 param0); +u16 FUN_02004D94(); +u8 *FUN_02004DB4(); +void FUN_02004DBC(u8 param0); +u32 FUN_02004DCC(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5); +u32 FUN_02004E08( + u32 param0, u16 param1, u32 param2, u32 param3, u32 param35, u8 param4, u32 param5); +void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5); +u32 FUN_02004E80(u32 param0); +u32 FUN_02004E8C(u32 *param0); +u32 FUN_02004E98(s32 param0); +u32 FUN_02004ED0(s32 param0); +u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2); +u32 FUN_02004F64(int param0); +void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3); +void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4); +void FUN_02005160(u32 param0); +void FUN_0200516C(u32 param0); +void FUN_020051AC(); +void FUN_020051EC(u32 param0, u8 param1); -- cgit v1.2.3 From 6a219f1a0db892a79d368b91ff9b3aed5f4c0f18 Mon Sep 17 00:00:00 2001 From: tgsm Date: Sat, 3 Jul 2021 07:15:18 -0500 Subject: Process `files/resource/eng/trial/trial.narc` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This NARC contains graphics from the kiosk demo that were left in the retail ROM, unused. https://tcrf.net/Proto:Pokémon_Diamond_and_Pearl/English_Kiosk_Demo --- files/resource/eng/trial/trial/.gitignore | 8 ++++++ files/resource/eng/trial/trial/.knarcignore | 1 + files/resource/eng/trial/trial/narc_0000.NCLR | Bin 552 -> 0 bytes files/resource/eng/trial/trial/narc_0000.pal | 19 ++++++++++++ files/resource/eng/trial/trial/narc_0001.NCGR | Bin 24640 -> 0 bytes files/resource/eng/trial/trial/narc_0001.png | Bin 0 -> 1652 bytes files/resource/eng/trial/trial/narc_0002.NSCR | Bin 2084 -> 0 bytes files/resource/eng/trial/trial/narc_0002_map.json | 32 +++++++++++++++++++++ .../eng/trial/trial/narc_0002_tileset.json | 14 +++++++++ files/resource/eng/trial/trial/narc_0003.NCLR | Bin 552 -> 0 bytes files/resource/eng/trial/trial/narc_0003.pal | 19 ++++++++++++ files/resource/eng/trial/trial/narc_0004.NCGR | Bin 24640 -> 0 bytes files/resource/eng/trial/trial/narc_0004.png | Bin 0 -> 2095 bytes files/resource/eng/trial/trial/narc_0005.NSCR | Bin 2084 -> 0 bytes files/resource/eng/trial/trial/narc_0005_map.json | 32 +++++++++++++++++++++ .../eng/trial/trial/narc_0005_tileset.json | 14 +++++++++ files/resource/eng/trial/trial/narc_0006.NCLR | Bin 552 -> 0 bytes files/resource/eng/trial/trial/narc_0006.pal | 19 ++++++++++++ files/resource/eng/trial/trial/narc_0007.NCGR | Bin 1072 -> 0 bytes files/resource/eng/trial/trial/narc_0007.png | Bin 0 -> 376 bytes filesystem.mk | 10 +++++++ graphics_rules.mk | 23 +++++++++++---- 22 files changed, 186 insertions(+), 5 deletions(-) create mode 100644 files/resource/eng/trial/trial/.gitignore delete mode 100644 files/resource/eng/trial/trial/narc_0000.NCLR create mode 100644 files/resource/eng/trial/trial/narc_0000.pal delete mode 100644 files/resource/eng/trial/trial/narc_0001.NCGR create mode 100644 files/resource/eng/trial/trial/narc_0001.png delete mode 100644 files/resource/eng/trial/trial/narc_0002.NSCR create mode 100644 files/resource/eng/trial/trial/narc_0002_map.json create mode 100644 files/resource/eng/trial/trial/narc_0002_tileset.json delete mode 100644 files/resource/eng/trial/trial/narc_0003.NCLR create mode 100644 files/resource/eng/trial/trial/narc_0003.pal delete mode 100644 files/resource/eng/trial/trial/narc_0004.NCGR create mode 100644 files/resource/eng/trial/trial/narc_0004.png delete mode 100644 files/resource/eng/trial/trial/narc_0005.NSCR create mode 100644 files/resource/eng/trial/trial/narc_0005_map.json create mode 100644 files/resource/eng/trial/trial/narc_0005_tileset.json delete mode 100644 files/resource/eng/trial/trial/narc_0006.NCLR create mode 100644 files/resource/eng/trial/trial/narc_0006.pal delete mode 100644 files/resource/eng/trial/trial/narc_0007.NCGR create mode 100644 files/resource/eng/trial/trial/narc_0007.png diff --git a/files/resource/eng/trial/trial/.gitignore b/files/resource/eng/trial/trial/.gitignore new file mode 100644 index 00000000..41816fbf --- /dev/null +++ b/files/resource/eng/trial/trial/.gitignore @@ -0,0 +1,8 @@ +narc_0000.NCLR +narc_0001.NCGR +narc_0002.NSCR +narc_0003.NCLR +narc_0004.NCGR +narc_0005.NSCR +narc_0006.NCLR +narc_0007.NCGR diff --git a/files/resource/eng/trial/trial/.knarcignore b/files/resource/eng/trial/trial/.knarcignore index 2856080a..ebdff6e6 100644 --- a/files/resource/eng/trial/trial/.knarcignore +++ b/files/resource/eng/trial/trial/.knarcignore @@ -1,2 +1,3 @@ *.png *.pal +*.json diff --git a/files/resource/eng/trial/trial/narc_0000.NCLR b/files/resource/eng/trial/trial/narc_0000.NCLR deleted file mode 100644 index 5f80ebcb..00000000 Binary files a/files/resource/eng/trial/trial/narc_0000.NCLR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0000.pal b/files/resource/eng/trial/trial/narc_0000.pal new file mode 100644 index 00000000..12de63af --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0000.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +255 222 0 +255 255 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/files/resource/eng/trial/trial/narc_0001.NCGR b/files/resource/eng/trial/trial/narc_0001.NCGR deleted file mode 100644 index 3bd9894e..00000000 Binary files a/files/resource/eng/trial/trial/narc_0001.NCGR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0001.png b/files/resource/eng/trial/trial/narc_0001.png new file mode 100644 index 00000000..001fffe4 Binary files /dev/null and b/files/resource/eng/trial/trial/narc_0001.png differ diff --git a/files/resource/eng/trial/trial/narc_0002.NSCR b/files/resource/eng/trial/trial/narc_0002.NSCR deleted file mode 100644 index 73e2bb51..00000000 Binary files a/files/resource/eng/trial/trial/narc_0002.NSCR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0002_map.json b/files/resource/eng/trial/trial/narc_0002_map.json new file mode 100644 index 00000000..f29ca09e --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0002_map.json @@ -0,0 +1,32 @@ +{ "compressionlevel":-1, + "height":32, + "infinite":false, + "layers":[ + { + "data":[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, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "height":32, + "id":1, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":32, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.7.0", + "tileheight":8, + "tilesets":[ + { + "firstgid":1, + "source":"narc_0002_tileset.json" + }], + "tilewidth":8, + "type":"map", + "version":"1.6", + "width":32 +} \ No newline at end of file diff --git a/files/resource/eng/trial/trial/narc_0002_tileset.json b/files/resource/eng/trial/trial/narc_0002_tileset.json new file mode 100644 index 00000000..8017cfa2 --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0002_tileset.json @@ -0,0 +1,14 @@ +{ "columns":32, + "image":"narc_0001.png", + "imageheight":192, + "imagewidth":256, + "margin":0, + "name":"narc_0001", + "spacing":0, + "tilecount":768, + "tiledversion":"1.7.0", + "tileheight":8, + "tilewidth":8, + "type":"tileset", + "version":"1.6" +} \ No newline at end of file diff --git a/files/resource/eng/trial/trial/narc_0003.NCLR b/files/resource/eng/trial/trial/narc_0003.NCLR deleted file mode 100644 index fd75cd98..00000000 Binary files a/files/resource/eng/trial/trial/narc_0003.NCLR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0003.pal b/files/resource/eng/trial/trial/narc_0003.pal new file mode 100644 index 00000000..c88938c8 --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0003.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +8 0 0 +222 222 222 +41 41 41 +123 123 123 +172 172 172 +74 74 74 +255 255 255 +189 189 189 +98 98 98 +139 139 139 +57 49 49 +205 205 205 +156 156 156 +82 82 82 +180 180 180 diff --git a/files/resource/eng/trial/trial/narc_0004.NCGR b/files/resource/eng/trial/trial/narc_0004.NCGR deleted file mode 100644 index ba25ad50..00000000 Binary files a/files/resource/eng/trial/trial/narc_0004.NCGR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0004.png b/files/resource/eng/trial/trial/narc_0004.png new file mode 100644 index 00000000..2a7b1c9a Binary files /dev/null and b/files/resource/eng/trial/trial/narc_0004.png differ diff --git a/files/resource/eng/trial/trial/narc_0005.NSCR b/files/resource/eng/trial/trial/narc_0005.NSCR deleted file mode 100644 index 73e2bb51..00000000 Binary files a/files/resource/eng/trial/trial/narc_0005.NSCR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0005_map.json b/files/resource/eng/trial/trial/narc_0005_map.json new file mode 100644 index 00000000..f008e1a3 --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0005_map.json @@ -0,0 +1,32 @@ +{ "compressionlevel":-1, + "height":32, + "infinite":false, + "layers":[ + { + "data":[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, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "height":32, + "id":1, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":32, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.7.0", + "tileheight":8, + "tilesets":[ + { + "firstgid":1, + "source":"narc_0005_tileset.json" + }], + "tilewidth":8, + "type":"map", + "version":"1.6", + "width":32 +} \ No newline at end of file diff --git a/files/resource/eng/trial/trial/narc_0005_tileset.json b/files/resource/eng/trial/trial/narc_0005_tileset.json new file mode 100644 index 00000000..8c815a25 --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0005_tileset.json @@ -0,0 +1,14 @@ +{ "columns":32, + "image":"narc_0004.png", + "imageheight":192, + "imagewidth":256, + "margin":0, + "name":"narc_0004", + "spacing":0, + "tilecount":768, + "tiledversion":"1.7.0", + "tileheight":8, + "tilewidth":8, + "type":"tileset", + "version":"1.6" +} \ No newline at end of file diff --git a/files/resource/eng/trial/trial/narc_0006.NCLR b/files/resource/eng/trial/trial/narc_0006.NCLR deleted file mode 100644 index b022801d..00000000 Binary files a/files/resource/eng/trial/trial/narc_0006.NCLR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0006.pal b/files/resource/eng/trial/trial/narc_0006.pal new file mode 100644 index 00000000..4974f67b --- /dev/null +++ b/files/resource/eng/trial/trial/narc_0006.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +255 238 180 +255 213 115 +255 189 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/files/resource/eng/trial/trial/narc_0007.NCGR b/files/resource/eng/trial/trial/narc_0007.NCGR deleted file mode 100644 index 170b6168..00000000 Binary files a/files/resource/eng/trial/trial/narc_0007.NCGR and /dev/null differ diff --git a/files/resource/eng/trial/trial/narc_0007.png b/files/resource/eng/trial/trial/narc_0007.png new file mode 100644 index 00000000..0274c915 Binary files /dev/null and b/files/resource/eng/trial/trial/narc_0007.png differ diff --git a/filesystem.mk b/filesystem.mk index ce072c9c..41cabe36 100644 --- a/filesystem.mk +++ b/filesystem.mk @@ -3266,6 +3266,16 @@ files/graphic/poketch.narc: \ files/graphic/poketch/narc_0010.NCGR.lz \ files/graphic/poketch/narc_0011.NSCR.lz +files/resource/eng/trial/trial.narc: \ + files/resource/eng/trial/trial/narc_0000.NCLR \ + files/resource/eng/trial/trial/narc_0001.NCGR \ + files/resource/eng/trial/trial/narc_0002.NSCR \ + files/resource/eng/trial/trial/narc_0003.NCLR \ + files/resource/eng/trial/trial/narc_0004.NCGR \ + files/resource/eng/trial/trial/narc_0005.NSCR \ + files/resource/eng/trial/trial/narc_0006.NCLR \ + files/resource/eng/trial/trial/narc_0007.NCGR + ## Trainer names files/msgdata/msg/narc_0559.txt: files/poketool/trainer/trdata.json (echo " -"; $(GREP) -w '"name":' $< | cut -d'"' -f4) | $(SED) 's/^(.+)$$/{TRNAME}\1\r/g' > $@ diff --git a/graphics_rules.mk b/graphics_rules.mk index d36fa0c3..8bbbf8bb 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -111,11 +111,15 @@ CLOBBER_SIZE_VERSION101_NCGR_FILES := files/graphic/bag_gra/narc_0002.NCGR \ files/poketool/icongra/poke_icon/narc_0034.NCGR \ files/poketool/icongra/poke_icon/narc_0035.NCGR \ files/poketool/icongra/poke_icon/narc_0036.NCGR \ - files/poketool/icongra/poke_icon/narc_0402.NCGR + files/poketool/icongra/poke_icon/narc_0402.NCGR \ + files/resource/eng/trial/trial/narc_0007.NCGR 4BPP_NCLR_FILES := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/demo/title/titledemo/narc_0016.NCLR \ - files/poketool/icongra/poke_icon/narc_0000.NCLR + files/poketool/icongra/poke_icon/narc_0000.NCLR \ + files/resource/eng/trial/trial/narc_0000.NCLR \ + files/resource/eng/trial/trial/narc_0003.NCLR \ + files/resource/eng/trial/trial/narc_0006.NCLR \ 8BPP_NSCR_FILES := files/demo/title/titledemo/narc_0000.NSCR @@ -157,7 +161,9 @@ VERSION101_SOPC_NCGR_FILES := files/application/wifi_earth/wifi_earth/narc_0005. files/demo/title/titledemo/narc_0007.NCGR \ files/demo/title/titledemo/narc_0011.NCGR \ files/demo/title/titledemo/narc_0015.NCGR \ - files/graphic/poketch/narc_0010.NCGR + files/graphic/poketch/narc_0010.NCGR \ + files/resource/eng/trial/trial/narc_0001.NCGR \ + files/resource/eng/trial/trial/narc_0004.NCGR 8BPP_COMP10_NOPAD_NCLR_PNG_FILES := files/poketool/trgra/trbgra/narc_0000.NCLR \ files/poketool/trgra/trbgra/narc_0002.NCLR \ @@ -696,7 +702,9 @@ NCGR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0005.NCGR \ files/poketool/trgra/trfgra/narc_0190.NCGR \ files/poketool/trgra/trfgra/narc_0192.NCGR \ files/poketool/trgra/trfgra/narc_0194.NCGR \ - + files/resource/eng/trial/trial/narc_0001.NCGR \ + files/resource/eng/trial/trial/narc_0004.NCGR \ + files/resource/eng/trial/trial/narc_0007.NCGR \ NCLR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/data/cell0.NCLR \ @@ -935,6 +943,9 @@ NCLR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/poketool/trgra/trfgra/narc_0190.NCLR \ files/poketool/trgra/trfgra/narc_0192.NCLR \ files/poketool/trgra/trfgra/narc_0194.NCLR \ + files/resource/eng/trial/trial/narc_0000.NCLR \ + files/resource/eng/trial/trial/narc_0003.NCLR \ + files/resource/eng/trial/trial/narc_0006.NCLR \ NCER_CLEAN_LIST := files/poketool/icongra/poke_icon/narc_0002.NCER \ files/poketool/icongra/poke_icon/narc_0004.NCER \ @@ -943,4 +954,6 @@ NCER_CLEAN_LIST := files/poketool/icongra/poke_icon/narc_0002.NCER \ NSCR_CLEAN_LIST := files/demo/title/titledemo/narc_0000.NSCR \ files/demo/title/titledemo/narc_0008.NSCR \ files/demo/title/titledemo/narc_0012.NSCR \ - files/demo/title/titledemo/narc_0017.NSCR + files/demo/title/titledemo/narc_0017.NSCR \ + files/resource/eng/trial/trial/narc_0002.NSCR \ + files/resource/eng/trial/trial/narc_0005.NSCR -- cgit v1.2.3 From 6bb19ad63bc0943ef43940523142561822f8604e Mon Sep 17 00:00:00 2001 From: tgsm Date: Sat, 3 Jul 2021 21:56:47 -0500 Subject: Process `graphic/field_board.narc` Sign graphics used in cities/towns. --- files/graphic/field_board/.gitignore | 52 +++++++ files/graphic/field_board/narc_0000.NCGR | Bin 640 -> 0 bytes files/graphic/field_board/narc_0000.png | Bin 0 -> 196 bytes files/graphic/field_board/narc_0001.NCLR | Bin 552 -> 0 bytes files/graphic/field_board/narc_0001.pal | 259 +++++++++++++++++++++++++++++++ files/graphic/field_board/narc_0002.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0002.png | Bin 0 -> 136 bytes files/graphic/field_board/narc_0003.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0003.png | Bin 0 -> 180 bytes files/graphic/field_board/narc_0004.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0004.png | Bin 0 -> 182 bytes files/graphic/field_board/narc_0005.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0005.png | Bin 0 -> 201 bytes files/graphic/field_board/narc_0006.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0006.png | Bin 0 -> 203 bytes files/graphic/field_board/narc_0007.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0007.png | Bin 0 -> 206 bytes files/graphic/field_board/narc_0008.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0008.png | Bin 0 -> 212 bytes files/graphic/field_board/narc_0009.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0009.png | Bin 0 -> 196 bytes files/graphic/field_board/narc_0010.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0010.png | Bin 0 -> 214 bytes files/graphic/field_board/narc_0011.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0011.png | Bin 0 -> 193 bytes files/graphic/field_board/narc_0012.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0012.png | Bin 0 -> 208 bytes files/graphic/field_board/narc_0013.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0013.png | Bin 0 -> 213 bytes files/graphic/field_board/narc_0014.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0014.png | Bin 0 -> 194 bytes files/graphic/field_board/narc_0015.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0015.png | Bin 0 -> 210 bytes files/graphic/field_board/narc_0016.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0016.png | Bin 0 -> 200 bytes files/graphic/field_board/narc_0017.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0017.png | Bin 0 -> 228 bytes files/graphic/field_board/narc_0018.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0018.png | Bin 0 -> 233 bytes files/graphic/field_board/narc_0019.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0019.png | Bin 0 -> 236 bytes files/graphic/field_board/narc_0020.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0020.png | Bin 0 -> 226 bytes files/graphic/field_board/narc_0021.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0021.png | Bin 0 -> 224 bytes files/graphic/field_board/narc_0022.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0022.png | Bin 0 -> 234 bytes files/graphic/field_board/narc_0023.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0023.png | Bin 0 -> 231 bytes files/graphic/field_board/narc_0024.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0024.png | Bin 0 -> 232 bytes files/graphic/field_board/narc_0025.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0025.png | Bin 0 -> 205 bytes files/graphic/field_board/narc_0026.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0026.png | Bin 0 -> 192 bytes files/graphic/field_board/narc_0027.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0027.png | Bin 0 -> 211 bytes files/graphic/field_board/narc_0028.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0028.png | Bin 0 -> 191 bytes files/graphic/field_board/narc_0029.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0029.png | Bin 0 -> 193 bytes files/graphic/field_board/narc_0030.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0030.png | Bin 0 -> 209 bytes files/graphic/field_board/narc_0031.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0031.png | Bin 0 -> 194 bytes files/graphic/field_board/narc_0032.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0032.png | Bin 0 -> 210 bytes files/graphic/field_board/narc_0033.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0033.png | Bin 0 -> 136 bytes files/graphic/field_board/narc_0034.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0034.png | Bin 0 -> 180 bytes files/graphic/field_board/narc_0035.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0035.png | Bin 0 -> 203 bytes files/graphic/field_board/narc_0036.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0036.png | Bin 0 -> 201 bytes files/graphic/field_board/narc_0037.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0037.png | Bin 0 -> 202 bytes files/graphic/field_board/narc_0038.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0038.png | Bin 0 -> 182 bytes files/graphic/field_board/narc_0039.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0039.png | Bin 0 -> 164 bytes files/graphic/field_board/narc_0040.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0040.png | Bin 0 -> 205 bytes files/graphic/field_board/narc_0041.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0041.png | Bin 0 -> 207 bytes files/graphic/field_board/narc_0042.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0042.png | Bin 0 -> 190 bytes files/graphic/field_board/narc_0043.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0043.png | Bin 0 -> 216 bytes files/graphic/field_board/narc_0044.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0044.png | Bin 0 -> 215 bytes files/graphic/field_board/narc_0045.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0045.png | Bin 0 -> 224 bytes files/graphic/field_board/narc_0046.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0046.png | Bin 0 -> 212 bytes files/graphic/field_board/narc_0047.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0047.png | Bin 0 -> 242 bytes files/graphic/field_board/narc_0048.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0048.png | Bin 0 -> 218 bytes files/graphic/field_board/narc_0049.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0049.png | Bin 0 -> 173 bytes files/graphic/field_board/narc_0050.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0050.png | Bin 0 -> 190 bytes files/graphic/field_board/narc_0051.NCGR | Bin 832 -> 0 bytes files/graphic/field_board/narc_0051.png | Bin 0 -> 188 bytes filesystem.mk | 54 +++++++ graphics_rules.mk | 104 +++++++++++++ 107 files changed, 469 insertions(+) create mode 100644 files/graphic/field_board/.gitignore delete mode 100644 files/graphic/field_board/narc_0000.NCGR create mode 100644 files/graphic/field_board/narc_0000.png delete mode 100644 files/graphic/field_board/narc_0001.NCLR create mode 100644 files/graphic/field_board/narc_0001.pal delete mode 100644 files/graphic/field_board/narc_0002.NCGR create mode 100644 files/graphic/field_board/narc_0002.png delete mode 100644 files/graphic/field_board/narc_0003.NCGR create mode 100644 files/graphic/field_board/narc_0003.png delete mode 100644 files/graphic/field_board/narc_0004.NCGR create mode 100644 files/graphic/field_board/narc_0004.png delete mode 100644 files/graphic/field_board/narc_0005.NCGR create mode 100644 files/graphic/field_board/narc_0005.png delete mode 100644 files/graphic/field_board/narc_0006.NCGR create mode 100644 files/graphic/field_board/narc_0006.png delete mode 100644 files/graphic/field_board/narc_0007.NCGR create mode 100644 files/graphic/field_board/narc_0007.png delete mode 100644 files/graphic/field_board/narc_0008.NCGR create mode 100644 files/graphic/field_board/narc_0008.png delete mode 100644 files/graphic/field_board/narc_0009.NCGR create mode 100644 files/graphic/field_board/narc_0009.png delete mode 100644 files/graphic/field_board/narc_0010.NCGR create mode 100644 files/graphic/field_board/narc_0010.png delete mode 100644 files/graphic/field_board/narc_0011.NCGR create mode 100644 files/graphic/field_board/narc_0011.png delete mode 100644 files/graphic/field_board/narc_0012.NCGR create mode 100644 files/graphic/field_board/narc_0012.png delete mode 100644 files/graphic/field_board/narc_0013.NCGR create mode 100644 files/graphic/field_board/narc_0013.png delete mode 100644 files/graphic/field_board/narc_0014.NCGR create mode 100644 files/graphic/field_board/narc_0014.png delete mode 100644 files/graphic/field_board/narc_0015.NCGR create mode 100644 files/graphic/field_board/narc_0015.png delete mode 100644 files/graphic/field_board/narc_0016.NCGR create mode 100644 files/graphic/field_board/narc_0016.png delete mode 100644 files/graphic/field_board/narc_0017.NCGR create mode 100644 files/graphic/field_board/narc_0017.png delete mode 100644 files/graphic/field_board/narc_0018.NCGR create mode 100644 files/graphic/field_board/narc_0018.png delete mode 100644 files/graphic/field_board/narc_0019.NCGR create mode 100644 files/graphic/field_board/narc_0019.png delete mode 100644 files/graphic/field_board/narc_0020.NCGR create mode 100644 files/graphic/field_board/narc_0020.png delete mode 100644 files/graphic/field_board/narc_0021.NCGR create mode 100644 files/graphic/field_board/narc_0021.png delete mode 100644 files/graphic/field_board/narc_0022.NCGR create mode 100644 files/graphic/field_board/narc_0022.png delete mode 100644 files/graphic/field_board/narc_0023.NCGR create mode 100644 files/graphic/field_board/narc_0023.png delete mode 100644 files/graphic/field_board/narc_0024.NCGR create mode 100644 files/graphic/field_board/narc_0024.png delete mode 100644 files/graphic/field_board/narc_0025.NCGR create mode 100644 files/graphic/field_board/narc_0025.png delete mode 100644 files/graphic/field_board/narc_0026.NCGR create mode 100644 files/graphic/field_board/narc_0026.png delete mode 100644 files/graphic/field_board/narc_0027.NCGR create mode 100644 files/graphic/field_board/narc_0027.png delete mode 100644 files/graphic/field_board/narc_0028.NCGR create mode 100644 files/graphic/field_board/narc_0028.png delete mode 100644 files/graphic/field_board/narc_0029.NCGR create mode 100644 files/graphic/field_board/narc_0029.png delete mode 100644 files/graphic/field_board/narc_0030.NCGR create mode 100644 files/graphic/field_board/narc_0030.png delete mode 100644 files/graphic/field_board/narc_0031.NCGR create mode 100644 files/graphic/field_board/narc_0031.png delete mode 100644 files/graphic/field_board/narc_0032.NCGR create mode 100644 files/graphic/field_board/narc_0032.png delete mode 100644 files/graphic/field_board/narc_0033.NCGR create mode 100644 files/graphic/field_board/narc_0033.png delete mode 100644 files/graphic/field_board/narc_0034.NCGR create mode 100644 files/graphic/field_board/narc_0034.png delete mode 100644 files/graphic/field_board/narc_0035.NCGR create mode 100644 files/graphic/field_board/narc_0035.png delete mode 100644 files/graphic/field_board/narc_0036.NCGR create mode 100644 files/graphic/field_board/narc_0036.png delete mode 100644 files/graphic/field_board/narc_0037.NCGR create mode 100644 files/graphic/field_board/narc_0037.png delete mode 100644 files/graphic/field_board/narc_0038.NCGR create mode 100644 files/graphic/field_board/narc_0038.png delete mode 100644 files/graphic/field_board/narc_0039.NCGR create mode 100644 files/graphic/field_board/narc_0039.png delete mode 100644 files/graphic/field_board/narc_0040.NCGR create mode 100644 files/graphic/field_board/narc_0040.png delete mode 100644 files/graphic/field_board/narc_0041.NCGR create mode 100644 files/graphic/field_board/narc_0041.png delete mode 100644 files/graphic/field_board/narc_0042.NCGR create mode 100644 files/graphic/field_board/narc_0042.png delete mode 100644 files/graphic/field_board/narc_0043.NCGR create mode 100644 files/graphic/field_board/narc_0043.png delete mode 100644 files/graphic/field_board/narc_0044.NCGR create mode 100644 files/graphic/field_board/narc_0044.png delete mode 100644 files/graphic/field_board/narc_0045.NCGR create mode 100644 files/graphic/field_board/narc_0045.png delete mode 100644 files/graphic/field_board/narc_0046.NCGR create mode 100644 files/graphic/field_board/narc_0046.png delete mode 100644 files/graphic/field_board/narc_0047.NCGR create mode 100644 files/graphic/field_board/narc_0047.png delete mode 100644 files/graphic/field_board/narc_0048.NCGR create mode 100644 files/graphic/field_board/narc_0048.png delete mode 100644 files/graphic/field_board/narc_0049.NCGR create mode 100644 files/graphic/field_board/narc_0049.png delete mode 100644 files/graphic/field_board/narc_0050.NCGR create mode 100644 files/graphic/field_board/narc_0050.png delete mode 100644 files/graphic/field_board/narc_0051.NCGR create mode 100644 files/graphic/field_board/narc_0051.png diff --git a/files/graphic/field_board/.gitignore b/files/graphic/field_board/.gitignore new file mode 100644 index 00000000..026c4ab6 --- /dev/null +++ b/files/graphic/field_board/.gitignore @@ -0,0 +1,52 @@ +narc_0000.NCGR +narc_0001.NCLR +narc_0002.NCGR +narc_0003.NCGR +narc_0004.NCGR +narc_0005.NCGR +narc_0006.NCGR +narc_0007.NCGR +narc_0008.NCGR +narc_0009.NCGR +narc_0010.NCGR +narc_0011.NCGR +narc_0012.NCGR +narc_0013.NCGR +narc_0014.NCGR +narc_0015.NCGR +narc_0016.NCGR +narc_0017.NCGR +narc_0018.NCGR +narc_0019.NCGR +narc_0020.NCGR +narc_0021.NCGR +narc_0022.NCGR +narc_0023.NCGR +narc_0024.NCGR +narc_0025.NCGR +narc_0026.NCGR +narc_0027.NCGR +narc_0028.NCGR +narc_0029.NCGR +narc_0030.NCGR +narc_0031.NCGR +narc_0032.NCGR +narc_0033.NCGR +narc_0034.NCGR +narc_0035.NCGR +narc_0036.NCGR +narc_0037.NCGR +narc_0038.NCGR +narc_0039.NCGR +narc_0040.NCGR +narc_0041.NCGR +narc_0042.NCGR +narc_0043.NCGR +narc_0044.NCGR +narc_0045.NCGR +narc_0046.NCGR +narc_0047.NCGR +narc_0048.NCGR +narc_0049.NCGR +narc_0050.NCGR +narc_0051.NCGR diff --git a/files/graphic/field_board/narc_0000.NCGR b/files/graphic/field_board/narc_0000.NCGR deleted file mode 100644 index 2214fa16..00000000 Binary files a/files/graphic/field_board/narc_0000.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0000.png b/files/graphic/field_board/narc_0000.png new file mode 100644 index 00000000..048d9b4f Binary files /dev/null and b/files/graphic/field_board/narc_0000.png differ diff --git a/files/graphic/field_board/narc_0001.NCLR b/files/graphic/field_board/narc_0001.NCLR deleted file mode 100644 index 990624d5..00000000 Binary files a/files/graphic/field_board/narc_0001.NCLR and /dev/null differ diff --git a/files/graphic/field_board/narc_0001.pal b/files/graphic/field_board/narc_0001.pal new file mode 100644 index 00000000..b1272fcc --- /dev/null +++ b/files/graphic/field_board/narc_0001.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +156 213 139 +255 255 255 +222 205 164 +180 189 197 +139 148 156 +255 0 0 +8 0 255 +255 172 16 +156 115 82 +222 205 164 +0 0 0 +98 74 41 +123 98 49 +139 115 49 +156 123 57 +180 148 65 +156 213 139 +255 255 255 +164 222 180 +180 189 197 +139 148 156 +255 0 0 +8 0 255 +255 172 16 +156 115 82 +164 222 180 +0 0 0 +41 106 65 +49 131 74 +57 139 82 +65 156 82 +74 180 98 +156 213 139 +255 255 255 +205 205 205 +180 189 197 +139 148 156 +255 0 0 +8 0 255 +255 172 16 +156 115 82 +205 205 205 +0 0 0 +82 90 90 +98 115 115 +115 123 123 +131 139 139 +148 156 156 +156 213 139 +255 255 255 +180 197 222 +180 189 197 +139 148 156 +255 0 0 +8 0 255 +255 172 16 +156 115 82 +180 197 222 +0 0 0 +57 65 115 +74 82 139 +82 98 148 +90 106 164 +106 131 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/files/graphic/field_board/narc_0002.NCGR b/files/graphic/field_board/narc_0002.NCGR deleted file mode 100644 index 72eaa937..00000000 Binary files a/files/graphic/field_board/narc_0002.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0002.png b/files/graphic/field_board/narc_0002.png new file mode 100644 index 00000000..b421947e Binary files /dev/null and b/files/graphic/field_board/narc_0002.png differ diff --git a/files/graphic/field_board/narc_0003.NCGR b/files/graphic/field_board/narc_0003.NCGR deleted file mode 100644 index b8146d82..00000000 Binary files a/files/graphic/field_board/narc_0003.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0003.png b/files/graphic/field_board/narc_0003.png new file mode 100644 index 00000000..ae1cad13 Binary files /dev/null and b/files/graphic/field_board/narc_0003.png differ diff --git a/files/graphic/field_board/narc_0004.NCGR b/files/graphic/field_board/narc_0004.NCGR deleted file mode 100644 index 718d36b2..00000000 Binary files a/files/graphic/field_board/narc_0004.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0004.png b/files/graphic/field_board/narc_0004.png new file mode 100644 index 00000000..b504a95a Binary files /dev/null and b/files/graphic/field_board/narc_0004.png differ diff --git a/files/graphic/field_board/narc_0005.NCGR b/files/graphic/field_board/narc_0005.NCGR deleted file mode 100644 index 62a652fc..00000000 Binary files a/files/graphic/field_board/narc_0005.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0005.png b/files/graphic/field_board/narc_0005.png new file mode 100644 index 00000000..9e66ffaf Binary files /dev/null and b/files/graphic/field_board/narc_0005.png differ diff --git a/files/graphic/field_board/narc_0006.NCGR b/files/graphic/field_board/narc_0006.NCGR deleted file mode 100644 index 32aaa40d..00000000 Binary files a/files/graphic/field_board/narc_0006.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0006.png b/files/graphic/field_board/narc_0006.png new file mode 100644 index 00000000..9a3b8ee1 Binary files /dev/null and b/files/graphic/field_board/narc_0006.png differ diff --git a/files/graphic/field_board/narc_0007.NCGR b/files/graphic/field_board/narc_0007.NCGR deleted file mode 100644 index ae134cc6..00000000 Binary files a/files/graphic/field_board/narc_0007.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0007.png b/files/graphic/field_board/narc_0007.png new file mode 100644 index 00000000..d4902c20 Binary files /dev/null and b/files/graphic/field_board/narc_0007.png differ diff --git a/files/graphic/field_board/narc_0008.NCGR b/files/graphic/field_board/narc_0008.NCGR deleted file mode 100644 index 8c301e2e..00000000 Binary files a/files/graphic/field_board/narc_0008.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0008.png b/files/graphic/field_board/narc_0008.png new file mode 100644 index 00000000..4230dee6 Binary files /dev/null and b/files/graphic/field_board/narc_0008.png differ diff --git a/files/graphic/field_board/narc_0009.NCGR b/files/graphic/field_board/narc_0009.NCGR deleted file mode 100644 index cc56dc59..00000000 Binary files a/files/graphic/field_board/narc_0009.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0009.png b/files/graphic/field_board/narc_0009.png new file mode 100644 index 00000000..993d65dc Binary files /dev/null and b/files/graphic/field_board/narc_0009.png differ diff --git a/files/graphic/field_board/narc_0010.NCGR b/files/graphic/field_board/narc_0010.NCGR deleted file mode 100644 index 9e63cbc0..00000000 Binary files a/files/graphic/field_board/narc_0010.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0010.png b/files/graphic/field_board/narc_0010.png new file mode 100644 index 00000000..8c30ed22 Binary files /dev/null and b/files/graphic/field_board/narc_0010.png differ diff --git a/files/graphic/field_board/narc_0011.NCGR b/files/graphic/field_board/narc_0011.NCGR deleted file mode 100644 index dc9a146e..00000000 Binary files a/files/graphic/field_board/narc_0011.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0011.png b/files/graphic/field_board/narc_0011.png new file mode 100644 index 00000000..13ad7ee1 Binary files /dev/null and b/files/graphic/field_board/narc_0011.png differ diff --git a/files/graphic/field_board/narc_0012.NCGR b/files/graphic/field_board/narc_0012.NCGR deleted file mode 100644 index 7ece9935..00000000 Binary files a/files/graphic/field_board/narc_0012.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0012.png b/files/graphic/field_board/narc_0012.png new file mode 100644 index 00000000..671d51b4 Binary files /dev/null and b/files/graphic/field_board/narc_0012.png differ diff --git a/files/graphic/field_board/narc_0013.NCGR b/files/graphic/field_board/narc_0013.NCGR deleted file mode 100644 index d655fec6..00000000 Binary files a/files/graphic/field_board/narc_0013.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0013.png b/files/graphic/field_board/narc_0013.png new file mode 100644 index 00000000..03582f80 Binary files /dev/null and b/files/graphic/field_board/narc_0013.png differ diff --git a/files/graphic/field_board/narc_0014.NCGR b/files/graphic/field_board/narc_0014.NCGR deleted file mode 100644 index 9a3eaee2..00000000 Binary files a/files/graphic/field_board/narc_0014.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0014.png b/files/graphic/field_board/narc_0014.png new file mode 100644 index 00000000..c2120f8f Binary files /dev/null and b/files/graphic/field_board/narc_0014.png differ diff --git a/files/graphic/field_board/narc_0015.NCGR b/files/graphic/field_board/narc_0015.NCGR deleted file mode 100644 index bcd4f3d6..00000000 Binary files a/files/graphic/field_board/narc_0015.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0015.png b/files/graphic/field_board/narc_0015.png new file mode 100644 index 00000000..969bed28 Binary files /dev/null and b/files/graphic/field_board/narc_0015.png differ diff --git a/files/graphic/field_board/narc_0016.NCGR b/files/graphic/field_board/narc_0016.NCGR deleted file mode 100644 index c3b2c6e6..00000000 Binary files a/files/graphic/field_board/narc_0016.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0016.png b/files/graphic/field_board/narc_0016.png new file mode 100644 index 00000000..d20cbaf0 Binary files /dev/null and b/files/graphic/field_board/narc_0016.png differ diff --git a/files/graphic/field_board/narc_0017.NCGR b/files/graphic/field_board/narc_0017.NCGR deleted file mode 100644 index e65bee7a..00000000 Binary files a/files/graphic/field_board/narc_0017.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0017.png b/files/graphic/field_board/narc_0017.png new file mode 100644 index 00000000..2f5353f2 Binary files /dev/null and b/files/graphic/field_board/narc_0017.png differ diff --git a/files/graphic/field_board/narc_0018.NCGR b/files/graphic/field_board/narc_0018.NCGR deleted file mode 100644 index c2ee2796..00000000 Binary files a/files/graphic/field_board/narc_0018.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0018.png b/files/graphic/field_board/narc_0018.png new file mode 100644 index 00000000..26826ad2 Binary files /dev/null and b/files/graphic/field_board/narc_0018.png differ diff --git a/files/graphic/field_board/narc_0019.NCGR b/files/graphic/field_board/narc_0019.NCGR deleted file mode 100644 index a719f813..00000000 Binary files a/files/graphic/field_board/narc_0019.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0019.png b/files/graphic/field_board/narc_0019.png new file mode 100644 index 00000000..3ce891a2 Binary files /dev/null and b/files/graphic/field_board/narc_0019.png differ diff --git a/files/graphic/field_board/narc_0020.NCGR b/files/graphic/field_board/narc_0020.NCGR deleted file mode 100644 index ea2c46cb..00000000 Binary files a/files/graphic/field_board/narc_0020.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0020.png b/files/graphic/field_board/narc_0020.png new file mode 100644 index 00000000..8e2e75d0 Binary files /dev/null and b/files/graphic/field_board/narc_0020.png differ diff --git a/files/graphic/field_board/narc_0021.NCGR b/files/graphic/field_board/narc_0021.NCGR deleted file mode 100644 index 05e41987..00000000 Binary files a/files/graphic/field_board/narc_0021.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0021.png b/files/graphic/field_board/narc_0021.png new file mode 100644 index 00000000..98cea9ce Binary files /dev/null and b/files/graphic/field_board/narc_0021.png differ diff --git a/files/graphic/field_board/narc_0022.NCGR b/files/graphic/field_board/narc_0022.NCGR deleted file mode 100644 index 3041a705..00000000 Binary files a/files/graphic/field_board/narc_0022.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0022.png b/files/graphic/field_board/narc_0022.png new file mode 100644 index 00000000..1fac00f6 Binary files /dev/null and b/files/graphic/field_board/narc_0022.png differ diff --git a/files/graphic/field_board/narc_0023.NCGR b/files/graphic/field_board/narc_0023.NCGR deleted file mode 100644 index a63dae87..00000000 Binary files a/files/graphic/field_board/narc_0023.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0023.png b/files/graphic/field_board/narc_0023.png new file mode 100644 index 00000000..ba66d1fe Binary files /dev/null and b/files/graphic/field_board/narc_0023.png differ diff --git a/files/graphic/field_board/narc_0024.NCGR b/files/graphic/field_board/narc_0024.NCGR deleted file mode 100644 index 727edd61..00000000 Binary files a/files/graphic/field_board/narc_0024.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0024.png b/files/graphic/field_board/narc_0024.png new file mode 100644 index 00000000..3114b153 Binary files /dev/null and b/files/graphic/field_board/narc_0024.png differ diff --git a/files/graphic/field_board/narc_0025.NCGR b/files/graphic/field_board/narc_0025.NCGR deleted file mode 100644 index 770b3435..00000000 Binary files a/files/graphic/field_board/narc_0025.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0025.png b/files/graphic/field_board/narc_0025.png new file mode 100644 index 00000000..e257f724 Binary files /dev/null and b/files/graphic/field_board/narc_0025.png differ diff --git a/files/graphic/field_board/narc_0026.NCGR b/files/graphic/field_board/narc_0026.NCGR deleted file mode 100644 index 671b76ca..00000000 Binary files a/files/graphic/field_board/narc_0026.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0026.png b/files/graphic/field_board/narc_0026.png new file mode 100644 index 00000000..ab7fe549 Binary files /dev/null and b/files/graphic/field_board/narc_0026.png differ diff --git a/files/graphic/field_board/narc_0027.NCGR b/files/graphic/field_board/narc_0027.NCGR deleted file mode 100644 index c6cf71ea..00000000 Binary files a/files/graphic/field_board/narc_0027.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0027.png b/files/graphic/field_board/narc_0027.png new file mode 100644 index 00000000..2609b7c9 Binary files /dev/null and b/files/graphic/field_board/narc_0027.png differ diff --git a/files/graphic/field_board/narc_0028.NCGR b/files/graphic/field_board/narc_0028.NCGR deleted file mode 100644 index f041e52a..00000000 Binary files a/files/graphic/field_board/narc_0028.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0028.png b/files/graphic/field_board/narc_0028.png new file mode 100644 index 00000000..628e2ed0 Binary files /dev/null and b/files/graphic/field_board/narc_0028.png differ diff --git a/files/graphic/field_board/narc_0029.NCGR b/files/graphic/field_board/narc_0029.NCGR deleted file mode 100644 index 00cc5f47..00000000 Binary files a/files/graphic/field_board/narc_0029.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0029.png b/files/graphic/field_board/narc_0029.png new file mode 100644 index 00000000..2236f368 Binary files /dev/null and b/files/graphic/field_board/narc_0029.png differ diff --git a/files/graphic/field_board/narc_0030.NCGR b/files/graphic/field_board/narc_0030.NCGR deleted file mode 100644 index 74326921..00000000 Binary files a/files/graphic/field_board/narc_0030.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0030.png b/files/graphic/field_board/narc_0030.png new file mode 100644 index 00000000..945c2c85 Binary files /dev/null and b/files/graphic/field_board/narc_0030.png differ diff --git a/files/graphic/field_board/narc_0031.NCGR b/files/graphic/field_board/narc_0031.NCGR deleted file mode 100644 index db1b2c11..00000000 Binary files a/files/graphic/field_board/narc_0031.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0031.png b/files/graphic/field_board/narc_0031.png new file mode 100644 index 00000000..d7a6570d Binary files /dev/null and b/files/graphic/field_board/narc_0031.png differ diff --git a/files/graphic/field_board/narc_0032.NCGR b/files/graphic/field_board/narc_0032.NCGR deleted file mode 100644 index 913e641a..00000000 Binary files a/files/graphic/field_board/narc_0032.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0032.png b/files/graphic/field_board/narc_0032.png new file mode 100644 index 00000000..7b5678db Binary files /dev/null and b/files/graphic/field_board/narc_0032.png differ diff --git a/files/graphic/field_board/narc_0033.NCGR b/files/graphic/field_board/narc_0033.NCGR deleted file mode 100644 index 72eaa937..00000000 Binary files a/files/graphic/field_board/narc_0033.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0033.png b/files/graphic/field_board/narc_0033.png new file mode 100644 index 00000000..b673ab76 Binary files /dev/null and b/files/graphic/field_board/narc_0033.png differ diff --git a/files/graphic/field_board/narc_0034.NCGR b/files/graphic/field_board/narc_0034.NCGR deleted file mode 100644 index 523bf808..00000000 Binary files a/files/graphic/field_board/narc_0034.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0034.png b/files/graphic/field_board/narc_0034.png new file mode 100644 index 00000000..7257a197 Binary files /dev/null and b/files/graphic/field_board/narc_0034.png differ diff --git a/files/graphic/field_board/narc_0035.NCGR b/files/graphic/field_board/narc_0035.NCGR deleted file mode 100644 index 693bb05a..00000000 Binary files a/files/graphic/field_board/narc_0035.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0035.png b/files/graphic/field_board/narc_0035.png new file mode 100644 index 00000000..519a6d75 Binary files /dev/null and b/files/graphic/field_board/narc_0035.png differ diff --git a/files/graphic/field_board/narc_0036.NCGR b/files/graphic/field_board/narc_0036.NCGR deleted file mode 100644 index 6f8ca866..00000000 Binary files a/files/graphic/field_board/narc_0036.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0036.png b/files/graphic/field_board/narc_0036.png new file mode 100644 index 00000000..0f6972ea Binary files /dev/null and b/files/graphic/field_board/narc_0036.png differ diff --git a/files/graphic/field_board/narc_0037.NCGR b/files/graphic/field_board/narc_0037.NCGR deleted file mode 100644 index a884581d..00000000 Binary files a/files/graphic/field_board/narc_0037.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0037.png b/files/graphic/field_board/narc_0037.png new file mode 100644 index 00000000..2ac3406c Binary files /dev/null and b/files/graphic/field_board/narc_0037.png differ diff --git a/files/graphic/field_board/narc_0038.NCGR b/files/graphic/field_board/narc_0038.NCGR deleted file mode 100644 index db4c74ef..00000000 Binary files a/files/graphic/field_board/narc_0038.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0038.png b/files/graphic/field_board/narc_0038.png new file mode 100644 index 00000000..9e8c4f71 Binary files /dev/null and b/files/graphic/field_board/narc_0038.png differ diff --git a/files/graphic/field_board/narc_0039.NCGR b/files/graphic/field_board/narc_0039.NCGR deleted file mode 100644 index 1044248c..00000000 Binary files a/files/graphic/field_board/narc_0039.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0039.png b/files/graphic/field_board/narc_0039.png new file mode 100644 index 00000000..03e45d87 Binary files /dev/null and b/files/graphic/field_board/narc_0039.png differ diff --git a/files/graphic/field_board/narc_0040.NCGR b/files/graphic/field_board/narc_0040.NCGR deleted file mode 100644 index 7d9273a8..00000000 Binary files a/files/graphic/field_board/narc_0040.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0040.png b/files/graphic/field_board/narc_0040.png new file mode 100644 index 00000000..6711ddee Binary files /dev/null and b/files/graphic/field_board/narc_0040.png differ diff --git a/files/graphic/field_board/narc_0041.NCGR b/files/graphic/field_board/narc_0041.NCGR deleted file mode 100644 index 018da8e8..00000000 Binary files a/files/graphic/field_board/narc_0041.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0041.png b/files/graphic/field_board/narc_0041.png new file mode 100644 index 00000000..048703e6 Binary files /dev/null and b/files/graphic/field_board/narc_0041.png differ diff --git a/files/graphic/field_board/narc_0042.NCGR b/files/graphic/field_board/narc_0042.NCGR deleted file mode 100644 index f11c877b..00000000 Binary files a/files/graphic/field_board/narc_0042.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0042.png b/files/graphic/field_board/narc_0042.png new file mode 100644 index 00000000..4277e483 Binary files /dev/null and b/files/graphic/field_board/narc_0042.png differ diff --git a/files/graphic/field_board/narc_0043.NCGR b/files/graphic/field_board/narc_0043.NCGR deleted file mode 100644 index 315b57d6..00000000 Binary files a/files/graphic/field_board/narc_0043.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0043.png b/files/graphic/field_board/narc_0043.png new file mode 100644 index 00000000..85a9539e Binary files /dev/null and b/files/graphic/field_board/narc_0043.png differ diff --git a/files/graphic/field_board/narc_0044.NCGR b/files/graphic/field_board/narc_0044.NCGR deleted file mode 100644 index 0d4073ce..00000000 Binary files a/files/graphic/field_board/narc_0044.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0044.png b/files/graphic/field_board/narc_0044.png new file mode 100644 index 00000000..a30999c7 Binary files /dev/null and b/files/graphic/field_board/narc_0044.png differ diff --git a/files/graphic/field_board/narc_0045.NCGR b/files/graphic/field_board/narc_0045.NCGR deleted file mode 100644 index 1db915f8..00000000 Binary files a/files/graphic/field_board/narc_0045.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0045.png b/files/graphic/field_board/narc_0045.png new file mode 100644 index 00000000..031e9c2f Binary files /dev/null and b/files/graphic/field_board/narc_0045.png differ diff --git a/files/graphic/field_board/narc_0046.NCGR b/files/graphic/field_board/narc_0046.NCGR deleted file mode 100644 index 5eaa1a63..00000000 Binary files a/files/graphic/field_board/narc_0046.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0046.png b/files/graphic/field_board/narc_0046.png new file mode 100644 index 00000000..e119ac73 Binary files /dev/null and b/files/graphic/field_board/narc_0046.png differ diff --git a/files/graphic/field_board/narc_0047.NCGR b/files/graphic/field_board/narc_0047.NCGR deleted file mode 100644 index 9ba02c72..00000000 Binary files a/files/graphic/field_board/narc_0047.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0047.png b/files/graphic/field_board/narc_0047.png new file mode 100644 index 00000000..99554fe8 Binary files /dev/null and b/files/graphic/field_board/narc_0047.png differ diff --git a/files/graphic/field_board/narc_0048.NCGR b/files/graphic/field_board/narc_0048.NCGR deleted file mode 100644 index 91b4e253..00000000 Binary files a/files/graphic/field_board/narc_0048.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0048.png b/files/graphic/field_board/narc_0048.png new file mode 100644 index 00000000..2f75369e Binary files /dev/null and b/files/graphic/field_board/narc_0048.png differ diff --git a/files/graphic/field_board/narc_0049.NCGR b/files/graphic/field_board/narc_0049.NCGR deleted file mode 100644 index 42ee64bd..00000000 Binary files a/files/graphic/field_board/narc_0049.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0049.png b/files/graphic/field_board/narc_0049.png new file mode 100644 index 00000000..a6ab4d6d Binary files /dev/null and b/files/graphic/field_board/narc_0049.png differ diff --git a/files/graphic/field_board/narc_0050.NCGR b/files/graphic/field_board/narc_0050.NCGR deleted file mode 100644 index ed820ee1..00000000 Binary files a/files/graphic/field_board/narc_0050.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0050.png b/files/graphic/field_board/narc_0050.png new file mode 100644 index 00000000..90cadf55 Binary files /dev/null and b/files/graphic/field_board/narc_0050.png differ diff --git a/files/graphic/field_board/narc_0051.NCGR b/files/graphic/field_board/narc_0051.NCGR deleted file mode 100644 index 2aa39b2b..00000000 Binary files a/files/graphic/field_board/narc_0051.NCGR and /dev/null differ diff --git a/files/graphic/field_board/narc_0051.png b/files/graphic/field_board/narc_0051.png new file mode 100644 index 00000000..348bf037 Binary files /dev/null and b/files/graphic/field_board/narc_0051.png differ diff --git a/filesystem.mk b/filesystem.mk index 41cabe36..c0cd6ac5 100644 --- a/filesystem.mk +++ b/filesystem.mk @@ -3276,6 +3276,60 @@ files/resource/eng/trial/trial.narc: \ files/resource/eng/trial/trial/narc_0006.NCLR \ files/resource/eng/trial/trial/narc_0007.NCGR +files/graphic/field_board.narc: \ + files/graphic/field_board/narc_0000.NCGR \ + files/graphic/field_board/narc_0001.NCLR \ + files/graphic/field_board/narc_0002.NCGR \ + files/graphic/field_board/narc_0003.NCGR \ + files/graphic/field_board/narc_0004.NCGR \ + files/graphic/field_board/narc_0005.NCGR \ + files/graphic/field_board/narc_0006.NCGR \ + files/graphic/field_board/narc_0007.NCGR \ + files/graphic/field_board/narc_0008.NCGR \ + files/graphic/field_board/narc_0009.NCGR \ + files/graphic/field_board/narc_0010.NCGR \ + files/graphic/field_board/narc_0011.NCGR \ + files/graphic/field_board/narc_0012.NCGR \ + files/graphic/field_board/narc_0013.NCGR \ + files/graphic/field_board/narc_0014.NCGR \ + files/graphic/field_board/narc_0015.NCGR \ + files/graphic/field_board/narc_0016.NCGR \ + files/graphic/field_board/narc_0017.NCGR \ + files/graphic/field_board/narc_0018.NCGR \ + files/graphic/field_board/narc_0019.NCGR \ + files/graphic/field_board/narc_0020.NCGR \ + files/graphic/field_board/narc_0021.NCGR \ + files/graphic/field_board/narc_0022.NCGR \ + files/graphic/field_board/narc_0023.NCGR \ + files/graphic/field_board/narc_0024.NCGR \ + files/graphic/field_board/narc_0025.NCGR \ + files/graphic/field_board/narc_0026.NCGR \ + files/graphic/field_board/narc_0027.NCGR \ + files/graphic/field_board/narc_0028.NCGR \ + files/graphic/field_board/narc_0029.NCGR \ + files/graphic/field_board/narc_0030.NCGR \ + files/graphic/field_board/narc_0031.NCGR \ + files/graphic/field_board/narc_0032.NCGR \ + files/graphic/field_board/narc_0033.NCGR \ + files/graphic/field_board/narc_0034.NCGR \ + files/graphic/field_board/narc_0035.NCGR \ + files/graphic/field_board/narc_0036.NCGR \ + files/graphic/field_board/narc_0037.NCGR \ + files/graphic/field_board/narc_0038.NCGR \ + files/graphic/field_board/narc_0039.NCGR \ + files/graphic/field_board/narc_0040.NCGR \ + files/graphic/field_board/narc_0041.NCGR \ + files/graphic/field_board/narc_0042.NCGR \ + files/graphic/field_board/narc_0043.NCGR \ + files/graphic/field_board/narc_0044.NCGR \ + files/graphic/field_board/narc_0045.NCGR \ + files/graphic/field_board/narc_0046.NCGR \ + files/graphic/field_board/narc_0047.NCGR \ + files/graphic/field_board/narc_0048.NCGR \ + files/graphic/field_board/narc_0049.NCGR \ + files/graphic/field_board/narc_0050.NCGR \ + files/graphic/field_board/narc_0051.NCGR + ## Trainer names files/msgdata/msg/narc_0559.txt: files/poketool/trainer/trdata.json (echo " -"; $(GREP) -w '"name":' $< | cut -d'"' -f4) | $(SED) 's/^(.+)$$/{TRNAME}\1\r/g' > $@ diff --git a/graphics_rules.mk b/graphics_rules.mk index 8bbbf8bb..80f178f0 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -116,6 +116,7 @@ CLOBBER_SIZE_VERSION101_NCGR_FILES := files/graphic/bag_gra/narc_0002.NCGR \ 4BPP_NCLR_FILES := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/demo/title/titledemo/narc_0016.NCLR \ + files/graphic/field_board/narc_0001.NCLR \ files/poketool/icongra/poke_icon/narc_0000.NCLR \ files/resource/eng/trial/trial/narc_0000.NCLR \ files/resource/eng/trial/trial/narc_0003.NCLR \ @@ -161,6 +162,57 @@ VERSION101_SOPC_NCGR_FILES := files/application/wifi_earth/wifi_earth/narc_0005. files/demo/title/titledemo/narc_0007.NCGR \ files/demo/title/titledemo/narc_0011.NCGR \ files/demo/title/titledemo/narc_0015.NCGR \ + files/graphic/field_board/narc_0000.NCGR \ + files/graphic/field_board/narc_0002.NCGR \ + files/graphic/field_board/narc_0003.NCGR \ + files/graphic/field_board/narc_0004.NCGR \ + files/graphic/field_board/narc_0005.NCGR \ + files/graphic/field_board/narc_0006.NCGR \ + files/graphic/field_board/narc_0007.NCGR \ + files/graphic/field_board/narc_0008.NCGR \ + files/graphic/field_board/narc_0009.NCGR \ + files/graphic/field_board/narc_0010.NCGR \ + files/graphic/field_board/narc_0011.NCGR \ + files/graphic/field_board/narc_0012.NCGR \ + files/graphic/field_board/narc_0013.NCGR \ + files/graphic/field_board/narc_0014.NCGR \ + files/graphic/field_board/narc_0015.NCGR \ + files/graphic/field_board/narc_0016.NCGR \ + files/graphic/field_board/narc_0017.NCGR \ + files/graphic/field_board/narc_0018.NCGR \ + files/graphic/field_board/narc_0019.NCGR \ + files/graphic/field_board/narc_0020.NCGR \ + files/graphic/field_board/narc_0021.NCGR \ + files/graphic/field_board/narc_0022.NCGR \ + files/graphic/field_board/narc_0023.NCGR \ + files/graphic/field_board/narc_0024.NCGR \ + files/graphic/field_board/narc_0025.NCGR \ + files/graphic/field_board/narc_0026.NCGR \ + files/graphic/field_board/narc_0027.NCGR \ + files/graphic/field_board/narc_0028.NCGR \ + files/graphic/field_board/narc_0029.NCGR \ + files/graphic/field_board/narc_0030.NCGR \ + files/graphic/field_board/narc_0031.NCGR \ + files/graphic/field_board/narc_0032.NCGR \ + files/graphic/field_board/narc_0033.NCGR \ + files/graphic/field_board/narc_0034.NCGR \ + files/graphic/field_board/narc_0035.NCGR \ + files/graphic/field_board/narc_0036.NCGR \ + files/graphic/field_board/narc_0037.NCGR \ + files/graphic/field_board/narc_0038.NCGR \ + files/graphic/field_board/narc_0039.NCGR \ + files/graphic/field_board/narc_0040.NCGR \ + files/graphic/field_board/narc_0041.NCGR \ + files/graphic/field_board/narc_0042.NCGR \ + files/graphic/field_board/narc_0043.NCGR \ + files/graphic/field_board/narc_0044.NCGR \ + files/graphic/field_board/narc_0045.NCGR \ + files/graphic/field_board/narc_0046.NCGR \ + files/graphic/field_board/narc_0047.NCGR \ + files/graphic/field_board/narc_0048.NCGR \ + files/graphic/field_board/narc_0049.NCGR \ + files/graphic/field_board/narc_0050.NCGR \ + files/graphic/field_board/narc_0051.NCGR \ files/graphic/poketch/narc_0010.NCGR \ files/resource/eng/trial/trial/narc_0001.NCGR \ files/resource/eng/trial/trial/narc_0004.NCGR @@ -450,6 +502,57 @@ NCGR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0005.NCGR \ files/graphic/bag_gra/narc_0002.NCGR \ files/graphic/bag_gra/narc_0006.NCGR \ files/graphic/bag_gra/narc_0034.NCGR \ + files/graphic/field_board/narc_0000.NCGR \ + files/graphic/field_board/narc_0002.NCGR \ + files/graphic/field_board/narc_0003.NCGR \ + files/graphic/field_board/narc_0004.NCGR \ + files/graphic/field_board/narc_0005.NCGR \ + files/graphic/field_board/narc_0006.NCGR \ + files/graphic/field_board/narc_0007.NCGR \ + files/graphic/field_board/narc_0008.NCGR \ + files/graphic/field_board/narc_0009.NCGR \ + files/graphic/field_board/narc_0010.NCGR \ + files/graphic/field_board/narc_0011.NCGR \ + files/graphic/field_board/narc_0012.NCGR \ + files/graphic/field_board/narc_0013.NCGR \ + files/graphic/field_board/narc_0014.NCGR \ + files/graphic/field_board/narc_0015.NCGR \ + files/graphic/field_board/narc_0016.NCGR \ + files/graphic/field_board/narc_0017.NCGR \ + files/graphic/field_board/narc_0018.NCGR \ + files/graphic/field_board/narc_0019.NCGR \ + files/graphic/field_board/narc_0020.NCGR \ + files/graphic/field_board/narc_0021.NCGR \ + files/graphic/field_board/narc_0022.NCGR \ + files/graphic/field_board/narc_0023.NCGR \ + files/graphic/field_board/narc_0024.NCGR \ + files/graphic/field_board/narc_0025.NCGR \ + files/graphic/field_board/narc_0026.NCGR \ + files/graphic/field_board/narc_0027.NCGR \ + files/graphic/field_board/narc_0028.NCGR \ + files/graphic/field_board/narc_0029.NCGR \ + files/graphic/field_board/narc_0030.NCGR \ + files/graphic/field_board/narc_0031.NCGR \ + files/graphic/field_board/narc_0032.NCGR \ + files/graphic/field_board/narc_0033.NCGR \ + files/graphic/field_board/narc_0034.NCGR \ + files/graphic/field_board/narc_0035.NCGR \ + files/graphic/field_board/narc_0036.NCGR \ + files/graphic/field_board/narc_0037.NCGR \ + files/graphic/field_board/narc_0038.NCGR \ + files/graphic/field_board/narc_0039.NCGR \ + files/graphic/field_board/narc_0040.NCGR \ + files/graphic/field_board/narc_0041.NCGR \ + files/graphic/field_board/narc_0042.NCGR \ + files/graphic/field_board/narc_0043.NCGR \ + files/graphic/field_board/narc_0044.NCGR \ + files/graphic/field_board/narc_0045.NCGR \ + files/graphic/field_board/narc_0046.NCGR \ + files/graphic/field_board/narc_0047.NCGR \ + files/graphic/field_board/narc_0048.NCGR \ + files/graphic/field_board/narc_0049.NCGR \ + files/graphic/field_board/narc_0050.NCGR \ + files/graphic/field_board/narc_0051.NCGR \ files/itemtool/itemdata/item_icon/narc_0002.NCGR \ files/itemtool/itemdata/item_icon/narc_0004.NCGR \ files/itemtool/itemdata/item_icon/narc_0006.NCGR \ @@ -717,6 +820,7 @@ NCLR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/demo/title/titledemo/narc_0016.NCLR \ files/graphic/bag_gra/narc_0003.NCLR \ files/graphic/bag_gra/narc_0034.NCLR \ + files/graphic/field_board/narc_0001.NCLR \ files/itemtool/itemdata/item_icon/narc_0002.NCLR \ files/itemtool/itemdata/item_icon/narc_0004.NCLR \ files/itemtool/itemdata/item_icon/narc_0006.NCLR \ -- cgit v1.2.3 From e530ed281130c373950e1963d33913f41fa92f39 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Sun, 4 Jul 2021 10:48:51 -0500 Subject: Match unk0204AF24 --- arm9/asm/unk_0204AF24.s | 248 ------------------------------------------------ arm9/src/unk_0204AF24.c | 133 ++++++++++++++++++++++++++ arm9/src/unk_0206015C.c | 5 +- include/unk_0204AF24.h | 19 ++++ 4 files changed, 153 insertions(+), 252 deletions(-) delete mode 100644 arm9/asm/unk_0204AF24.s create mode 100644 arm9/src/unk_0204AF24.c create mode 100644 include/unk_0204AF24.h diff --git a/arm9/asm/unk_0204AF24.s b/arm9/asm/unk_0204AF24.s deleted file mode 100644 index e0a88f0f..00000000 --- a/arm9/asm/unk_0204AF24.s +++ /dev/null @@ -1,248 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0204AF24 -FUN_0204AF24: ; 0x0204AF24 - push {r3, lr} - bl FUN_02046528 - bl FUN_0203739C - cmp r0, #0x0 - bne _0204AF36 - mov r0, #0x1 - pop {r3, pc} -_0204AF36: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0204AF3C -FUN_0204AF3C: ; 0x0204AF3C - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_02046528 - add r4, r0, #0x0 - bl FUN_0203739C - cmp r0, #0x0 - bne _0204AF54 - bl GF_AssertFail - pop {r3-r5, pc} -_0204AF54: - add r0, r4, #0x0 - bl FUN_02037394 - ldr r1, _0204AF68 ; =FUN_0204AF24 - add r0, r5, #0x0 - mov r2, #0x0 - bl FUN_0204640C - pop {r3-r5, pc} - nop -_0204AF68: .word FUN_0204AF24 - - thumb_func_start FUN_0204AF6C -FUN_0204AF6C: ; 0x0204AF6C - push {r3, lr} - bl FUN_02046528 - bl FUN_020464A4 - cmp r0, #0x0 - beq _0204AF7E - mov r0, #0x1 - pop {r3, pc} -_0204AF7E: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0204AF84 -FUN_0204AF84: ; 0x0204AF84 - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_02046528 - add r4, r0, #0x0 - bl FUN_0203739C - cmp r0, #0x0 - beq _0204AF9C - bl GF_AssertFail - pop {r3-r5, pc} -_0204AF9C: - add r0, r4, #0x0 - bl FUN_0204649C - ldr r1, _0204AFB0 ; =FUN_0204AF6C - add r0, r5, #0x0 - mov r2, #0x0 - bl FUN_0204640C - pop {r3-r5, pc} - nop -_0204AFB0: .word FUN_0204AF6C - - thumb_func_start FUN_0204AFB4 -FUN_0204AFB4: ; 0x0204AFB4 - push {r3, lr} - bl FUN_0200E308 - cmp r0, #0x0 - beq _0204AFC2 - mov r0, #0x1 - pop {r3, pc} -_0204AFC2: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0204AFC8 -FUN_0204AFC8: ; 0x0204AFC8 - push {r3-r4, lr} - sub sp, #0xc - add r4, r0, #0x0 - bl FUN_02046528 - bl FUN_0203739C - cmp r0, #0x0 - bne _0204AFE2 - bl GF_AssertFail - add sp, #0xc - pop {r3-r4, pc} -_0204AFE2: - mov r0, #0x6 - str r0, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - mov r0, #0x4 - str r0, [sp, #0x8] - mov r0, #0x0 - add r1, r0, #0x0 - add r2, r0, #0x0 - add r3, r0, #0x0 - bl FUN_0200E1D0 - ldr r1, _0204B008 ; =FUN_0204AFB4 - add r0, r4, #0x0 - mov r2, #0x0 - bl FUN_0204640C - add sp, #0xc - pop {r3-r4, pc} - .balign 4 -_0204B008: .word FUN_0204AFB4 - - thumb_func_start FUN_0204B00C -FUN_0204B00C: ; 0x0204B00C - push {r3-r4, lr} - sub sp, #0xc - add r4, r0, #0x0 - bl FUN_02046528 - bl FUN_0203739C - cmp r0, #0x0 - bne _0204B026 - bl GF_AssertFail - add sp, #0xc - pop {r3-r4, pc} -_0204B026: - mov r0, #0x6 - str r0, [sp, #0x0] - mov r1, #0x1 - str r1, [sp, #0x4] - mov r0, #0x4 - str r0, [sp, #0x8] - mov r0, #0x0 - add r2, r1, #0x0 - add r3, r0, #0x0 - bl FUN_0200E1D0 - ldr r1, _0204B04C ; =FUN_0204AFB4 - add r0, r4, #0x0 - mov r2, #0x0 - bl FUN_0204640C - add sp, #0xc - pop {r3-r4, pc} - nop -_0204B04C: .word FUN_0204AFB4 - - thumb_func_start FUN_0204B050 -FUN_0204B050: ; 0x0204B050 - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_02046530 - add r4, r0, #0x0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - beq _0204B06A - cmp r0, #0x1 - beq _0204B078 - cmp r0, #0x2 - beq _0204B086 - b _0204B08A -_0204B06A: - add r0, r5, #0x0 - bl FUN_0204AFC8 - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - b _0204B08A -_0204B078: - add r0, r5, #0x0 - bl FUN_0204AF3C - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - b _0204B08A -_0204B086: - mov r0, #0x1 - pop {r3-r5, pc} -_0204B08A: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0204B090 -FUN_0204B090: ; 0x0204B090 - ldr r3, _0204B098 ; =FUN_0204640C - ldr r1, _0204B09C ; =FUN_0204B050 - mov r2, #0x0 - bx r3 - .balign 4 -_0204B098: .word FUN_0204640C -_0204B09C: .word FUN_0204B050 - - thumb_func_start FUN_0204B0A0 -FUN_0204B0A0: ; 0x0204B0A0 - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_02046530 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02046528 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - beq _0204B0C0 - cmp r1, #0x1 - beq _0204B0CE - cmp r1, #0x2 - beq _0204B0E0 - b _0204B0E4 -_0204B0C0: - add r0, r5, #0x0 - bl FUN_0204AF84 - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - b _0204B0E4 -_0204B0CE: - bl MOD05_021E331C - add r0, r5, #0x0 - bl FUN_0204B00C - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - b _0204B0E4 -_0204B0E0: - mov r0, #0x1 - pop {r3-r5, pc} -_0204B0E4: - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_0204B0E8 -FUN_0204B0E8: ; 0x0204B0E8 - ldr r3, _0204B0F0 ; =FUN_0204640C - ldr r1, _0204B0F4 ; =FUN_0204B0A0 - mov r2, #0x0 - bx r3 - .balign 4 -_0204B0F0: .word FUN_0204640C -_0204B0F4: .word FUN_0204B0A0 diff --git a/arm9/src/unk_0204AF24.c b/arm9/src/unk_0204AF24.c new file mode 100644 index 00000000..83c6dcfc --- /dev/null +++ b/arm9/src/unk_0204AF24.c @@ -0,0 +1,133 @@ +#include "global.h" +#include "unk_0204AF24.h" + +extern THUMB_FUNC void FUN_02037394(struct UnkSavStruct80 *); +extern THUMB_FUNC u32 FUN_0200E308(void); +extern THUMB_FUNC void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); +extern THUMB_FUNC void MOD05_021E331C(struct UnkSavStruct80 *); + +THUMB_FUNC BOOL FUN_0204AF24(struct UnkStruct_0204639C * arg0) +{ + if(!FUN_0203739C(FUN_02046528(arg0))) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AF3C(struct UnkStruct_0204639C * r5) +{ + struct UnkSavStruct80 * r4 = FUN_02046528(r5); + if(!FUN_0203739C(r4)) + { + GF_ASSERT(0); + return; + } + FUN_02037394(r4); + FUN_0204640C(r5, &FUN_0204AF24, NULL); +} + +THUMB_FUNC BOOL FUN_0204AF6C(struct UnkStruct_0204639C * arg0) +{ + if(FUN_020464A4(FUN_02046528(arg0))) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AF84(struct UnkStruct_0204639C * r5) +{ + struct UnkSavStruct80 * r4 = FUN_02046528(r5); + if(FUN_0203739C(r4)) + { + GF_ASSERT(0); + return; + } + FUN_0204649C(r4); + FUN_0204640C(r5, &FUN_0204AF6C, NULL); +} + +THUMB_FUNC BOOL FUN_0204AFB4(struct UnkStruct_0204639C * arg0) +{ +#pragma unused(arg0) + if(FUN_0200E308()) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void FUN_0204AFC8(struct UnkStruct_0204639C * r4) +{ + if(!FUN_0203739C(FUN_02046528(r4))) + { + GF_ASSERT(0); + return; + } + FUN_0200E1D0(0, 0, 0, 0, 6, 1, 4); + FUN_0204640C(r4, &FUN_0204AFB4, 0); +} + +THUMB_FUNC void FUN_0204B00C(struct UnkStruct_0204639C * r4) +{ + if(!FUN_0203739C(FUN_02046528(r4))) + { + GF_ASSERT(0); + return; + } + FUN_0200E1D0(0, 1, 1, 0, 6, 1, 4); + FUN_0204640C(r4, FUN_0204AFB4, 0); +} + +THUMB_FUNC BOOL FUN_0204B050(struct UnkStruct_0204639C * r5) +{ + u32 * r4 = FUN_02046530(r5); + switch(r4[0]) + { + case 0: + FUN_0204AFC8(r5); + r4[0]++; + break; + case 1: + FUN_0204AF3C(r5); + r4[0]++; + break; + case 2: + return TRUE; + default: + } + return FALSE; +} + +THUMB_FUNC void FUN_0204B090(struct UnkStruct_0204639C * r0) +{ + FUN_0204640C(r0, &FUN_0204B050, 0); +} + +THUMB_FUNC BOOL FUN_0204B0A0(struct UnkStruct_0204639C * r5) +{ + u32 * r4 = FUN_02046530(r5); + struct UnkSavStruct80 * r0 = FUN_02046528(r5); + switch(r4[0]) + { + case 0: + FUN_0204AF84(r5); + r4[0]++; + break; + case 1: + MOD05_021E331C(r0); + FUN_0204B00C(r5); + r4[0]++; + break; + case 2: + return TRUE; + default: + } + return FALSE; +} + +THUMB_FUNC void FUN_0204B0E8(struct UnkStruct_0204639C * r0) +{ + FUN_0204640C(r0, &FUN_0204B0A0, 0); +} diff --git a/arm9/src/unk_0206015C.c b/arm9/src/unk_0206015C.c index 0bf3a15a..37837d6f 100644 --- a/arm9/src/unk_0206015C.c +++ b/arm9/src/unk_0206015C.c @@ -3,6 +3,7 @@ #include "heap.h" #include "event_data.h" #include "main.h" +#include "unk_0204AF24.h" /* Note to future reader, there might be some errors in the return type / parameters. They are right for this code @@ -23,10 +24,6 @@ extern THUMB_FUNC u32 MOD06_022451F0(u32); extern THUMB_FUNC void PlaySE(u32); extern THUMB_FUNC void FUN_02049160(struct UnkStruct_0204639C*, u32); -extern THUMB_FUNC void FUN_0204AF84(struct UnkStruct_0204639C*); -extern THUMB_FUNC void FUN_0204AF3C(struct UnkStruct_0204639C *); -extern THUMB_FUNC void FUN_0204AFC8(struct UnkStruct_0204639C *); -extern THUMB_FUNC void FUN_0204B00C(struct UnkStruct_0204639C *); extern THUMB_FUNC void FUN_0204C1B4(struct UnkStruct_0204639C*, u32,u32,u32,u32,u32,u32,u32); extern THUMB_FUNC u32 FUN_020553A0(u32); extern THUMB_FUNC void FUN_0205889C(u32, u32); diff --git a/include/unk_0204AF24.h b/include/unk_0204AF24.h new file mode 100644 index 00000000..e77bcc35 --- /dev/null +++ b/include/unk_0204AF24.h @@ -0,0 +1,19 @@ +#ifndef POKEDIAMOND_UNK_0204AF24_H +#define POKEDIAMOND_UNK_0204AF24_H + +#include "nitro/types.h" +#include "unk_0204639C.h" + +BOOL FUN_0204AF24(struct UnkStruct_0204639C * arg0); +void FUN_0204AF3C(struct UnkStruct_0204639C * r5); +BOOL FUN_0204AF6C(struct UnkStruct_0204639C * arg0); +void FUN_0204AF84(struct UnkStruct_0204639C * r5); +BOOL FUN_0204AFB4(struct UnkStruct_0204639C * arg0); +void FUN_0204AFC8(struct UnkStruct_0204639C * r4); +void FUN_0204B00C(struct UnkStruct_0204639C * r4); +BOOL FUN_0204B050(struct UnkStruct_0204639C * r5); +void FUN_0204B090(struct UnkStruct_0204639C * r0); +BOOL FUN_0204B0A0(struct UnkStruct_0204639C * r5); +void FUN_0204B0E8(struct UnkStruct_0204639C * r0); + +#endif // POKEDIAMOND_UNK_0204AF24_H -- cgit v1.2.3 From 5caaf8bb4d662d33dfcb16db0cb6d059bc04a9ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 4 Jul 2021 19:08:46 +0200 Subject: fix warnings --- arm9/src/unk_020040F4.c | 164 ++++++++++++++++++++++++++---------------------- include/unk_020040F4.h | 64 +++++++++++++------ 2 files changed, 135 insertions(+), 93 deletions(-) diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 6b7dbab3..04d0bc43 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -27,29 +27,29 @@ extern u32 MIC_StopAutoSampling(); extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); extern u32 NNS_SndWaveOutAllocChannel(u32); extern void NNS_SndWaveOutFreeChannel(u32); -extern u32 NNS_SndWaveOutStart(u32, u32, u32, u32, u32, u32, u32, u32, u32, u32); +extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, u32); extern void NNS_SndWaveOutStop(u32); extern void NNS_SndWaveOutIsPlaying(u32); extern void NNS_SndWaveOutSetPan(u32, u32); extern void NNS_SndWaveOutSetSpeed(u32, u32); -extern void NNS_SndWaveOutSetVolume(u32, u32); +extern void NNS_SndWaveOutSetVolume(u32, s32); extern struct WaveArcInfo *NNS_SndArcGetWaveArcInfo(u32); extern u32 NNS_SndArcGetFileSize(u32); -extern s32 NNS_SndArcReadFile(u32, u32, u32, u32); +extern s32 NNS_SndArcReadFile(u32, void *, u32, u32); extern BOOL NNS_SndCaptureIsActive(); -extern u32 NNS_SndCaptureStartReverb(u32, u32, u32, u32, u32); +extern u32 NNS_SndCaptureStartReverb(void *, u32, u32, u32, u32); extern void NNS_SndCaptureStopReverb(u32); extern void NNS_SndCaptureSetReverbVolume(); -extern u32 NNS_SndCaptureStartEffect(u32, u32, u32, u32, u32, void (*)(), u32); +extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *); extern void NNS_SndCaptureStopEffect(); -extern void NNS_SndPlayerSetTrackPitch(u32, u32, u32); -extern void NNS_SndPlayerSetTrackPan(u32, u32, u32); +extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); extern void NNS_SndSetMonoFlag(u32 param0); extern void FUN_02003CE8(u32); extern void FUN_020053CC(u32, u32); extern u32 NNS_SndArcGetFileAddress(u32); extern u32 SND_GetWaveDataAddress(u32, u32); -extern u32 NNS_SndPlayerGetTick(u32); +extern u32 NNS_SndPlayerGetTick(u32 *); extern void NNS_SndPlayerSetAllocatableChannel(u32, u32); extern BOOL FUN_02005404(void); extern void NNS_SndPlayerSetPlayerVolume(u32, u8); @@ -211,7 +211,7 @@ THUMB_FUNC BOOL FUN_02004180(s32 param0) return res; } -THUMB_FUNC u32 FUN_0200433C(u8 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_0200433C(u8 param0, int param1, u32 param2) { u8 *st0 = FUN_02003D38(20); u8 *st4 = FUN_02003D38(21); @@ -313,6 +313,8 @@ THUMB_FUNC void FUN_020044A8(s32 param0) THUMB_FUNC void FUN_020044D4(int param0, u32 param1) { + #pragma unused(param1) + u8 *ptr = FUN_02003D38(11); FUN_02003D38(23); @@ -352,6 +354,8 @@ THUMB_FUNC void FUN_020044D4(int param0, u32 param1) THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) { + #pragma unused(param1) + u16 *ptr = FUN_02003D38(31); u32 r0 = FUN_02004900(*ptr); @@ -371,7 +375,7 @@ THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) FUN_02004DBC(0); } -THUMB_FUNC void FUN_020045C4(u32 param0, u32 param1) +THUMB_FUNC void FUN_020045C4(int param0, u32 param1) { u8 *ptr = FUN_02003D38(18); u16 *ptr2 = FUN_02003D38(31); @@ -402,8 +406,9 @@ THUMB_FUNC void FUN_020045C4(u32 param0, u32 param1) GF_Snd_SaveState((int *)FUN_02003D38(26)); } -THUMB_FUNC void FUN_02004648(u32 param0, u32 param1) +THUMB_FUNC void FUN_02004648(int param0, u32 param1) { + #pragma unused(param1) FUN_02003D38(23); FUN_020051AC(); @@ -414,8 +419,9 @@ THUMB_FUNC void FUN_02004648(u32 param0, u32 param1) FUN_0200521C(param0); } -THUMB_FUNC void FUN_02004680(u32 param0, u32 param1) +THUMB_FUNC void FUN_02004680(int param0, u32 param1) { + #pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_02004810(); @@ -423,8 +429,9 @@ THUMB_FUNC void FUN_02004680(u32 param0, u32 param1) FUN_0200521C(param0); } -THUMB_FUNC void FUN_020046A0(u32 param0, u32 param1) +THUMB_FUNC void FUN_020046A0(int param0, u32 param1) { + #pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(6); @@ -432,8 +439,9 @@ THUMB_FUNC void FUN_020046A0(u32 param0, u32 param1) FUN_0200521C(param0); } -THUMB_FUNC void FUN_020046C4(u32 param0, u32 param1) +THUMB_FUNC void FUN_020046C4(int param0, u32 param1) { + #pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(7); @@ -441,22 +449,23 @@ THUMB_FUNC void FUN_020046C4(u32 param0, u32 param1) FUN_0200521C(param0); } -THUMB_FUNC void FUN_020046E8(u32 param0) +THUMB_FUNC void FUN_020046E8(s32 param0) { FUN_02004738(); FUN_02004180(param0); GF_Snd_SaveState((int *)FUN_02003D38(27)); } -THUMB_FUNC void FUN_02004704(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004704(s32 param0, int param1, u32 param2) { + #pragma unused(param2) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(param0); FUN_0200521C(param1); } -THUMB_FUNC void FUN_02004724(u32 param0) +THUMB_FUNC void FUN_02004724(int param0) { GetSoundDataPointer(); FUN_020051AC(); @@ -475,10 +484,10 @@ THUMB_FUNC int FUN_02004748(s32 param0) if (param0 >= 7) { GF_AssertFail(); - return *(u32 *)FUN_02003D38(26); + return *(int *)FUN_02003D38(26); } - u32 *r5; + int *r5; switch (param0) { case 0: @@ -510,7 +519,7 @@ THUMB_FUNC int FUN_02004748(s32 param0) THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) { u8 *ptr; - u32 r4; + int r4; if (param0 == 1) { ptr = FUN_02003D38(11); @@ -529,7 +538,7 @@ THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) if (param1 == 0) { - FUN_02004110(FUN_020048EC(FUN_02003FF4(r4))); + FUN_02004110((u16)FUN_020048EC(FUN_02003FF4(r4))); } NNS_SndPlayerPause(FUN_02003FF4(r4), param1); @@ -544,12 +553,12 @@ THUMB_FUNC void FUN_02004810() *ptr2 = 0; } -THUMB_FUNC void FUN_02004828(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004828(int param0, u32 param1, u32 param2) { NNS_SndPlayerMoveVolume(FUN_02003FF4(param0), param1, param2); } -THUMB_FUNC void FUN_0200483C(u32 param0, s32 param1) +THUMB_FUNC void FUN_0200483C(int param0, s32 param1) { if (param1 < 0) { @@ -564,7 +573,7 @@ THUMB_FUNC void FUN_0200483C(u32 param0, s32 param1) NNS_SndPlayerSetInitialVolume(FUN_02003FF4(param0), param1); } -THUMB_FUNC void FUN_02004858(u32 param0, u32 param1) +THUMB_FUNC void FUN_02004858(u32 param0, int param1) { u8 *ret = NNS_SndArcGetSeqParam(param0); u8 r4; @@ -590,7 +599,7 @@ THUMB_FUNC void FUN_02004858(u32 param0, u32 param1) THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) { - FUN_0200483C(FUN_02004018(FUN_020048D0(param0)), param1); + FUN_0200483C((int)FUN_02004018(FUN_020048D0(param0)), param1); } THUMB_FUNC void FUN_020048A0(int param0, u32 param1, u32 param2) @@ -628,7 +637,7 @@ THUMB_FUNC u32 FUN_020048EC(u32 *param0) THUMB_FUNC u32 FUN_020048F4(u16 param0) { - NNS_SndArcGetBankInfo(FUN_02004900(param0)); + return NNS_SndArcGetBankInfo(FUN_02004900(param0)); } THUMB_FUNC u16 FUN_02004900(u16 param0) @@ -649,6 +658,7 @@ THUMB_FUNC u32 FUN_02004914(u32 param0) THUMB_FUNC u32 FUN_0200491C(u32 param0) { + #pragma unused(param0) GetSoundDataPointer(); return MIC_StopAutoSampling(); } @@ -759,18 +769,18 @@ THUMB_FUNC void FUN_02004A04(u32 param0) } } -THUMB_FUNC u32 FUN_02004A6C(u32 *param0, u32 param1) +THUMB_FUNC u32 FUN_02004A6C(struct UnkStruct1 *param0, u32 param1) { - u32 res = NNS_SndWaveOutStart(*(u32 *)param0[0], - param0[1], - param0[2], - param0[3], - param0[4], - param0[5], - param0[6], - param0[7], - param0[8], - param0[9]); + u32 res = NNS_SndWaveOutStart(*(u32 *)param0->unk00, + param0->unk04, + param0->unk08, + param0->unk0c, + param0->unk10, + param0->unk14, + param0->unk18, + param0->unk1c, + param0->unk20, + param0->unk24); if (res == 0) { FUN_02004A04(param1); @@ -815,16 +825,13 @@ THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1); } -struct WaveArcInfo -{ - u32 unk00 : 24; -}; -THUMB_FUNC u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4) + +THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) { GetSoundDataPointer(); - u32 *r4 = FUN_02003D38(33); + void **r4 = FUN_02003D38(33); GF_ASSERT(param3 == 14 || param3 == 15); struct WaveArcInfo *r7 = NNS_SndArcGetWaveArcInfo(param0); @@ -863,20 +870,19 @@ THUMB_FUNC u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 void *res = FUN_02004930(param3); - u32 st8[10]; - - st8[1] = 0; - st8[0] = res; - st8[2] = *r4; - st8[3] = 0; - st8[6] = 0x3443; - st8[4] = 0; - st8[7] = param1; - st8[8] = 0x6000; - st8[9] = param2; - st8[5] = r6; - - u32 ret = FUN_02004A6C(st8, param3); + struct UnkStruct1 st8; + st8.unk04 = 0; + st8.unk00 = res; + st8.unk08 = *r4; + st8.unk0c = 0; + st8.unk18 = 0x3443; + st8.unk10 = 0; + st8.unk1c = param1; + st8.unk20 = 0x6000; + st8.unk24 = param2; + st8.unk14 = r6; + + u32 ret = FUN_02004A6C(&st8, param3); FUN_02004AF8(param3, param1); u8 *r0 = FUN_02003D38(14); *r0 = 1; @@ -898,7 +904,7 @@ THUMB_FUNC void FUN_02004C3C(u32 param0) { GetSoundDataPointer(); u8 *ptr = FUN_02003D38(14); - u32 *ptr2 = FUN_02003D38(33); + void **ptr2 = FUN_02003D38(33); GF_ASSERT(param0 == 14 || param0 == 15); @@ -963,20 +969,20 @@ THUMB_FUNC void FUN_02004D04(s32 param0) param0 = 0; } - *ptr = param0; + *ptr = (u8)param0; } -THUMB_FUNC void FUN_02004D20(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004D20(int param0, u32 param1, u32 param2) { NNS_SndPlayerSetTrackPitch(FUN_02003FF4(param0), param1, param2); } THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) { - FUN_02004D20(FUN_02004018(FUN_020048D0(param0)), param1, param2); + FUN_02004D20((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); } -THUMB_FUNC void FUN_02004D4C(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004D4C(int param0, u32 param1, u32 param2) { NNS_SndPlayerSetTrackPan(FUN_02003FF4(param0), param1, param2); } @@ -1045,6 +1051,8 @@ THUMB_FUNC u32 FUN_02004E08( THUMB_FUNC void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) { + #pragma unused(param0) + #pragma unused(param5) u32 *ptr = FUN_02003D38(2); FUN_020053CC(0, param2); @@ -1120,10 +1128,11 @@ THUMB_FUNC u32 FUN_02004ED0(s32 param0) return *ptr; } -THUMB_FUNC u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2) +THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct2 *param1, s32 param2) { + #pragma unused(param0) u32 r4 = FUN_02004F64(1); - u32 r5 = param1[2]; + u32 r5 = param1->unk08; s32 r1 = (param2 / (3 * 0x100)) << 1; if (r1 < 0) @@ -1154,12 +1163,17 @@ THUMB_FUNC u32 FUN_02004F64(int param0) return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); } -THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) + + + + +THUMB_FUNC void FUN_02004F70(struct UnkStruct2 *param0, u8 *param1, int param2, s32 param3) { - int r0, r1; + int r0; + s32 r1; int i, j; u32 r12 = FUN_02004F28(1, param0, param3); - r1 = r12 - 100; + r1 = (s32)r12 - 100; if (r1 < 0) { r1 = 0; @@ -1168,7 +1182,7 @@ THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) int r3 = 0; int r7 = 0; s8 r5; - if ((param0 + 12)[r1] < 0x80) + if (param0->unk0c[r1] < 0x80) { r5 = 1; } @@ -1183,7 +1197,7 @@ THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) r0 = 0; if (r5 > 0) { - if ((param0 + 12)[i] > 0x80) + if (param0->unk0c[i] > 0x80) { r0 = 1; } @@ -1194,7 +1208,7 @@ THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) } else { - if ((param0 + 12)[i] < 0x80) + if (param0->unk0c[i] < 0x80) { r0 = 1; } @@ -1227,7 +1241,7 @@ THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) r3 = 0; r0 = 0; - if ((param0 + 12)[i] < 0x80) + if (param0->unk0c[i] < 0x80) { r5 = 1; } @@ -1251,7 +1265,7 @@ THUMB_FUNC void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3) { if (param1[i] == 0 && param1[i + 1] != 0) { - param1[i] = param1[i + 1] / 2; + param1[i] = (u8)(param1[i + 1] / 2); return; } } @@ -1282,7 +1296,7 @@ THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, v st10[i][1] = param1[param2 - (*r7) + i]; } - for (i = param2 - 1; i >= *r7 - 1; i--) + for (i = (int)param2 - 1; i >= *r7 - 1; i--) { r0 = 0; for (j = 0; j < *r7; j++) @@ -1290,7 +1304,7 @@ THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, v r0 += param0[i - j]; } - param0[i] = r0 / (*r7); + param0[i] = (s16)(r0 / (*r7)); r0 = 0; for (j = 0; j < *r7; j++) @@ -1298,7 +1312,7 @@ THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, v r0 += param1[i - j]; } - param1[i] = r0 / (*r7); + param1[i] = (s16)(r0 / (*r7)); } for (i = 0; i < *r7; i++) diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 56f43d40..9bcc5cc4 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -1,5 +1,33 @@ #include "global.h" + +struct WaveArcInfo +{ + u32 unk00 : 24; +}; + +struct UnkStruct1 { + void *unk00; + u32 unk04; + void *unk08; + u32 unk0c; + u32 unk10; + u32 unk14; + u32 unk18; + s32 unk1c; + u32 unk20; + u32 unk24; +}; + + +struct UnkStruct2 { + u32 unk00; + u32 unk04; + u32 unk08; + u8 unk0c[9]; +}; + + void FUN_020040F4(u8 param0); u8 FUN_02004104(); void FUN_02004110(u16 param0); @@ -9,25 +37,25 @@ u16 FUN_02004140(); void FUN_0200414C(u16 param0); void FUN_0200415C(u8 param0); BOOL FUN_02004180(s32 param0); -u32 FUN_0200433C(u8 param0, u32 param1, u32 param2); +u32 FUN_0200433C(u8 param0, int param1, u32 param2); void FUN_020044A8(s32 param0); void FUN_020044D4(int param0, u32 param1); void FUN_02004568(int seqNo, u16 param1); -void FUN_020045C4(u32 param0, u32 param1); -void FUN_02004648(u32 param0, u32 param1); -void FUN_02004680(u32 param0, u32 param1); -void FUN_020046A0(u32 param0, u32 param1); -void FUN_020046C4(u32 param0, u32 param1); -void FUN_020046E8(u32 param0); -void FUN_02004704(u32 param0, u32 param1, u32 param2); -void FUN_02004724(u32 param0); +void FUN_020045C4(int param0, u32 param1); +void FUN_02004648(int param0, u32 param1); +void FUN_02004680(int param0, u32 param1); +void FUN_020046A0(int param0, u32 param1); +void FUN_020046C4(int param0, u32 param1); +void FUN_020046E8(s32 param0); +void FUN_02004704(s32 param0, int param1, u32 param2); +void FUN_02004724(int param0); void FUN_02004738(); int FUN_02004748(s32 param0); void FUN_020047C8(u8 param0, u8 param1); void FUN_02004810(); -void FUN_02004828(u32 param0, u32 param1, u32 param2); -void FUN_0200483C(u32 param0, s32 param1); -void FUN_02004858(u32 param0, u32 param1); +void FUN_02004828(int param0, u32 param1, u32 param2); +void FUN_0200483C(int param0, s32 param1); +void FUN_02004858(u32 param0, int param1); void FUN_0200488C(u16 param0, u16 param1); void FUN_020048A0(int param0, u32 param1, u32 param2); BOOL FUN_020048BC(int param0); @@ -41,13 +69,13 @@ u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3); void *FUN_02004930(u32 param0); u32 FUN_02004984(u32 param0); void FUN_02004A04(u32 param0); -u32 FUN_02004A6C(u32 *param0, u32 param1); +u32 FUN_02004A6C(struct UnkStruct1 *param0, u32 param1); void FUN_02004AAC(u32 param0); void FUN_02004ABC(u32 param0); void FUN_02004ACC(u32 param0, u32 param1); void FUN_02004AE4(u32 param0, u32 param1); void FUN_02004AF8(u32 param0, s32 param1); -u32 FUN_02004B30(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4); +u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4); void FUN_02004C1C(u8 *param0, u32 param1); void FUN_02004C3C(u32 param0); BOOL FUN_02004C78(); @@ -57,9 +85,9 @@ void FUN_02004CAC(); void FUN_02004CB4(); void FUN_02004CFC(); void FUN_02004D04(s32 param0); -void FUN_02004D20(u32 param0, u32 param1, u32 param2); +void FUN_02004D20(int param0, u32 param1, u32 param2); void FUN_02004D34(u16 param0, u32 param1, u32 param2); -void FUN_02004D4C(u32 param0, u32 param1, u32 param2); +void FUN_02004D4C(int param0, u32 param1, u32 param2); void FUN_02004D60(u32 param0); void FUN_02004D74(u32 param0); void FUN_02004D84(u32 param0); @@ -74,9 +102,9 @@ u32 FUN_02004E80(u32 param0); u32 FUN_02004E8C(u32 *param0); u32 FUN_02004E98(s32 param0); u32 FUN_02004ED0(s32 param0); -u32 FUN_02004F28(u32 param0, u32 *param1, s32 param2); +u32 FUN_02004F28(u32 param0, struct UnkStruct2 *param1, s32 param2); u32 FUN_02004F64(int param0); -void FUN_02004F70(u8 *param0, u8 *param1, int param2, u32 param3); +void FUN_02004F70(struct UnkStruct2 *param0, u8 *param1, int param2, s32 param3); void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4); void FUN_02005160(u32 param0); void FUN_0200516C(u32 param0); -- cgit v1.2.3 From b7716fb3b0fd0435a18bbed73335d690cfe9912a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 4 Jul 2021 19:24:04 +0200 Subject: remove obsolete externs --- arm9/src/scrcmd_sound.c | 7 +------ arm9/src/sound.c | 4 +--- arm9/src/unk_020040F4.c | 1 + arm9/src/unk_0204AEA8.c | 2 +- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/arm9/src/scrcmd_sound.c b/arm9/src/scrcmd_sound.c index 1251c612..ae20b5a4 100644 --- a/arm9/src/scrcmd_sound.c +++ b/arm9/src/scrcmd_sound.c @@ -1,14 +1,13 @@ #include "scrcmd.h" +#include "unk_020040F4.h" extern void* Sav2_Chatot_get(struct SaveBlock2* sav2); extern u32 FUN_02005D20(void *); extern void FUN_02005E6C(void *); -extern void FUN_0200433C(u32, u32, u32); extern u32 FUN_02005E28(void); extern void FUN_02005E64(void); extern BOOL FUN_02005CBC(void); extern void PlaySound(u16); -extern u32 FUN_02004124(u16); extern void FUN_0204AB20(struct UnkSavStruct80 *ctx, u16); extern u16 FUN_0204ABA8(struct UnkSavStruct80 *ctx, u32); extern void FUN_0200521C(u16); @@ -20,13 +19,9 @@ extern BOOL FUN_02005404(void); extern u16 FUN_02005410(u16); extern void PlaySE(u16); extern void FUN_020054F0(u16, u32); -extern void FUN_020047C8(u8, u8); -extern void FUN_020040F4(u8); extern BOOL FUN_02005508(u16); extern void FUN_02005578(u16); extern BOOL FUN_02005670(void); -extern void FUN_0200488C(u16, u16); - THUMB_FUNC BOOL ScrCmd_Unk02AE(struct ScriptContext *ctx) { diff --git a/arm9/src/sound.c b/arm9/src/sound.c index a5228dab..bc30b97a 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -2,6 +2,7 @@ #include "sound.h" #include "SPI_mic.h" #include "SPI_pm.h" +#include "unk_020040F4.h" #pragma thumb on @@ -18,9 +19,6 @@ void FUN_020040A4(struct SoundData *); void FUN_02003CE8(int); void FUN_020040DC(void); -extern BOOL FUN_020048BC(int); -extern void FUN_02004D60(u32); -extern BOOL FUN_02004D94(void); extern void FUN_0200521C(int); extern void FUN_0200538C(int, int, int); extern BOOL FUN_02005404(void); diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 04d0bc43..57e36fea 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -77,6 +77,7 @@ THUMB_FUNC void FUN_02004110(u16 param0) THUMB_FUNC u16 FUN_02004124() { + #pragma unused(param0) u16 *ptr = FUN_02003D38(9); return *ptr; diff --git a/arm9/src/unk_0204AEA8.c b/arm9/src/unk_0204AEA8.c index a2b2dd71..54deef4d 100644 --- a/arm9/src/unk_0204AEA8.c +++ b/arm9/src/unk_0204AEA8.c @@ -2,9 +2,9 @@ #include "heap.h" #include "unk_0204639C.h" #include "unk_0204AEA8.h" +#include "unk_020040F4.h" extern void MOD05_021E3444(u32, struct UnkSavStruct80 *, u32); -extern void FUN_0200433C(u32, u16, u32); THUMB_FUNC BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0) { -- cgit v1.2.3 From d1f82d018d0034baa1554a5d3dc79fd92b408d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 4 Jul 2021 19:25:57 +0200 Subject: cleanup --- arm9/src/unk_020040F4.c | 38 ++++++++++++++++---------------------- include/unk_020040F4.h | 23 +++++++++++------------ 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 57e36fea..d8624329 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -77,7 +77,6 @@ THUMB_FUNC void FUN_02004110(u16 param0) THUMB_FUNC u16 FUN_02004124() { - #pragma unused(param0) u16 *ptr = FUN_02003D38(9); return *ptr; @@ -314,7 +313,7 @@ THUMB_FUNC void FUN_020044A8(s32 param0) THUMB_FUNC void FUN_020044D4(int param0, u32 param1) { - #pragma unused(param1) +#pragma unused(param1) u8 *ptr = FUN_02003D38(11); @@ -355,7 +354,7 @@ THUMB_FUNC void FUN_020044D4(int param0, u32 param1) THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) { - #pragma unused(param1) +#pragma unused(param1) u16 *ptr = FUN_02003D38(31); @@ -409,7 +408,7 @@ THUMB_FUNC void FUN_020045C4(int param0, u32 param1) THUMB_FUNC void FUN_02004648(int param0, u32 param1) { - #pragma unused(param1) +#pragma unused(param1) FUN_02003D38(23); FUN_020051AC(); @@ -422,7 +421,7 @@ THUMB_FUNC void FUN_02004648(int param0, u32 param1) THUMB_FUNC void FUN_02004680(int param0, u32 param1) { - #pragma unused(param1) +#pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_02004810(); @@ -432,7 +431,7 @@ THUMB_FUNC void FUN_02004680(int param0, u32 param1) THUMB_FUNC void FUN_020046A0(int param0, u32 param1) { - #pragma unused(param1) +#pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(6); @@ -442,7 +441,7 @@ THUMB_FUNC void FUN_020046A0(int param0, u32 param1) THUMB_FUNC void FUN_020046C4(int param0, u32 param1) { - #pragma unused(param1) +#pragma unused(param1) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(7); @@ -459,7 +458,7 @@ THUMB_FUNC void FUN_020046E8(s32 param0) THUMB_FUNC void FUN_02004704(s32 param0, int param1, u32 param2) { - #pragma unused(param2) +#pragma unused(param2) FUN_02003D38(23); FUN_0200541C(); FUN_020044A8(param0); @@ -659,7 +658,7 @@ THUMB_FUNC u32 FUN_02004914(u32 param0) THUMB_FUNC u32 FUN_0200491C(u32 param0) { - #pragma unused(param0) +#pragma unused(param0) GetSoundDataPointer(); return MIC_StopAutoSampling(); } @@ -770,7 +769,7 @@ THUMB_FUNC void FUN_02004A04(u32 param0) } } -THUMB_FUNC u32 FUN_02004A6C(struct UnkStruct1 *param0, u32 param1) +THUMB_FUNC u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1) { u32 res = NNS_SndWaveOutStart(*(u32 *)param0->unk00, param0->unk04, @@ -826,8 +825,6 @@ THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1); } - - THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) { GetSoundDataPointer(); @@ -871,7 +868,7 @@ THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 void *res = FUN_02004930(param3); - struct UnkStruct1 st8; + struct UnkStruct_020040F4_1 st8; st8.unk04 = 0; st8.unk00 = res; st8.unk08 = *r4; @@ -1052,8 +1049,8 @@ THUMB_FUNC u32 FUN_02004E08( THUMB_FUNC void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) { - #pragma unused(param0) - #pragma unused(param5) +#pragma unused(param0) +#pragma unused(param5) u32 *ptr = FUN_02003D38(2); FUN_020053CC(0, param2); @@ -1129,9 +1126,9 @@ THUMB_FUNC u32 FUN_02004ED0(s32 param0) return *ptr; } -THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct2 *param1, s32 param2) +THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2) { - #pragma unused(param0) +#pragma unused(param0) u32 r4 = FUN_02004F64(1); u32 r5 = param1->unk08; @@ -1164,11 +1161,8 @@ THUMB_FUNC u32 FUN_02004F64(int param0) return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); } - - - - -THUMB_FUNC void FUN_02004F70(struct UnkStruct2 *param0, u8 *param1, int param2, s32 param3) +THUMB_FUNC void FUN_02004F70( + struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3) { int r0; s32 r1; diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 9bcc5cc4..4169aca5 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -1,12 +1,12 @@ #include "global.h" - struct WaveArcInfo { u32 unk00 : 24; }; -struct UnkStruct1 { +struct UnkStruct_020040F4_1 +{ void *unk00; u32 unk04; void *unk08; @@ -19,15 +19,14 @@ struct UnkStruct1 { u32 unk24; }; - -struct UnkStruct2 { - u32 unk00; - u32 unk04; - u32 unk08; - u8 unk0c[9]; +struct UnkStruct_020040F4_2 +{ + u32 unk00; + u32 unk04; + u32 unk08; + u8 unk0c[9]; }; - void FUN_020040F4(u8 param0); u8 FUN_02004104(); void FUN_02004110(u16 param0); @@ -69,7 +68,7 @@ u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3); void *FUN_02004930(u32 param0); u32 FUN_02004984(u32 param0); void FUN_02004A04(u32 param0); -u32 FUN_02004A6C(struct UnkStruct1 *param0, u32 param1); +u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1); void FUN_02004AAC(u32 param0); void FUN_02004ABC(u32 param0); void FUN_02004ACC(u32 param0, u32 param1); @@ -102,9 +101,9 @@ u32 FUN_02004E80(u32 param0); u32 FUN_02004E8C(u32 *param0); u32 FUN_02004E98(s32 param0); u32 FUN_02004ED0(s32 param0); -u32 FUN_02004F28(u32 param0, struct UnkStruct2 *param1, s32 param2); +u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2); u32 FUN_02004F64(int param0); -void FUN_02004F70(struct UnkStruct2 *param0, u8 *param1, int param2, s32 param3); +void FUN_02004F70(struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3); void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4); void FUN_02005160(u32 param0); void FUN_0200516C(u32 param0); -- cgit v1.2.3 From 6008ec050279c966454f1a3c1e067295b3d9c254 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Mon, 5 Jul 2021 12:58:54 -0500 Subject: Begone, THUMB_FUNC --- arm9/src/unk_0204AF24.c | 8 ++++---- arm9/src/unk_0206015C.c | 44 +++++++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/arm9/src/unk_0204AF24.c b/arm9/src/unk_0204AF24.c index 83c6dcfc..b506948f 100644 --- a/arm9/src/unk_0204AF24.c +++ b/arm9/src/unk_0204AF24.c @@ -1,10 +1,10 @@ #include "global.h" #include "unk_0204AF24.h" -extern THUMB_FUNC void FUN_02037394(struct UnkSavStruct80 *); -extern THUMB_FUNC u32 FUN_0200E308(void); -extern THUMB_FUNC void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); -extern THUMB_FUNC void MOD05_021E331C(struct UnkSavStruct80 *); +extern void FUN_02037394(struct UnkSavStruct80 *); +extern u32 FUN_0200E308(void); +extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); +extern void MOD05_021E331C(struct UnkSavStruct80 *); THUMB_FUNC BOOL FUN_0204AF24(struct UnkStruct_0204639C * arg0) { diff --git a/arm9/src/unk_0206015C.c b/arm9/src/unk_0206015C.c index 37837d6f..752a9970 100644 --- a/arm9/src/unk_0206015C.c +++ b/arm9/src/unk_0206015C.c @@ -9,29 +9,27 @@ in the return type / parameters. They are right for this code but they might not be for every code, please do not blindly trust these prototypes if you are decompiling these functions. */ -extern THUMB_FUNC u32 MOD06_02244DB0(u32); -extern THUMB_FUNC void MOD06_02244DBC(void*); -extern THUMB_FUNC void MOD06_02244DC4(void*, void*); -extern THUMB_FUNC void MOD06_02244EF8(void*); -extern THUMB_FUNC void MOD06_02244F18(void*); -extern THUMB_FUNC BOOL MOD06_02244F24(void*); -extern THUMB_FUNC void MOD06_02244F2C(void*); -extern THUMB_FUNC void* MOD06_02245088(struct UnkSavStruct80 * savStruct); -extern THUMB_FUNC u32 MOD06_02245114(u32, struct UnkSavStruct80*); -extern THUMB_FUNC void MOD06_02245190(u32); -extern THUMB_FUNC void MOD06_02245198(u8, u32); -extern THUMB_FUNC u32 MOD06_022451F0(u32); - -extern THUMB_FUNC void PlaySE(u32); -extern THUMB_FUNC void FUN_02049160(struct UnkStruct_0204639C*, u32); -extern THUMB_FUNC void FUN_0204C1B4(struct UnkStruct_0204639C*, u32,u32,u32,u32,u32,u32,u32); -extern THUMB_FUNC u32 FUN_020553A0(u32); -extern THUMB_FUNC void FUN_0205889C(u32, u32); -extern THUMB_FUNC void FUN_0205F1C4(struct ScriptState *); -extern THUMB_FUNC void FUN_0205F1D4(struct ScriptState *); -extern THUMB_FUNC void FUN_0206367C(struct UnkSavStruct80 *, u32); - - +extern u32 MOD06_02244DB0(u32); +extern void MOD06_02244DBC(void*); +extern void MOD06_02244DC4(void*, void*); +extern void MOD06_02244EF8(void*); +extern void MOD06_02244F18(void*); +extern BOOL MOD06_02244F24(void*); +extern void MOD06_02244F2C(void*); +extern void * MOD06_02245088(struct UnkSavStruct80 * savStruct); +extern u32 MOD06_02245114(u32, struct UnkSavStruct80*); +extern void MOD06_02245190(u32); +extern void MOD06_02245198(u8, u32); +extern u32 MOD06_022451F0(u32); + +extern void PlaySE(u32); +extern void FUN_02049160(struct UnkStruct_0204639C*, u32); +extern void FUN_0204C1B4(struct UnkStruct_0204639C*, u32,u32,u32,u32,u32,u32,u32); +extern u32 FUN_020553A0(u32); +extern void FUN_0205889C(u32, u32); +extern void FUN_0205F1C4(struct ScriptState *); +extern void FUN_0205F1D4(struct ScriptState *); +extern void FUN_0206367C(struct UnkSavStruct80 *, u32); THUMB_FUNC void FUN_0206015C(struct UnkSavStruct80 *savStruct) { -- cgit v1.2.3 From 724330a3f418b4471bc6ec0784a860012d3bfe18 Mon Sep 17 00:00:00 2001 From: GliMusings Date: Mon, 5 Jul 2021 13:02:51 -0500 Subject: Also, dealt with a compiler warning --- arm9/src/unk_0204AF24.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arm9/src/unk_0204AF24.c b/arm9/src/unk_0204AF24.c index b506948f..31b3ffb0 100644 --- a/arm9/src/unk_0204AF24.c +++ b/arm9/src/unk_0204AF24.c @@ -96,6 +96,7 @@ THUMB_FUNC BOOL FUN_0204B050(struct UnkStruct_0204639C * r5) case 2: return TRUE; default: + break; } return FALSE; } @@ -123,6 +124,7 @@ THUMB_FUNC BOOL FUN_0204B0A0(struct UnkStruct_0204639C * r5) case 2: return TRUE; default: + break; } return FALSE; } -- cgit v1.2.3 From 5f0a31c4470f86aaad37ab56e46ce33f6fb4167b Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 6 Jul 2021 00:31:33 +0100 Subject: decompile MSL_Common_arith --- arm9/asm/MSL_Common_arith.s | 11 ----------- arm9/lib/include/MSL.h | 8 ++++++++ arm9/lib/include/MSL_Common_arith.h | 8 ++++++++ arm9/lib/src/MSL_Common_arith.c | 7 +++++++ arm9/src/palette.c | 6 +++++- files/graphic/poketch/.gitignore | 1 + 6 files changed, 29 insertions(+), 12 deletions(-) delete mode 100644 arm9/asm/MSL_Common_arith.s create mode 100644 arm9/lib/include/MSL.h create mode 100644 arm9/lib/include/MSL_Common_arith.h create mode 100644 arm9/lib/src/MSL_Common_arith.c create mode 100644 files/graphic/poketch/.gitignore diff --git a/arm9/asm/MSL_Common_arith.s b/arm9/asm/MSL_Common_arith.s deleted file mode 100644 index 5d93a4de..00000000 --- a/arm9/asm/MSL_Common_arith.s +++ /dev/null @@ -1,11 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start abs -abs: ; 0x020DE3F0 - cmp r0, #0x0 - rsblt r0, r0, #0x0 - bx lr - arm_func_end abs diff --git a/arm9/lib/include/MSL.h b/arm9/lib/include/MSL.h new file mode 100644 index 00000000..a1709bc4 --- /dev/null +++ b/arm9/lib/include/MSL.h @@ -0,0 +1,8 @@ +#ifndef MSL_H +#define MSL_H + +//include all msl files here + +#include "MSL_Common_arith.h" + +#endif //MSL_H diff --git a/arm9/lib/include/MSL_Common_arith.h b/arm9/lib/include/MSL_Common_arith.h new file mode 100644 index 00000000..3ec6bdbc --- /dev/null +++ b/arm9/lib/include/MSL_Common_arith.h @@ -0,0 +1,8 @@ +#ifndef MSL_COMMON_ARITH_H +#define MSL_COMMON_ARITH_H + +#include "nitro/types.h" + +s32 abs(s32 val); + +#endif //MSL_COMMON_ARITH_H diff --git a/arm9/lib/src/MSL_Common_arith.c b/arm9/lib/src/MSL_Common_arith.c new file mode 100644 index 00000000..d4a2e834 --- /dev/null +++ b/arm9/lib/src/MSL_Common_arith.c @@ -0,0 +1,7 @@ +#include "MSL_Common_arith.h" +#include "function_target.h" + +ARM_FUNC s32 abs(s32 val) +{ + return val < 0 ? -val : val; +} diff --git a/arm9/src/palette.c b/arm9/src/palette.c index e4c42cc4..ff95a2d6 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -1,11 +1,15 @@ #include "global.h" +#include "MSL.h" #include "palette.h" #include "MI_memory.h" #include "gf_gfx_loader.h" #include "unk_0200CA44.h" #include "unk_020222E8.h" -extern int abs(int); +extern void *FUN_020222E8(); +extern void *FUN_020222F8(); +extern void *FUN_02022308(); +extern void *FUN_02022310(); THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) { diff --git a/files/graphic/poketch/.gitignore b/files/graphic/poketch/.gitignore new file mode 100644 index 00000000..a57ebae4 --- /dev/null +++ b/files/graphic/poketch/.gitignore @@ -0,0 +1 @@ +narc_0010.NCGR -- cgit v1.2.3 From 49a17b6a1803703e6dd7d01d0a0e59adc4d6d4d4 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 6 Jul 2021 00:36:12 +0100 Subject: cleanup palette.c --- arm9/src/palette.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/arm9/src/palette.c b/arm9/src/palette.c index ff95a2d6..82252594 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -6,11 +6,6 @@ #include "unk_0200CA44.h" #include "unk_020222E8.h" -extern void *FUN_020222E8(); -extern void *FUN_020222F8(); -extern void *FUN_02022308(); -extern void *FUN_02022310(); - THUMB_FUNC struct PaletteData *FUN_02002FD0(u32 heap_id) { struct PaletteData *ptr = AllocFromHeap(heap_id, sizeof(struct PaletteData)); -- cgit v1.2.3 From d62768df00ac272f38b09e90d0889caa59f7ff73 Mon Sep 17 00:00:00 2001 From: tgsm Date: Wed, 7 Jul 2021 06:40:27 -0500 Subject: game_init: move DTCM struct into the header --- arm9/src/game_init.c | 12 ------------ include/game_init.h | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 1c6098ea..9cc12ad2 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -16,18 +16,6 @@ extern void FUN_02022450(void); -typedef volatile struct -{ - u8 sys_and_irq_stack[0x3F80]; - u8 svc_stack[0x40]; - u8 reserved[0x38]; - u32 intr_check; - void * intr_vector; -} -OS_DTCM; - -#define DTCM (*(OS_DTCM *)HW_DTCM) - static struct { void * contents; u32 name_hash; diff --git a/include/game_init.h b/include/game_init.h index bf6569c4..0d2c9332 100644 --- a/include/game_init.h +++ b/include/game_init.h @@ -3,6 +3,18 @@ #include "main.h" +typedef volatile struct +{ + u8 sys_and_irq_stack[0x3F80]; + u8 svc_stack[0x40]; + u8 reserved[0x38]; + u32 intr_check; + void * intr_vector; +} +OS_DTCM; + +#define DTCM (*(OS_DTCM *)HW_DTCM) + void FUN_02015EA0(void); void FUN_02015ED4(void); void FUN_02015EF4(void); -- cgit v1.2.3 From eef820ba4669a78a62d106ea1ddb0380bd28ef20 Mon Sep 17 00:00:00 2001 From: tgsm Date: Wed, 7 Jul 2021 06:59:31 -0500 Subject: Decompile unk_02033F50 -> communication_error --- arm9/arm9.lsf | 2 +- arm9/asm/unk_02033F50.s | 266 ---------------------------------------- arm9/global.inc | 2 +- arm9/modules/80/asm/module_80.s | 2 +- arm9/src/communication_error.c | 159 ++++++++++++++++++++++++ arm9/src/main.c | 9 +- arm9/src/unk_02031734.c | 6 +- include/communication_error.h | 7 ++ 8 files changed, 176 insertions(+), 277 deletions(-) delete mode 100644 arm9/asm/unk_02033F50.s create mode 100644 arm9/src/communication_error.c create mode 100644 include/communication_error.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0153f5e3..d7310855 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -138,7 +138,7 @@ Static arm9 Object unk_020337E8.o Object unk_02033874.o Object unk_02033B68.o - Object unk_02033F50.o + Object communication_error.o Object wfc_user_info_warning.o Object map_matrix.o Object map_header.o diff --git a/arm9/asm/unk_02033F50.s b/arm9/asm/unk_02033F50.s deleted file mode 100644 index 7240c93f..00000000 --- a/arm9/asm/unk_02033F50.s +++ /dev/null @@ -1,266 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - .global UNK_020EEC9C -UNK_020EEC9C: ; 0x020EEC9C - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020EECA4 -UNK_020EECA4: ; 0x020EECA4 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EECB4 -UNK_020EECB4: ; 0x020EECB4 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020EECD0 -UNK_020EECD0: ; 0x020EECD0 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .text - - thumb_func_start FUN_02033F50 -FUN_02033F50: ; 0x02033F50 - ldr r3, _02033F64 ; =0x027E0000 - ldr r1, _02033F68 ; =0x00003FF8 - mov r0, #0x1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - ldr r3, _02033F6C ; =MI_WaitDma - mov r0, #0x3 - bx r3 - nop -_02033F64: .word 0x027E0000 -_02033F68: .word 0x00003FF8 -_02033F6C: .word MI_WaitDma - - thumb_func_start FUN_02033F70 -FUN_02033F70: ; 0x02033F70 - push {r3-r7, lr} - sub sp, #0x28 - add r4, r0, #0x0 - str r2, [sp, #0xc] - cmp r1, #0x4 - bhi _02033F92 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02033F88: ; jump table (using 16-bit offset) - .short _02033F92 - _02033F88 - 2; case 0 - .short _02033F96 - _02033F88 - 2; case 1 - .short _02033F9A - _02033F88 - 2; case 2 - .short _02033F9E - _02033F88 - 2; case 3 - .short _02033FA2 - _02033F88 - 2; case 4 -_02033F92: - mov r5, #0x1 - b _02033FA4 -_02033F96: - mov r5, #0x2 - b _02033FA4 -_02033F9A: - mov r5, #0x3 - b _02033FA4 -_02033F9E: - mov r5, #0x4 - b _02033FA4 -_02033FA2: - mov r5, #0x5 -_02033FA4: - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - bl OS_DisableIrqMask - ldr r1, _02034154 ; =FUN_02033F50 - mov r0, #0x1 - bl OS_SetIrqFunction - mov r0, #0x1 - bl OS_EnableIrqMask - mov r0, #0x0 - add r1, r0, #0x0 - bl Main_SetVBlankIntrCB - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_02015F34 - bl GX_DisableEngineALayers - bl GX_DisableEngineBLayers - mov r2, #0x1 - lsl r2, r2, #0x1a - ldr r1, [r2, #0x0] - ldr r0, _02034158 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0203415C ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl SetKeyRepeatTimers - ldr r0, _02034160 ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl GX_SwapDisplay - ldr r3, _02034164 ; =0x04000050 - mov r1, #0x0 - strh r1, [r3, #0x0] - ldr r0, _02034168 ; =0x04001050 - sub r3, #0x50 - strh r1, [r0, #0x0] - ldr r2, [r3, #0x0] - ldr r1, _0203416C ; =0xFFFF1FFF - sub r0, #0x50 - and r2, r1 - str r2, [r3, #0x0] - ldr r2, [r0, #0x0] - and r1, r2 - str r1, [r0, #0x0] - ldr r0, _02034170 ; =UNK_020EECD0 - bl GX_SetBanks - add r0, r4, #0x0 - bl BgConfig_Alloc - add r6, r0, #0x0 - ldr r0, _02034174 ; =UNK_020EECA4 - bl SetBothScreensModesAndDisable - mov r1, #0x0 - ldr r2, _02034178 ; =UNK_020EECB4 - add r0, r6, #0x0 - add r3, r1, #0x0 - bl InitBgFromTemplate - add r0, r6, #0x0 - mov r1, #0x0 - bl BgClearTilemapBufferAndCommit - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r2, _0203417C ; =0x000001F7 - add r0, r6, #0x0 - mov r3, #0x2 - str r4, [sp, #0x4] - bl FUN_0200CB00 - mov r0, #0x0 - mov r1, #0x20 - add r2, r4, #0x0 - bl FUN_02002ED0 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - add r3, r4, #0x0 - bl BG_ClearCharDataRange - ldr r1, _02034180 ; =0x00006C21 - mov r0, #0x0 - bl BG_SetMaskColor - ldr r1, _02034180 ; =0x00006C21 - mov r0, #0x4 - bl BG_SetMaskColor - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0xc8 - add r3, r4, #0x0 - bl NewMsgDataFromNarc - str r0, [sp, #0x10] - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - add r7, r0, #0x0 - mov r0, #0x6 - lsl r0, r0, #0x6 - add r1, r4, #0x0 - bl String_ctor - str r0, [sp, #0x14] - bl FUN_0201BD5C - add r0, r4, #0x0 - bl ScrStrBufs_new - add r4, r0, #0x0 - ldr r2, _02034184 ; =UNK_020EEC9C - add r0, r6, #0x0 - add r1, sp, #0x18 - bl AddWindow - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x18 - mov r1, #0xf - add r3, r2, #0x0 - bl FillWindowPixelRect - ldr r2, _0203417C ; =0x000001F7 - add r0, sp, #0x18 - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - mov r0, #0x2 - str r0, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - ldr r2, [sp, #0xc] - add r0, r4, #0x0 - mov r1, #0x0 - mov r3, #0x5 - bl BufferIntegerAsString - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x14] - add r1, r5, #0x0 - bl ReadMsgDataIntoString - ldr r2, [sp, #0x14] - add r0, r4, #0x0 - add r1, r7, #0x0 - bl StringExpandPlaceholders - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0x18 - add r2, r7, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r7, #0x0 - bl String_dtor - bl GX_BothDispOn - mov r0, #0x0 - bl FUN_0200E394 - mov r0, #0x1 - bl FUN_0200E394 - mov r0, #0x0 - mov r1, #0x3f - mov r2, #0x3 - bl FUN_0200A274 - add r0, sp, #0x18 - bl RemoveWindow - ldr r0, [sp, #0x10] - bl DestroyMsgData - add r0, r4, #0x0 - bl ScrStrBufs_delete - add r0, r6, #0x0 - bl FreeToHeap - add sp, #0x28 - pop {r3-r7, pc} - nop -_02034154: .word FUN_02033F50 -_02034158: .word 0xFFFFE0FF -_0203415C: .word 0x04001000 -_02034160: .word gMain + 0x60 -_02034164: .word 0x04000050 -_02034168: .word 0x04001050 -_0203416C: .word 0xFFFF1FFF -_02034170: .word UNK_020EECD0 -_02034174: .word UNK_020EECA4 -_02034178: .word UNK_020EECB4 -_0203417C: .word 0x000001F7 -_02034180: .word 0x00006C21 -_02034184: .word UNK_020EEC9C diff --git a/arm9/global.inc b/arm9/global.inc index da12b3fd..4595d537 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2471,7 +2471,7 @@ .extern FUN_02033EEC .extern FUN_02033F04 .extern FUN_02033F20 -.extern FUN_02033F70 +.extern ShowCommunicationError .extern ShowWFCUserInfoWarning .extern MapMatrix_New .extern MapMatrix_Load diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index a1fe2ee3..fae0c264 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -15323,7 +15323,7 @@ _02234FFC: mov r0, #3 mov r1, #1 mov r2, #0 - bl FUN_02033F70 + bl ShowCommunicationError _02235006: mov r0, #3 pop {r3, r4, r5, pc} diff --git a/arm9/src/communication_error.c b/arm9/src/communication_error.c new file mode 100644 index 00000000..0ea26458 --- /dev/null +++ b/arm9/src/communication_error.c @@ -0,0 +1,159 @@ +#include "global.h" +#include "bg_window.h" +#include "communication_error.h" +#include "game_init.h" +#include "MI_dma.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "text.h" + +extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); +extern void FUN_0200A274(fx32 brightness, fx32, u32); +extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); +extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); +extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); +extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); + +static const struct WindowTemplate sCommunicationErrorWindowTemplate = { + .bgId = GF_BG_LYR_MAIN_0, + .tilemapLeft = 3, + .tilemapTop = 3, + .width = 26, + .height = 18, + .paletteNum = 0x01, + .baseTile = 0x23, +}; + +static const struct GraphicsModes sCommunicationErrorGraphicsModes = { + .dispMode = GX_DISPMODE_GRAPHICS, + .bgMode = GX_BGMODE_0, + .subMode = GX_BGMODE_0, + ._2d3dMode = GX_BG0_AS_2D, +}; + +static const struct BgTemplate sCommunicationErrorBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .size = GF_BG_SCR_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x0000, + .charBase = GX_BG_CHARBASE_0x18000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 1, + .areaOver = GX_BG_AREAOVER_XLU, + .unk17 = 0, + .mosaic = FALSE, +}; + +static const struct GraphicsBanks sCommunicationErrorGraphicsBanks = { + .bg = 3, + .bgextpltt = 0, + .subbg = 0, + .subbgextpltt = 0, + .obj = 0, + .objextpltt = 0, + .subobj = 0, + .subobjextpltt = 0, + .tex = 0, + .texpltt = 0, +}; + +THUMB_FUNC void FUN_02033F50(void) +{ + DTCM.intr_check |= 1; + MI_WaitDma(3); +} + +THUMB_FUNC void ShowCommunicationError(u32 heap_id, u32 error, u32 error_code) +{ + struct Window window; + + u32 error_message_no; + switch (error) + { + default: + case 0: + error_message_no = 1; + break; + case 1: + error_message_no = 2; + break; + case 2: + error_message_no = 3; + break; + case 3: + error_message_no = 4; + break; + case 4: + error_message_no = 5; + break; + } + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + OS_DisableIrqMask(OS_IE_V_BLANK); + OS_SetIrqFunction(OS_IE_V_BLANK, FUN_02033F50); + OS_EnableIrqMask(OS_IE_V_BLANK); + + Main_SetVBlankIntrCB(NULL, NULL); + FUN_02015F34(NULL, NULL); + + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + + SetKeyRepeatTimers(4, 8); + + gMain.unk65 = 0; + + GX_SwapDisplay(); + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); + GX_SetBanks(&sCommunicationErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sCommunicationErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sCommunicationErrorBgTemplate, 0); + BgClearTilemapBufferAndCommit(bg_config, 0); + FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); + BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); + BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); + BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); + + struct MsgData* error_message_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0200_bin, heap_id); + struct String* error_message_str = String_ctor(384, heap_id); + struct String* tmp_str = String_ctor(384, heap_id); + FUN_0201BD5C(); + struct ScrStrBufs* mgr = ScrStrBufs_new(heap_id); + + AddWindow(bg_config, &window, &sCommunicationErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + BufferIntegerAsString(mgr, 0, (s32)error_code, 5, 2, 1); + ReadMsgDataIntoString(error_message_data, error_message_no, tmp_str); + StringExpandPlaceholders(mgr, error_message_str, tmp_str); + + AddTextPrinterParameterized(&window, 0, error_message_str, 0, 0, 0, NULL); + String_dtor(error_message_str); + // BUG: tmp_str is never destroyed. + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + FUN_0200A274(0, 0x3F, 3); + + RemoveWindow(&window); + DestroyMsgData(error_message_data); + ScrStrBufs_delete(mgr); + FreeToHeap(bg_config); +} diff --git a/arm9/src/main.c b/arm9/src/main.c index d1a60190..fb4f8707 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -5,6 +5,7 @@ #include "CARD_backup.h" #include "CARD_pullOut.h" #include "CTRDG_common.h" +#include "communication_error.h" #include "PAD_pad.h" #include "main.h" #include "game_init.h" @@ -226,21 +227,19 @@ THUMB_FUNC void DoSoftReset(u32 parameter) } while (1); } -extern void FUN_02033F70(int, int, int); - THUMB_FUNC void FUN_02000F4C(u32 arg0, u32 arg1) { if (arg1 == 3) { - FUN_02033F70(0, 3, 0); + ShowCommunicationError(0, 3, 0); } else if (arg0 == 0) { - FUN_02033F70(0, 2, 0); + ShowCommunicationError(0, 2, 0); } else { - FUN_02033F70(0, 0, 0); + ShowCommunicationError(0, 0, 0); } FUN_02032DAC(); while (1) diff --git a/arm9/src/unk_02031734.c b/arm9/src/unk_02031734.c index 7d3b4c03..e6a1514b 100644 --- a/arm9/src/unk_02031734.c +++ b/arm9/src/unk_02031734.c @@ -1,6 +1,7 @@ #include "global.h" #include "unk_02031734.h" #include "MI_memory.h" +#include "communication_error.h" #include "game_init.h" #include "heap.h" #include "player_data.h" @@ -52,7 +53,6 @@ extern void MOD04_021DD6F0(); extern s32 MOD04_021D76AC(); extern MOD05_021D74E0(struct SaveBlock2 *sav2, u32 param1); extern void MOD04_021D83A8(void (*param0)(s32)); -extern void FUN_02033F70(int, int, int); extern void FUN_0200541C(); THUMB_FUNC void FUN_02031734(struct SaveBlock2 *sav2, u8 param1) @@ -2090,7 +2090,7 @@ THUMB_FUNC u8 FUN_020335B8() THUMB_FUNC void FUN_020335D0(s32 param0) { - FUN_02033F70(0, 1, param0); + ShowCommunicationError(0, 1, param0); while (TRUE) { } @@ -2098,7 +2098,7 @@ THUMB_FUNC void FUN_020335D0(s32 param0) THUMB_FUNC void FUN_020335E0() { - FUN_02033F70(0, 4, 0); + ShowCommunicationError(0, 4, 0); while (TRUE) { } diff --git a/include/communication_error.h b/include/communication_error.h new file mode 100644 index 00000000..2e8ad1c7 --- /dev/null +++ b/include/communication_error.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_COMMUNICATION_ERROR_H +#define POKEDIAMOND_COMMUNICATION_ERROR_H + +void FUN_02033F50(void); +void ShowCommunicationError(u32 heap_id, u32 error, u32 error_code); + +#endif -- cgit v1.2.3 From d7a8de0573dc9c373e32035e596989ff9e22bf73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Thu, 8 Jul 2021 09:41:04 +0200 Subject: document some sound stuff --- arm9/asm/unk_020051F4.s | 112 ++++++++++++++++++++-------------------- arm9/asm/unk_02005CFC.s | 6 +-- arm9/global.inc | 36 ++++++------- arm9/modules/12/asm/module_12.s | 2 +- arm9/modules/16/asm/module_16.s | 26 +++++----- arm9/modules/18/asm/module_18.s | 4 +- arm9/modules/56/asm/module_56.s | 2 +- arm9/modules/57/asm/module_57.s | 10 ++-- arm9/modules/60/asm/module_60.s | 4 +- arm9/src/sound.c | 8 +-- arm9/src/unk_020040F4.c | 102 ++++++++++++++++++------------------ include/sound.h | 2 +- include/unk_020040F4.h | 36 ++++++------- 13 files changed, 175 insertions(+), 175 deletions(-) diff --git a/arm9/asm/unk_020051F4.s b/arm9/asm/unk_020051F4.s index d6d06005..6e6cec72 100644 --- a/arm9/asm/unk_020051F4.s +++ b/arm9/asm/unk_020051F4.s @@ -10,7 +10,7 @@ FUN_020051F4: ; 0x020051F4 bl FUN_020048D0 bl FUN_02004018 add r4, r0, #0x0 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndArcPlayerStartSeq add r6, r0, #0x0 @@ -88,7 +88,7 @@ FUN_02005288: ; 0x02005288 bl FUN_02003D38 bl GF_Snd_SaveState add r0, r4, #0x0 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndArcPlayerStartSeq pop {r3-r5, pc} @@ -106,14 +106,14 @@ FUN_020052B8: ; 0x020052B8 bl FUN_02003D38 add r4, r0, #0x0 mov r0, #0x0 - bl FUN_02003FF4 - bl FUN_020048EC + bl GetSoundPlayer + bl GF_SndPlayerGetSeqNo bl FUN_02004900 add r1, r0, #0x0 add r0, r5, #0x0 bl FUN_020045C4 add r0, r6, #0x0 - bl FUN_02003FF4 + bl GetSoundPlayer add r6, r0, #0x0 ldrh r0, [r4, #0x0] bl FUN_02004900 @@ -150,7 +150,7 @@ _0200532A: mov r1, #0x1 bl GF_Snd_LoadSeqEx mov r0, #0x7 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndArcPlayerStartSeq add r4, r0, #0x0 @@ -171,7 +171,7 @@ FUN_02005350: ; 0x02005350 cmp r0, #0xff beq _0200536E bl FUN_02004018 - bl FUN_02003FF4 + bl GetSoundPlayer bl NNS_SndHandleReleaseSeq _0200536E: bl FUN_02005374 @@ -205,12 +205,12 @@ FUN_0200538C: ; 0x0200538C bne _020053B2 mov r1, #0x0 add r2, r1, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume _020053B2: add r0, r7, #0x0 add r1, r6, #0x0 add r2, r5, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume add r0, r5, #0x0 bl FUN_02004D74 mov r0, #0x3 @@ -236,7 +236,7 @@ FUN_020053CC: ; 0x020053CC bl FUN_02004018 add r1, r5, #0x0 add r2, r4, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume add r0, r4, #0x0 bl FUN_02004D74 _020053FC: @@ -257,7 +257,7 @@ FUN_02005404: ; 0x02005404 FUN_02005410: ; 0x02005410 push {r3, lr} bl FUN_020048D0 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo pop {r3, pc} thumb_func_start FUN_0200541C @@ -297,7 +297,7 @@ FUN_02005454: ; 0x02005454 bl FUN_02003D38 add r6, r0, #0x0 mov r0, #0x7 - bl FUN_02003FF4 + bl GetSoundPlayer mov r1, #0x0 bl NNS_SndPlayerStopSeq bl FUN_02005374 @@ -349,7 +349,7 @@ PlaySE: ; 0x020054C8 bl FUN_020048D0 bl FUN_02004018 add r4, r0, #0x0 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndArcPlayerStartSeq add r6, r0, #0x0 @@ -371,7 +371,7 @@ _020054F4: .word NNS_SndPlayerStopSeqBySeqNo FUN_020054F8: ; 0x020054F8 push {r4, lr} add r4, r1, #0x0 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r4, #0x0 bl NNS_SndPlayerStopSeq pop {r4, pc} @@ -380,7 +380,7 @@ FUN_020054F8: ; 0x020054F8 FUN_02005508: ; 0x02005508 push {r3, lr} bl FUN_020048D0 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo pop {r3, pc} thumb_func_start FUN_02005514 @@ -389,7 +389,7 @@ FUN_02005514: ; 0x02005514 mov r4, #0x0 _02005518: add r0, r4, #0x3 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo cmp r0, #0x1 bne _02005526 mov r0, #0x1 @@ -408,7 +408,7 @@ FUN_02005530: ; 0x02005530 add r4, r2, #0x0 bl FUN_020048D0 bl FUN_02004018 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 add r2, r4, #0x0 bl NNS_SndPlayerSetTrackPan @@ -425,7 +425,7 @@ FUN_0200554C: ; 0x0200554C mov r5, #0x0 _0200555C: add r0, r4, r5 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r7, #0x0 add r2, r6, #0x0 bl NNS_SndPlayerSetTrackPan @@ -477,7 +477,7 @@ _020055BC: mov r0, #0x0 bl FUN_02005614 mov r0, #0x1 - bl FUN_02003FF4 + bl GetSoundPlayer mov r1, #0x2 str r1, [sp, #0x0] sub r1, r1, #0x3 @@ -491,7 +491,7 @@ _020055BC: b _02005606 _020055E8: mov r0, #0x8 - bl FUN_02003FF4 + bl GetSoundPlayer mov r1, #0x2 str r1, [sp, #0x0] sub r1, r1, #0x3 @@ -523,11 +523,11 @@ FUN_02005614: ; 0x02005614 mov r0, #0xe bl FUN_02003D38 mov r0, #0x1 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndPlayerStopSeq mov r0, #0x8 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndPlayerStopSeq ldrb r0, [r6, #0x0] @@ -575,7 +575,7 @@ _02005696: pop {r3-r5, pc} _020056A4: mov r0, #0x0 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo pop {r3-r5, pc} thumb_func_start FUN_020056AC @@ -685,7 +685,7 @@ _02005772: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -741,7 +741,7 @@ _020057E6: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -753,7 +753,7 @@ _02005802: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -768,7 +768,7 @@ _02005826: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -776,14 +776,14 @@ _02005826: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 mov r2, #0x40 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch add r0, r4, #0x0 mov r1, #0x14 bl FUN_02005BC8 ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x8 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan ldr r2, [sp, #0x18] add r0, r4, #0x0 mov r1, #0x8 @@ -795,7 +795,7 @@ _02005868: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -806,14 +806,14 @@ _02005868: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 mov r2, #0xc0 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch add r0, r4, #0x0 mov r1, #0x10 bl FUN_02005BC8 ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x8 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan ldr r2, [sp, #0x18] add r0, r4, #0x0 mov r1, #0x8 @@ -858,7 +858,7 @@ _02005900: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -867,7 +867,7 @@ _02005900: add r2, r0, #0x0 ldr r1, _02005AB8 ; =0x0000FFFF sub r2, #0xe1 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _02005928: add r0, r4, #0x0 @@ -875,7 +875,7 @@ _02005928: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -883,7 +883,7 @@ _02005928: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 mov r2, #0x2c - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch mov r1, #0x3f add r0, r4, #0x0 mvn r1, r1 @@ -891,7 +891,7 @@ _02005928: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x8 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan ldr r2, [sp, #0x18] add r0, r4, #0x0 mov r1, #0x8 @@ -903,7 +903,7 @@ _0200596C: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -915,7 +915,7 @@ _0200596C: add r2, r0, #0x0 ldr r1, _02005AB8 ; =0x0000FFFF sub r2, #0x81 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _0200599C: add r0, r4, #0x0 @@ -923,7 +923,7 @@ _0200599C: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -934,7 +934,7 @@ _0200599C: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 mov r2, #0x3c - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _020059CA: mov r0, #0xe @@ -964,7 +964,7 @@ _020059FE: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -976,7 +976,7 @@ _020059FE: add r2, r0, #0x0 ldr r1, _02005AB8 ; =0x0000FFFF sub r2, #0x2d - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _02005A2E: add r0, r4, #0x0 @@ -984,7 +984,7 @@ _02005A2E: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -993,7 +993,7 @@ _02005A2E: add r2, r0, #0x0 ldr r1, _02005AB8 ; =0x0000FFFF sub r2, #0x61 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _02005A56: add r0, r4, #0x0 @@ -1001,7 +1001,7 @@ _02005A56: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x1 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan add r0, r4, #0x0 mov r1, #0x1 add r2, r6, #0x0 @@ -1013,7 +1013,7 @@ _02005A56: add r2, r0, #0x0 ldr r1, _02005AB8 ; =0x0000FFFF sub r2, #0x61 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch b _02005AC2 _02005A86: add r0, r4, #0x0 @@ -1028,11 +1028,11 @@ _02005A86: ldr r1, _02005AB8 ; =0x0000FFFF mov r0, #0x8 add r2, r5, #0x0 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan mov r0, #0x8 add r1, r6, #0x0 mov r2, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume b _02005AC2 .balign 4 _02005AB4: .word 0x000001B9 @@ -1052,7 +1052,7 @@ FUN_02005AC8: ; 0x02005AC8 add r5, r0, #0x0 add r0, r4, #0x0 add r1, r2, #0x0 - bl FUN_0200483C + bl GF_SndPlayerSetInitialVolume add r0, r5, #0x0 add r1, r4, #0x0 bl FUN_02004858 @@ -1109,11 +1109,11 @@ FUN_02005B2C: ; 0x02005B2C bne _02005B58 mov r0, #0x1 mov r1, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume ldr r2, [r5, #0x0] mov r0, #0x8 mov r1, #0x0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume _02005B58: ldr r0, [r5, #0x0] sub r0, r0, #0x1 @@ -1186,7 +1186,7 @@ FUN_02005BC8: ; 0x02005BC8 ldr r1, _02005BF4 ; =0x0000FFFF mov r0, #0x8 add r2, r4, #0x0 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch add r0, r5, #0x0 pop {r3-r5, pc} .balign 4 @@ -1237,7 +1237,7 @@ _02005C48: mov r1, #0x3 bl GF_Snd_LoadSeqEx mov r0, #0x2 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r5, #0x0 bl NNS_SndArcPlayerStartSeq add r4, r0, #0x0 @@ -1254,7 +1254,7 @@ FUN_02005C74: ; 0x02005C74 bl FUN_02003D38 add r4, r0, #0x0 mov r0, #0x2 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo cmp r0, #0x0 beq _02005C8C mov r0, #0x1 @@ -1277,7 +1277,7 @@ FUN_02005CA0: ; 0x02005CA0 push {r4, lr} add r4, r0, #0x0 mov r0, #0x2 - bl FUN_02003FF4 + bl GetSoundPlayer add r1, r4, #0x0 bl NNS_SndPlayerStopSeq mov r0, #0x6 diff --git a/arm9/asm/unk_02005CFC.s b/arm9/asm/unk_02005CFC.s index 8e521c5c..e56b613f 100644 --- a/arm9/asm/unk_02005CFC.s +++ b/arm9/asm/unk_02005CFC.s @@ -172,7 +172,7 @@ _02005E48: str r0, [sp, #0x14] str r0, [sp, #0x18] add r0, sp, #0x0 - bl FUN_02004914 + bl GF_MIC_StartAutoSampling add sp, #0x1c pop {pc} nop @@ -180,10 +180,10 @@ _02005E60: .word 0x00004174 thumb_func_start FUN_02005E64 FUN_02005E64: ; 0x02005E64 - ldr r3, _02005E68 ; =FUN_0200491C + ldr r3, _02005E68 ; =GF_MIC_StopAutoSampling bx r3 .balign 4 -_02005E68: .word FUN_0200491C +_02005E68: .word GF_MIC_StopAutoSampling thumb_func_start FUN_02005E6C FUN_02005E6C: ; 0x02005E6C diff --git a/arm9/global.inc b/arm9/global.inc index 284d26bf..73eddc70 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -276,7 +276,7 @@ .extern GF_Snd_LoadSeqEx .extern GF_Snd_LoadWaveArc .extern GF_Snd_LoadBank -.extern FUN_02003FF4 +.extern GetSoundPlayer .extern FUN_02004018 .extern FUN_020040F4 .extern FUN_02004104 @@ -291,19 +291,19 @@ .extern FUN_02004748 .extern FUN_020047C8 .extern FUN_02004810 -.extern FUN_02004828 -.extern FUN_0200483C +.extern GF_SndPlayerMoveVolume +.extern GF_SndPlayerSetInitialVolume .extern FUN_02004858 .extern FUN_0200488C -.extern FUN_020048A0 -.extern FUN_020048BC +.extern GF_SndArcPlayerStartSeqEx +.extern GF_SndPlayerCountPlayingSeqByPlayerNo .extern FUN_020048D0 -.extern FUN_020048EC +.extern GF_SndPlayerGetSeqNo .extern FUN_020048F4 .extern FUN_02004900 -.extern FUN_02004914 -.extern FUN_0200491C -.extern FUN_02004928 +.extern GF_MIC_StartAutoSampling +.extern GF_MIC_StopAutoSampling +.extern GF_MIC_DoSamplingAsync .extern FUN_02004930 .extern FUN_02004984 .extern FUN_02004A04 @@ -315,16 +315,16 @@ .extern FUN_02004AF8 .extern FUN_02004B30 .extern FUN_02004C3C -.extern FUN_02004C80 -.extern FUN_02004CA4 -.extern FUN_02004CAC +.extern GF_SndCaptureStartReverb +.extern GF_SndCaptureStopReverb +.extern GF_SndCaptureSetReverbVolume .extern FUN_02004CB4 -.extern FUN_02004CFC +.extern GF_SndCaptureStopEffect .extern FUN_02004D04 -.extern FUN_02004D20 +.extern GF_SndPlayerSetTrackPitch .extern FUN_02004D34 -.extern FUN_02004D4C -.extern FUN_02004D60 +.extern GF_SndPlayerSetTrackPan +.extern GF_SndSetMonoFlag .extern FUN_02004D74 .extern FUN_02004D94 .extern FUN_02004DB4 @@ -335,10 +335,10 @@ .extern FUN_02004E8C .extern FUN_02004E98 .extern FUN_02004F28 -.extern FUN_02004F64 +.extern GF_SndPlayerGetTick .extern FUN_02004F70 .extern FUN_0200516C -.extern FUN_020051EC +.extern GF_SndPlayerSetPlayerVolume .extern FUN_020051F4 .extern FUN_0200521C .extern FUN_02005308 diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 53833b86..0df8207d 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -5564,7 +5564,7 @@ MOD12_022303C0: ; 0x022303C0 str r2, [r4, r0] mov r0, #7 str r1, [r3, #4] - bl FUN_02004F64 + bl GF_SndPlayerGetTick ldr r1, _02230498 ; =0x00000AF8 ldr r1, [r4, r1] mul r0, r1 diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index 73e8460b..16b3c00d 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -71,7 +71,7 @@ _021D7546: str r0, [r4] mov r0, #1 mov r1, #0x2a - bl FUN_020051EC + bl GF_SndPlayerSetPlayerVolume mov r0, #1 add sp, #0x20 pop {r3, r4, r5, pc} @@ -171,7 +171,7 @@ _021D7630: bl DestroyHeap mov r0, #1 mov r1, #0x7f - bl FUN_020051EC + bl GF_SndPlayerSetPlayerVolume mov r0, #1 pop {r4, pc} thumb_func_end MOD16_021D7614 @@ -44271,7 +44271,7 @@ _021EBCD4: cmp r0, #1 bne _021EBCE6 mov r0, #0 - bl FUN_02004CA4 + bl GF_SndCaptureStopReverb _021EBCE6: ldr r0, [r4, #0x50] cmp r0, #2 @@ -44291,13 +44291,13 @@ _021EBD02: ldr r0, [r4, #0x50] cmp r0, #2 bne _021EBD0C - bl FUN_02004CFC + bl GF_SndCaptureStopEffect _021EBD0C: ldr r0, [r4, #0x50] cmp r0, #1 beq _021EBD1C mov r0, #0 - bl FUN_02004C80 + bl GF_SndCaptureStartReverb mov r0, #1 str r0, [r4, #0x50] _021EBD1C: @@ -44316,7 +44316,7 @@ _021EBD26: sub r0, r0, #1 _021EBD34: mov r1, #0 - bl FUN_02004CAC + bl GF_SndCaptureSetReverbVolume pop {r4, pc} thumb_func_end MOD16_021EBCC4 @@ -44710,12 +44710,12 @@ MOD16_021EC010: ; 0x021EC010 cmp r0, #1 bne _021EC020 mov r0, #0 - bl FUN_02004CA4 + bl GF_SndCaptureStopReverb _021EC020: ldr r0, [r4, #0x50] cmp r0, #2 bne _021EC02A - bl FUN_02004CFC + bl GF_SndCaptureStopEffect _021EC02A: mov r0, #0 str r0, [r4, #0x50] @@ -44855,7 +44855,7 @@ MOD16_021EC0E8: ; 0x021EC0E8 ldr r1, _021EC10C ; =0x0000FFFF ldr r2, [r4, #0x40] mov r0, #1 - bl FUN_02004D4C + bl GF_SndPlayerSetTrackPan ldr r0, [r4, #0x44] bl MOD16_021EC110 _021EC108: @@ -44866,13 +44866,13 @@ _021EC10C: .word 0x0000FFFF thumb_func_start MOD16_021EC110 MOD16_021EC110: ; 0x021EC110 - ldr r3, _021EC11C ; =FUN_02004828 + ldr r3, _021EC11C ; =GF_SndPlayerMoveVolume add r1, r0, #0 mov r0, #8 mov r2, #0 bx r3 nop -_021EC11C: .word FUN_02004828 +_021EC11C: .word GF_SndPlayerMoveVolume thumb_func_end MOD16_021EC110 thumb_func_start MOD16_021EC120 @@ -44988,12 +44988,12 @@ MOD16_021EC1DC: ; 0x021EC1DC ldr r1, _021EC1F8 ; =0x0000FFFF mov r0, #1 add r2, r4, #0 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch add r4, #0x14 ldr r1, _021EC1F8 ; =0x0000FFFF mov r0, #8 add r2, r4, #0 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch pop {r4, pc} .align 2, 0 _021EC1F8: .word 0x0000FFFF diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 074ed1e0..a7e887c2 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -17263,7 +17263,7 @@ MOD18_02241AD0: ; 0x02241AD0 ldr r2, _02241D24 ; =MOD18_02241AB4 mov r3, #0 mov r0, #2 - bl FUN_02004928 + bl GF_MIC_DoSamplingAsync ldr r0, _02241D28 ; =0x022513A0 ldr r2, [r0, #4] ldr r0, _02241D2C ; =0x00000B3B @@ -20447,7 +20447,7 @@ _02243402: ldr r2, _02243530 ; =MOD18_02241AB4 mov r0, #2 mov r3, #0 - bl FUN_02004928 + bl GF_MIC_DoSamplingAsync ldr r0, [r5, #0x14] add r0, r0, #1 str r0, [r5, #0x14] diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 7e036d8c..61f44b88 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -8528,7 +8528,7 @@ _022161A8: mov r0, #7 mov r1, #0x12 mov r2, #0 - bl FUN_02004828 + bl GF_SndPlayerMoveVolume mov r0, #0x7f mov r1, #0x1e mov r2, #1 diff --git a/arm9/modules/57/asm/module_57.s b/arm9/modules/57/asm/module_57.s index 52ef15ff..bbf164b2 100644 --- a/arm9/modules/57/asm/module_57.s +++ b/arm9/modules/57/asm/module_57.s @@ -225,7 +225,7 @@ _021D76A8: bl FUN_02033F20 mov r0, #1 mov r1, #0x2a - bl FUN_020051EC + bl GF_SndPlayerSetPlayerVolume mov r0, #6 str r0, [sp] mov r0, #1 @@ -564,7 +564,7 @@ MOD57_021D7944: ; 0x021D7944 bl DestroyHeap mov r0, #1 mov r1, #0x7f - bl FUN_020051EC + bl GF_SndPlayerSetPlayerVolume mov r0, #1 pop {r3, r4, r5, pc} .align 2, 0 @@ -4129,7 +4129,7 @@ _021D95FE: beq _021D9612 ldrb r0, [r5] add r0, r0, #3 - bl FUN_020048BC + bl GF_SndPlayerCountPlayingSeqByPlayerNo cmp r0, #0 bne _021D9612 strb r6, [r5, #1] @@ -4279,7 +4279,7 @@ MOD57_021D96F4: ; 0x021D96F4 add r4, r1, #0 ldr r2, _021D9720 ; =0x00000694 add r1, r0, #0 - bl FUN_020048A0 + bl GF_SndArcPlayerStartSeqEx ldr r2, _021D9724 ; =0x021D9A00 lsl r3, r4, #1 ldrh r2, [r2, r3] @@ -4290,7 +4290,7 @@ MOD57_021D96F4: ; 0x021D96F4 ldr r1, _021D9728 ; =0x0000FFFF add r0, r5, #3 sub r2, r2, r3 - bl FUN_02004D20 + bl GF_SndPlayerSetTrackPitch pop {r4, r5, r6, pc} .align 2, 0 _021D9720: .word 0x00000694 diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s index bce93cc6..6d3eade4 100644 --- a/arm9/modules/60/asm/module_60.s +++ b/arm9/modules/60/asm/module_60.s @@ -205,7 +205,7 @@ _021D7680: ldrh r0, [r4, #0x18] lsl r0, r0, #0x1a lsr r0, r0, #0x1e - bl FUN_02004D60 + bl GF_SndSetMonoFlag ldrh r1, [r4, #0x18] mov r0, #0 lsl r1, r1, #0x16 @@ -1257,7 +1257,7 @@ _021D7F26: add r0, r0, r1 add r0, #0x5e ldrh r0, [r0] - bl FUN_02004D60 + bl GF_SndSetMonoFlag b _021D7F54 _021D7F3C: cmp r0, #4 diff --git a/arm9/src/sound.c b/arm9/src/sound.c index bc30b97a..6efef50a 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -37,7 +37,7 @@ void InitSoundData(struct SaveChatotSoundClip * chatot, struct Options * options FUN_020040A4(sdat); UNK_02107074 = 0; sdat->chatot = chatot; - FUN_02004D60(options->soundMethod); + GF_SndSetMonoFlag(options->soundMethod); } void DoSoundUpdateFrame(void) @@ -97,7 +97,7 @@ void FUN_02003CE8(int a0) BOOL FUN_02003D04(void) { struct SoundData * sdat = GetSoundDataPointer(); - if (FUN_020048BC(2)) + if (GF_SndPlayerCountPlayingSeqByPlayerNo(2)) return TRUE; return sdat->unk_BCD12 != 0; } @@ -244,7 +244,7 @@ BOOL GF_Snd_LoadBank(int bankNo) return NNS_SndArcLoadBank(bankNo, sdat->heap); } -u32 * FUN_02003FF4(int playerNo) +u32 * GetSoundPlayer(int playerNo) { struct SoundData * sdat = GetSoundDataPointer(); if (playerNo >= (s32)NELEMS(sdat->players)) @@ -315,6 +315,6 @@ void GF_InitMic(void) void FUN_020040DC(void) { NNS_SndPlayerStopSeqByPlayerNo(7, 0); - FUN_02003FF4(7); + GetSoundPlayer(7); NNS_SndHandleReleaseSeq(); } diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index d8624329..c1809fbc 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -19,7 +19,7 @@ extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); extern void *NNS_SndArcGetSeqParam(u32); extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); -extern BOOL NNS_SndPlayerCountPlayingSeqByPlayerNo(int); +extern u16 NNS_SndPlayerCountPlayingSeqByPlayerNo(int); extern u32 NNS_SndPlayerGetSeqNo(u32 *); extern u32 NNS_SndArcGetBankInfo(u32); extern u32 MIC_StartAutoSampling(u32); @@ -39,7 +39,7 @@ extern s32 NNS_SndArcReadFile(u32, void *, u32, u32); extern BOOL NNS_SndCaptureIsActive(); extern u32 NNS_SndCaptureStartReverb(void *, u32, u32, u32, u32); extern void NNS_SndCaptureStopReverb(u32); -extern void NNS_SndCaptureSetReverbVolume(); +extern void NNS_SndCaptureSetReverbVolume(u32,u32); extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *); extern void NNS_SndCaptureStopEffect(); extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); @@ -311,7 +311,7 @@ THUMB_FUNC void FUN_020044A8(s32 param0) GF_Snd_SaveState(ptr3); } -THUMB_FUNC void FUN_020044D4(int param0, u32 param1) +THUMB_FUNC void FUN_020044D4(int seqNo, u32 param1) { #pragma unused(param1) @@ -319,9 +319,9 @@ THUMB_FUNC void FUN_020044D4(int param0, u32 param1) FUN_02003D38(23); FUN_02003D38(31); - u32 r4 = FUN_020048EC(FUN_02003FF4(0)); + u32 r4 = GF_SndPlayerGetSeqNo(GetSoundPlayer(0)); - if (*ptr == 0 && r4 == param0 && FUN_02004140() != 1152) + if (*ptr == 0 && r4 == seqNo && FUN_02004140() != 1152) { return; } @@ -329,7 +329,7 @@ THUMB_FUNC void FUN_020044D4(int param0, u32 param1) FUN_02004DBC(1); FUN_02005454(); - if (r4 != param0) + if (r4 != seqNo) { FUN_020047C8(1, 0); FUN_0200541C(); @@ -341,15 +341,15 @@ THUMB_FUNC void FUN_020044D4(int param0, u32 param1) FUN_02004180(4); GF_Snd_SaveState((int *)FUN_02003D38(25)); - if (r4 != param0) + if (r4 != seqNo) { FUN_020047C8(1, 0); } - FUN_02004568(param0, (u16)r4); + FUN_02004568(seqNo, (u16)r4); return; } - FUN_0200521C(param0); + FUN_0200521C(seqNo); } THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) @@ -375,7 +375,7 @@ THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) FUN_02004DBC(0); } -THUMB_FUNC void FUN_020045C4(int param0, u32 param1) +THUMB_FUNC void FUN_020045C4(int seqNo, u32 param1) { u8 *ptr = FUN_02003D38(18); u16 *ptr2 = FUN_02003D38(31); @@ -395,7 +395,7 @@ THUMB_FUNC void FUN_020045C4(int param0, u32 param1) u32 r0 = FUN_02004900(*ptr2); if (r0 != 1001 && r0 != 1003) { - GF_Snd_LoadSeqEx(param0, 4); + GF_Snd_LoadSeqEx(seqNo, 4); GF_ASSERT(FALSE); } else @@ -538,10 +538,10 @@ THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) if (param1 == 0) { - FUN_02004110((u16)FUN_020048EC(FUN_02003FF4(r4))); + FUN_02004110((u16) GF_SndPlayerGetSeqNo(GetSoundPlayer(r4))); } - NNS_SndPlayerPause(FUN_02003FF4(r4), param1); + NNS_SndPlayerPause(GetSoundPlayer(r4), param1); *ptr = param1; } @@ -553,12 +553,12 @@ THUMB_FUNC void FUN_02004810() *ptr2 = 0; } -THUMB_FUNC void FUN_02004828(int param0, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerMoveVolume(int playerNo, u32 param1, u32 param2) { - NNS_SndPlayerMoveVolume(FUN_02003FF4(param0), param1, param2); + NNS_SndPlayerMoveVolume(GetSoundPlayer(playerNo), param1, param2); } -THUMB_FUNC void FUN_0200483C(int param0, s32 param1) +THUMB_FUNC void GF_SndPlayerSetInitialVolume(int playerNo, s32 param1) { if (param1 < 0) { @@ -570,14 +570,14 @@ THUMB_FUNC void FUN_0200483C(int param0, s32 param1) param1 = 127; } - NNS_SndPlayerSetInitialVolume(FUN_02003FF4(param0), param1); + NNS_SndPlayerSetInitialVolume(GetSoundPlayer(playerNo), param1); } -THUMB_FUNC void FUN_02004858(u32 param0, int param1) +THUMB_FUNC void FUN_02004858(u32 param0, int playerNo) { u8 *ret = NNS_SndArcGetSeqParam(param0); u8 r4; - if (param1 == 1 || param1 == 8) + if (playerNo == 1 || playerNo == 8) { r4 = 127; } @@ -593,25 +593,25 @@ THUMB_FUNC void FUN_02004858(u32 param0, int param1) if (FUN_020313EC() == 1) { - FUN_0200483C(param1, r4 / 5); + GF_SndPlayerSetInitialVolume(playerNo, r4 / 5); } } THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) { - FUN_0200483C((int)FUN_02004018(FUN_020048D0(param0)), param1); + GF_SndPlayerSetInitialVolume((int)FUN_02004018(FUN_020048D0(param0)), param1); } -THUMB_FUNC void FUN_020048A0(int param0, u32 param1, u32 param2) +THUMB_FUNC void GF_SndArcPlayerStartSeqEx(int playerNo, u32 param1, u32 param2) { - NNS_SndArcPlayerStartSeqEx(FUN_02003FF4(param0), param1, -1, -1, param2); + NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(playerNo), param1, -1, -1, param2); } -THUMB_FUNC BOOL FUN_020048BC(int param0) +THUMB_FUNC u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int playerNo) { - GF_ASSERT(param0 >= 0); + GF_ASSERT(playerNo >= 0); - return NNS_SndPlayerCountPlayingSeqByPlayerNo(param0); + return NNS_SndPlayerCountPlayingSeqByPlayerNo(playerNo); } THUMB_FUNC u8 FUN_020048D0(u16 param0) @@ -630,7 +630,7 @@ THUMB_FUNC u8 FUN_020048D0(u16 param0) return ptr[5]; } -THUMB_FUNC u32 FUN_020048EC(u32 *param0) +THUMB_FUNC u32 GF_SndPlayerGetSeqNo(u32 *param0) { return NNS_SndPlayerGetSeqNo(param0); } @@ -651,19 +651,19 @@ THUMB_FUNC u16 FUN_02004900(u16 param0) return *ptr; } -THUMB_FUNC u32 FUN_02004914(u32 param0) +THUMB_FUNC u32 GF_MIC_StartAutoSampling(u32 param0) { return MIC_StartAutoSampling(param0); } -THUMB_FUNC u32 FUN_0200491C(u32 param0) +THUMB_FUNC u32 GF_MIC_StopAutoSampling(u32 param0) { #pragma unused(param0) GetSoundDataPointer(); return MIC_StopAutoSampling(); } -THUMB_FUNC u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3) +THUMB_FUNC u32 GF_MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3) { return MIC_DoSamplingAsync(param0, param1, param2, param3); } @@ -915,26 +915,26 @@ THUMB_FUNC void FUN_02004C3C(u32 param0) } } -THUMB_FUNC BOOL FUN_02004C78() +THUMB_FUNC BOOL GF_SndCaptureIsActive() { return NNS_SndCaptureIsActive(); } -THUMB_FUNC u32 FUN_02004C80(u32 param0) +THUMB_FUNC u32 GF_SndCaptureStartReverb(u32 param0) { GetSoundDataPointer(); return NNS_SndCaptureStartReverb(FUN_02003D38(3), 0x1000, 0, 0x3E80, param0); } -THUMB_FUNC void FUN_02004CA4(u32 param0) +THUMB_FUNC void GF_SndCaptureStopReverb(u32 param0) { NNS_SndCaptureStopReverb(param0); } -THUMB_FUNC void FUN_02004CAC() +THUMB_FUNC void GF_SndCaptureSetReverbVolume(u32 param0, u32 param1) { - NNS_SndCaptureSetReverbVolume(); + NNS_SndCaptureSetReverbVolume(param0, param1); } THUMB_FUNC void FUN_02004CB4() @@ -949,7 +949,7 @@ THUMB_FUNC void FUN_02004CB4() NNS_SndCaptureStartEffect(r4, 0x1000, 0, 0x55F0, 2, FUN_02005068, st8); } -THUMB_FUNC void FUN_02004CFC() +THUMB_FUNC void GF_SndCaptureStopEffect() { NNS_SndCaptureStopEffect(); } @@ -970,22 +970,22 @@ THUMB_FUNC void FUN_02004D04(s32 param0) *ptr = (u8)param0; } -THUMB_FUNC void FUN_02004D20(int param0, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, u32 param2) { - NNS_SndPlayerSetTrackPitch(FUN_02003FF4(param0), param1, param2); + NNS_SndPlayerSetTrackPitch(GetSoundPlayer(playerNo), param1, param2); } THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) { - FUN_02004D20((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); + GF_SndPlayerSetTrackPitch((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); } -THUMB_FUNC void FUN_02004D4C(int param0, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, u32 param2) { - NNS_SndPlayerSetTrackPan(FUN_02003FF4(param0), param1, param2); + NNS_SndPlayerSetTrackPan(GetSoundPlayer(playerNo), param1, param2); } -THUMB_FUNC void FUN_02004D60(u32 param0) +THUMB_FUNC void GF_SndSetMonoFlag(u32 param0) { NNS_SndSetMonoFlag(param0); UNK_021C3DD8[0] = param0; @@ -1129,7 +1129,7 @@ THUMB_FUNC u32 FUN_02004ED0(s32 param0) THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2) { #pragma unused(param0) - u32 r4 = FUN_02004F64(1); + u32 r4 = GF_SndPlayerGetTick(1); u32 r5 = param1->unk08; s32 r1 = (param2 / (3 * 0x100)) << 1; @@ -1156,9 +1156,9 @@ THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 return r0; } -THUMB_FUNC u32 FUN_02004F64(int param0) +THUMB_FUNC u32 GF_SndPlayerGetTick(int playerNo) { - return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); + return NNS_SndPlayerGetTick(GetSoundPlayer(playerNo)); } THUMB_FUNC void FUN_02004F70( @@ -1330,25 +1330,25 @@ THUMB_FUNC void FUN_0200516C(u32 param0) if (param0 == 0) { FUN_02005160(0x7ff); - FUN_02004CA4(0); + GF_SndCaptureStopReverb(0); } else if (param0 == 1) { FUN_02005160(0x7fff); - FUN_02004C80(30); + GF_SndCaptureStartReverb(30); } else { FUN_02005160(0x7fff); - FUN_02004C80(15); + GF_SndCaptureStartReverb(15); } - FUN_02004C78(); + GF_SndCaptureIsActive(); } THUMB_FUNC void FUN_020051AC() { - if (FUN_02005404() == FALSE && FUN_020048EC(FUN_02003FF4(0)) != -1 && FUN_02004124() != 0x47e) + if (FUN_02005404() == FALSE && GF_SndPlayerGetSeqNo(GetSoundPlayer(0)) != -1 && FUN_02004124() != 0x47e) { FUN_02005454(); @@ -1359,7 +1359,7 @@ THUMB_FUNC void FUN_020051AC() FUN_0200541C(); } -THUMB_FUNC void FUN_020051EC(u32 param0, u8 param1) +THUMB_FUNC void GF_SndPlayerSetPlayerVolume(u32 param0, u8 param1) { NNS_SndPlayerSetPlayerVolume(param0, param1); } diff --git a/include/sound.h b/include/sound.h index 781c6b5b..aa2f1641 100644 --- a/include/sound.h +++ b/include/sound.h @@ -62,7 +62,7 @@ BOOL GF_Snd_LoadSeq(int seqNo); BOOL GF_Snd_LoadSeqEx(int seqNo, u32 loadFlag); BOOL GF_Snd_LoadWaveArc(int waveArcNo); BOOL GF_Snd_LoadBank(int bankNo); -u32 * FUN_02003FF4(int playerNo); +u32 * GetSoundPlayer(int playerNo); u32 FUN_02004018(u32 a0); void DoSoundUpdateFrame(void); diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 4169aca5..27ef83ea 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -52,19 +52,19 @@ void FUN_02004738(); int FUN_02004748(s32 param0); void FUN_020047C8(u8 param0, u8 param1); void FUN_02004810(); -void FUN_02004828(int param0, u32 param1, u32 param2); -void FUN_0200483C(int param0, s32 param1); +void GF_SndPlayerMoveVolume(int param0, u32 param1, u32 param2); +void GF_SndPlayerSetInitialVolume(int param0, s32 param1); void FUN_02004858(u32 param0, int param1); void FUN_0200488C(u16 param0, u16 param1); -void FUN_020048A0(int param0, u32 param1, u32 param2); -BOOL FUN_020048BC(int param0); +void GF_SndArcPlayerStartSeqEx(int param0, u32 param1, u32 param2); +u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int param0); u8 FUN_020048D0(u16 param0); -u32 FUN_020048EC(u32 *param0); +u32 GF_SndPlayerGetSeqNo(u32 *param0); u32 FUN_020048F4(u16 param0); u16 FUN_02004900(u16 param0); -u32 FUN_02004914(u32 param0); -u32 FUN_0200491C(u32 param0); -u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3); +u32 GF_MIC_StartAutoSampling(u32 param0); +u32 GF_MIC_StopAutoSampling(u32 param0); +u32 GF_MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); void *FUN_02004930(u32 param0); u32 FUN_02004984(u32 param0); void FUN_02004A04(u32 param0); @@ -77,17 +77,17 @@ void FUN_02004AF8(u32 param0, s32 param1); u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4); void FUN_02004C1C(u8 *param0, u32 param1); void FUN_02004C3C(u32 param0); -BOOL FUN_02004C78(); -u32 FUN_02004C80(u32 param0); -void FUN_02004CA4(u32 param0); -void FUN_02004CAC(); +BOOL GF_SndCaptureIsActive(); +u32 GF_SndCaptureStartReverb(u32 param0); +void GF_SndCaptureStopReverb(u32 param0); +void GF_SndCaptureSetReverbVolume(u32 param0, u32 param1); void FUN_02004CB4(); -void FUN_02004CFC(); +void GF_SndCaptureStopEffect(); void FUN_02004D04(s32 param0); -void FUN_02004D20(int param0, u32 param1, u32 param2); +void GF_SndPlayerSetTrackPitch(int param0, u32 param1, u32 param2); void FUN_02004D34(u16 param0, u32 param1, u32 param2); -void FUN_02004D4C(int param0, u32 param1, u32 param2); -void FUN_02004D60(u32 param0); +void GF_SndPlayerSetTrackPan(int param0, u32 param1, u32 param2); +void GF_SndSetMonoFlag(u32 param0); void FUN_02004D74(u32 param0); void FUN_02004D84(u32 param0); u16 FUN_02004D94(); @@ -102,10 +102,10 @@ u32 FUN_02004E8C(u32 *param0); u32 FUN_02004E98(s32 param0); u32 FUN_02004ED0(s32 param0); u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2); -u32 FUN_02004F64(int param0); +u32 GF_SndPlayerGetTick(int param0); void FUN_02004F70(struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3); void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4); void FUN_02005160(u32 param0); void FUN_0200516C(u32 param0); void FUN_020051AC(); -void FUN_020051EC(u32 param0, u8 param1); +void GF_SndPlayerSetPlayerVolume(u32 param0, u8 param1); -- cgit v1.2.3 From 0607178b56bbfd2843afb310602af9854bbc01cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Thu, 8 Jul 2021 09:43:27 +0200 Subject: fix header --- arm9/src/unk_020040F4.c | 11 ++++++----- include/unk_020040F4.h | 27 ++++++++++++++++----------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index c1809fbc..631897a5 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -39,7 +39,7 @@ extern s32 NNS_SndArcReadFile(u32, void *, u32, u32); extern BOOL NNS_SndCaptureIsActive(); extern u32 NNS_SndCaptureStartReverb(void *, u32, u32, u32, u32); extern void NNS_SndCaptureStopReverb(u32); -extern void NNS_SndCaptureSetReverbVolume(u32,u32); +extern void NNS_SndCaptureSetReverbVolume(u32, u32); extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *); extern void NNS_SndCaptureStopEffect(); extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); @@ -319,7 +319,7 @@ THUMB_FUNC void FUN_020044D4(int seqNo, u32 param1) FUN_02003D38(23); FUN_02003D38(31); - u32 r4 = GF_SndPlayerGetSeqNo(GetSoundPlayer(0)); + u32 r4 = GF_SndPlayerGetSeqNo(GetSoundPlayer(0)); if (*ptr == 0 && r4 == seqNo && FUN_02004140() != 1152) { @@ -538,7 +538,7 @@ THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) if (param1 == 0) { - FUN_02004110((u16) GF_SndPlayerGetSeqNo(GetSoundPlayer(r4))); + FUN_02004110((u16)GF_SndPlayerGetSeqNo(GetSoundPlayer(r4))); } NNS_SndPlayerPause(GetSoundPlayer(r4), param1); @@ -630,7 +630,7 @@ THUMB_FUNC u8 FUN_020048D0(u16 param0) return ptr[5]; } -THUMB_FUNC u32 GF_SndPlayerGetSeqNo(u32 *param0) +THUMB_FUNC u32 GF_SndPlayerGetSeqNo(u32 *param0) { return NNS_SndPlayerGetSeqNo(param0); } @@ -1348,7 +1348,8 @@ THUMB_FUNC void FUN_0200516C(u32 param0) THUMB_FUNC void FUN_020051AC() { - if (FUN_02005404() == FALSE && GF_SndPlayerGetSeqNo(GetSoundPlayer(0)) != -1 && FUN_02004124() != 0x47e) + if (FUN_02005404() == FALSE && GF_SndPlayerGetSeqNo(GetSoundPlayer(0)) != -1 && + FUN_02004124() != 0x47e) { FUN_02005454(); diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 27ef83ea..16449c5e 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -1,3 +1,6 @@ +#ifndef POKEDIAMOND_UNK_020040F4_H +#define POKEDIAMOND_UNK_020040F4_H + #include "global.h" struct WaveArcInfo @@ -38,9 +41,9 @@ void FUN_0200415C(u8 param0); BOOL FUN_02004180(s32 param0); u32 FUN_0200433C(u8 param0, int param1, u32 param2); void FUN_020044A8(s32 param0); -void FUN_020044D4(int param0, u32 param1); +void FUN_020044D4(int seqNo, u32 param1); void FUN_02004568(int seqNo, u16 param1); -void FUN_020045C4(int param0, u32 param1); +void FUN_020045C4(int seqNo, u32 param1); void FUN_02004648(int param0, u32 param1); void FUN_02004680(int param0, u32 param1); void FUN_020046A0(int param0, u32 param1); @@ -52,14 +55,14 @@ void FUN_02004738(); int FUN_02004748(s32 param0); void FUN_020047C8(u8 param0, u8 param1); void FUN_02004810(); -void GF_SndPlayerMoveVolume(int param0, u32 param1, u32 param2); -void GF_SndPlayerSetInitialVolume(int param0, s32 param1); -void FUN_02004858(u32 param0, int param1); +void GF_SndPlayerMoveVolume(int playerNo, u32 param1, u32 param2); +void GF_SndPlayerSetInitialVolume(int playerNo, s32 param1); +void FUN_02004858(u32 param0, int playerNo); void FUN_0200488C(u16 param0, u16 param1); -void GF_SndArcPlayerStartSeqEx(int param0, u32 param1, u32 param2); -u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int param0); +void GF_SndArcPlayerStartSeqEx(int playerNo, u32 param1, u32 param2); +u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int playerNo); u8 FUN_020048D0(u16 param0); -u32 GF_SndPlayerGetSeqNo(u32 *param0); +u32 GF_SndPlayerGetSeqNo(u32 *param0); u32 FUN_020048F4(u16 param0); u16 FUN_02004900(u16 param0); u32 GF_MIC_StartAutoSampling(u32 param0); @@ -84,9 +87,9 @@ void GF_SndCaptureSetReverbVolume(u32 param0, u32 param1); void FUN_02004CB4(); void GF_SndCaptureStopEffect(); void FUN_02004D04(s32 param0); -void GF_SndPlayerSetTrackPitch(int param0, u32 param1, u32 param2); +void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, u32 param2); void FUN_02004D34(u16 param0, u32 param1, u32 param2); -void GF_SndPlayerSetTrackPan(int param0, u32 param1, u32 param2); +void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, u32 param2); void GF_SndSetMonoFlag(u32 param0); void FUN_02004D74(u32 param0); void FUN_02004D84(u32 param0); @@ -102,10 +105,12 @@ u32 FUN_02004E8C(u32 *param0); u32 FUN_02004E98(s32 param0); u32 FUN_02004ED0(s32 param0); u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2); -u32 GF_SndPlayerGetTick(int param0); +u32 GF_SndPlayerGetTick(int playerNo); void FUN_02004F70(struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3); void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4); void FUN_02005160(u32 param0); void FUN_0200516C(u32 param0); void FUN_020051AC(); void GF_SndPlayerSetPlayerVolume(u32 param0, u8 param1); + +#endif // POKEDIAMOND_UNK_020040F4_H -- cgit v1.2.3 From 019ca636430a8addc98e189b84cb1f5cc1f8c47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Thu, 8 Jul 2021 09:46:01 +0200 Subject: u32 -> BOOL --- arm9/src/unk_020040F4.c | 16 ++++++++-------- include/unk_020040F4.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 631897a5..0cbd5e23 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -211,7 +211,7 @@ THUMB_FUNC BOOL FUN_02004180(s32 param0) return res; } -THUMB_FUNC u32 FUN_0200433C(u8 param0, int param1, u32 param2) +THUMB_FUNC BOOL FUN_0200433C(u8 param0, int param1, u32 param2) { u8 *st0 = FUN_02003D38(20); u8 *st4 = FUN_02003D38(21); @@ -221,14 +221,14 @@ THUMB_FUNC u32 FUN_0200433C(u8 param0, int param1, u32 param2) { if (*st0 == param0) { - return 0; + return FALSE; } } else { if (*st4 == param0) { - return 0; + return FALSE; } } @@ -294,7 +294,7 @@ THUMB_FUNC u32 FUN_0200433C(u8 param0, int param1, u32 param2) break; } - return 1; + return TRUE; } THUMB_FUNC void FUN_020044A8(s32 param0) @@ -685,7 +685,7 @@ THUMB_FUNC void *FUN_02004930(u32 param0) return FUN_02003D38(1); } -THUMB_FUNC u32 FUN_02004984(u32 param0) +THUMB_FUNC BOOL FUN_02004984(u32 param0) { GetSoundDataPointer(); u8 *ptr = FUN_02003D38(15); @@ -700,7 +700,7 @@ THUMB_FUNC u32 FUN_02004984(u32 param0) *r4 = NNS_SndWaveOutAllocChannel(param0); if (*r4 == 0) { - return 0; + return FALSE; } *ptr = 1; } @@ -717,7 +717,7 @@ THUMB_FUNC u32 FUN_02004984(u32 param0) *r6 = NNS_SndWaveOutAllocChannel(param0); if (*r6 == 0) { - return 0; + return FALSE; } *ptr2 = 1; @@ -728,7 +728,7 @@ THUMB_FUNC u32 FUN_02004984(u32 param0) } } - return 1; + return TRUE; } THUMB_FUNC void FUN_02004A04(u32 param0) diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 16449c5e..641decb7 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -39,7 +39,7 @@ u16 FUN_02004140(); void FUN_0200414C(u16 param0); void FUN_0200415C(u8 param0); BOOL FUN_02004180(s32 param0); -u32 FUN_0200433C(u8 param0, int param1, u32 param2); +BOOL FUN_0200433C(u8 param0, int param1, u32 param2); void FUN_020044A8(s32 param0); void FUN_020044D4(int seqNo, u32 param1); void FUN_02004568(int seqNo, u16 param1); @@ -69,7 +69,7 @@ u32 GF_MIC_StartAutoSampling(u32 param0); u32 GF_MIC_StopAutoSampling(u32 param0); u32 GF_MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); void *FUN_02004930(u32 param0); -u32 FUN_02004984(u32 param0); +BOOL FUN_02004984(u32 param0); void FUN_02004A04(u32 param0); u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1); void FUN_02004AAC(u32 param0); -- cgit v1.2.3 From d30bc8b08414a6a564b1d3fb9ba7b49eaa972844 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Thu, 8 Jul 2021 20:17:54 -0400 Subject: Decompile unk_02022450.s --- arm9/asm/unk_02022450.s | 94 ----------------------------------------- arm9/global.inc | 2 +- arm9/modules/83/asm/module_83.s | 2 +- arm9/src/game_init.c | 3 +- arm9/src/unk_02022450.c | 43 +++++++++++++++++++ include/unk_02022450.h | 7 +++ 6 files changed, 53 insertions(+), 98 deletions(-) delete mode 100644 arm9/asm/unk_02022450.s create mode 100644 arm9/src/unk_02022450.c create mode 100644 include/unk_02022450.h diff --git a/arm9/asm/unk_02022450.s b/arm9/asm/unk_02022450.s deleted file mode 100644 index fd6aacb5..00000000 --- a/arm9/asm/unk_02022450.s +++ /dev/null @@ -1,94 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020EE6D4 -UNK_020EE6D4: ; 0x020EE6D4 - .asciz "rom" - - .text - - thumb_func_start FUN_02022450 -FUN_02022450: ; 0x02022450 - push {r3, lr} - bl FS_IsAvailable - cmp r0, #0x0 - bne _02022460 - bl OS_Terminate - pop {r3, pc} -_02022460: - ldr r0, _020224BC ; =0x027FF00C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _0202248A - bl CARD_Init - mov r2, #0x16 - ldr r0, _020224C0 ; =0x027FFE00 - ldr r1, _020224C4 ; =0x027FF000 - lsl r2, r2, #0x4 - bl MI_CpuCopy8 - mov r2, #0x16 - ldr r0, _020224C0 ; =0x027FFE00 - ldr r1, _020224C8 ; =0x027FFA80 - lsl r2, r2, #0x4 - bl MI_CpuCopy8 - ldr r1, _020224CC ; =0x4A414441 - ldr r0, _020224BC ; =0x027FF00C - str r1, [r0, #0x0] -_0202248A: - ldr r0, _020224D0 ; =UNK_020EE6D4 - mov r1, #0x3 - bl FS_FindArchive - ldr r1, _020224C4 ; =0x027FF000 - ldr r2, [r1, #0x48] - str r2, [r0, #0x2c] - ldr r2, [r1, #0x4c] - str r2, [r0, #0x30] - ldr r2, [r1, #0x40] - str r2, [r0, #0x34] - ldr r2, [r1, #0x44] - str r2, [r0, #0x38] - ldr r2, [r1, #0xc] - ldr r0, _020224CC ; =0x4A414441 - cmp r2, r0 - bne _020224B4 - ldrh r1, [r1, #0x10] - ldr r0, _020224D4 ; =0x00003130 - cmp r1, r0 - beq _020224B8 -_020224B4: - bl OS_Terminate -_020224B8: - pop {r3, pc} - nop -_020224BC: .word 0x027FF00C -_020224C0: .word 0x027FFE00 -_020224C4: .word 0x027FF000 -_020224C8: .word 0x027FFA80 -_020224CC: .word 0x4A414441 -_020224D0: .word UNK_020EE6D4 -_020224D4: .word 0x00003130 - - thumb_func_start FUN_020224D8 -FUN_020224D8: ; 0x020224D8 - push {r4, lr} - sub sp, #0x48 - add r4, r0, #0x0 - add r0, sp, #0x0 - bl FS_InitFile - add r0, sp, #0x0 - add r1, r4, #0x0 - bl FS_OpenFile - cmp r0, #0x0 - beq _020224FC - ldr r1, [sp, #0x24] - ldr r0, _02022500 ; =0x027FFC2C - str r1, [r0, #0x0] - mov r0, #0x0 - bl OS_ResetSystem -_020224FC: - add sp, #0x48 - pop {r4, pc} - .balign 4 -_02022500: .word 0x027FFC2C diff --git a/arm9/global.inc b/arm9/global.inc index da12b3fd..53b4556c 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1425,7 +1425,7 @@ .extern FUN_02022318 .extern FUN_020223BC .extern FUN_02022450 -.extern FUN_020224D8 +.extern Reset_To_File .extern FUN_02022504 .extern GetStoragePCPointer .extern FUN_0202251C diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index d58de0be..06fa49b6 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -2334,7 +2334,7 @@ _0222E7F8: pop {r3, pc} _0222E802: ldr r0, _0222E840 ; =MOD83_0223A8C4 - bl FUN_020224D8 + bl Reset_To_File pop {r3, pc} _0222E80A: bl FUN_0200541C diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 1c6098ea..020d4b75 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -7,6 +7,7 @@ #include "MWC_string.h" #include "tp.h" #include "unk_0201B4E8.h" +#include "unk_02022450.h" #include "game_init.h" #include "registers.h" #include "heap.h" @@ -14,8 +15,6 @@ #pragma thumb on -extern void FUN_02022450(void); - typedef volatile struct { u8 sys_and_irq_stack[0x3F80]; diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c new file mode 100644 index 00000000..2c69342c --- /dev/null +++ b/arm9/src/unk_02022450.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "FS_file.h" +#include "OS_terminate_proc.h" +#include "CARD_rom.h" +#include "MI_memory.h" + +#include "unk_02022450.h" + +static const char string_saying_rom[] = "rom"; + +THUMB_FUNC void FUN_02022450 () { + if (!FS_IsAvailable()) { + OS_Terminate(); + } + else { + if (!*(u32*)0x027FF00C) { + CARD_Init(); + MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FF000, 22 * 16); + MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FFA80, 22 * 16); + *(u32*)0x027FF00C = 0x4A414441; + } + FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3); + u32 *r1 = (u32*)0x027FF000; + r0->fat = r1[18]; + r0->fat_size = r1[19]; + r0->fnt = r1[16]; + r0->fnt_size = r1[17]; + if (*(u32*)0x027FF00C != 0x4A414441 || *(u16*)0x027FF010 != 0x3130) { + OS_Terminate(); + } + } + return; +} + +THUMB_FUNC void Reset_To_File (const char* path) { + FSFile file; + FS_InitFile(&file); + if (FS_OpenFile(&file, path)) { + *(u32*)HW_ROM_BASE_OFFSET_BUF = file.prop.file.top; + OS_ResetSystem(0); + } + return; +} diff --git a/include/unk_02022450.h b/include/unk_02022450.h new file mode 100644 index 00000000..6228cc74 --- /dev/null +++ b/include/unk_02022450.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_UNK_02022450_H +#define POKEDIAMOND_UNK_02022450_H + +void FUN_02022450(); +void Reset_To_File(const char* path); + +#endif //POKEDIAMOND_UNK_02022450_H -- cgit v1.2.3 From e1895a19eac585f6100785937a07caf29fe42c36 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Thu, 8 Jul 2021 20:31:33 -0400 Subject: Use already defined constants whoops I should've checked this before --- arm9/src/unk_02022450.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c index 2c69342c..34d2dcd6 100644 --- a/arm9/src/unk_02022450.c +++ b/arm9/src/unk_02022450.c @@ -15,8 +15,8 @@ THUMB_FUNC void FUN_02022450 () { else { if (!*(u32*)0x027FF00C) { CARD_Init(); - MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FF000, 22 * 16); - MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FFA80, 22 * 16); + MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)0x027FF000, 22 * 16); + MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)HW_CARD_ROM_HEADER, 22 * 16); *(u32*)0x027FF00C = 0x4A414441; } FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3); -- cgit v1.2.3 From 5d25e5e60c1e4e347310f014f38865cbac1c8ab1 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Fri, 9 Jul 2021 09:01:59 -0400 Subject: Use another defined constant --- arm9/src/unk_02022450.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c index 34d2dcd6..30fed94a 100644 --- a/arm9/src/unk_02022450.c +++ b/arm9/src/unk_02022450.c @@ -13,14 +13,14 @@ THUMB_FUNC void FUN_02022450 () { OS_Terminate(); } else { + u32 *r1 = (u32*)HW_MAIN_MEM_SHARED; if (!*(u32*)0x027FF00C) { CARD_Init(); - MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)0x027FF000, 22 * 16); + MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)r1, 22 * 16); MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)HW_CARD_ROM_HEADER, 22 * 16); *(u32*)0x027FF00C = 0x4A414441; } FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3); - u32 *r1 = (u32*)0x027FF000; r0->fat = r1[18]; r0->fat_size = r1[19]; r0->fnt = r1[16]; -- cgit v1.2.3 From a5efde18cac4c7ddfd294fad3a9f7ab1d6fa7b1e Mon Sep 17 00:00:00 2001 From: SNBeast Date: Fri, 9 Jul 2021 13:55:57 -0400 Subject: More defined constants --- arm9/src/unk_02022450.c | 22 ++++++++++++---------- include/unk_02022450.h | 11 +++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c index 30fed94a..3425384e 100644 --- a/arm9/src/unk_02022450.c +++ b/arm9/src/unk_02022450.c @@ -8,24 +8,26 @@ static const char string_saying_rom[] = "rom"; +/*Replacing (HW_MAIN_MEM_SHARED + 0xC) or (HW_MAIN_MEM_SHARED + 0x10) or defining ADAJ or 01 constants causes match failure*/ THUMB_FUNC void FUN_02022450 () { if (!FS_IsAvailable()) { OS_Terminate(); } else { - u32 *r1 = (u32*)HW_MAIN_MEM_SHARED; - if (!*(u32*)0x027FF00C) { + struct CARD_Header* card_header_buffer = (struct CARD_Header*)HW_MAIN_MEM_SHARED; + + if (!*(u32*)(HW_MAIN_MEM_SHARED + 0xC)) { CARD_Init(); - MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)r1, 22 * 16); - MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)HW_CARD_ROM_HEADER, 22 * 16); - *(u32*)0x027FF00C = 0x4A414441; + MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)card_header_buffer, HW_CARD_ROM_HEADER_SIZE); + MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); + *(u32*)(HW_MAIN_MEM_SHARED + 0xC) = 0x4A414441 /*"ADAJ" LE*/; } FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3); - r0->fat = r1[18]; - r0->fat_size = r1[19]; - r0->fnt = r1[16]; - r0->fnt_size = r1[17]; - if (*(u32*)0x027FF00C != 0x4A414441 || *(u16*)0x027FF010 != 0x3130) { + r0->fat = card_header_buffer->header_48; + r0->fat_size = card_header_buffer->header_4C; + r0->fnt = card_header_buffer->header_40; + r0->fnt_size = card_header_buffer->header_44; + if (*(u32*)(HW_MAIN_MEM_SHARED + 0xC) != 0x4A414441 /*"ADAJ" LE*/ || *(u16*)(HW_MAIN_MEM_SHARED + 0x10) != 0x3130 /*"01" LE*/) { OS_Terminate(); } } diff --git a/include/unk_02022450.h b/include/unk_02022450.h index 6228cc74..1224107a 100644 --- a/include/unk_02022450.h +++ b/include/unk_02022450.h @@ -1,6 +1,17 @@ #ifndef POKEDIAMOND_UNK_02022450_H #define POKEDIAMOND_UNK_02022450_H +struct CARD_Header { + u8 title[12]; + u32 tid; + u16 maker_code; + u8 filler[44]; + u32 header_40; + u32 header_44; + u32 header_48; + u32 header_4C; +}; + void FUN_02022450(); void Reset_To_File(const char* path); -- cgit v1.2.3 From 5e1b5dfad383fabfdd2650aada226400c12a6a6b Mon Sep 17 00:00:00 2001 From: SNBeast Date: Fri, 9 Jul 2021 14:36:20 -0400 Subject: Fix indentation --- arm9/arm9.lsf | 1664 +- arm9/modules/83/asm/module_83.s | 48414 +++++++++++++++++++------------------- 2 files changed, 25039 insertions(+), 25039 deletions(-) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0153f5e3..693ab358 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -4,363 +4,363 @@ Static arm9 { - Address 0x02000000 - Object main.o - Object list_menu.o - Object unk_02001B80.o - Object string_util.o - Object render_text.o - Object font.o - Object palette.o - Object sound.o - Object unk_020040F4.o - Object unk_020051F4.o - Object unk_02005CFC.o - Object poke_overlay.o - Object unk_020061E8.o - Object overlay_manager.o - Object filesystem.o - Object gf_gfx_loader.o - Object unk_02006D98.o - Object unk_02008AA4.o - Object unk_02008DEC.o - Object unk_02009EAC.o - Object msgdata.o - Object script_buffers.o - Object unk_0200BA78.o - Object unk_0200BB14.o - Object unk_0200CA44.o - Object unk_0200CABC.o - Object unk_0200E1D0.o - Object unk_0200E850.o - Object unk_0201137C.o - Object unk_02011744.o - Object unk_02012004.o - Object gf_rtc.o - Object list_menu_items.o - Object unk_02012944.o - Object unk_02012CC8.o - Object mail_message.o - Object unk_020139D8.o - Object unk_02013CD4.o - Object unk_020142EC.o - Object unk_020144FC.o - Object unk_02014590.o - Object unk_02014BF4.o - Object unk_02015CC0.o - Object unk_02015D14.o - Object unk_02015E30.o - Object game_init.o - Object heap.o - Object bg_window.o - Object unk_0201B1A8.o - Object unk_0201B4E8.o - Object unk_0201B6D0.o - Object unk_0201B8B8.o - Object math_util.o - Object text.o - Object unk_0201C24C.o - Object unk_0201C360.o - Object unk_0201C620.o - Object unk_0201C6B4.o - Object unk_0201C7A0.o - Object unk_0201CBEC.o - Object unk_0201CC08.o - Object unk_0201D040.o - Object unk_0201E00C.o - Object GX_layers.o - Object unk_0201E7D8.o - Object unk_0201F06C.o - Object unk_020208B8.o - Object timer3.o - Object error_handling.o - Object unk_02020C44.o - Object unk_0202134C.o - Object unk_02021590.o - Object unk_02021934.o - Object unk_02021FF8.o - Object unk_02022244.o - Object unk_02022294.o - Object unk_020222E8.o - Object unk_02022318.o - Object unk_02022450.o - Object unk_02022504.o - Object save.o - Object save_arrays.o - Object sav_system_info.o - Object player_data.o - Object unk_02023AC4.o - Object daycare.o - Object pokedex.o - Object unk_02024E64.o - Object options.o - Object unk_020250A4.o - Object unk_02025484.o - Object unk_020254B8.o - Object mail.o - Object unk_02025954.o - Object unk_02026CD0.o - Object unk_02027E30.o - Object unk_020281E0.o - Object unk_020286F8.o - Object coins.o - Object unk_02028980.o - Object unk_02029A84.o - Object unk_02029AE0.o - Object seal_case.o - Object unk_02029CEC.o - Object igt.o - Object sav_chatot.o - Object unk_02029FB0.o - Object unk_0202A1E0.o - Object unk_0202A8F4.o - Object unk_0202A924.o - Object unk_0202ABBC.o - Object unk_0202AC20.o - Object hall_of_fame.o - Object unk_0202B374.o - Object unk_0202B870.o - Object unk_0202BE98.o - Object unk_0202C0E0.o - Object unk_0202C144.o - Object unk_0202C198.o - Object unk_0202D394.o - Object unk_0202D4C4.o - Object unk_0202D858.o - Object unk_0202D8D0.o - Object unk_0202DB14.o - Object unk_0202E29C.o - Object unk_0202F150.o - Object unk_02031480.o - Object unk_02031734.o - Object unk_020336C0.o - Object unk_02033778.o - Object unk_020337E8.o - Object unk_02033874.o - Object unk_02033B68.o - Object unk_02033F50.o - Object wfc_user_info_warning.o - Object map_matrix.o - Object map_header.o - Object unk_02034A28.o - Object unk_02034D7C.o - Object unk_02034E84.o - Object unk_02034FE4.o - Object unk_02035068.o - Object unk_02036FA4.o - Object unk_02037024.o - Object unk_020372D4.o - Object unk_020377B0.o - Object unk_020377F0.o - Object script.o - Object unk_02038C78.o - Object scrcmd.o - Object scrcmd_asm.o - Object scrcmd_mart.o - Object scrcmd_3.o - Object scrcmd_names.o - Object scrcmd_5.o - Object scrcmd_sound.o - Object scrcmd_7.o - Object scrcmd_8.o - Object scrcmd_9.o - Object scrcmd_10.o - Object scrcmd_berry_trees.o - Object scrcmd_12.o - Object scrcmd_13.o - Object scrcmd_coins.o - Object scrcmd_money.o - Object scrcmd_daycare.o - Object scrcmd_17.o - Object scrcmd_party.o - Object scrcmd_fossils.o - Object scrcmd_prizes.o - Object scrcmd_flags.o - Object scrcmd_items.o - Object scrcmd_underground.o - Object scrcmd_24.o - Object scrcmd_25.o - Object unk_02046030.o - Object event_data.o - Object unk_0204639C.o - Object unk_0204653C.o - Object unk_02047500.o - Object unk_020476CC.o - Object unk_02048120.o - Object unk_020484A8.o - Object unk_02048904.o - Object script_pokemon_util.o - Object unk_0204A368.o - Object unk_0204A498.o - Object unk_0204AB0C.o - Object unk_0204ADE0.o - Object unk_0204AEA8.o - Object unk_0204AF24.o - Object unk_0204B0A0.o - Object unk_0204B34C.o - Object unk_0204B9EC.o - Object poketch.o - Object unk_0204C1B4.o - Object unk_0204CA80.o - Object unk_0204CB20.o - Object unk_0204FBA8.o - Object unk_02050E48.o - Object unk_020520AC.o - Object unk_02052EE8.o - Object unk_0205363C.o - Object unk_02053750.o - Object text_02054590.o - Object unk_0205478C.o - Object unk_02054C14.o - Object unk_02055068.o - Object unk_020557F4.o - Object unk_02057380.o - Object unk_02058EE8.o - Object unk_02059F04.o - Object unk_0205AD98.o - Object unk_0205BEF8.o - Object unk_0205C334.o - Object unk_0205C598.o - Object unk_0205CDB4.o - Object unk_0205CE48.o - Object unk_0205DD18.o - Object unk_0205E4EC.o - Object unk_0205EB38.o - Object unk_0205EC84.o - Object unk_0205F314.o - Object unk_0205F7A0.o - Object unk_0205FA2C.o - Object unk_0206015C.o - Object unk_02060344.o - Object unk_020603B0.o - Object unk_020606B0.o - Object unk_020607D4.o - Object unk_02060CCC.o - Object unk_020625EC.o - Object unk_0206367C.o - Object unk_02063888.o - Object unk_02063948.o - Object unk_0206439C.o - Object unk_020643C0.o - Object unk_020647A4.o - Object unk_02064CA8.o - Object unk_02064E20.o - Object unk_02064E4C.o - Object unk_02064E90.o - Object unk_020653EC.o - Object unk_02066840.o - - ##poketool## - Object pokemon.o - Object waza.o - Object trainer_data.o - Object pokemon_storage_system.o - Object unk_0206B688.o - Object party.o - Object unk_0206BB28.o - Object unk_0206BB5C.o - Object unk_0206BF90.o - Object unk_0206C700.o - Object unk_0206DE24.o - Object unk_0206E0F0.o - Object bag_view.o - - ##itemtool## - Object itemtool.o - Object bag.o - Object unk_0206F1F0.o - Object unk_0206F3FC.o - Object unk_02072548.o - Object unk_02073710.o - Object unk_02073DA8.o - Object unk_0207550C.o - Object unk_020772F0.o - Object unk_020799E8.o - Object unk_02079C70.o - Object unk_0207C328.o - Object unk_0207D5BC.o - Object unk_0207EF6C.o - Object unk_0207F95C.o - Object unk_0207FC5C.o - Object unk_0207FD00.o - Object unk_02080C38.o - Object unk_020828BC.o - Object unk_020834D0.o - Object unk_02083B84.o - Object unk_02083D48.o - Object unk_02084098.o - Object unk_020842D0.o - Object use_item_on_mon.o - Object unk_020851B8.o - Object nutdata.o - Object unk_02085338.o - Object unk_020854E0.o - Object unk_020859C0.o - Object unk_02086084.o - Object unk_02086414.o - Object unk_02086FA8.o - Object unk_02087A1C.o - Object unk_02087A6C.o - Object unk_02087D00.o - Object unk_02088320.o - Object unk_02088814.o - Object unk_02088858.o - Object unk_0208890C.o - Object unk_0208898C.o - Object unk_02088AAC.o - Object unk_02088D1C.o - Object unk_02088DD8.o - Object unk_02088F0C.o - Object unk_020893E0.o - Object unk_02089498.o - Object unk_02089960.o - Object unk_02089D90.o - Object unk_02089F24.o - Object unk_0208A258.o - Object unk_0208A300.o - Object unk_0208A338.o - Object error_message_reset.o - ### Third-party libraries ### - Object unk_0208AC14.o - Object custom_allocator.o - Object unk_020910EC.o - Object DWC_backup.o - Object DWC_bm_init.o - Object DWC_util_wifiidtool.o - Object DWC_init.o - Object DWC_account.o - Object SOC_socl_startup.o - Object SOC_socl_command.o - Object SOC_socl_create.o - Object SOC_socl_bind.o - Object SOC_socl_read.o - Object SOC_socl_shutdown.o - Object SOC_socl_close.o - Object SOC_socl_cleanup.o - Object SOC_socl_poll.o - Object SOC_socl_misc.o - Object SOC_socl_list.o - Object SOC_soc.o - Object SOC_socl_ssl.o - Object CPS_network.o - Object SSL_ssl.o - Object SSL_md5.o - Object SSL_sha1.o - Object SSL_rca4.o - Object SSL_biginteger.o - Object WCM_system.o - Object WCM_aplist.o - Object WCM_cpsif.o - Object WCM_util.o - Object WIFI_stubsmd5_dummy.o - Object libVCT.o - ### Nitro System SDK ### - Object NNS_FND_list.o - Object NNS_FND_heapcommon.o - Object NNS_FND_expheap.o - Object NNS_FND_frameheap.o - Object NNS_FND_allocator.o - Object NNS_GFD_gfd_texvramman.o + Address 0x02000000 + Object main.o + Object list_menu.o + Object unk_02001B80.o + Object string_util.o + Object render_text.o + Object font.o + Object palette.o + Object sound.o + Object unk_020040F4.o + Object unk_020051F4.o + Object unk_02005CFC.o + Object poke_overlay.o + Object unk_020061E8.o + Object overlay_manager.o + Object filesystem.o + Object gf_gfx_loader.o + Object unk_02006D98.o + Object unk_02008AA4.o + Object unk_02008DEC.o + Object unk_02009EAC.o + Object msgdata.o + Object script_buffers.o + Object unk_0200BA78.o + Object unk_0200BB14.o + Object unk_0200CA44.o + Object unk_0200CABC.o + Object unk_0200E1D0.o + Object unk_0200E850.o + Object unk_0201137C.o + Object unk_02011744.o + Object unk_02012004.o + Object gf_rtc.o + Object list_menu_items.o + Object unk_02012944.o + Object unk_02012CC8.o + Object mail_message.o + Object unk_020139D8.o + Object unk_02013CD4.o + Object unk_020142EC.o + Object unk_020144FC.o + Object unk_02014590.o + Object unk_02014BF4.o + Object unk_02015CC0.o + Object unk_02015D14.o + Object unk_02015E30.o + Object game_init.o + Object heap.o + Object bg_window.o + Object unk_0201B1A8.o + Object unk_0201B4E8.o + Object unk_0201B6D0.o + Object unk_0201B8B8.o + Object math_util.o + Object text.o + Object unk_0201C24C.o + Object unk_0201C360.o + Object unk_0201C620.o + Object unk_0201C6B4.o + Object unk_0201C7A0.o + Object unk_0201CBEC.o + Object unk_0201CC08.o + Object unk_0201D040.o + Object unk_0201E00C.o + Object GX_layers.o + Object unk_0201E7D8.o + Object unk_0201F06C.o + Object unk_020208B8.o + Object timer3.o + Object error_handling.o + Object unk_02020C44.o + Object unk_0202134C.o + Object unk_02021590.o + Object unk_02021934.o + Object unk_02021FF8.o + Object unk_02022244.o + Object unk_02022294.o + Object unk_020222E8.o + Object unk_02022318.o + Object unk_02022450.o + Object unk_02022504.o + Object save.o + Object save_arrays.o + Object sav_system_info.o + Object player_data.o + Object unk_02023AC4.o + Object daycare.o + Object pokedex.o + Object unk_02024E64.o + Object options.o + Object unk_020250A4.o + Object unk_02025484.o + Object unk_020254B8.o + Object mail.o + Object unk_02025954.o + Object unk_02026CD0.o + Object unk_02027E30.o + Object unk_020281E0.o + Object unk_020286F8.o + Object coins.o + Object unk_02028980.o + Object unk_02029A84.o + Object unk_02029AE0.o + Object seal_case.o + Object unk_02029CEC.o + Object igt.o + Object sav_chatot.o + Object unk_02029FB0.o + Object unk_0202A1E0.o + Object unk_0202A8F4.o + Object unk_0202A924.o + Object unk_0202ABBC.o + Object unk_0202AC20.o + Object hall_of_fame.o + Object unk_0202B374.o + Object unk_0202B870.o + Object unk_0202BE98.o + Object unk_0202C0E0.o + Object unk_0202C144.o + Object unk_0202C198.o + Object unk_0202D394.o + Object unk_0202D4C4.o + Object unk_0202D858.o + Object unk_0202D8D0.o + Object unk_0202DB14.o + Object unk_0202E29C.o + Object unk_0202F150.o + Object unk_02031480.o + Object unk_02031734.o + Object unk_020336C0.o + Object unk_02033778.o + Object unk_020337E8.o + Object unk_02033874.o + Object unk_02033B68.o + Object unk_02033F50.o + Object wfc_user_info_warning.o + Object map_matrix.o + Object map_header.o + Object unk_02034A28.o + Object unk_02034D7C.o + Object unk_02034E84.o + Object unk_02034FE4.o + Object unk_02035068.o + Object unk_02036FA4.o + Object unk_02037024.o + Object unk_020372D4.o + Object unk_020377B0.o + Object unk_020377F0.o + Object script.o + Object unk_02038C78.o + Object scrcmd.o + Object scrcmd_asm.o + Object scrcmd_mart.o + Object scrcmd_3.o + Object scrcmd_names.o + Object scrcmd_5.o + Object scrcmd_sound.o + Object scrcmd_7.o + Object scrcmd_8.o + Object scrcmd_9.o + Object scrcmd_10.o + Object scrcmd_berry_trees.o + Object scrcmd_12.o + Object scrcmd_13.o + Object scrcmd_coins.o + Object scrcmd_money.o + Object scrcmd_daycare.o + Object scrcmd_17.o + Object scrcmd_party.o + Object scrcmd_fossils.o + Object scrcmd_prizes.o + Object scrcmd_flags.o + Object scrcmd_items.o + Object scrcmd_underground.o + Object scrcmd_24.o + Object scrcmd_25.o + Object unk_02046030.o + Object event_data.o + Object unk_0204639C.o + Object unk_0204653C.o + Object unk_02047500.o + Object unk_020476CC.o + Object unk_02048120.o + Object unk_020484A8.o + Object unk_02048904.o + Object script_pokemon_util.o + Object unk_0204A368.o + Object unk_0204A498.o + Object unk_0204AB0C.o + Object unk_0204ADE0.o + Object unk_0204AEA8.o + Object unk_0204AF24.o + Object unk_0204B0A0.o + Object unk_0204B34C.o + Object unk_0204B9EC.o + Object poketch.o + Object unk_0204C1B4.o + Object unk_0204CA80.o + Object unk_0204CB20.o + Object unk_0204FBA8.o + Object unk_02050E48.o + Object unk_020520AC.o + Object unk_02052EE8.o + Object unk_0205363C.o + Object unk_02053750.o + Object text_02054590.o + Object unk_0205478C.o + Object unk_02054C14.o + Object unk_02055068.o + Object unk_020557F4.o + Object unk_02057380.o + Object unk_02058EE8.o + Object unk_02059F04.o + Object unk_0205AD98.o + Object unk_0205BEF8.o + Object unk_0205C334.o + Object unk_0205C598.o + Object unk_0205CDB4.o + Object unk_0205CE48.o + Object unk_0205DD18.o + Object unk_0205E4EC.o + Object unk_0205EB38.o + Object unk_0205EC84.o + Object unk_0205F314.o + Object unk_0205F7A0.o + Object unk_0205FA2C.o + Object unk_0206015C.o + Object unk_02060344.o + Object unk_020603B0.o + Object unk_020606B0.o + Object unk_020607D4.o + Object unk_02060CCC.o + Object unk_020625EC.o + Object unk_0206367C.o + Object unk_02063888.o + Object unk_02063948.o + Object unk_0206439C.o + Object unk_020643C0.o + Object unk_020647A4.o + Object unk_02064CA8.o + Object unk_02064E20.o + Object unk_02064E4C.o + Object unk_02064E90.o + Object unk_020653EC.o + Object unk_02066840.o + + ##poketool## + Object pokemon.o + Object waza.o + Object trainer_data.o + Object pokemon_storage_system.o + Object unk_0206B688.o + Object party.o + Object unk_0206BB28.o + Object unk_0206BB5C.o + Object unk_0206BF90.o + Object unk_0206C700.o + Object unk_0206DE24.o + Object unk_0206E0F0.o + Object bag_view.o + + ##itemtool## + Object itemtool.o + Object bag.o + Object unk_0206F1F0.o + Object unk_0206F3FC.o + Object unk_02072548.o + Object unk_02073710.o + Object unk_02073DA8.o + Object unk_0207550C.o + Object unk_020772F0.o + Object unk_020799E8.o + Object unk_02079C70.o + Object unk_0207C328.o + Object unk_0207D5BC.o + Object unk_0207EF6C.o + Object unk_0207F95C.o + Object unk_0207FC5C.o + Object unk_0207FD00.o + Object unk_02080C38.o + Object unk_020828BC.o + Object unk_020834D0.o + Object unk_02083B84.o + Object unk_02083D48.o + Object unk_02084098.o + Object unk_020842D0.o + Object use_item_on_mon.o + Object unk_020851B8.o + Object nutdata.o + Object unk_02085338.o + Object unk_020854E0.o + Object unk_020859C0.o + Object unk_02086084.o + Object unk_02086414.o + Object unk_02086FA8.o + Object unk_02087A1C.o + Object unk_02087A6C.o + Object unk_02087D00.o + Object unk_02088320.o + Object unk_02088814.o + Object unk_02088858.o + Object unk_0208890C.o + Object unk_0208898C.o + Object unk_02088AAC.o + Object unk_02088D1C.o + Object unk_02088DD8.o + Object unk_02088F0C.o + Object unk_020893E0.o + Object unk_02089498.o + Object unk_02089960.o + Object unk_02089D90.o + Object unk_02089F24.o + Object unk_0208A258.o + Object unk_0208A300.o + Object unk_0208A338.o + Object error_message_reset.o + ### Third-party libraries ### + Object unk_0208AC14.o + Object custom_allocator.o + Object unk_020910EC.o + Object DWC_backup.o + Object DWC_bm_init.o + Object DWC_util_wifiidtool.o + Object DWC_init.o + Object DWC_account.o + Object SOC_socl_startup.o + Object SOC_socl_command.o + Object SOC_socl_create.o + Object SOC_socl_bind.o + Object SOC_socl_read.o + Object SOC_socl_shutdown.o + Object SOC_socl_close.o + Object SOC_socl_cleanup.o + Object SOC_socl_poll.o + Object SOC_socl_misc.o + Object SOC_socl_list.o + Object SOC_soc.o + Object SOC_socl_ssl.o + Object CPS_network.o + Object SSL_ssl.o + Object SSL_md5.o + Object SSL_sha1.o + Object SSL_rca4.o + Object SSL_biginteger.o + Object WCM_system.o + Object WCM_aplist.o + Object WCM_cpsif.o + Object WCM_util.o + Object WIFI_stubsmd5_dummy.o + Object libVCT.o + ### Nitro System SDK ### + Object NNS_FND_list.o + Object NNS_FND_heapcommon.o + Object NNS_FND_expheap.o + Object NNS_FND_frameheap.o + Object NNS_FND_allocator.o + Object NNS_GFD_gfd_texvramman.o Object NNS_GFD_gfd_plttvramman.o Object NNS_GFD_gfd_frametexvra.o Object NNS_GFD_gfd_frameplttvr.o @@ -429,839 +429,839 @@ Static arm9 Object NNS_SND_sndarc_stream.o Object NNS_SND_seqdata.o Object NNS_SND_fader.o - ### Nitro SDK ### - Object FX_mtx22.o - Object FX_mtx33.o - Object FX_mtx43.o - Object FX_mtx44.o - Object FX_cp.o - Object FX_vec.o - Object FX_sincos.o - Object FX_atan.o - Object FX.o - Object GX.o - Object GX_state.o - Object GX_vramcnt.o - Object GX_bgcnt.o - Object GX_g2.o - Object GX_g3b.o - Object GX_g3imm.o - Object GX_g3x.o - Object GX_g3_util.o - Object GX_load2d.o - Object GX_load3d.o - Object GX_g3.o - Object GX_asm.o - Object OS_irqHandler.o (.text) - Object OS_irqTable.o - Object OS_interrupt.o - Object OS_spinLock.o - Object OS_printf.o - Object OS_thread.o - Object OS_context.o - Object OS_emulator.o - Object OS_message.o - Object OS_mutex.o - Object OS_cache.o - Object OS_init.o - Object OS_arena.o - Object OS_alloc.o - Object OS_tcm.o - Object OS_protectionUnit.o - Object OS_protectionRegion.o - Object OS_exception.o - Object OS_timer.o - Object OS_tick.o - Object OS_alarm.o - Object OS_valarm.o - Object OS_system.o - Object OS_reset.o - Object OS_ownerInfo.o - Object OS_vramExclusive.o - Object OS_entropy.o - Object OS_terminate_proc.o - Object MI_wram.o - Object MI_dma.o - Object MI_dma_hblank.o - Object MI_dma_gxcommand.o - Object MI_memory.o - Object MI_swap.o - Object MI_uncompress.o - Object MI_dma_card.o - Object MI_init.o - Object SND_interface.o - Object SND_main.o - Object SND_command.o - Object SND_alarm.o - Object SND_work.o - Object SND_util.o - Object SND_bank.o - Object PXI_init.o - Object PXI_fifo.o - Object FS_command.o - Object FS_command_default.o - Object FS_archive.o - Object FS_file.o - Object FS_rom.o - Object FS_overlay.o - Object DGT_hash1.o - Object DGT_hash2.o - Object DGT_sha1s_arm4cw.o - Object CP_context.o - Object SPI_tp.o - Object SPI_mic.o - Object SPI_pm.o - Object RTC_external.o - Object RTC_internal.o - Object RTC_convert.o - Object CARD_common.o - Object CARD_spi.o - Object CARD_backup.o - Object CARD_rom.o - Object CARD_request.o - Object CARD_pullOut.o - Object WM_system.o - Object WM_sync.o - Object WM_standard.o - Object WM_mp.o - Object WM_dcf.o - Object WM_ds.o - Object WM_ks.o - Object WM_etc.o - Object CTRDG_common.o - Object CTRDG_proc.o - Object CTRDG_backup.o - Object CTRDG_flash_common.o - Object CTRDG_flash_AT29LV512.o - Object CTRDG_flash_LE26FV10N1TS-10.o - Object CTRDG_flash_LE39FW512.o - Object CTRDG_flash_MX29L010.o - Object CTRDG_flash_MX29L512.o - Object CTRDG_task.o - Object MATH_pop.o - Object MATH_dgt.o - Object MATH_crc.o - Object STD_string.o - ### Standard libraries ### - ### Bundled with CodeWarrior, so probably compiled with 2.0sp1 ### - Object MSL_ARM_abort_exit.o - Object MSL_ARM_critical_regions_NITRO.o - Object MSL_ARM_math.o - Object MSL_Common_ansi_files.o - Object MSL_Common_arith.o - Object MSL_Common_assert.o - Object MSL_Common_buffer_io.o - Object MSL_Common_ctype.o - Object MSL_Common_direct_io.o - Object MSL_Common_errno.o - Object MSL_Common_file_io.o - Object MSL_Common_file_pos.o - Object MSL_Common_float.o - Object MSL_Common_mbstring.o - Object MSL_Common_mem.o - Object MSL_Common_mem_funcs.o - Object MSL_Common_printf.o - Object MSL_Common_qsort.o - Object MSL_Common_rand.o - Object MSL_Common_scanf.o - Object MSL_Common_signal.o - Object MSL_Common_string.o - Object MSL_Common_strtold.o - Object MSL_Common_strtoul.o - Object MSL_Common_wchar_io.o - Object MSL_Common_wctype.o - Object MSL_Common_wmem.o - Object MSL_Common_wprintf.o - Object MSL_Common_wstring.o - Object MSL_DPMath_e_pow.o - Object MSL_DPMath_s_copysign.o - Object MSL_DPMath_s_fabs.o - Object MSL_DPMath_s_frexp.o - Object MSL_DPMath_s_ldexp.o - Object MSL_DPMath_w_pow.o - Object MSL_fp_ansi.o - Object MSL_math.o - Object MSL_string_extras.o - Object RUNTIME_d_add.o - Object RUNTIME_d_dtof.o - Object RUNTIME_d_dtoi.o - Object RUNTIME_d_dtoull.o - Object RUNTIME_d_itod.o - Object RUNTIME_d_mul.o - Object RUNTIME_d_sqrt.o - Object RUNTIME_d_sub.o - Object RUNTIME_f_add.o - Object RUNTIME_f_cmp.o - Object RUNTIME_f_div.o - Object RUNTIME_f_ftod.o - Object RUNTIME_f_ftoi.o - Object RUNTIME_f_ftou.o - Object RUNTIME_f_itof.o - Object RUNTIME_f_mul.o - Object RUNTIME_f_sub.o - Object RUNTIME_ll_div.o - Object RUNTIME_ll_mul.o - Object RUNTIME_ll_sll.o - Object RUNTIME_s32_div_f.o - Object RUNTIME_u32_div_f.o - Object RUNTIME_d_div.o - Object RUNTIME_ieee_status.o - Object RUNTIME_ARM_semihosted_console_io.o - Object RUNTIME_CPLUS_StaticInitializers.o - Object RUNTIME_NITRO_eabi_init.o + ### Nitro SDK ### + Object FX_mtx22.o + Object FX_mtx33.o + Object FX_mtx43.o + Object FX_mtx44.o + Object FX_cp.o + Object FX_vec.o + Object FX_sincos.o + Object FX_atan.o + Object FX.o + Object GX.o + Object GX_state.o + Object GX_vramcnt.o + Object GX_bgcnt.o + Object GX_g2.o + Object GX_g3b.o + Object GX_g3imm.o + Object GX_g3x.o + Object GX_g3_util.o + Object GX_load2d.o + Object GX_load3d.o + Object GX_g3.o + Object GX_asm.o + Object OS_irqHandler.o (.text) + Object OS_irqTable.o + Object OS_interrupt.o + Object OS_spinLock.o + Object OS_printf.o + Object OS_thread.o + Object OS_context.o + Object OS_emulator.o + Object OS_message.o + Object OS_mutex.o + Object OS_cache.o + Object OS_init.o + Object OS_arena.o + Object OS_alloc.o + Object OS_tcm.o + Object OS_protectionUnit.o + Object OS_protectionRegion.o + Object OS_exception.o + Object OS_timer.o + Object OS_tick.o + Object OS_alarm.o + Object OS_valarm.o + Object OS_system.o + Object OS_reset.o + Object OS_ownerInfo.o + Object OS_vramExclusive.o + Object OS_entropy.o + Object OS_terminate_proc.o + Object MI_wram.o + Object MI_dma.o + Object MI_dma_hblank.o + Object MI_dma_gxcommand.o + Object MI_memory.o + Object MI_swap.o + Object MI_uncompress.o + Object MI_dma_card.o + Object MI_init.o + Object SND_interface.o + Object SND_main.o + Object SND_command.o + Object SND_alarm.o + Object SND_work.o + Object SND_util.o + Object SND_bank.o + Object PXI_init.o + Object PXI_fifo.o + Object FS_command.o + Object FS_command_default.o + Object FS_archive.o + Object FS_file.o + Object FS_rom.o + Object FS_overlay.o + Object DGT_hash1.o + Object DGT_hash2.o + Object DGT_sha1s_arm4cw.o + Object CP_context.o + Object SPI_tp.o + Object SPI_mic.o + Object SPI_pm.o + Object RTC_external.o + Object RTC_internal.o + Object RTC_convert.o + Object CARD_common.o + Object CARD_spi.o + Object CARD_backup.o + Object CARD_rom.o + Object CARD_request.o + Object CARD_pullOut.o + Object WM_system.o + Object WM_sync.o + Object WM_standard.o + Object WM_mp.o + Object WM_dcf.o + Object WM_ds.o + Object WM_ks.o + Object WM_etc.o + Object CTRDG_common.o + Object CTRDG_proc.o + Object CTRDG_backup.o + Object CTRDG_flash_common.o + Object CTRDG_flash_AT29LV512.o + Object CTRDG_flash_LE26FV10N1TS-10.o + Object CTRDG_flash_LE39FW512.o + Object CTRDG_flash_MX29L010.o + Object CTRDG_flash_MX29L512.o + Object CTRDG_task.o + Object MATH_pop.o + Object MATH_dgt.o + Object MATH_crc.o + Object STD_string.o + ### Standard libraries ### + ### Bundled with CodeWarrior, so probably compiled with 2.0sp1 ### + Object MSL_ARM_abort_exit.o + Object MSL_ARM_critical_regions_NITRO.o + Object MSL_ARM_math.o + Object MSL_Common_ansi_files.o + Object MSL_Common_arith.o + Object MSL_Common_assert.o + Object MSL_Common_buffer_io.o + Object MSL_Common_ctype.o + Object MSL_Common_direct_io.o + Object MSL_Common_errno.o + Object MSL_Common_file_io.o + Object MSL_Common_file_pos.o + Object MSL_Common_float.o + Object MSL_Common_mbstring.o + Object MSL_Common_mem.o + Object MSL_Common_mem_funcs.o + Object MSL_Common_printf.o + Object MSL_Common_qsort.o + Object MSL_Common_rand.o + Object MSL_Common_scanf.o + Object MSL_Common_signal.o + Object MSL_Common_string.o + Object MSL_Common_strtold.o + Object MSL_Common_strtoul.o + Object MSL_Common_wchar_io.o + Object MSL_Common_wctype.o + Object MSL_Common_wmem.o + Object MSL_Common_wprintf.o + Object MSL_Common_wstring.o + Object MSL_DPMath_e_pow.o + Object MSL_DPMath_s_copysign.o + Object MSL_DPMath_s_fabs.o + Object MSL_DPMath_s_frexp.o + Object MSL_DPMath_s_ldexp.o + Object MSL_DPMath_w_pow.o + Object MSL_fp_ansi.o + Object MSL_math.o + Object MSL_string_extras.o + Object RUNTIME_d_add.o + Object RUNTIME_d_dtof.o + Object RUNTIME_d_dtoi.o + Object RUNTIME_d_dtoull.o + Object RUNTIME_d_itod.o + Object RUNTIME_d_mul.o + Object RUNTIME_d_sqrt.o + Object RUNTIME_d_sub.o + Object RUNTIME_f_add.o + Object RUNTIME_f_cmp.o + Object RUNTIME_f_div.o + Object RUNTIME_f_ftod.o + Object RUNTIME_f_ftoi.o + Object RUNTIME_f_ftou.o + Object RUNTIME_f_itof.o + Object RUNTIME_f_mul.o + Object RUNTIME_f_sub.o + Object RUNTIME_ll_div.o + Object RUNTIME_ll_mul.o + Object RUNTIME_ll_sll.o + Object RUNTIME_s32_div_f.o + Object RUNTIME_u32_div_f.o + Object RUNTIME_d_div.o + Object RUNTIME_ieee_status.o + Object RUNTIME_ARM_semihosted_console_io.o + Object RUNTIME_CPLUS_StaticInitializers.o + Object RUNTIME_NITRO_eabi_init.o } Autoload ITCM { - Address 0x01FF8000 - Object OS_irqHandler.o (.itcm) - Object OS_reset.o (.itcm) - Object MI_dma.o (.itcm) - Object MI_dma_gxcommand.o (.itcm) + Address 0x01FF8000 + Object OS_irqHandler.o (.itcm) + Object OS_reset.o (.itcm) + Object MI_dma.o (.itcm) + Object MI_dma_gxcommand.o (.itcm) } Autoload DTCM { - Address 0x027E0000 - Object OS_irqHandler.o (.bss) - Object OS_irqTable.o (.dtcm) + Address 0x027E0000 + Object OS_irqHandler.o (.bss) + Object OS_irqTable.o (.dtcm) } Autoload EXT { - Address 0x02400000 + Address 0x02400000 } Overlay MODULE_00 { - After arm9 + After arm9 } Overlay MODULE_01 { - After arm9 - Object module_01.o + After arm9 + Object module_01.o } Overlay MODULE_02 { - After MODULE_01 + After MODULE_01 } Overlay MODULE_03 { - After ITCM + After ITCM } Overlay MODULE_04 { - After arm9 - Object thumb_04.o - Object arm_04.o + After arm9 + Object thumb_04.o + Object arm_04.o } Overlay MODULE_05 { - ##Overworld## - After arm9 - Object mod05_021D74E0.o - Object mod05_021D7F4C.o - Object mod05_021D80E8.o - Object mod05_021D9320.o - Object mod05_021D9A48.o - Object mod05_021DA5B8.o - Object mod05_021DB44C.o - Object mod05_021DB900.o - Object mod05_021DBA00.o - Object mod05_021DBABC.o - Object mod05_021DBD84.o - Object mod05_021DBE04.o - Object mod05_021DBEF4.o - Object mod05_021DC0B8.o - Object mod05_021E1374.o - Object mod05_021E1AD8.o - Object mod05_021E2B80.o - Object mod05_021E2E88.o - Object mod05_021E3340.o - Object mod05_021E3444.o - Object mod05_021E4AE4.o - Object mod05_021E52A8.o - Object mod05_021E5300.o - Object mod05_021E5564.o - Object mod05_021E55BC.o - Object mod05_021E577C.o - Object mod05_021E5918.o - Object mod05_021E5AB4.o - Object mod05_021E5C8C.o - Object mod05_021E5E10.o - Object mod05_021E5FD8.o - Object mod05_021E72FC.o - Object mod05_021E7504.o - Object mod05_021E779C.o - Object mod05_021E7C00.o - Object mod05_021E80F8.o - Object mod05_021E8310.o - Object module_05.o + ##Overworld## + After arm9 + Object mod05_021D74E0.o + Object mod05_021D7F4C.o + Object mod05_021D80E8.o + Object mod05_021D9320.o + Object mod05_021D9A48.o + Object mod05_021DA5B8.o + Object mod05_021DB44C.o + Object mod05_021DB900.o + Object mod05_021DBA00.o + Object mod05_021DBABC.o + Object mod05_021DBD84.o + Object mod05_021DBE04.o + Object mod05_021DBEF4.o + Object mod05_021DC0B8.o + Object mod05_021E1374.o + Object mod05_021E1AD8.o + Object mod05_021E2B80.o + Object mod05_021E2E88.o + Object mod05_021E3340.o + Object mod05_021E3444.o + Object mod05_021E4AE4.o + Object mod05_021E52A8.o + Object mod05_021E5300.o + Object mod05_021E5564.o + Object mod05_021E55BC.o + Object mod05_021E577C.o + Object mod05_021E5918.o + Object mod05_021E5AB4.o + Object mod05_021E5C8C.o + Object mod05_021E5E10.o + Object mod05_021E5FD8.o + Object mod05_021E72FC.o + Object mod05_021E7504.o + Object mod05_021E779C.o + Object mod05_021E7C00.o + Object mod05_021E80F8.o + Object mod05_021E8310.o + Object module_05.o } Overlay MODULE_06 { - ##Overworld## - After MODULE_05 - Object module_06.o + ##Overworld## + After MODULE_05 + Object module_06.o } Overlay MODULE_07 { - After MODULE_04 - Object module_07.o + After MODULE_04 + Object module_07.o } Overlay MODULE_08 { - After MODULE_04 - Object module_08.o + After MODULE_04 + Object module_08.o } Overlay MODULE_09 { - After MODULE_04 - Object module_09.o + After MODULE_04 + Object module_09.o } Overlay MODULE_10 { - After arm9 + After arm9 } Overlay MODULE_11 { - ##Battles## - After MODULE_08 - Object module_11_thumb1.o - Object module_11_sinit.o - Object module_11_thumb2.o + ##Battles## + After MODULE_08 + Object module_11_thumb1.o + Object module_11_sinit.o + Object module_11_thumb2.o } Overlay MODULE_12 { - After MODULE_08 - Object module_12.o + After MODULE_08 + Object module_12.o } Overlay MODULE_13 { - After MODULE_04 - Object module_13_init.o - Object module_13_arm1.o - Object module_13_thumb.o - Object module_13_arm2.o + After MODULE_04 + Object module_13_init.o + Object module_13_arm1.o + Object module_13_thumb.o + Object module_13_arm2.o } Overlay MODULE_14 { - ##PC## - After arm9 - Object module_14.o + ##PC## + After arm9 + Object module_14.o } Overlay MODULE_15 { - After arm9 - Object module_15.o + After arm9 + Object module_15.o } Overlay MODULE_16 { - ##Pokedex/Battle Sprites## - After arm9 - Object module_16.o + ##Pokedex/Battle Sprites## + After arm9 + Object module_16.o } Overlay MODULE_17 { - After arm9 - Object module_17.o + After arm9 + Object module_17.o } Overlay MODULE_18 { - After MODULE_05 - Object module_18.o + After MODULE_05 + Object module_18.o } Overlay MODULE_19 { - ##Bottom screen before Pokétch## - After MODULE_06 - Object module_19.o + ##Bottom screen before Pokétch## + After MODULE_06 + Object module_19.o } Overlay MODULE_20 { - ##Pokétch## - After MODULE_06 - Object module_20.o + ##Pokétch## + After MODULE_06 + Object module_20.o } Overlay MODULE_21 { - ##Pokétch Clock## - After MODULE_20 - Object mod21_02254854.o - Object mod21_02254A6C.o + ##Pokétch Clock## + After MODULE_20 + Object mod21_02254854.o + Object mod21_02254A6C.o } Overlay MODULE_22 { - After MODULE_20 - Object module_22_sinit.o - Object module_22.o + After MODULE_20 + Object module_22_sinit.o + Object module_22.o } Overlay MODULE_23 { - ##Pokétch Calculator## - After MODULE_20 - Object module_23_sinit.o - Object module_23.o + ##Pokétch Calculator## + After MODULE_20 + Object module_23_sinit.o + Object module_23.o } Overlay MODULE_24 { - ##Memo Pad## - After MODULE_20 - Object module_24_sinit.o - Object module_24.o + ##Memo Pad## + After MODULE_20 + Object module_24_sinit.o + Object module_24.o } Overlay MODULE_25 { - ##Analogue Watch## - After MODULE_20 - Object module_25_sinit.o - Object module_25.o + ##Analogue Watch## + After MODULE_20 + Object module_25_sinit.o + Object module_25.o } Overlay MODULE_26 { - ##Dot Artist## - After MODULE_20 - Object module_26_sinit.o - Object module_26.o + ##Dot Artist## + After MODULE_20 + Object module_26_sinit.o + Object module_26.o } Overlay MODULE_27 { - ##Pokétch Party## - After MODULE_20 - Object module_27_sinit.o - Object module_27.o + ##Pokétch Party## + After MODULE_20 + Object module_27_sinit.o + Object module_27.o } Overlay MODULE_28 { - ##Friendship Checker## - After MODULE_20 - Object module_28_sinit.o - Object module_28.o + ##Friendship Checker## + After MODULE_20 + Object module_28_sinit.o + Object module_28.o } Overlay MODULE_29 { - ##Dowsing Machine## - After MODULE_20 - Object module_29_sinit.o - Object module_29.o + ##Dowsing Machine## + After MODULE_20 + Object module_29_sinit.o + Object module_29.o } Overlay MODULE_30 { - After MODULE_20 - Object module_30_sinit.o - Object module_30.o + After MODULE_20 + Object module_30_sinit.o + Object module_30.o } Overlay MODULE_31 { - ##Pokétch Counter## - After MODULE_20 - Object module_31_sinit.o - Object module_31.o + ##Pokétch Counter## + After MODULE_20 + Object module_31_sinit.o + Object module_31.o } Overlay MODULE_32 { - After MODULE_20 - Object module_32_sinit.o - Object module_32.o + After MODULE_20 + Object module_32_sinit.o + Object module_32.o } Overlay MODULE_33 { - After MODULE_20 - Object module_33_sinit.o - Object module_33.o + After MODULE_20 + Object module_33_sinit.o + Object module_33.o } Overlay MODULE_34 { - After MODULE_20 - Object module_34_sinit.o - Object module_34.o + After MODULE_20 + Object module_34_sinit.o + Object module_34.o } Overlay MODULE_35 { - ##Daycare Checker## - After MODULE_20 - Object module_35_sinit.o - Object module_35.o + ##Daycare Checker## + After MODULE_20 + Object module_35_sinit.o + Object module_35.o } Overlay MODULE_36 { - After MODULE_20 - Object module_36_sinit.o - Object module_36.o + After MODULE_20 + Object module_36_sinit.o + Object module_36.o } Overlay MODULE_37 { - ##Coin Toss## - After MODULE_20 - Object module_37_sinit.o - Object module_37.o + ##Coin Toss## + After MODULE_20 + Object module_37_sinit.o + Object module_37.o } Overlay MODULE_38 { - ##Move Checker## - After MODULE_20 - Object module_38_sinit.o - Object module_38.o + ##Move Checker## + After MODULE_20 + Object module_38_sinit.o + Object module_38.o } Overlay MODULE_39 { - After MODULE_20 - Object module_39_sinit.o - Object module_39.o + After MODULE_20 + Object module_39_sinit.o + Object module_39.o } Overlay MODULE_40 { - After MODULE_20 - Object module_40_sinit.o - Object module_40.o + After MODULE_20 + Object module_40_sinit.o + Object module_40.o } Overlay MODULE_41 { - After MODULE_20 - Object module_41_sinit.o - Object module_41.o + After MODULE_20 + Object module_41_sinit.o + Object module_41.o } Overlay MODULE_42 { - ##Marking Map## - After MODULE_20 - Object module_42_sinit.o - Object module_42.o + ##Marking Map## + After MODULE_20 + Object module_42_sinit.o + Object module_42.o } Overlay MODULE_43 { - ##Berry Searcher## - After MODULE_20 - Object module_43_sinit.o - Object module_43.o + ##Berry Searcher## + After MODULE_20 + Object module_43_sinit.o + Object module_43.o } Overlay MODULE_44 { - After MODULE_20 - Object module_44_sinit.o - Object module_44.o + After MODULE_20 + Object module_44_sinit.o + Object module_44.o } Overlay MODULE_45 { - After MODULE_20 - Object module_45_sinit.o - Object module_45.o + After MODULE_20 + Object module_45_sinit.o + Object module_45.o } Overlay MODULE_46 { - After MODULE_20 - Object module_46_sinit.o - Object module_46.o + After MODULE_20 + Object module_46_sinit.o + Object module_46.o } Overlay MODULE_47 { - ##Link Searcher## - After MODULE_20 - Object module_47_sinit.o - Object module_47.o + ##Link Searcher## + After MODULE_20 + Object module_47_sinit.o + Object module_47.o } Overlay MODULE_48 { - After MODULE_20 - Object module_48_sinit.o - Object module_48.o + After MODULE_20 + Object module_48_sinit.o + Object module_48.o } Overlay MODULE_49 { - ##Pokemon History## - After MODULE_20 - Object module_49_sinit.o - Object module_49.o + ##Pokemon History## + After MODULE_20 + Object module_49_sinit.o + Object module_49.o } Overlay MODULE_50 { - After MODULE_20 - Object module_50_sinit.o - Object module_50.o + After MODULE_20 + Object module_50_sinit.o + Object module_50.o } Overlay MODULE_51 { - After MODULE_20 - Object module_51.o + After MODULE_20 + Object module_51.o } Overlay MODULE_52 { - ##Some kind of transition overlay for intro## - After arm9 - Object module_52.o + ##Some kind of transition overlay for intro## + After arm9 + Object module_52.o } Overlay MODULE_53 { - After arm9 - Object module_53.o + After arm9 + Object module_53.o } Overlay MODULE_54 { - After arm9 - Object module_54.o + After arm9 + Object module_54.o } Overlay MODULE_55 { - After arm9 - Object module_55.o + After arm9 + Object module_55.o } Overlay MODULE_56 { - After MODULE_04 - Object module_56.o + After MODULE_04 + Object module_56.o } Overlay MODULE_57 { - ##Trainer card## - After arm9 - Object module_57.o + ##Trainer card## + After arm9 + Object module_57.o } Overlay MODULE_58 { - After MODULE_57 - Object module_58.o + After MODULE_57 + Object module_58.o } Overlay MODULE_59 { - ##Rowan's intro## - After arm9 - Object mod59_021D74E0_src.o - Object mod59_021D74E0_asm.o - Object mod59_021D9868.o + ##Rowan's intro## + After arm9 + Object mod59_021D74E0_src.o + Object mod59_021D74E0_asm.o + Object mod59_021D9868.o } Overlay MODULE_60 { - ##Options## - After arm9 - Object module_60.o + ##Options## + After arm9 + Object module_60.o } Overlay MODULE_61 { - After arm9 - Object module_61.o + After arm9 + Object module_61.o } Overlay MODULE_62 { - After MODULE_08 - Object module_62_sinit.o - Object module_62.o + After MODULE_08 + Object module_62_sinit.o + Object module_62.o } Overlay MODULE_63 { - ### Title Demo ### - After arm9 - Object mod63_021D74E0.o - Object mod63_021D8890.o - Object mod63_021DA640.o - Object mod63_021DAE5C.o - Object mod63_021DB450.o + ### Title Demo ### + After arm9 + Object mod63_021D74E0.o + Object mod63_021D8890.o + Object mod63_021DA640.o + Object mod63_021DAE5C.o + Object mod63_021DB450.o } Overlay MODULE_64 { - ##Pokemon Selection## - After arm9 - Object module_64.o + ##Pokemon Selection## + After arm9 + Object module_64.o } Overlay MODULE_65 { - After arm9 - Object module_65.o + After arm9 + Object module_65.o } Overlay MODULE_66 { - ##Fly Map## - After arm9 - Object module_66.o + ##Fly Map## + After arm9 + Object module_66.o } Overlay MODULE_67 { - After arm9 - Object module_67.o + After arm9 + Object module_67.o } Overlay MODULE_68 { - After arm9 - Object module_68.o + After arm9 + Object module_68.o } Overlay MODULE_69 { - ##Hall of Fame## - After MODULE_08 - Object module_69.o + ##Hall of Fame## + After MODULE_08 + Object module_69.o } Overlay MODULE_70 { - After arm9 - Object module_70.o + After arm9 + Object module_70.o } Overlay MODULE_71 { - After MODULE_08 - Object module_71.o + After MODULE_08 + Object module_71.o } Overlay MODULE_72 { - After arm9 + After arm9 } Overlay MODULE_73 { - After arm9 - Object module_73.o + After arm9 + Object module_73.o } Overlay MODULE_74 { - After arm9 - Object module_74.o + After arm9 + Object module_74.o } Overlay MODULE_75 { - ### Player's bag ### - After MODULE_14 - Object module_75.o + ### Player's bag ### + After MODULE_14 + Object module_75.o } Overlay MODULE_76 { - After arm9 - Object module_76.o + After arm9 + Object module_76.o } Overlay MODULE_77 { - After arm9 - Object module_77.o + After arm9 + Object module_77.o } Overlay MODULE_78 { - After arm9 - Object module_78.o + After arm9 + Object module_78.o } Overlay MODULE_79 { - After MODULE_04 - Object module_79_thumb.o - Object module_79_arm.o + After MODULE_04 + Object module_79_thumb.o + Object module_79_arm.o } Overlay MODULE_80 { - After MODULE_08 - Object module_80.o + After MODULE_08 + Object module_80.o } Overlay MODULE_81 { - After MODULE_80 - Object module_81.o + After MODULE_80 + Object module_81.o } Overlay MODULE_82 { - After MODULE_08 - Object module_82.o + After MODULE_08 + Object module_82.o } Overlay MODULE_83 { - ##Load Screen## - After MODULE_08 - Object module_83.o + ##Load Screen## + After MODULE_08 + Object module_83.o } Overlay MODULE_84 { - ##Credits## - After arm9 - Object module_84_thumb1.o - Object module_84_arm.o - Object module_84_thumb2.o + ##Credits## + After arm9 + Object module_84_thumb1.o + Object module_84_arm.o + Object module_84_thumb2.o } Overlay MODULE_85 { - After arm9 - Object module_85.o + After arm9 + Object module_85.o } Overlay MODULE_86 { - After arm9 - Object module_86.o + After arm9 + Object module_86.o } diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index 06fa49b6..afe833c1 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -1,521 +1,521 @@ - .include "asm/macros.inc" - .include "global.inc" - .include "constants/species.h" - .section .text - .balign 4, 0 + .include "asm/macros.inc" + .include "global.inc" + .include "constants/species.h" + .section .text + .balign 4, 0 - thumb_func_start MOD83_0222D5C0 + thumb_func_start MOD83_0222D5C0 MOD83_0222D5C0: ; 0x0222D5C0 - mov r0, #0 - bx lr - thumb_func_end MOD83_0222D5C0 + mov r0, #0 + bx lr + thumb_func_end MOD83_0222D5C0 - thumb_func_start MOD83_0222D5C4 + thumb_func_start MOD83_0222D5C4 MOD83_0222D5C4: ; 0x0222D5C4 - push {r4, r5, r6, r7, lr} - sub sp, #0x5c - add r5, r0, #0 - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - bl WindowIsInUse - cmp r0, #0 - bne _0222D63C - mov r1, #0x4f - mov r0, #0 - add r3, r5, #0 - lsl r1, r1, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x5c + add r5, r0, #0 + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + bl WindowIsInUse + cmp r0, #0 + bne _0222D63C + mov r1, #0x4f + mov r0, #0 + add r3, r5, #0 + lsl r1, r1, #2 _0222D5E0: - ldr r2, [r3, r1] - cmp r2, #1 - bne _0222D632 - lsl r1, r0, #2 - add r3, r5, r1 - mov r1, #0x4f - add r6, r0, #0 - mov r2, #0 - lsl r1, r1, #2 - str r2, [r3, r1] - mov r3, #0x1c - mov r0, #1 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - add r1, r1, #4 - ldr r7, _0222D670 ; =MOD83_0223A794 - mul r6, r3 - add r4, r7, r6 - ldr r3, [r4, #0x10] - add r0, sp, #8 - add r1, r5, r1 - bl MOD83_022388E4 - ldr r1, [r4, #8] - ldr r2, [r4, #0xc] - add r0, sp, #8 - mov r3, #0x13 - bl MOD83_02238934 - ldr r0, [r4, #0x14] - add r1, sp, #8 - str r0, [sp] - ldr r0, [r5] - ldr r2, [r7, r6] - ldr r3, [r4, #4] - bl MOD83_02238A38 - add sp, #0x5c - mov r0, #1 - pop {r4, r5, r6, r7, pc} + ldr r2, [r3, r1] + cmp r2, #1 + bne _0222D632 + lsl r1, r0, #2 + add r3, r5, r1 + mov r1, #0x4f + add r6, r0, #0 + mov r2, #0 + lsl r1, r1, #2 + str r2, [r3, r1] + mov r3, #0x1c + mov r0, #1 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r1, r1, #4 + ldr r7, _0222D670 ; =MOD83_0223A794 + mul r6, r3 + add r4, r7, r6 + ldr r3, [r4, #0x10] + add r0, sp, #8 + add r1, r5, r1 + bl MOD83_022388E4 + ldr r1, [r4, #8] + ldr r2, [r4, #0xc] + add r0, sp, #8 + mov r3, #0x13 + bl MOD83_02238934 + ldr r0, [r4, #0x14] + add r1, sp, #8 + str r0, [sp] + ldr r0, [r5] + ldr r2, [r7, r6] + ldr r3, [r4, #4] + bl MOD83_02238A38 + add sp, #0x5c + mov r0, #1 + pop {r4, r5, r6, r7, pc} _0222D632: - add r0, r0, #1 - add r3, r3, #4 - cmp r0, #1 - blt _0222D5E0 - b _0222D668 + add r0, r0, #1 + add r3, r3, #4 + cmp r0, #1 + blt _0222D5E0 + b _0222D668 _0222D63C: - ldr r0, _0222D674 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _0222D662 - ldr r0, _0222D678 ; =0x000005DC - bl PlaySE - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - mov r1, #0 - bl FUN_0200CCF8 - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - bl RemoveWindow + ldr r0, _0222D674 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _0222D662 + ldr r0, _0222D678 ; =0x000005DC + bl PlaySE + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + mov r1, #0 + bl FUN_0200CCF8 + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + bl RemoveWindow _0222D662: - add sp, #0x5c - mov r0, #1 - pop {r4, r5, r6, r7, pc} + add sp, #0x5c + mov r0, #1 + pop {r4, r5, r6, r7, pc} _0222D668: - mov r0, #0 - add sp, #0x5c - pop {r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #0x5c + pop {r4, r5, r6, r7, pc} + nop _0222D670: .word MOD83_0223A794 _0222D674: .word gMain _0222D678: .word 0x000005DC - thumb_func_end MOD83_0222D5C4 + thumb_func_end MOD83_0222D5C4 - thumb_func_start MOD83_0222D67C + thumb_func_start MOD83_0222D67C MOD83_0222D67C: ; 0x0222D67C - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r0, #0 - bl MOD83_02236E18 - mov r4, #0 - str r4, [r5, #0x24] - cmp r0, #0 - bne _0222D6E6 - bl MOD83_02236E9C - cmp r0, #4 - bhi _0222D6BE - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0 + bl MOD83_02236E18 + mov r4, #0 + str r4, [r5, #0x24] + cmp r0, #0 + bne _0222D6E6 + bl MOD83_02236E9C + cmp r0, #4 + bhi _0222D6BE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D6A2: ; jump table - .short _0222D6AC - _0222D6A2 - 2 ; case 0 - .short _0222D6B0 - _0222D6A2 - 2 ; case 1 - .short _0222D6B4 - _0222D6A2 - 2 ; case 2 - .short _0222D6B8 - _0222D6A2 - 2 ; case 3 - .short _0222D6BC - _0222D6A2 - 2 ; case 4 + .short _0222D6AC - _0222D6A2 - 2 ; case 0 + .short _0222D6B0 - _0222D6A2 - 2 ; case 1 + .short _0222D6B4 - _0222D6A2 - 2 ; case 2 + .short _0222D6B8 - _0222D6A2 - 2 ; case 3 + .short _0222D6BC - _0222D6A2 - 2 ; case 4 _0222D6AC: - mov r4, #2 - b _0222D6BE + mov r4, #2 + b _0222D6BE _0222D6B0: - mov r4, #1 - b _0222D6BE + mov r4, #1 + b _0222D6BE _0222D6B4: - mov r4, #5 - b _0222D6BE + mov r4, #5 + b _0222D6BE _0222D6B8: - mov r4, #4 - b _0222D6BE + mov r4, #4 + b _0222D6BE _0222D6BC: - mov r4, #3 + mov r4, #3 _0222D6BE: - add r0, r4, #0 - bl FUN_02016438 - ldr r0, [r5, #8] - bl Pokedex_GetNatDexFlag - cmp r0, #0 - beq _0222D6E6 - bl MOD83_02236EA8 - ldr r1, _0222D6E8 ; =gGameLanguage - ldrb r1, [r1] - cmp r1, r0 - bne _0222D6E6 - bl MOD83_02236E9C - add r0, r0, #1 - str r0, [r5, #0x24] - bl MOD83_02239490 + add r0, r4, #0 + bl FUN_02016438 + ldr r0, [r5, #8] + bl Pokedex_GetNatDexFlag + cmp r0, #0 + beq _0222D6E6 + bl MOD83_02236EA8 + ldr r1, _0222D6E8 ; =gGameLanguage + ldrb r1, [r1] + cmp r1, r0 + bne _0222D6E6 + bl MOD83_02236E9C + add r0, r0, #1 + str r0, [r5, #0x24] + bl MOD83_02239490 _0222D6E6: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _0222D6E8: .word gGameLanguage - thumb_func_end MOD83_0222D67C + thumb_func_end MOD83_0222D67C - thumb_func_start MOD83_0222D6EC + thumb_func_start MOD83_0222D6EC MOD83_0222D6EC: ; 0x0222D6EC - push {r4, lr} - mov r1, #0x43 - add r4, r0, #0 - lsl r1, r1, #2 - ldr r0, [r4, r1] - sub r0, #0xa - cmp r0, #4 - bhi _0222D7DC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + mov r1, #0x43 + add r4, r0, #0 + lsl r1, r1, #2 + ldr r0, [r4, r1] + sub r0, #0xa + cmp r0, #4 + bhi _0222D7DC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D708: ; jump table - .short _0222D712 - _0222D708 - 2 ; case 0 - .short _0222D718 - _0222D708 - 2 ; case 1 - .short _0222D7DC - _0222D708 - 2 ; case 2 - .short _0222D74C - _0222D708 - 2 ; case 3 - .short _0222D7D0 - _0222D708 - 2 ; case 4 + .short _0222D712 - _0222D708 - 2 ; case 0 + .short _0222D718 - _0222D708 - 2 ; case 1 + .short _0222D7DC - _0222D708 - 2 ; case 2 + .short _0222D74C - _0222D708 - 2 ; case 3 + .short _0222D7D0 - _0222D708 - 2 ; case 4 _0222D712: - mov r0, #0xb - str r0, [r4, r1] - pop {r4, pc} + mov r0, #0xb + str r0, [r4, r1] + pop {r4, pc} _0222D718: - ldr r0, [r4, #4] - bl FUN_02032D44 - mov r1, #0x78 - add r0, r1, #0 - add r0, #0x98 - str r1, [r4, r0] - mov r1, #0xd - add r0, r1, #0 - add r0, #0xff - str r1, [r4, r0] - mov r0, #0 - str r0, [r4, #0x40] - ldr r0, [r4, #0x14] - bl FUN_0202AF50 - cmp r0, #1 - bne _0222D7DC - ldr r1, [r4, #0x40] - mov r0, #1 - orr r1, r0 - str r1, [r4, #0x40] - ldr r1, [r4, #0x44] - orr r0, r1 - str r0, [r4, #0x44] - pop {r4, pc} + ldr r0, [r4, #4] + bl FUN_02032D44 + mov r1, #0x78 + add r0, r1, #0 + add r0, #0x98 + str r1, [r4, r0] + mov r1, #0xd + add r0, r1, #0 + add r0, #0xff + str r1, [r4, r0] + mov r0, #0 + str r0, [r4, #0x40] + ldr r0, [r4, #0x14] + bl FUN_0202AF50 + cmp r0, #1 + bne _0222D7DC + ldr r1, [r4, #0x40] + mov r0, #1 + orr r1, r0 + str r1, [r4, #0x40] + ldr r1, [r4, #0x44] + orr r0, r1 + str r0, [r4, #0x44] + pop {r4, pc} _0222D74C: - add r1, #0xc - ldr r0, [r4, r1] - cmp r0, #0 - bne _0222D7DC - bl FUN_02032D9C - ldr r1, [r4, #0x40] - bic r0, r1 - beq _0222D7B2 - mov r2, #0x45 - lsl r2, r2, #2 - ldr r3, [r4, r2] - cmp r3, #0xf - bne _0222D7B2 - add r2, r2, #4 - ldr r2, [r4, r2] - cmp r2, #0 - bne _0222D7B2 - cmp r1, r0 - beq _0222D7B2 - mov r2, #1 - add r1, r0, #0 - str r2, [r4, #0x48] - tst r1, r2 - beq _0222D782 - str r2, [r4, #0x34] - add r0, r2, #0 + add r1, #0xc + ldr r0, [r4, r1] + cmp r0, #0 + bne _0222D7DC + bl FUN_02032D9C + ldr r1, [r4, #0x40] + bic r0, r1 + beq _0222D7B2 + mov r2, #0x45 + lsl r2, r2, #2 + ldr r3, [r4, r2] + cmp r3, #0xf + bne _0222D7B2 + add r2, r2, #4 + ldr r2, [r4, r2] + cmp r2, #0 + bne _0222D7B2 + cmp r1, r0 + beq _0222D7B2 + mov r2, #1 + add r1, r0, #0 + str r2, [r4, #0x48] + tst r1, r2 + beq _0222D782 + str r2, [r4, #0x34] + add r0, r2, #0 _0222D782: - mov r1, #2 - add r2, r0, #0 - tst r2, r1 - beq _0222D790 - mov r0, #1 - str r0, [r4, #0x2c] - add r0, r1, #0 + mov r1, #2 + add r2, r0, #0 + tst r2, r1 + beq _0222D790 + mov r0, #1 + str r0, [r4, #0x2c] + add r0, r1, #0 _0222D790: - mov r1, #4 - add r2, r0, #0 - tst r2, r1 - beq _0222D79E - mov r0, #1 - str r0, [r4, #0x30] - add r0, r1, #0 + mov r1, #4 + add r2, r0, #0 + tst r2, r1 + beq _0222D79E + mov r0, #1 + str r0, [r4, #0x30] + add r0, r1, #0 _0222D79E: - mov r1, #3 - tst r1, r0 - beq _0222D7AC - mov r1, #0x4e - mov r2, #1 - lsl r1, r1, #2 - str r2, [r4, r1] + mov r1, #3 + tst r1, r0 + beq _0222D7AC + mov r1, #0x4e + mov r2, #1 + lsl r1, r1, #2 + str r2, [r4, r1] _0222D7AC: - ldr r1, [r4, #0x40] - orr r0, r1 - str r0, [r4, #0x40] + ldr r1, [r4, #0x40] + orr r0, r1 + str r0, [r4, #0x40] _0222D7B2: - mov r0, #0x11 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D7DC - bl FUN_02032D80 - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] - pop {r4, pc} + mov r0, #0x11 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D7DC + bl FUN_02032D80 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] + pop {r4, pc} _0222D7D0: - bl FUN_02032D80 - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] + bl FUN_02032D80 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] _0222D7DC: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222D6EC + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222D6EC - thumb_func_start MOD83_0222D7E0 + thumb_func_start MOD83_0222D7E0 MOD83_0222D7E0: ; 0x0222D7E0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x60 - mov r1, #0x45 - add r4, r0, #0 - lsl r1, r1, #2 - ldr r0, [r4, r1] - sub r0, #0xf - cmp r0, #4 - bls _0222D7F4 - b _0222D994 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x60 + mov r1, #0x45 + add r4, r0, #0 + lsl r1, r1, #2 + ldr r0, [r4, r1] + sub r0, #0xf + cmp r0, #4 + bls _0222D7F4 + b _0222D994 _0222D7F4: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D800: ; jump table - .short _0222D80A - _0222D800 - 2 ; case 0 - .short _0222D832 - _0222D800 - 2 ; case 1 - .short _0222D85E - _0222D800 - 2 ; case 2 - .short _0222D932 - _0222D800 - 2 ; case 3 - .short _0222D974 - _0222D800 - 2 ; case 4 + .short _0222D80A - _0222D800 - 2 ; case 0 + .short _0222D832 - _0222D800 - 2 ; case 1 + .short _0222D85E - _0222D800 - 2 ; case 2 + .short _0222D932 - _0222D800 - 2 ; case 3 + .short _0222D974 - _0222D800 - 2 ; case 4 _0222D80A: - add r0, r1, #4 - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D818 - add sp, #0x60 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + add r0, r1, #4 + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D818 + add sp, #0x60 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0222D818: - add r0, r1, #4 - ldr r0, [r4, r0] - sub r2, r0, #1 - add r0, r1, #4 - str r2, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D82C - mov r0, #0x10 - str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + sub r2, r0, #1 + add r0, r1, #4 + str r2, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D82C + mov r0, #0x10 + str r0, [r4, r1] _0222D82C: - add sp, #0x60 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add sp, #0x60 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222D832: - mov r0, #0 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - mov r1, #1 - ldr r0, [r4] - add r2, r1, #0 - mov r3, #2 - bl FUN_0200CB00 - ldr r0, [r4] - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r1, _0222D99C ; =0x00006B5A - ldr r0, _0222D9A0 ; =0x05000042 - strh r1, [r0] - mov r0, #0x45 - mov r1, #0x11 - lsl r0, r0, #2 - str r1, [r4, r0] - b _0222D994 + mov r0, #0 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + mov r1, #1 + ldr r0, [r4] + add r2, r1, #0 + mov r3, #2 + bl FUN_0200CB00 + ldr r0, [r4] + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r1, _0222D99C ; =0x00006B5A + ldr r0, _0222D9A0 ; =0x05000042 + strh r1, [r0] + mov r0, #0x45 + mov r1, #0x11 + lsl r0, r0, #2 + str r1, [r4, r0] + b _0222D994 _0222D85E: - mov r0, #1 - str r0, [sp] - mov r0, #2 - add r1, #0x10 - str r0, [sp, #4] - add r0, sp, #0xc - add r1, r4, r1 - mov r2, #0 - mov r3, #0xc - bl MOD83_022388E4 - ldr r0, [r4, #0x44] - ldr r1, [r4, #0x40] - mvn r0, r0 - and r0, r1 - mov r1, #1 - add r2, r0, #0 - tst r2, r1 - beq _0222D892 - ldr r2, [r4, #0x38] - tst r1, r2 - beq _0222D88E - ldr r5, _0222D9A4 ; =MOD83_0223A7F0 - b _0222D8B2 + mov r0, #1 + str r0, [sp] + mov r0, #2 + add r1, #0x10 + str r0, [sp, #4] + add r0, sp, #0xc + add r1, r4, r1 + mov r2, #0 + mov r3, #0xc + bl MOD83_022388E4 + ldr r0, [r4, #0x44] + ldr r1, [r4, #0x40] + mvn r0, r0 + and r0, r1 + mov r1, #1 + add r2, r0, #0 + tst r2, r1 + beq _0222D892 + ldr r2, [r4, #0x38] + tst r1, r2 + beq _0222D88E + ldr r5, _0222D9A4 ; =MOD83_0223A7F0 + b _0222D8B2 _0222D88E: - ldr r5, _0222D9A8 ; =MOD83_0223A804 - b _0222D8B2 + ldr r5, _0222D9A8 ; =MOD83_0223A804 + b _0222D8B2 _0222D892: - mov r1, #2 - add r2, r0, #0 - tst r2, r1 - beq _0222D8A8 - ldr r2, [r4, #0x38] - tst r1, r2 - beq _0222D8A4 - ldr r5, _0222D9AC ; =MOD83_0223A818 - b _0222D8B2 + mov r1, #2 + add r2, r0, #0 + tst r2, r1 + beq _0222D8A8 + ldr r2, [r4, #0x38] + tst r1, r2 + beq _0222D8A4 + ldr r5, _0222D9AC ; =MOD83_0223A818 + b _0222D8B2 _0222D8A4: - ldr r5, _0222D9B0 ; =MOD83_0223A82C - b _0222D8B2 + ldr r5, _0222D9B0 ; =MOD83_0223A82C + b _0222D8B2 _0222D8A8: - mov r1, #0x80 - tst r1, r0 - beq _0222D8B2 - ldr r5, _0222D9B4 ; =MOD83_0223A840 - mov r0, #0 + mov r1, #0x80 + tst r1, r0 + beq _0222D8B2 + ldr r5, _0222D9B4 ; =MOD83_0223A840 + mov r0, #0 _0222D8B2: - ldr r1, [r4, #0x44] - mov r3, #0x13 - orr r0, r1 - str r0, [r4, #0x44] - ldr r1, [r5, #8] - ldr r2, [r5, #0xc] - add r0, sp, #0xc - bl MOD83_02238934 - mov r0, #1 - str r0, [sp, #0x38] - ldr r0, [r5, #0x10] - add r1, sp, #0xc - str r0, [sp] - ldr r0, [r4] - ldr r2, [r5] - ldr r3, [r5, #4] - bl MOD83_02238A38 - ldr r0, [sp, #0x1c] - bl GetWindowX - add r6, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowY - add r7, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowWidth - add r5, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowHeight - str r5, [sp] - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #1 - add r2, r6, #0 - add r3, r7, #0 - bl BgTilemapRectChangePalette - mov r0, #1 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #4 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #2 - mov r1, #1 - bl GX_EngineAToggleLayers - mov r1, #0x1e - add r0, r1, #0 - add r0, #0xfe - str r1, [r4, r0] - mov r0, #0x12 - add r1, #0xf6 - str r0, [r4, r1] - b _0222D994 + ldr r1, [r4, #0x44] + mov r3, #0x13 + orr r0, r1 + str r0, [r4, #0x44] + ldr r1, [r5, #8] + ldr r2, [r5, #0xc] + add r0, sp, #0xc + bl MOD83_02238934 + mov r0, #1 + str r0, [sp, #0x38] + ldr r0, [r5, #0x10] + add r1, sp, #0xc + str r0, [sp] + ldr r0, [r4] + ldr r2, [r5] + ldr r3, [r5, #4] + bl MOD83_02238A38 + ldr r0, [sp, #0x1c] + bl GetWindowX + add r6, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowY + add r7, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowWidth + add r5, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowHeight + str r5, [sp] + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #1 + add r2, r6, #0 + add r3, r7, #0 + bl BgTilemapRectChangePalette + mov r0, #1 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #4 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #2 + mov r1, #1 + bl GX_EngineAToggleLayers + mov r1, #0x1e + add r0, r1, #0 + add r0, #0xfe + str r1, [r4, r0] + mov r0, #0x12 + add r1, #0xf6 + str r0, [r4, r1] + b _0222D994 _0222D932: - add r0, r1, #0 - add r0, #8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222D94A - add r0, r1, #0 - add r0, #8 - ldr r0, [r4, r0] - add r1, #8 - sub r0, r0, #1 - str r0, [r4, r1] - b _0222D994 + add r0, r1, #0 + add r0, #8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222D94A + add r0, r1, #0 + add r0, #8 + ldr r0, [r4, r0] + add r1, #8 + sub r0, r0, #1 + str r0, [r4, r1] + b _0222D994 _0222D94A: - ldr r0, _0222D9B8 ; =gMain - ldr r2, [r0, #0x48] - mov r0, #3 - tst r0, r2 - beq _0222D994 - add r1, #0x10 - add r0, r4, r1 - bl RemoveWindow - mov r0, #0x45 - mov r1, #0x13 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r1, _0222D9B8 ; =gMain - add r0, #0xc - ldr r1, [r1, #0x48] - str r1, [r4, r0] - ldr r0, _0222D9BC ; =0x000005DC - bl PlaySE - b _0222D994 + ldr r0, _0222D9B8 ; =gMain + ldr r2, [r0, #0x48] + mov r0, #3 + tst r0, r2 + beq _0222D994 + add r1, #0x10 + add r0, r4, r1 + bl RemoveWindow + mov r0, #0x45 + mov r1, #0x13 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r1, _0222D9B8 ; =gMain + add r0, #0xc + ldr r1, [r1, #0x48] + str r1, [r4, r0] + ldr r0, _0222D9BC ; =0x000005DC + bl PlaySE + b _0222D994 _0222D974: - mov r0, #1 - add r1, r0, #0 - bl GX_EngineAToggleLayers - mov r0, #4 - mov r1, #1 - bl GX_EngineAToggleLayers - mov r0, #2 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #0x45 - mov r1, #0xf - lsl r0, r0, #2 - str r1, [r4, r0] + mov r0, #1 + add r1, r0, #0 + bl GX_EngineAToggleLayers + mov r0, #4 + mov r1, #1 + bl GX_EngineAToggleLayers + mov r0, #2 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #0x45 + mov r1, #0xf + lsl r0, r0, #2 + str r1, [r4, r0] _0222D994: - mov r0, #1 - add sp, #0x60 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #1 + add sp, #0x60 + pop {r3, r4, r5, r6, r7, pc} + nop _0222D99C: .word 0x00006B5A _0222D9A0: .word 0x05000042 _0222D9A4: .word MOD83_0223A7F0 @@ -525,202 +525,202 @@ _0222D9B0: .word MOD83_0223A82C _0222D9B4: .word MOD83_0223A840 _0222D9B8: .word gMain _0222D9BC: .word 0x000005DC - thumb_func_end MOD83_0222D7E0 + thumb_func_end MOD83_0222D7E0 - thumb_func_start MOD83_0222D9C0 + thumb_func_start MOD83_0222D9C0 MOD83_0222D9C0: ; 0x0222D9C0 - push {r3, r4, r5, lr} - add r4, r0, #0 - mov r0, #0x42 - lsl r0, r0, #2 - ldr r1, [r4, r0] - sub r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, r1 - beq _0222DA48 - sub r1, r1, r0 - asr r0, r1, #1 - lsr r0, r0, #0x1e - add r0, r1, r0 - asr r0, r0, #2 - asr r2, r0, #0x1f - add r1, r0, #0 - eor r1, r2 - sub r2, r1, r2 - mov r1, #3 - lsl r1, r1, #0xe - cmp r2, r1 - ble _0222D9F6 - cmp r0, #0 - ble _0222D9F4 - add r0, r1, #0 - b _0222D9F6 + push {r3, r4, r5, lr} + add r4, r0, #0 + mov r0, #0x42 + lsl r0, r0, #2 + ldr r1, [r4, r0] + sub r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, r1 + beq _0222DA48 + sub r1, r1, r0 + asr r0, r1, #1 + lsr r0, r0, #0x1e + add r0, r1, r0 + asr r0, r0, #2 + asr r2, r0, #0x1f + add r1, r0, #0 + eor r1, r2 + sub r2, r1, r2 + mov r1, #3 + lsl r1, r1, #0xe + cmp r2, r1 + ble _0222D9F6 + cmp r0, #0 + ble _0222D9F4 + add r0, r1, #0 + b _0222D9F6 _0222D9F4: - ldr r0, _0222DA4C ; =0xFFFF4000 + ldr r0, _0222DA4C ; =0xFFFF4000 _0222D9F6: - mov r1, #0x41 - lsl r1, r1, #2 - ldr r2, [r4, r1] - add r0, r2, r0 - str r0, [r4, r1] - add r0, r1, #4 - ldr r0, [r4, r0] - ldr r2, [r4, r1] - sub r2, r0, r2 - asr r3, r2, #0x1f - eor r2, r3 - sub r3, r2, r3 - add r2, r1, #0 - add r2, #0xfc - cmp r3, r2 - bge _0222DA18 - str r0, [r4, r1] + mov r1, #0x41 + lsl r1, r1, #2 + ldr r2, [r4, r1] + add r0, r2, r0 + str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + ldr r2, [r4, r1] + sub r2, r0, r2 + asr r3, r2, #0x1f + eor r2, r3 + sub r3, r2, r3 + add r2, r1, #0 + add r2, #0xfc + cmp r3, r2 + bge _0222DA18 + str r0, [r4, r1] _0222DA18: - mov r3, #0x41 - lsl r3, r3, #2 - ldr r5, [r4, r3] - ldr r0, [r4] - asr r3, r5, #0xb - lsr r3, r3, #0x14 - add r3, r5, r3 - mov r1, #0 - mov r2, #3 - asr r3, r3, #0xc - bl ScheduleSetBgPosText - mov r3, #0x41 - lsl r3, r3, #2 - ldr r0, [r4] - ldr r4, [r4, r3] - mov r1, #2 - asr r3, r4, #0xb - lsr r3, r3, #0x14 - add r3, r4, r3 - mov r2, #3 - asr r3, r3, #0xc - bl ScheduleSetBgPosText + mov r3, #0x41 + lsl r3, r3, #2 + ldr r5, [r4, r3] + ldr r0, [r4] + asr r3, r5, #0xb + lsr r3, r3, #0x14 + add r3, r5, r3 + mov r1, #0 + mov r2, #3 + asr r3, r3, #0xc + bl ScheduleSetBgPosText + mov r3, #0x41 + lsl r3, r3, #2 + ldr r0, [r4] + ldr r4, [r4, r3] + mov r1, #2 + asr r3, r4, #0xb + lsr r3, r3, #0x14 + add r3, r4, r3 + mov r2, #3 + asr r3, r3, #0xc + bl ScheduleSetBgPosText _0222DA48: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0222DA4C: .word 0xFFFF4000 - thumb_func_end MOD83_0222D9C0 + thumb_func_end MOD83_0222D9C0 - thumb_func_start MOD83_0222DA50 + thumb_func_start MOD83_0222DA50 MOD83_0222DA50: ; 0x0222DA50 - push {r3, r4, r5, lr} - sub sp, #0x40 - ldr r5, _0222DB4C ; =MOD83_0223A380 - add r4, r0, #0 - add r3, sp, #0x18 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x40 + ldr r5, _0222DB4C ; =MOD83_0223A380 + add r4, r0, #0 + add r3, sp, #0x18 + mov r2, #5 _0222DA5C: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _0222DA5C - ldr r3, _0222DB50 ; =MOD83_0223A370 - add r2, sp, #8 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - add r0, sp, #0x18 - bl GX_SetBanks - add r0, sp, #8 - bl SetBothScreensModesAndDisable - mov r1, #0 - str r1, [sp] - mov r3, #0xf - ldr r0, [r4] - mov r2, #2 - lsl r3, r3, #0xc - bl MOD83_022387D8 - ldr r1, _0222DB54 ; =0x04000008 - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - mov r0, #2 - orr r0, r2 - strh r0, [r1] - mov r0, #0 - mov r1, #0x20 - add r2, r0, #0 - bl BG_ClearCharDataRange - mov r0, #2 - lsl r0, r0, #0xe - str r0, [sp] - mov r1, #1 - mov r3, #0x36 - ldr r0, [r4] - add r2, r1, #0 - lsl r3, r3, #0xa - bl MOD83_022387D8 - ldr r1, _0222DB58 ; =0x0400000A - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - mov r0, #1 - orr r2, r0 - strh r2, [r1] - mov r1, #0x20 - mov r2, #0 - bl BG_ClearCharDataRange - mov r0, #0 - str r0, [sp] - mov r1, #2 - mov r3, #0xe - ldr r0, [r4] - add r2, r1, #0 - lsl r3, r3, #0xc - bl MOD83_022387D8 - ldr r1, _0222DB5C ; =0x0400000C - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - strh r2, [r1] - mov r0, #2 - mov r1, #0x20 - mov r2, #0 - bl BG_ClearCharDataRange - bl FUN_0201BD5C - mov r0, #0 - mov r1, #0x20 - mov r2, #0x51 - bl FUN_02002ED0 - mov r0, #0 - add r1, r0, #0 - mov r2, #0x51 - bl FUN_02002ED0 - mov r2, #5 - mov r1, #0 - lsl r2, r2, #0x18 - ldr r0, _0222DB60 ; =0x00006B5A - strh r1, [r2] - strh r0, [r2, #0x3e] - str r1, [sp] - mov r0, #0x51 - str r0, [sp, #4] - ldr r0, [r4] - mov r2, #1 - mov r3, #2 - bl FUN_0200CB00 - mov r0, #1 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #0xa - mov r3, #3 - bl FUN_0200CB00 - ldr r1, _0222DB60 ; =0x00006B5A - ldr r0, _0222DB64 ; =0x05000042 - strh r1, [r0] - add sp, #0x40 - pop {r3, r4, r5, pc} - .align 2, 0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _0222DA5C + ldr r3, _0222DB50 ; =MOD83_0223A370 + add r2, sp, #8 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + add r0, sp, #0x18 + bl GX_SetBanks + add r0, sp, #8 + bl SetBothScreensModesAndDisable + mov r1, #0 + str r1, [sp] + mov r3, #0xf + ldr r0, [r4] + mov r2, #2 + lsl r3, r3, #0xc + bl MOD83_022387D8 + ldr r1, _0222DB54 ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + mov r0, #2 + orr r0, r2 + strh r0, [r1] + mov r0, #0 + mov r1, #0x20 + add r2, r0, #0 + bl BG_ClearCharDataRange + mov r0, #2 + lsl r0, r0, #0xe + str r0, [sp] + mov r1, #1 + mov r3, #0x36 + ldr r0, [r4] + add r2, r1, #0 + lsl r3, r3, #0xa + bl MOD83_022387D8 + ldr r1, _0222DB58 ; =0x0400000A + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + mov r0, #1 + orr r2, r0 + strh r2, [r1] + mov r1, #0x20 + mov r2, #0 + bl BG_ClearCharDataRange + mov r0, #0 + str r0, [sp] + mov r1, #2 + mov r3, #0xe + ldr r0, [r4] + add r2, r1, #0 + lsl r3, r3, #0xc + bl MOD83_022387D8 + ldr r1, _0222DB5C ; =0x0400000C + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + strh r2, [r1] + mov r0, #2 + mov r1, #0x20 + mov r2, #0 + bl BG_ClearCharDataRange + bl FUN_0201BD5C + mov r0, #0 + mov r1, #0x20 + mov r2, #0x51 + bl FUN_02002ED0 + mov r0, #0 + add r1, r0, #0 + mov r2, #0x51 + bl FUN_02002ED0 + mov r2, #5 + mov r1, #0 + lsl r2, r2, #0x18 + ldr r0, _0222DB60 ; =0x00006B5A + strh r1, [r2] + strh r0, [r2, #0x3e] + str r1, [sp] + mov r0, #0x51 + str r0, [sp, #4] + ldr r0, [r4] + mov r2, #1 + mov r3, #2 + bl FUN_0200CB00 + mov r0, #1 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #0xa + mov r3, #3 + bl FUN_0200CB00 + ldr r1, _0222DB60 ; =0x00006B5A + ldr r0, _0222DB64 ; =0x05000042 + strh r1, [r0] + add sp, #0x40 + pop {r3, r4, r5, pc} + .align 2, 0 _0222DB4C: .word MOD83_0223A380 _0222DB50: .word MOD83_0223A370 _0222DB54: .word 0x04000008 @@ -728,1628 +728,1628 @@ _0222DB58: .word 0x0400000A _0222DB5C: .word 0x0400000C _0222DB60: .word 0x00006B5A _0222DB64: .word 0x05000042 - thumb_func_end MOD83_0222DA50 + thumb_func_end MOD83_0222DA50 - thumb_func_start MOD83_0222DB68 + thumb_func_start MOD83_0222DB68 MOD83_0222DB68: ; 0x0222DB68 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0x25 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x27 - mov r2, #0x24 - mov r3, #0x26 - bl MOD83_02238BC4 - mov r0, #0 - mov r1, #0x15 - str r0, [sp] - lsl r1, r1, #4 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #8 - bl MOD83_02238DBC - mov r1, #0x15 - lsl r1, r1, #4 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_020200A0 - mov r0, #1 - mov r1, #0x55 - str r0, [sp] - lsl r1, r1, #2 - ldr r1, [r4, r1] - mov r0, #0 - mov r2, #0x80 - mov r3, #0xb8 - bl MOD83_02238DBC - mov r1, #0x55 - lsl r1, r1, #2 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_020200A0 - add sp, #8 - pop {r4, pc} - thumb_func_end MOD83_0222DB68 - - thumb_func_start MOD83_0222DBD0 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0x25 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x27 + mov r2, #0x24 + mov r3, #0x26 + bl MOD83_02238BC4 + mov r0, #0 + mov r1, #0x15 + str r0, [sp] + lsl r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #8 + bl MOD83_02238DBC + mov r1, #0x15 + lsl r1, r1, #4 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_020200A0 + mov r0, #1 + mov r1, #0x55 + str r0, [sp] + lsl r1, r1, #2 + ldr r1, [r4, r1] + mov r0, #0 + mov r2, #0x80 + mov r3, #0xb8 + bl MOD83_02238DBC + mov r1, #0x55 + lsl r1, r1, #2 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_020200A0 + add sp, #8 + pop {r4, pc} + thumb_func_end MOD83_0222DB68 + + thumb_func_start MOD83_0222DBD0 MOD83_0222DBD0: ; 0x0222DBD0 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x29 - mov r2, #0 - mov r3, #0x80 - bl GfGfxLoader_GXLoadPal - mov r0, #0xe - lsl r0, r0, #6 - str r0, [sp] - mov r0, #2 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - mov r0, #0x51 - str r0, [sp, #0xc] - ldr r2, [r4] - mov r0, #0x74 - mov r1, #0x28 - mov r3, #2 - bl GfGfxLoader_LoadCharData - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222DBD0 - - thumb_func_start MOD83_0222DC10 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x29 + mov r2, #0 + mov r3, #0x80 + bl GfGfxLoader_GXLoadPal + mov r0, #0xe + lsl r0, r0, #6 + str r0, [sp] + mov r0, #2 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + mov r0, #0x51 + str r0, [sp, #0xc] + ldr r2, [r4] + mov r0, #0x74 + mov r1, #0x28 + mov r3, #2 + bl GfGfxLoader_LoadCharData + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222DBD0 + + thumb_func_start MOD83_0222DC10 MOD83_0222DC10: ; 0x0222DC10 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [r5] - add r4, r1, #0 - mov r1, #2 - add r6, r2, #0 - add r7, r3, #0 - bl GetBgTilemapBuffer - ldr r1, _0222DC5C ; =0x00004380 - cmp r7, #2 - bne _0222DC2A - add r1, r1, #2 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [r5] + add r4, r1, #0 + mov r1, #2 + add r6, r2, #0 + add r7, r3, #0 + bl GetBgTilemapBuffer + ldr r1, _0222DC5C ; =0x00004380 + cmp r7, #2 + bne _0222DC2A + add r1, r1, #2 _0222DC2A: - lsl r2, r6, #5 - add r3, r4, r2 - lsl r2, r3, #1 - add r3, r3, #1 - strh r1, [r0, r2] - add r2, r1, #1 - lsl r3, r3, #1 - strh r2, [r0, r3] - add r3, r1, #0 - add r2, r6, #1 - lsl r2, r2, #5 - add r4, r4, r2 - add r3, #8 - lsl r2, r4, #1 - strh r3, [r0, r2] - add r2, r4, #1 - add r1, #9 - lsl r2, r2, #1 - strh r1, [r0, r2] - ldr r0, [r5] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r2, r6, #5 + add r3, r4, r2 + lsl r2, r3, #1 + add r3, r3, #1 + strh r1, [r0, r2] + add r2, r1, #1 + lsl r3, r3, #1 + strh r2, [r0, r3] + add r3, r1, #0 + add r2, r6, #1 + lsl r2, r2, #5 + add r4, r4, r2 + add r3, #8 + lsl r2, r4, #1 + strh r3, [r0, r2] + add r2, r4, #1 + add r1, #9 + lsl r2, r2, #1 + strh r1, [r0, r2] + ldr r0, [r5] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r3, r4, r5, r6, r7, pc} + nop _0222DC5C: .word 0x00004380 - thumb_func_end MOD83_0222DC10 + thumb_func_end MOD83_0222DC10 - thumb_func_start MOD83_0222DC60 + thumb_func_start MOD83_0222DC60 MOD83_0222DC60: ; 0x0222DC60 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, [r5] - add r4, r1, #0 - add r6, r2, #0 - mov r1, #2 - bl GetBgTilemapBuffer - lsl r1, r6, #5 - add r3, r4, r1 - ldr r1, _0222DC9C ; =0x00004384 - lsl r2, r3, #1 - strh r1, [r0, r2] - add r2, r3, #1 - lsl r2, r2, #1 - strh r1, [r0, r2] - add r2, r6, #1 - lsl r2, r2, #5 - add r3, r4, r2 - lsl r2, r3, #1 - strh r1, [r0, r2] - add r2, r3, #1 - lsl r2, r2, #1 - strh r1, [r0, r2] - ldr r0, [r5] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, [r5] + add r4, r1, #0 + add r6, r2, #0 + mov r1, #2 + bl GetBgTilemapBuffer + lsl r1, r6, #5 + add r3, r4, r1 + ldr r1, _0222DC9C ; =0x00004384 + lsl r2, r3, #1 + strh r1, [r0, r2] + add r2, r3, #1 + lsl r2, r2, #1 + strh r1, [r0, r2] + add r2, r6, #1 + lsl r2, r2, #5 + add r3, r4, r2 + lsl r2, r3, #1 + strh r1, [r0, r2] + add r2, r3, #1 + lsl r2, r2, #1 + strh r1, [r0, r2] + ldr r0, [r5] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r4, r5, r6, pc} + nop _0222DC9C: .word 0x00004384 - thumb_func_end MOD83_0222DC60 + thumb_func_end MOD83_0222DC60 - thumb_func_start MOD83_0222DCA0 + thumb_func_start MOD83_0222DCA0 MOD83_0222DCA0: ; 0x0222DCA0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r6, r0, #0 - add r0, r2, #0 - add r7, r3, #0 - ldr r2, [sp, #0x28] - mov r3, #0x51 - bl ReadMsgData_ExpandPlaceholders - add r5, r0, #0 - mov r0, #0 - mov r1, #2 - bl GetFontAttribute - add r2, r0, #0 - mov r0, #0 - add r1, r5, #0 - bl FUN_02002E14 - add r4, r0, #0 - add r0, r6, #0 - bl GetWindowWidth - lsl r0, r0, #3 - add r4, #0x20 - sub r3, r0, r4 - ldr r0, [sp, #0x2c] - mov r1, #0 - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r7, [sp, #8] - add r0, r6, #0 - add r2, r5, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - bl String_dtor - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222DCA0 - - thumb_func_start MOD83_0222DCF4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r6, r0, #0 + add r0, r2, #0 + add r7, r3, #0 + ldr r2, [sp, #0x28] + mov r3, #0x51 + bl ReadMsgData_ExpandPlaceholders + add r5, r0, #0 + mov r0, #0 + mov r1, #2 + bl GetFontAttribute + add r2, r0, #0 + mov r0, #0 + add r1, r5, #0 + bl FUN_02002E14 + add r4, r0, #0 + add r0, r6, #0 + bl GetWindowWidth + lsl r0, r0, #3 + add r4, #0x20 + sub r3, r0, r4 + ldr r0, [sp, #0x2c] + mov r1, #0 + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r7, [sp, #8] + add r0, r6, #0 + add r2, r5, #0 + str r1, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + bl String_dtor + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222DCA0 + + thumb_func_start MOD83_0222DCF4 MOD83_0222DCF4: ; 0x0222DCF4 - push {r3, lr} - sub sp, #8 - add r2, r1, #0 - cmp r2, #0x64 - blt _0222DD04 - mov r3, #3 - mov r1, #0 - b _0222DD12 + push {r3, lr} + sub sp, #8 + add r2, r1, #0 + cmp r2, #0x64 + blt _0222DD04 + mov r3, #3 + mov r1, #0 + b _0222DD12 _0222DD04: - cmp r2, #0xa - blt _0222DD0E - mov r3, #3 - mov r1, #1 - b _0222DD12 + cmp r2, #0xa + blt _0222DD0E + mov r3, #3 + mov r1, #1 + b _0222DD12 _0222DD0E: - mov r3, #2 - mov r1, #1 + mov r3, #2 + mov r1, #1 _0222DD12: - str r1, [sp] - mov r1, #1 - str r1, [sp, #4] - mov r1, #0 - bl BufferIntegerAsString - add sp, #8 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0222DCF4 - - thumb_func_start MOD83_0222DD24 + str r1, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r1, #0 + bl BufferIntegerAsString + add sp, #8 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0222DCF4 + + thumb_func_start MOD83_0222DD24 MOD83_0222DD24: ; 0x0222DD24 - push {r4, r5, r6, r7, lr} - sub sp, #0x2c - str r2, [sp, #0x18] - str r0, [sp, #0x10] - str r1, [sp, #0x14] - add r4, r3, #0 - ldr r2, _0222DEB4 ; =0x000001EE - mov r0, #1 - mov r1, #0x1a - mov r3, #0x51 - bl NewMsgDataFromNarc - str r0, [sp, #0x24] - mov r0, #0x51 - bl ScrStrBufs_new - str r0, [sp, #0x28] - ldr r0, [sp, #0x10] - ldr r0, [r0, #0xc] - bl PlayerProfile_GetTrainerGender - cmp r0, #1 - bne _0222DD58 - ldr r0, _0222DEB8 ; =0x0003040F - str r0, [sp, #0x1c] - b _0222DD5C + push {r4, r5, r6, r7, lr} + sub sp, #0x2c + str r2, [sp, #0x18] + str r0, [sp, #0x10] + str r1, [sp, #0x14] + add r4, r3, #0 + ldr r2, _0222DEB4 ; =0x000001EE + mov r0, #1 + mov r1, #0x1a + mov r3, #0x51 + bl NewMsgDataFromNarc + str r0, [sp, #0x24] + mov r0, #0x51 + bl ScrStrBufs_new + str r0, [sp, #0x28] + ldr r0, [sp, #0x10] + ldr r0, [r0, #0xc] + bl PlayerProfile_GetTrainerGender + cmp r0, #1 + bne _0222DD58 + ldr r0, _0222DEB8 ; =0x0003040F + str r0, [sp, #0x1c] + b _0222DD5C _0222DD58: - ldr r0, _0222DEBC ; =0x0007080F - str r0, [sp, #0x1c] + ldr r0, _0222DEBC ; =0x0007080F + str r0, [sp, #0x1c] _0222DD5C: - ldr r0, [sp, #0x14] - ldr r1, _0222DEC0 ; =MOD83_0223A85C - lsl r0, r0, #4 - str r0, [sp, #0x20] - ldr r0, [r1, r0] - ldr r1, [sp, #0x18] - str r0, [sp] - ldr r0, [sp, #0x10] - mov r2, #3 - ldr r0, [r0] - add r3, r4, #0 - bl MOD83_02238A38 - ldr r4, _0222DEC4 ; =MOD83_0223A784 - mov r6, #1 - mov r5, #0x10 + ldr r0, [sp, #0x14] + ldr r1, _0222DEC0 ; =MOD83_0223A85C + lsl r0, r0, #4 + str r0, [sp, #0x20] + ldr r0, [r1, r0] + ldr r1, [sp, #0x18] + str r0, [sp] + ldr r0, [sp, #0x10] + mov r2, #3 + ldr r0, [r0] + add r3, r4, #0 + bl MOD83_02238A38 + ldr r4, _0222DEC4 ; =MOD83_0223A784 + mov r6, #1 + mov r5, #0x10 _0222DD7C: - cmp r6, #4 - bne _0222DD88 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x4c] - cmp r0, #0 - beq _0222DDB8 + cmp r6, #4 + bne _0222DD88 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x4c] + cmp r0, #0 + beq _0222DDB8 _0222DD88: - ldr r0, [sp, #0x28] - ldr r1, [sp, #0x24] - ldr r2, [r4] - mov r3, #0x51 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - str r5, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [sp, #0x1c] - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x18] - add r2, r7, #0 - ldr r0, [r0, #0x10] - mov r3, #0x20 - bl AddTextPrinterParameterized2 - add r0, r7, #0 - bl String_dtor + ldr r0, [sp, #0x28] + ldr r1, [sp, #0x24] + ldr r2, [r4] + mov r3, #0x51 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + str r5, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [sp, #0x1c] + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x18] + add r2, r7, #0 + ldr r0, [r0, #0x10] + mov r3, #0x20 + bl AddTextPrinterParameterized2 + add r0, r7, #0 + bl String_dtor _0222DDB8: - add r6, r6, #1 - add r4, r4, #4 - add r5, #0x10 - cmp r6, #5 - blo _0222DD7C - ldr r2, [sp, #0x10] - ldr r0, [sp, #0x28] - ldr r2, [r2, #0xc] - mov r1, #0 - bl BufferPlayersName - mov r0, #0x10 - str r0, [sp] - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x10] - bl GetIGTHours - add r1, r0, #0 - ldr r0, [sp, #0x28] - bl MOD83_0222DCF4 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x10] - bl GetIGTMinutes - add r2, r0, #0 - mov r3, #2 - ldr r0, [sp, #0x28] - str r3, [sp] - mov r1, #1 - str r1, [sp, #4] - bl BufferIntegerAsString - mov r0, #0x11 - str r0, [sp] - mov r0, #0x20 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - mov r1, #0 - str r1, [sp] - mov r3, #1 - ldr r2, [sp, #0x10] - str r3, [sp, #4] - ldr r0, [sp, #0x28] - ldr r2, [r2, #0x50] - bl BufferIntegerAsString - mov r0, #0x13 - str r0, [sp] - mov r0, #0x30 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x4c] - cmp r0, #0 - beq _0222DE76 - ldr r0, [sp, #0x10] - ldr r0, [r0, #8] - bl Pokedex_CountSeenMons - add r1, r0, #0 - ldr r0, [sp, #0x28] - bl MOD83_0222DCF4 - mov r0, #0x12 - str r0, [sp] - mov r0, #0x40 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 + add r6, r6, #1 + add r4, r4, #4 + add r5, #0x10 + cmp r6, #5 + blo _0222DD7C + ldr r2, [sp, #0x10] + ldr r0, [sp, #0x28] + ldr r2, [r2, #0xc] + mov r1, #0 + bl BufferPlayersName + mov r0, #0x10 + str r0, [sp] + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x10] + bl GetIGTHours + add r1, r0, #0 + ldr r0, [sp, #0x28] + bl MOD83_0222DCF4 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x10] + bl GetIGTMinutes + add r2, r0, #0 + mov r3, #2 + ldr r0, [sp, #0x28] + str r3, [sp] + mov r1, #1 + str r1, [sp, #4] + bl BufferIntegerAsString + mov r0, #0x11 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + mov r1, #0 + str r1, [sp] + mov r3, #1 + ldr r2, [sp, #0x10] + str r3, [sp, #4] + ldr r0, [sp, #0x28] + ldr r2, [r2, #0x50] + bl BufferIntegerAsString + mov r0, #0x13 + str r0, [sp] + mov r0, #0x30 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x4c] + cmp r0, #0 + beq _0222DE76 + ldr r0, [sp, #0x10] + ldr r0, [r0, #8] + bl Pokedex_CountSeenMons + add r1, r0, #0 + ldr r0, [sp, #0x28] + bl MOD83_0222DCF4 + mov r0, #0x12 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 _0222DE76: - ldr r2, [sp, #0x18] - ldr r3, [sp, #0x18] - ldr r0, [sp, #0x18] - ldr r2, [r2, #0x38] - ldr r3, [r3, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - ldr r0, [r0, #0x10] - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - ldr r1, _0222DEC8 ; =MOD83_0223A854 - ldr r0, [sp, #0x20] - ldr r2, [r1, r0] - ldr r0, [sp, #0x14] - lsl r1, r0, #2 - ldr r0, [sp, #0x10] - add r0, r0, r1 - add r0, #0xcc - str r2, [r0] - ldr r0, [sp, #0x28] - bl ScrStrBufs_delete - ldr r0, [sp, #0x24] - bl DestroyMsgData - mov r0, #1 - add sp, #0x2c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, [sp, #0x18] + ldr r3, [sp, #0x18] + ldr r0, [sp, #0x18] + ldr r2, [r2, #0x38] + ldr r3, [r3, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + ldr r0, [r0, #0x10] + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + ldr r1, _0222DEC8 ; =MOD83_0223A854 + ldr r0, [sp, #0x20] + ldr r2, [r1, r0] + ldr r0, [sp, #0x14] + lsl r1, r0, #2 + ldr r0, [sp, #0x10] + add r0, r0, r1 + add r0, #0xcc + str r2, [r0] + ldr r0, [sp, #0x28] + bl ScrStrBufs_delete + ldr r0, [sp, #0x24] + bl DestroyMsgData + mov r0, #1 + add sp, #0x2c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0222DEB4: .word 0x000001EE _0222DEB8: .word 0x0003040F _0222DEBC: .word 0x0007080F _0222DEC0: .word MOD83_0223A85C _0222DEC4: .word MOD83_0223A784 _0222DEC8: .word MOD83_0223A854 - thumb_func_end MOD83_0222DD24 + thumb_func_end MOD83_0222DD24 - thumb_func_start MOD83_0222DECC + thumb_func_start MOD83_0222DECC MOD83_0222DECC: ; 0x0222DECC - push {r3, r4, r5, r6, lr} - sub sp, #4 - add r4, r0, #0 - add r5, r1, #0 - add r1, r2, #0 - ldr r2, [r4, #0x24] - add r6, r3, #0 - cmp r2, #0 - bne _0222DEE4 - add sp, #4 - mov r0, #0 - pop {r3, r4, r5, r6, pc} + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r4, r0, #0 + add r5, r1, #0 + add r1, r2, #0 + ldr r2, [r4, #0x24] + add r6, r3, #0 + cmp r2, #0 + bne _0222DEE4 + add sp, #4 + mov r0, #0 + pop {r3, r4, r5, r6, pc} _0222DEE4: - sub r2, r2, #1 - cmp r2, #4 - bhi _0222DF12 - add r2, r2, r2 - add r2, pc - ldrh r2, [r2, #6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 + sub r2, r2, #1 + cmp r2, #4 + bhi _0222DF12 + add r2, r2, r2 + add r2, pc + ldrh r2, [r2, #6] + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + add pc, r2 _0222DEF6: ; jump table - .short _0222DF00 - _0222DEF6 - 2 ; case 0 - .short _0222DF04 - _0222DEF6 - 2 ; case 1 - .short _0222DF08 - _0222DEF6 - 2 ; case 2 - .short _0222DF0C - _0222DEF6 - 2 ; case 3 - .short _0222DF10 - _0222DEF6 - 2 ; case 4 + .short _0222DF00 - _0222DEF6 - 2 ; case 0 + .short _0222DF04 - _0222DEF6 - 2 ; case 1 + .short _0222DF08 - _0222DEF6 - 2 ; case 2 + .short _0222DF0C - _0222DEF6 - 2 ; case 3 + .short _0222DF10 - _0222DEF6 - 2 ; case 4 _0222DF00: - mov r0, #4 - b _0222DF12 + mov r0, #4 + b _0222DF12 _0222DF04: - mov r0, #5 - b _0222DF12 + mov r0, #5 + b _0222DF12 _0222DF08: - mov r0, #6 - b _0222DF12 + mov r0, #6 + b _0222DF12 _0222DF0C: - mov r0, #7 - b _0222DF12 + mov r0, #7 + b _0222DF12 _0222DF10: - mov r0, #8 + mov r0, #8 _0222DF12: - str r0, [sp] - ldr r0, [r4] - mov r2, #3 - add r3, r6, #0 - bl MOD83_02238A38 - add r0, r4, #0 - mov r1, #0x1a - add r2, r6, #0 - bl MOD83_0222DC60 - ldr r0, _0222DF3C ; =MOD83_0223A854 - lsl r1, r5, #4 - ldr r1, [r0, r1] - lsl r0, r5, #2 - add r0, r4, r0 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - add sp, #4 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + str r0, [sp] + ldr r0, [r4] + mov r2, #3 + add r3, r6, #0 + bl MOD83_02238A38 + add r0, r4, #0 + mov r1, #0x1a + add r2, r6, #0 + bl MOD83_0222DC60 + ldr r0, _0222DF3C ; =MOD83_0223A854 + lsl r1, r5, #4 + ldr r1, [r0, r1] + lsl r0, r5, #2 + add r0, r4, r0 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222DF3C: .word MOD83_0223A854 - thumb_func_end MOD83_0222DECC + thumb_func_end MOD83_0222DECC - thumb_func_start MOD83_0222DF40 + thumb_func_start MOD83_0222DF40 MOD83_0222DF40: ; 0x0222DF40 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, [r5, #0x34] - add r4, r1, #0 - add r7, r3, #0 - str r2, [sp, #4] - cmp r0, #0 - bne _0222DF88 - ldr r0, [r5, #0x14] - bl FUN_0202AF50 - cmp r0, #1 - bne _0222DF60 - mov r0, #1 - str r0, [r5, #0x34] + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r5, r0, #0 + ldr r0, [r5, #0x34] + add r4, r1, #0 + add r7, r3, #0 + str r2, [sp, #4] + cmp r0, #0 + bne _0222DF88 + ldr r0, [r5, #0x14] + bl FUN_0202AF50 + cmp r0, #1 + bne _0222DF60 + mov r0, #1 + str r0, [r5, #0x34] _0222DF60: - ldr r0, [r5, #4] - bl Sav2_SysInfo_get - bl FUN_02023820 - cmp r0, #1 - bne _0222DF72 - mov r0, #1 - str r0, [r5, #0x34] + ldr r0, [r5, #4] + bl Sav2_SysInfo_get + bl FUN_02023820 + cmp r0, #1 + bne _0222DF72 + mov r0, #1 + str r0, [r5, #0x34] _0222DF72: - mov r0, #0x51 - bl MOD83_SetHeapId - bl MOD83_02238700 - cmp r0, #0 - beq _0222DF88 - mov r0, #1 - str r0, [r5, #0x34] - bl MOD83_02239450 + mov r0, #0x51 + bl MOD83_SetHeapId + bl MOD83_02238700 + cmp r0, #0 + beq _0222DF88 + mov r0, #1 + str r0, [r5, #0x34] + bl MOD83_02239450 _0222DF88: - ldr r0, [r5, #0x34] - cmp r0, #1 - bne _0222DF98 - ldr r0, [r5, #0x4c] - cmp r0, #0 - bne _0222DF98 - mov r0, #0 - str r0, [r5, #0x34] + ldr r0, [r5, #0x34] + cmp r0, #1 + bne _0222DF98 + ldr r0, [r5, #0x4c] + cmp r0, #0 + bne _0222DF98 + mov r0, #0 + str r0, [r5, #0x34] _0222DF98: - ldr r0, [r5, #0x34] - cmp r0, #1 - bne _0222DFDC - ldr r0, _0222DFE4 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - ldr r1, [sp, #4] - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - add r3, r7, #0 - bl MOD83_02238A38 - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC60 - ldr r0, _0222DFE8 ; =MOD83_0223A854 - ldr r1, [r0, r6] - lsl r0, r4, #2 - add r0, r5, r0 - add r0, #0xcc - str r1, [r0] - ldr r1, [r5, #0x38] - mov r0, #1 - orr r0, r1 - str r0, [r5, #0x38] - ldr r0, [r5, #0x14] - bl FUN_0202AF60 - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r5, #0x34] + cmp r0, #1 + bne _0222DFDC + ldr r0, _0222DFE4 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + ldr r1, [sp, #4] + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + add r3, r7, #0 + bl MOD83_02238A38 + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC60 + ldr r0, _0222DFE8 ; =MOD83_0223A854 + ldr r1, [r0, r6] + lsl r0, r4, #2 + add r0, r5, r0 + add r0, #0xcc + str r1, [r0] + ldr r1, [r5, #0x38] + mov r0, #1 + orr r0, r1 + str r0, [r5, #0x38] + ldr r0, [r5, #0x14] + bl FUN_0202AF60 + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222DFDC: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _0222DFE4: .word MOD83_0223A85C _0222DFE8: .word MOD83_0223A854 - thumb_func_end MOD83_0222DF40 + thumb_func_end MOD83_0222DF40 - thumb_func_start MOD83_0222DFEC + thumb_func_start MOD83_0222DFEC MOD83_0222DFEC: ; 0x0222DFEC - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [r5, #0x2c] - add r4, r1, #0 - add r7, r3, #0 - cmp r0, #1 - bne _0222E03C - ldr r0, [r5, #0x4c] - cmp r0, #1 - bne _0222E03C - ldr r0, _0222E040 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - bl MOD83_02238A38 - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - mov r3, #1 - bl MOD83_0222DC10 - lsl r3, r4, #2 - add r1, r5, r3 - mov r0, #1 - add r1, #0xe8 - str r0, [r1] - ldr r1, _0222E044 ; =MOD83_0223A854 - ldr r2, [r1, r6] - add r1, r5, r3 - add r1, #0xcc - str r2, [r1] - ldr r2, [r5, #0x38] - mov r1, #2 - orr r1, r2 - str r1, [r5, #0x38] - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [r5, #0x2c] + add r4, r1, #0 + add r7, r3, #0 + cmp r0, #1 + bne _0222E03C + ldr r0, [r5, #0x4c] + cmp r0, #1 + bne _0222E03C + ldr r0, _0222E040 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + bl MOD83_02238A38 + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + mov r3, #1 + bl MOD83_0222DC10 + lsl r3, r4, #2 + add r1, r5, r3 + mov r0, #1 + add r1, #0xe8 + str r0, [r1] + ldr r1, _0222E044 ; =MOD83_0223A854 + ldr r2, [r1, r6] + add r1, r5, r3 + add r1, #0xcc + str r2, [r1] + ldr r2, [r5, #0x38] + mov r1, #2 + orr r1, r2 + str r1, [r5, #0x38] + pop {r3, r4, r5, r6, r7, pc} _0222E03C: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E040: .word MOD83_0223A85C _0222E044: .word MOD83_0223A854 - thumb_func_end MOD83_0222DFEC + thumb_func_end MOD83_0222DFEC - thumb_func_start MOD83_0222E048 + thumb_func_start MOD83_0222E048 MOD83_0222E048: ; 0x0222E048 - push {r3, r4, r5, r6, r7, lr} - add r4, r0, #0 - ldr r0, [r4, #0x30] - add r5, r1, #0 - add r7, r3, #0 - cmp r0, #1 - bne _0222E08A - ldr r0, _0222E090 ; =MOD83_0223A85C - lsl r6, r5, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r4] - mov r2, #3 - bl MOD83_02238A38 - lsl r5, r5, #2 - add r0, r4, r5 - mov r3, #1 - add r0, #0xe8 - str r3, [r0] - add r0, r4, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC10 - ldr r0, _0222E094 ; =MOD83_0223A854 - ldr r1, [r0, r6] - add r0, r4, r5 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r4, r0, #0 + ldr r0, [r4, #0x30] + add r5, r1, #0 + add r7, r3, #0 + cmp r0, #1 + bne _0222E08A + ldr r0, _0222E090 ; =MOD83_0223A85C + lsl r6, r5, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r4] + mov r2, #3 + bl MOD83_02238A38 + lsl r5, r5, #2 + add r0, r4, r5 + mov r3, #1 + add r0, #0xe8 + str r3, [r0] + add r0, r4, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC10 + ldr r0, _0222E094 ; =MOD83_0223A854 + ldr r1, [r0, r6] + add r0, r4, r5 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222E08A: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _0222E090: .word MOD83_0223A85C _0222E094: .word MOD83_0223A854 - thumb_func_end MOD83_0222E048 + thumb_func_end MOD83_0222E048 - thumb_func_start MOD83_0222E098 + thumb_func_start MOD83_0222E098 MOD83_0222E098: ; 0x0222E098 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - ldr r0, _0222E0D4 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - add r7, r3, #0 - bl MOD83_02238A38 - lsl r4, r4, #2 - add r0, r5, r4 - mov r3, #2 - add r0, #0xe8 - str r3, [r0] - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC10 - ldr r0, _0222E0D8 ; =MOD83_0223A854 - ldr r1, [r0, r6] - add r0, r5, r4 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, _0222E0D4 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + add r7, r3, #0 + bl MOD83_02238A38 + lsl r4, r4, #2 + add r0, r5, r4 + mov r3, #2 + add r0, #0xe8 + str r3, [r0] + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC10 + ldr r0, _0222E0D8 ; =MOD83_0223A854 + ldr r1, [r0, r6] + add r0, r5, r4 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E0D4: .word MOD83_0223A85C _0222E0D8: .word MOD83_0223A854 - thumb_func_end MOD83_0222E098 + thumb_func_end MOD83_0222E098 - thumb_func_start MOD83_0222E0DC + thumb_func_start MOD83_0222E0DC MOD83_0222E0DC: ; 0x0222E0DC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x70 - add r7, r0, #0 - mov r0, #0 - str r0, [sp, #0xc] - mov r0, #0x13 - str r0, [r7, #0x20] - ldr r0, [sp, #0xc] - ldr r4, _0222E1F0 ; =MOD83_0223A854 - str r0, [sp, #0x10] - add r0, r7, #0 - str r0, [sp, #8] - add r0, #0x5c - str r0, [sp, #8] - add r0, r7, #0 - str r0, [sp, #0x14] - add r0, #0x20 - mov r5, #1 - str r7, [sp, #0x18] - str r0, [sp, #0x14] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x70 + add r7, r0, #0 + mov r0, #0 + str r0, [sp, #0xc] + mov r0, #0x13 + str r0, [r7, #0x20] + ldr r0, [sp, #0xc] + ldr r4, _0222E1F0 ; =MOD83_0223A854 + str r0, [sp, #0x10] + add r0, r7, #0 + str r0, [sp, #8] + add r0, #0x5c + str r0, [sp, #8] + add r0, r7, #0 + str r0, [sp, #0x14] + add r0, #0x20 + mov r5, #1 + str r7, [sp, #0x18] + str r0, [sp, #0x14] _0222E104: - mov r0, #1 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - ldr r1, [sp, #8] - ldr r3, _0222E1F4 ; =0x000001EE - add r0, sp, #0x1c - mov r2, #1 - bl MOD83_022388E4 - ldr r2, [r4, #4] - ldr r3, [r7, #0x20] - add r0, sp, #0x1c - mov r1, #0x1a - bl MOD83_02238934 - ldr r0, [r4, #0xc] - mov ip, r0 - cmp r0, #0 - beq _0222E1A4 - ldr r0, [sp, #0x18] - add r0, #0xcc - ldr r0, [r0] - cmp r0, #0 - beq _0222E188 - ldr r0, [sp, #0x2c] - mov r1, #3 - bl MoveWindowX - lsl r1, r5, #0x18 - ldr r0, [sp, #0x2c] - lsr r1, r1, #0x18 - bl MoveWindowY - ldr r2, [sp, #0x54] - ldr r3, [sp, #0x58] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - ldr r0, [sp, #0x2c] - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - ldr r0, [sp, #0x18] - add r0, #0xe8 - ldr r3, [r0] - cmp r3, #0 - beq _0222E172 - add r0, r7, #0 - mov r1, #0x1a - add r2, r5, #0 - bl MOD83_0222DC10 - b _0222E17C + mov r0, #1 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r1, [sp, #8] + ldr r3, _0222E1F4 ; =0x000001EE + add r0, sp, #0x1c + mov r2, #1 + bl MOD83_022388E4 + ldr r2, [r4, #4] + ldr r3, [r7, #0x20] + add r0, sp, #0x1c + mov r1, #0x1a + bl MOD83_02238934 + ldr r0, [r4, #0xc] + mov ip, r0 + cmp r0, #0 + beq _0222E1A4 + ldr r0, [sp, #0x18] + add r0, #0xcc + ldr r0, [r0] + cmp r0, #0 + beq _0222E188 + ldr r0, [sp, #0x2c] + mov r1, #3 + bl MoveWindowX + lsl r1, r5, #0x18 + ldr r0, [sp, #0x2c] + lsr r1, r1, #0x18 + bl MoveWindowY + ldr r2, [sp, #0x54] + ldr r3, [sp, #0x58] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + ldr r0, [sp, #0x2c] + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + ldr r0, [sp, #0x18] + add r0, #0xe8 + ldr r3, [r0] + cmp r3, #0 + beq _0222E172 + add r0, r7, #0 + mov r1, #0x1a + add r2, r5, #0 + bl MOD83_0222DC10 + b _0222E17C _0222E172: - add r0, r7, #0 - mov r1, #0x1a - add r2, r5, #0 - bl MOD83_0222DC60 + add r0, r7, #0 + mov r1, #0x1a + add r2, r5, #0 + bl MOD83_0222DC60 _0222E17C: - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 - mov r0, #1 - str r0, [sp, #0xc] - b _0222E1C2 + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 + mov r0, #1 + str r0, [sp, #0xc] + b _0222E1C2 _0222E188: - ldr r1, [sp, #0x10] - add r0, r7, #0 - add r2, sp, #0x1c - add r3, r5, #0 - mov r6, ip - blx r6 - cmp r0, #1 - bne _0222E1C2 - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 - mov r0, #1 - str r0, [sp, #0xc] - b _0222E1C2 + ldr r1, [sp, #0x10] + add r0, r7, #0 + add r2, sp, #0x1c + add r3, r5, #0 + mov r6, ip + blx r6 + cmp r0, #1 + bne _0222E1C2 + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 + mov r0, #1 + str r0, [sp, #0xc] + b _0222E1C2 _0222E1A4: - ldr r0, [r4, #8] - add r1, sp, #0x1c - str r0, [sp] - ldr r0, [r7] - mov r2, #3 - add r3, r5, #0 - bl MOD83_02238A38 - ldr r0, [sp, #0x18] - ldr r1, [r4] - add r0, #0xcc - str r1, [r0] - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 + ldr r0, [r4, #8] + add r1, sp, #0x1c + str r0, [sp] + ldr r0, [r7] + mov r2, #3 + add r3, r5, #0 + bl MOD83_02238A38 + ldr r0, [sp, #0x18] + ldr r1, [r4] + add r0, #0xcc + str r1, [r0] + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 _0222E1C2: - ldr r0, [sp, #0x14] - ldr r1, [r4, #4] - ldr r2, [r0] - mov r0, #0x1a - mul r0, r1 - add r1, r2, r0 - ldr r0, [sp, #0x14] - add r4, #0x10 - str r1, [r0] - ldr r0, [sp, #8] - add r0, #0x10 - str r0, [sp, #8] - ldr r0, [sp, #0x18] - add r0, r0, #4 - str r0, [sp, #0x18] - ldr r0, [sp, #0x10] - add r0, r0, #1 - str r0, [sp, #0x10] - cmp r0, #7 - blo _0222E104 - ldr r0, [sp, #0xc] - add sp, #0x70 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp, #0x14] + ldr r1, [r4, #4] + ldr r2, [r0] + mov r0, #0x1a + mul r0, r1 + add r1, r2, r0 + ldr r0, [sp, #0x14] + add r4, #0x10 + str r1, [r0] + ldr r0, [sp, #8] + add r0, #0x10 + str r0, [sp, #8] + ldr r0, [sp, #0x18] + add r0, r0, #4 + str r0, [sp, #0x18] + ldr r0, [sp, #0x10] + add r0, r0, #1 + str r0, [sp, #0x10] + cmp r0, #7 + blo _0222E104 + ldr r0, [sp, #0xc] + add sp, #0x70 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E1F0: .word MOD83_0223A854 _0222E1F4: .word 0x000001EE - thumb_func_end MOD83_0222E0DC + thumb_func_end MOD83_0222E0DC - thumb_func_start MOD83_0222E1F8 + thumb_func_start MOD83_0222E1F8 MOD83_0222E1F8: ; 0x0222E1F8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x20 - add r6, r0, #0 - add r5, r6, #0 - str r1, [sp, #0xc] - mov r4, #0 - add r5, #0x5c + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r6, r0, #0 + add r5, r6, #0 + str r1, [sp, #0xc] + mov r4, #0 + add r5, #0x5c _0222E206: - add r0, r5, #0 - bl WindowIsInUse - cmp r0, #0 - beq _0222E294 - ldr r0, [sp, #0xc] - cmp r4, r0 - bne _0222E256 - add r0, r5, #0 - mov r1, #1 - mov r2, #0xa - mov r3, #3 - bl FUN_0200CCA4 - add r0, r5, #0 - bl GetWindowX - str r0, [sp, #0x10] - add r0, r5, #0 - bl GetWindowY - str r0, [sp, #0x14] - add r0, r5, #0 - bl GetWindowWidth - add r7, r0, #0 - add r0, r5, #0 - bl GetWindowHeight - str r7, [sp] - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r6] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - mov r1, #0 - bl BgTilemapRectChangePalette - b _0222E294 + add r0, r5, #0 + bl WindowIsInUse + cmp r0, #0 + beq _0222E294 + ldr r0, [sp, #0xc] + cmp r4, r0 + bne _0222E256 + add r0, r5, #0 + mov r1, #1 + mov r2, #0xa + mov r3, #3 + bl FUN_0200CCA4 + add r0, r5, #0 + bl GetWindowX + str r0, [sp, #0x10] + add r0, r5, #0 + bl GetWindowY + str r0, [sp, #0x14] + add r0, r5, #0 + bl GetWindowWidth + add r7, r0, #0 + add r0, r5, #0 + bl GetWindowHeight + str r7, [sp] + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r6] + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + mov r1, #0 + bl BgTilemapRectChangePalette + b _0222E294 _0222E256: - mov r1, #1 - add r0, r5, #0 - add r2, r1, #0 - mov r3, #2 - bl FUN_0200CCA4 - add r0, r5, #0 - bl GetWindowX - str r0, [sp, #0x18] - add r0, r5, #0 - bl GetWindowY - str r0, [sp, #0x1c] - add r0, r5, #0 - bl GetWindowWidth - add r7, r0, #0 - add r0, r5, #0 - bl GetWindowHeight - str r7, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, [r6] - ldr r2, [sp, #0x18] - ldr r3, [sp, #0x1c] - mov r1, #0 - bl BgTilemapRectChangePalette + mov r1, #1 + add r0, r5, #0 + add r2, r1, #0 + mov r3, #2 + bl FUN_0200CCA4 + add r0, r5, #0 + bl GetWindowX + str r0, [sp, #0x18] + add r0, r5, #0 + bl GetWindowY + str r0, [sp, #0x1c] + add r0, r5, #0 + bl GetWindowWidth + add r7, r0, #0 + add r0, r5, #0 + bl GetWindowHeight + str r7, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, [r6] + ldr r2, [sp, #0x18] + ldr r3, [sp, #0x1c] + mov r1, #0 + bl BgTilemapRectChangePalette _0222E294: - add r4, r4, #1 - add r5, #0x10 - cmp r4, #7 - blo _0222E206 - ldr r0, [r6] - mov r1, #0 - bl BgCommitTilemapBufferToVram - add sp, #0x20 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222E1F8 - - thumb_func_start MOD83_0222E2A8 + add r4, r4, #1 + add r5, #0x10 + cmp r4, #7 + blo _0222E206 + ldr r0, [r6] + mov r1, #0 + bl BgCommitTilemapBufferToVram + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222E1F8 + + thumb_func_start MOD83_0222E2A8 MOD83_0222E2A8: ; 0x0222E2A8 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r2, r1, #0 - ldr r1, [r5, #0x54] - mov r7, #6 - add r4, r1, #0 - mov r0, #0 - sub r6, r7, #7 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r2, r1, #0 + ldr r1, [r5, #0x54] + mov r7, #6 + add r4, r1, #0 + mov r0, #0 + sub r6, r7, #7 _0222E2B8: - add r4, r4, r2 - cmp r4, r6 - bne _0222E2C0 - add r4, r0, #0 + add r4, r4, r2 + cmp r4, r6 + bne _0222E2C0 + add r4, r0, #0 _0222E2C0: - cmp r4, #7 - bne _0222E2C6 - add r4, r7, #0 + cmp r4, #7 + bne _0222E2C6 + add r4, r7, #0 _0222E2C6: - cmp r4, r1 - beq _0222E2DC - lsl r3, r4, #2 - add r3, r5, r3 - add r3, #0xcc - ldr r3, [r3] - cmp r3, #0 - beq _0222E2B8 - ldr r0, _0222E2E0 ; =0x000005DC - bl PlaySE + cmp r4, r1 + beq _0222E2DC + lsl r3, r4, #2 + add r3, r5, r3 + add r3, #0xcc + ldr r3, [r3] + cmp r3, #0 + beq _0222E2B8 + ldr r0, _0222E2E0 ; =0x000005DC + bl PlaySE _0222E2DC: - str r4, [r5, #0x54] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r4, [r5, #0x54] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E2E0: .word 0x000005DC - thumb_func_end MOD83_0222E2A8 + thumb_func_end MOD83_0222E2A8 - thumb_func_start MOD83_0222E2E4 + thumb_func_start MOD83_0222E2E4 MOD83_0222E2E4: ; 0x0222E2E4 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #0x54] - add r1, r5, #0 - add r1, #0x5c - lsl r0, r0, #4 - add r0, r1, r0 - bl GetWindowY - sub r0, r0, #1 - lsl r4, r0, #3 - ldr r0, [r5, #0x54] - add r1, r5, #0 - add r1, #0x5c - lsl r0, r0, #4 - add r0, r1, r0 - bl GetWindowHeight - add r0, r0, #2 - lsl r3, r0, #3 - mov r0, #0x42 - lsl r0, r0, #2 - ldr r2, [r5, r0] - asr r1, r2, #0xb - lsr r1, r1, #0x14 - add r1, r2, r1 - asr r2, r1, #0xc - cmp r2, r4 - ble _0222E322 - lsl r1, r4, #0xc - str r1, [r5, r0] + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, [r5, #0x54] + add r1, r5, #0 + add r1, #0x5c + lsl r0, r0, #4 + add r0, r1, r0 + bl GetWindowY + sub r0, r0, #1 + lsl r4, r0, #3 + ldr r0, [r5, #0x54] + add r1, r5, #0 + add r1, #0x5c + lsl r0, r0, #4 + add r0, r1, r0 + bl GetWindowHeight + add r0, r0, #2 + lsl r3, r0, #3 + mov r0, #0x42 + lsl r0, r0, #2 + ldr r2, [r5, r0] + asr r1, r2, #0xb + lsr r1, r1, #0x14 + add r1, r2, r1 + asr r2, r1, #0xc + cmp r2, r4 + ble _0222E322 + lsl r1, r4, #0xc + str r1, [r5, r0] _0222E322: - add r2, #0xc0 - cmp r2, r4 - bgt _0222E334 - add r0, r4, r3 - sub r0, #0xc0 - lsl r1, r0, #0xc - mov r0, #0x42 - lsl r0, r0, #2 - str r1, [r5, r0] + add r2, #0xc0 + cmp r2, r4 + bgt _0222E334 + add r0, r4, r3 + sub r0, #0xc0 + lsl r1, r0, #0xc + mov r0, #0x42 + lsl r0, r0, #2 + str r1, [r5, r0] _0222E334: - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0222E2E4 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0222E2E4 - thumb_func_start MOD83_0222E338 + thumb_func_start MOD83_0222E338 MOD83_0222E338: ; 0x0222E338 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - str r0, [sp, #8] - mov r1, #0x42 - ldr r0, [sp] - lsl r1, r1, #2 - ldr r1, [r0, r1] - ldr r5, [sp] - asr r0, r1, #0xb - lsr r0, r0, #0x14 - add r0, r1, r0 - asr r7, r0, #0xc - add r0, r7, #0 - str r0, [sp, #0xc] - add r0, #0xc0 - ldr r6, [sp, #4] - add r5, #0x5c - str r0, [sp, #0xc] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #0x42 + ldr r0, [sp] + lsl r1, r1, #2 + ldr r1, [r0, r1] + ldr r5, [sp] + asr r0, r1, #0xb + lsr r0, r0, #0x14 + add r0, r1, r0 + asr r7, r0, #0xc + add r0, r7, #0 + str r0, [sp, #0xc] + add r0, #0xc0 + ldr r6, [sp, #4] + add r5, #0x5c + str r0, [sp, #0xc] _0222E362: - add r0, r5, #0 - bl WindowIsInUse - cmp r0, #0 - beq _0222E38E - add r0, r5, #0 - bl GetWindowY - sub r0, r0, #1 - lsl r4, r0, #3 - add r0, r5, #0 - bl GetWindowHeight - cmp r7, r4 - ble _0222E384 - mov r0, #1 - str r0, [sp, #8] + add r0, r5, #0 + bl WindowIsInUse + cmp r0, #0 + beq _0222E38E + add r0, r5, #0 + bl GetWindowY + sub r0, r0, #1 + lsl r4, r0, #3 + add r0, r5, #0 + bl GetWindowHeight + cmp r7, r4 + ble _0222E384 + mov r0, #1 + str r0, [sp, #8] _0222E384: - ldr r0, [sp, #0xc] - cmp r0, r4 - bgt _0222E38E - mov r0, #1 - str r0, [sp, #4] + ldr r0, [sp, #0xc] + cmp r0, r4 + bgt _0222E38E + mov r0, #1 + str r0, [sp, #4] _0222E38E: - add r6, r6, #1 - add r5, #0x10 - cmp r6, #7 - blo _0222E362 - mov r1, #0x15 - ldr r0, [sp] - lsl r1, r1, #4 - ldr r0, [r0, r1] - ldr r1, [sp, #8] - bl FUN_020200A0 - mov r1, #0x55 - ldr r0, [sp] - lsl r1, r1, #2 - ldr r0, [r0, r1] - ldr r1, [sp, #4] - bl FUN_020200A0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_0222E338 - - thumb_func_start MOD83_0222E3B8 + add r6, r6, #1 + add r5, #0x10 + cmp r6, #7 + blo _0222E362 + mov r1, #0x15 + ldr r0, [sp] + lsl r1, r1, #4 + ldr r0, [r0, r1] + ldr r1, [sp, #8] + bl FUN_020200A0 + mov r1, #0x55 + ldr r0, [sp] + lsl r1, r1, #2 + ldr r0, [r0, r1] + ldr r1, [sp, #4] + bl FUN_020200A0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_0222E338 + + thumb_func_start MOD83_0222E3B8 MOD83_0222E3B8: ; 0x0222E3B8 - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - mov r1, #0x15 - add r7, r0, #0 - lsl r1, r1, #4 - ldr r0, [r7, r1] - cmp r0, #0 - bne _0222E3D2 - add r1, r1, #4 - ldr r1, [r7, r1] - cmp r1, #0 - beq _0222E3E4 + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + mov r1, #0x15 + add r7, r0, #0 + lsl r1, r1, #4 + ldr r0, [r7, r1] + cmp r0, #0 + bne _0222E3D2 + add r1, r1, #4 + ldr r1, [r7, r1] + cmp r1, #0 + beq _0222E3E4 _0222E3D2: - bl FUN_0201FFC8 - mov r0, #0x55 - lsl r0, r0, #2 - ldr r0, [r7, r0] - bl FUN_0201FFC8 - bl MOD83_02238E48 + bl FUN_0201FFC8 + mov r0, #0x55 + lsl r0, r0, #2 + ldr r0, [r7, r0] + bl FUN_0201FFC8 + bl MOD83_02238E48 _0222E3E4: - add r5, r7, #0 - mov r6, #0 - add r4, r7, #0 - add r5, #0x5c + add r5, r7, #0 + mov r6, #0 + add r4, r7, #0 + add r5, #0x5c _0222E3EC: - ldr r0, [r4, #0x5c] - cmp r0, #0 - beq _0222E3FE - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, [r4, #0x5c] + cmp r0, #0 + beq _0222E3FE + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _0222E3FE: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #7 - blo _0222E3EC - ldr r0, [r7] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #2 - bl FreeBgTilemapBuffer - ldr r0, [r7] - bl FreeToHeap - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222E3B8 - - thumb_func_start MOD83_0222E430 + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #7 + blo _0222E3EC + ldr r0, [r7] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #2 + bl FreeBgTilemapBuffer + ldr r0, [r7] + bl FreeToHeap + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222E3B8 + + thumb_func_start MOD83_0222E430 MOD83_0222E430: ; 0x0222E430 - mov r1, #0x56 - lsl r1, r1, #2 - ldr r2, [r0, r1] - lsl r3, r2, #1 - ldr r2, _0222E45C ; =MOD83_0223A7B0 - ldrh r2, [r2, r3] - cmp r2, #0 - bne _0222E444 - mov r2, #0 - str r2, [r0, r1] + mov r1, #0x56 + lsl r1, r1, #2 + ldr r2, [r0, r1] + lsl r3, r2, #1 + ldr r2, _0222E45C ; =MOD83_0223A7B0 + ldrh r2, [r2, r3] + cmp r2, #0 + bne _0222E444 + mov r2, #0 + str r2, [r0, r1] _0222E444: - mov r1, #0x56 - lsl r1, r1, #2 - ldr r3, [r0, r1] - add r2, r3, #1 - str r2, [r0, r1] - ldr r0, _0222E45C ; =MOD83_0223A7B0 - lsl r1, r3, #1 - ldrh r1, [r0, r1] - ldr r0, _0222E460 ; =0x0500006C - strh r1, [r0] - bx lr - nop + mov r1, #0x56 + lsl r1, r1, #2 + ldr r3, [r0, r1] + add r2, r3, #1 + str r2, [r0, r1] + ldr r0, _0222E45C ; =MOD83_0223A7B0 + lsl r1, r3, #1 + ldrh r1, [r0, r1] + ldr r0, _0222E460 ; =0x0500006C + strh r1, [r0] + bx lr + nop _0222E45C: .word MOD83_0223A7B0 _0222E460: .word 0x0500006C - thumb_func_end MOD83_0222E430 + thumb_func_end MOD83_0222E430 - thumb_func_start MOD83_0222E464 + thumb_func_start MOD83_0222E464 MOD83_0222E464: ; 0x0222E464 - push {r4, lr} - add r4, r0, #0 - bl FUN_0201C30C - bl FUN_02009F80 - add r0, r4, #0 - bl DoScheduledBgGpuUpdates - ldr r3, _0222E484 ; =MOD83_027E0000 - ldr r1, _0222E488 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + bl FUN_0201C30C + bl FUN_02009F80 + add r0, r4, #0 + bl DoScheduledBgGpuUpdates + ldr r3, _0222E484 ; =MOD83_027E0000 + ldr r1, _0222E488 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _0222E484: .word 0x027E0000 _0222E488: .word 0x00003FF8 - thumb_func_end MOD83_0222E464 + thumb_func_end MOD83_0222E464 - thumb_func_start MOD83_0222E48C + thumb_func_start MOD83_0222E48C MOD83_0222E48C: ; 0x0222E48C - push {r3, r4, r5, lr} - mov r2, #1 - add r5, r0, #0 - mov r0, #3 - mov r1, #0x51 - lsl r2, r2, #0x12 - bl CreateHeap - mov r1, #0x57 - add r0, r5, #0 - lsl r1, r1, #2 - mov r2, #0x51 - bl OverlayManager_CreateAndGetData - mov r2, #0x57 - mov r1, #0 - lsl r2, r2, #2 - add r4, r0, #0 - bl memset - mov r0, #0x51 - bl BgConfig_Alloc - str r0, [r4] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #4] - bl FUN_0202251C - str r0, [r4, #0x14] - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] - add r0, r0, #4 - str r1, [r4, r0] - ldr r0, [r4, #4] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0xc] - ldr r0, [r4, #4] - bl Sav2_Pokedex_get - str r0, [r4, #8] - ldr r0, [r4, #4] - bl Sav2_PlayerData_GetIGTAddr - str r0, [r4, #0x10] - ldr r0, [r4, #8] - bl Pokedex_GetSinnohDexFlag - str r0, [r4, #0x4c] - ldr r0, [r4, #0xc] - bl PlayerProfile_CountBadges - str r0, [r4, #0x50] - mov r0, #0x45 - mov r1, #0xf - lsl r0, r0, #2 - str r1, [r4, r0] - mov r0, #0x51 - bl MOD83_02238770 - ldr r0, [r4, #4] - bl FUN_02022804 - cmp r0, #0 - bne _0222E530 - mov r0, #0x4d - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] + push {r3, r4, r5, lr} + mov r2, #1 + add r5, r0, #0 + mov r0, #3 + mov r1, #0x51 + lsl r2, r2, #0x12 + bl CreateHeap + mov r1, #0x57 + add r0, r5, #0 + lsl r1, r1, #2 + mov r2, #0x51 + bl OverlayManager_CreateAndGetData + mov r2, #0x57 + mov r1, #0 + lsl r2, r2, #2 + add r4, r0, #0 + bl memset + mov r0, #0x51 + bl BgConfig_Alloc + str r0, [r4] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #4] + bl FUN_0202251C + str r0, [r4, #0x14] + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] + add r0, r0, #4 + str r1, [r4, r0] + ldr r0, [r4, #4] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0xc] + ldr r0, [r4, #4] + bl Sav2_Pokedex_get + str r0, [r4, #8] + ldr r0, [r4, #4] + bl Sav2_PlayerData_GetIGTAddr + str r0, [r4, #0x10] + ldr r0, [r4, #8] + bl Pokedex_GetSinnohDexFlag + str r0, [r4, #0x4c] + ldr r0, [r4, #0xc] + bl PlayerProfile_CountBadges + str r0, [r4, #0x50] + mov r0, #0x45 + mov r1, #0xf + lsl r0, r0, #2 + str r1, [r4, r0] + mov r0, #0x51 + bl MOD83_02238770 + ldr r0, [r4, #4] + bl FUN_02022804 + cmp r0, #0 + bne _0222E530 + mov r0, #0x4d + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] _0222E530: - mov r0, #0 - bl FUN_0200516C - mov r0, #0 - bl FUN_0200415C - mov r0, #1 - pop {r3, r4, r5, pc} - thumb_func_end MOD83_0222E48C - - thumb_func_start MOD83_0222E540 + mov r0, #0 + bl FUN_0200516C + mov r0, #0 + bl FUN_0200415C + mov r0, #1 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_0222E48C + + thumb_func_start MOD83_0222E540 MOD83_0222E540: ; 0x0222E540 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, [r4, #0x18] - add r0, r0, #1 - str r0, [r4, #0x18] - bl CTRDG_IsExisting - add r0, r4, #0 - bl MOD83_0222D7E0 - cmp r0, #1 - bne _0222E570 - add r0, r4, #0 - bl MOD83_0222D6EC - add r0, r4, #0 - bl MOD83_0222D9C0 - mov r0, #0 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, [r4, #0x18] + add r0, r0, #1 + str r0, [r4, #0x18] + bl CTRDG_IsExisting + add r0, r4, #0 + bl MOD83_0222D7E0 + cmp r0, #1 + bne _0222E570 + add r0, r4, #0 + bl MOD83_0222D6EC + add r0, r4, #0 + bl MOD83_0222D9C0 + mov r0, #0 + pop {r4, r5, r6, pc} _0222E570: - add r0, r4, #0 - bl MOD83_0222E430 - ldr r0, [r5] - cmp r0, #9 - bhi _0222E5D8 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r4, #0 + bl MOD83_0222E430 + ldr r0, [r5] + cmp r0, #9 + bhi _0222E5D8 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222E588: ; jump table - .short _0222E59C - _0222E588 - 2 ; case 0 - .short _0222E5A8 - _0222E588 - 2 ; case 1 - .short _0222E5CE - _0222E588 - 2 ; case 2 - .short _0222E5E8 - _0222E588 - 2 ; case 3 - .short _0222E616 - _0222E588 - 2 ; case 4 - .short _0222E656 - _0222E588 - 2 ; case 5 - .short _0222E74A - _0222E588 - 2 ; case 6 - .short _0222E772 - _0222E588 - 2 ; case 7 - .short _0222E77C - _0222E588 - 2 ; case 8 - .short _0222E784 - _0222E588 - 2 ; case 9 + .short _0222E59C - _0222E588 - 2 ; case 0 + .short _0222E5A8 - _0222E588 - 2 ; case 1 + .short _0222E5CE - _0222E588 - 2 ; case 2 + .short _0222E5E8 - _0222E588 - 2 ; case 3 + .short _0222E616 - _0222E588 - 2 ; case 4 + .short _0222E656 - _0222E588 - 2 ; case 5 + .short _0222E74A - _0222E588 - 2 ; case 6 + .short _0222E772 - _0222E588 - 2 ; case 7 + .short _0222E77C - _0222E588 - 2 ; case 8 + .short _0222E784 - _0222E588 - 2 ; case 9 _0222E59C: - add r0, r4, #0 - bl MOD83_0222DA50 - mov r0, #1 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222DA50 + mov r0, #1 + str r0, [r5] + b _0222E788 _0222E5A8: - add r0, r4, #0 - bl MOD83_0222D5C0 - cmp r0, #0 - bne _0222E5B8 - mov r0, #3 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222D5C0 + cmp r0, #0 + bne _0222E5B8 + mov r0, #3 + str r0, [r5] + b _0222E788 _0222E5B8: - mov r0, #1 - mov r1, #2 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - mov r0, #5 - ldr r1, _0222E79C ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - b _0222E788 + mov r0, #1 + mov r1, #2 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + mov r0, #5 + ldr r1, _0222E79C ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + b _0222E788 _0222E5CE: - add r0, r4, #0 - bl MOD83_0222D5C4 - cmp r0, #0 - beq _0222E5DA + add r0, r4, #0 + bl MOD83_0222D5C4 + cmp r0, #0 + beq _0222E5DA _0222E5D8: - b _0222E788 + b _0222E788 _0222E5DA: - mov r0, #0 - mov r1, #3 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0 + mov r1, #3 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E5E8: - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] - add r0, #0x28 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222E60A - mov r0, #2 - str r0, [r4, #0x58] - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] + add r0, #0x28 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222E60A + mov r0, #2 + str r0, [r4, #0x58] + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E60A: - add r0, r4, #0 - bl MOD83_0222D67C - mov r0, #4 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222D67C + mov r0, #4 + str r0, [r5] + b _0222E788 _0222E616: - add r0, r4, #0 - bl MOD83_0222DB68 - add r0, r4, #0 - bl MOD83_0222DBD0 - ldr r0, _0222E7A0 ; =MOD83_0222E464 - ldr r1, [r4] - bl Main_SetVBlankIntrCB - add r0, r4, #0 - bl MOD83_0222E0DC - ldr r1, [r4, #0x54] - add r0, r4, #0 - bl MOD83_0222E1F8 - mov r0, #1 - mov r1, #5 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - mov r0, #5 - ldr r1, _0222E79C ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - mov r0, #0x43 - mov r1, #0xa - lsl r0, r0, #2 - str r1, [r4, r0] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222DB68 + add r0, r4, #0 + bl MOD83_0222DBD0 + ldr r0, _0222E7A0 ; =MOD83_0222E464 + ldr r1, [r4] + bl Main_SetVBlankIntrCB + add r0, r4, #0 + bl MOD83_0222E0DC + ldr r1, [r4, #0x54] + add r0, r4, #0 + bl MOD83_0222E1F8 + mov r0, #1 + mov r1, #5 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + mov r0, #5 + ldr r1, _0222E79C ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + mov r0, #0x43 + mov r1, #0xa + lsl r0, r0, #2 + str r1, [r4, r0] + b _0222E788 _0222E656: - ldr r0, _0222E7A4 ; =gMain - mov r1, #3 - ldr r0, [r0, #0x48] - tst r1, r0 - beq _0222E6E8 - mov r1, #1 - tst r0, r1 - ldr r0, _0222E7A8 ; =0x000005DC - beq _0222E69A - bl PlaySE - ldr r0, [r4, #0x54] - lsl r0, r0, #2 - add r0, r4, r0 - add r0, #0xcc - ldr r0, [r0] - str r0, [r4, #0x58] - cmp r0, #5 - bne _0222E6A8 - bl CTRDG_IsPulledOut - cmp r0, #1 - bne _0222E6A8 - mov r0, #0x43 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #0xc - beq _0222E692 - bl FUN_02032D80 + ldr r0, _0222E7A4 ; =gMain + mov r1, #3 + ldr r0, [r0, #0x48] + tst r1, r0 + beq _0222E6E8 + mov r1, #1 + tst r0, r1 + ldr r0, _0222E7A8 ; =0x000005DC + beq _0222E69A + bl PlaySE + ldr r0, [r4, #0x54] + lsl r0, r0, #2 + add r0, r4, r0 + add r0, #0xcc + ldr r0, [r0] + str r0, [r4, #0x58] + cmp r0, #5 + bne _0222E6A8 + bl CTRDG_IsPulledOut + cmp r0, #1 + bne _0222E6A8 + mov r0, #0x43 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #0xc + beq _0222E692 + bl FUN_02032D80 _0222E692: - mov r0, #0x51 - bl FUN_02089F24 - b _0222E6A8 + mov r0, #0x51 + bl FUN_02089F24 + b _0222E6A8 _0222E69A: - bl PlaySE - mov r0, #0 - str r0, [r4, #0x58] - mov r0, #1 - bl MOD83_02238860 + bl PlaySE + mov r0, #0 + str r0, [r4, #0x58] + mov r0, #1 + bl MOD83_02238860 _0222E6A8: - ldr r0, [r4, #0x58] - cmp r0, #2 - bne _0222E6C2 - ldr r1, [r4, #0x40] - mov r0, #0x80 - orr r1, r0 - str r1, [r4, #0x40] - mov r1, #1 - add r0, #0x98 - str r1, [r4, r0] - mov r0, #6 - str r0, [r5] - b _0222E6D8 + ldr r0, [r4, #0x58] + cmp r0, #2 + bne _0222E6C2 + ldr r1, [r4, #0x40] + mov r0, #0x80 + orr r1, r0 + str r1, [r4, #0x40] + mov r1, #1 + add r0, #0x98 + str r1, [r4, r0] + mov r0, #6 + str r0, [r5] + b _0222E6D8 _0222E6C2: - cmp r0, #6 - bne _0222E6CC - mov r0, #1 - bl MOD83_02238860 + cmp r0, #6 + bne _0222E6CC + mov r0, #1 + bl MOD83_02238860 _0222E6CC: - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C _0222E6D8: - mov r0, #0x43 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0xd - bne _0222E788 - mov r1, #0xe - str r1, [r4, r0] - b _0222E788 + mov r0, #0x43 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0xd + bne _0222E788 + mov r1, #0xe + str r1, [r4, r0] + b _0222E788 _0222E6E8: - ldr r1, [r4, #0x48] - cmp r1, #1 - bne _0222E6FA - add r0, r4, #0 - bl MOD83_0222E0DC - mov r0, #0 - str r0, [r4, #0x48] - b _0222E788 + ldr r1, [r4, #0x48] + cmp r1, #1 + bne _0222E6FA + add r0, r4, #0 + bl MOD83_0222E0DC + mov r0, #0 + str r0, [r4, #0x48] + b _0222E788 _0222E6FA: - mov r1, #0x40 - tst r0, r1 - beq _0222E708 - add r0, r4, #0 - sub r1, #0x41 - bl MOD83_0222E2A8 + mov r1, #0x40 + tst r0, r1 + beq _0222E708 + add r0, r4, #0 + sub r1, #0x41 + bl MOD83_0222E2A8 _0222E708: - ldr r0, _0222E7A4 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #0x80 - tst r0, r1 - beq _0222E71A - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222E2A8 + ldr r0, _0222E7A4 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #0x80 + tst r0, r1 + beq _0222E71A + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222E2A8 _0222E71A: - ldr r1, [r4, #0x54] - add r0, r4, #0 - bl MOD83_0222E1F8 - add r0, r4, #0 - bl MOD83_0222E2E4 - add r0, r4, #0 - bl MOD83_0222E338 - ldr r0, [r5] - cmp r0, #5 - bne _0222E788 - mov r0, #0x4e - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #1 - bne _0222E788 - mov r1, #0 - str r1, [r4, r0] - mov r1, #1 - sub r0, #0x20 - str r1, [r4, r0] - b _0222E788 + ldr r1, [r4, #0x54] + add r0, r4, #0 + bl MOD83_0222E1F8 + add r0, r4, #0 + bl MOD83_0222E2E4 + add r0, r4, #0 + bl MOD83_0222E338 + ldr r0, [r5] + cmp r0, #5 + bne _0222E788 + mov r0, #0x4e + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #1 + bne _0222E788 + mov r1, #0 + str r1, [r4, r0] + mov r1, #1 + sub r0, #0x20 + str r1, [r4, r0] + b _0222E788 _0222E74A: - mov r0, #0x45 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0xf - bne _0222E788 - add r0, #0xc - ldr r1, [r4, r0] - mov r0, #2 - tst r0, r1 - beq _0222E764 - mov r0, #5 - str r0, [r5] - b _0222E788 + mov r0, #0x45 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0xf + bne _0222E788 + add r0, #0xc + ldr r1, [r4, r0] + mov r0, #2 + tst r0, r1 + beq _0222E764 + mov r0, #5 + str r0, [r5] + b _0222E788 _0222E764: - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E772: - add r0, r6, #0 - bl MOD83_0222E3B8 - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r6, #0 + bl MOD83_0222E3B8 + mov r0, #1 + pop {r4, r5, r6, pc} _0222E77C: - add r0, r5, #0 - bl MOD83_022388CC - b _0222E788 + add r0, r5, #0 + bl MOD83_022388CC + b _0222E788 _0222E784: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _0222E788: - add r0, r4, #0 - bl MOD83_0222D6EC - add r0, r4, #0 - bl MOD83_0222D9C0 - bl MOD83_02238D58 - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + bl MOD83_0222D6EC + add r0, r4, #0 + bl MOD83_0222D9C0 + bl MOD83_02238D58 + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 _0222E79C: .word 0x00007D8C _0222E7A0: .word MOD83_0222E464 _0222E7A4: .word gMain _0222E7A8: .word 0x000005DC - thumb_func_end MOD83_0222E540 + thumb_func_end MOD83_0222E540 - thumb_func_start MOD83_0222E7AC + thumb_func_start MOD83_0222E7AC MOD83_0222E7AC: ; 0x0222E7AC - push {r3, lr} - ldr r0, [r0, #0x58] - cmp r0, #7 - bhi _0222E822 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r0, [r0, #0x58] + cmp r0, #7 + bhi _0222E822 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222E7C0: ; jump table - .short _0222E81A - _0222E7C0 - 2 ; case 0 - .short _0222E7D0 - _0222E7C0 - 2 ; case 1 - .short _0222E7DA - _0222E7C0 - 2 ; case 2 - .short _0222E7E4 - _0222E7C0 - 2 ; case 3 - .short _0222E7F8 - _0222E7C0 - 2 ; case 4 - .short _0222E7EE - _0222E7C0 - 2 ; case 5 - .short _0222E802 - _0222E7C0 - 2 ; case 6 - .short _0222E80A - _0222E7C0 - 2 ; case 7 + .short _0222E81A - _0222E7C0 - 2 ; case 0 + .short _0222E7D0 - _0222E7C0 - 2 ; case 1 + .short _0222E7DA - _0222E7C0 - 2 ; case 2 + .short _0222E7E4 - _0222E7C0 - 2 ; case 3 + .short _0222E7F8 - _0222E7C0 - 2 ; case 4 + .short _0222E7EE - _0222E7C0 - 2 ; case 5 + .short _0222E802 - _0222E7C0 - 2 ; case 6 + .short _0222E80A - _0222E7C0 - 2 ; case 7 _0222E7D0: - ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID - ldr r1, _0222E828 ; =MOD52_021D76C8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID + ldr r1, _0222E828 ; =MOD52_021D76C8 + bl RegisterMainOverlay + pop {r3, pc} _0222E7DA: - ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID - ldr r1, _0222E82C ; =MOD52_021D76E8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID + ldr r1, _0222E82C ; =MOD52_021D76E8 + bl RegisterMainOverlay + pop {r3, pc} _0222E7E4: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E834 ; =MOD83_0223A434 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E834 ; =MOD83_0223A434 + bl RegisterMainOverlay + pop {r3, pc} _0222E7EE: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E838 ; =MOD83_0223A4FC - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E838 ; =MOD83_0223A4FC + bl RegisterMainOverlay + pop {r3, pc} _0222E7F8: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E83C ; =MOD83_0223A3A8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E83C ; =MOD83_0223A3A8 + bl RegisterMainOverlay + pop {r3, pc} _0222E802: - ldr r0, _0222E840 ; =MOD83_0223A8C4 - bl Reset_To_File - pop {r3, pc} + ldr r0, _0222E840 ; =MOD83_0223A8C4 + bl Reset_To_File + pop {r3, pc} _0222E80A: - bl FUN_0200541C - mov r0, #0 - ldr r1, _0222E844 ; =UNK_020FD6D4 - mvn r0, r0 - bl RegisterMainOverlay - pop {r3, pc} + bl FUN_0200541C + mov r0, #0 + ldr r1, _0222E844 ; =UNK_020FD6D4 + mvn r0, r0 + bl RegisterMainOverlay + pop {r3, pc} _0222E81A: - ldr r0, _0222E848 ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _0222E84C ; =MOD63_021DBAB8 - bl RegisterMainOverlay + ldr r0, _0222E848 ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _0222E84C ; =MOD63_021DBAB8 + bl RegisterMainOverlay _0222E822: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0222E824: .word SDK_OVERLAY_MODULE_52_ID _0222E828: .word MOD52_021D76C8 _0222E82C: .word MOD52_021D76E8 @@ -2361,1632 +2361,1632 @@ _0222E840: .word MOD83_0223A8C4 _0222E844: .word UNK_020FD6D4 _0222E848: .word SDK_OVERLAY_MODULE_63_ID _0222E84C: .word MOD63_021DBAB8 - thumb_func_end MOD83_0222E7AC + thumb_func_end MOD83_0222E7AC - thumb_func_start MOD83_0222E850 + thumb_func_start MOD83_0222E850 MOD83_0222E850: ; 0x0222E850 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - bl MOD83_0222E7AC - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x51 - bl DestroyHeap - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222E850 - - thumb_func_start MOD83_0222E874 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + bl MOD83_0222E7AC + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x51 + bl DestroyHeap + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222E850 + + thumb_func_start MOD83_0222E874 MOD83_0222E874: ; 0x0222E874 - push {r3, r4} - ldr r4, _0222E89C ; =MOD83_0223A8E0 - ldr r1, _0222E8A0 ; =0x00000123 - mov r3, #0 + push {r3, r4} + ldr r4, _0222E89C ; =MOD83_0223A8E0 + ldr r1, _0222E8A0 ; =0x00000123 + mov r3, #0 _0222E87C: - ldrh r2, [r4, #2] - cmp r0, r2 - bne _0222E88C - ldr r0, _0222E89C ; =MOD83_0223A8E0 - lsl r1, r3, #2 - ldrh r0, [r0, r1] - pop {r3, r4} - bx lr + ldrh r2, [r4, #2] + cmp r0, r2 + bne _0222E88C + ldr r0, _0222E89C ; =MOD83_0223A8E0 + lsl r1, r3, #2 + ldrh r0, [r0, r1] + pop {r3, r4} + bx lr _0222E88C: - add r3, r3, #1 - add r4, r4, #4 - cmp r3, r1 - blo _0222E87C - mov r0, #0x3f - pop {r3, r4} - bx lr - nop + add r3, r3, #1 + add r4, r4, #4 + cmp r3, r1 + blo _0222E87C + mov r0, #0x3f + pop {r3, r4} + bx lr + nop _0222E89C: .word MOD83_0223A8E0 _0222E8A0: .word 0x00000123 - thumb_func_end MOD83_0222E874 + thumb_func_end MOD83_0222E874 - thumb_func_start MOD83_0222E8A4 + thumb_func_start MOD83_0222E8A4 MOD83_0222E8A4: ; 0x0222E8A4 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldr r1, _0222E90C ; =0x00002710 - add r0, r4, #0 - bl _s32_div_f - add r0, #0x30 - strh r0, [r5] - ldr r1, _0222E90C ; =0x00002710 - add r0, r4, #0 - bl _s32_div_f - add r4, r1, #0 - mov r1, #0xfa - add r0, r4, #0 - lsl r1, r1, #2 - bl _s32_div_f - add r0, #0x30 - mov r1, #0xfa - strh r0, [r5, #2] - add r0, r4, #0 - lsl r1, r1, #2 - bl _s32_div_f - add r4, r1, #0 - add r0, r4, #0 - mov r1, #0x64 - bl _s32_div_f - add r0, #0x30 - strh r0, [r5, #4] - add r0, r4, #0 - mov r1, #0x64 - bl _s32_div_f - add r4, r1, #0 - add r0, r4, #0 - mov r1, #0xa - bl _s32_div_f - add r0, #0x30 - strh r0, [r5, #6] - add r0, r4, #0 - mov r1, #0xa - bl _s32_div_f - add r4, r1, #0 - add r4, #0x30 - strh r4, [r5, #8] - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r1, _0222E90C ; =0x00002710 + add r0, r4, #0 + bl _s32_div_f + add r0, #0x30 + strh r0, [r5] + ldr r1, _0222E90C ; =0x00002710 + add r0, r4, #0 + bl _s32_div_f + add r4, r1, #0 + mov r1, #0xfa + add r0, r4, #0 + lsl r1, r1, #2 + bl _s32_div_f + add r0, #0x30 + mov r1, #0xfa + strh r0, [r5, #2] + add r0, r4, #0 + lsl r1, r1, #2 + bl _s32_div_f + add r4, r1, #0 + add r0, r4, #0 + mov r1, #0x64 + bl _s32_div_f + add r0, #0x30 + strh r0, [r5, #4] + add r0, r4, #0 + mov r1, #0x64 + bl _s32_div_f + add r4, r1, #0 + add r0, r4, #0 + mov r1, #0xa + bl _s32_div_f + add r0, #0x30 + strh r0, [r5, #6] + add r0, r4, #0 + mov r1, #0xa + bl _s32_div_f + add r4, r1, #0 + add r4, #0x30 + strh r4, [r5, #8] + pop {r3, r4, r5, pc} + .align 2, 0 _0222E90C: .word 0x00002710 - thumb_func_end MOD83_0222E8A4 + thumb_func_end MOD83_0222E8A4 - thumb_func_start MOD83_0222E910 + thumb_func_start MOD83_0222E910 MOD83_0222E910: ; 0x0222E910 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - ldr r0, [r7, #0x10] - bl PlayerProfile_GetNamePtr - ldr r5, _0222E948 ; =MOD83_0223B860 - add r4, r0, #0 - mov r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + ldr r0, [r7, #0x10] + bl PlayerProfile_GetNamePtr + ldr r5, _0222E948 ; =MOD83_0223B860 + add r4, r0, #0 + mov r6, #0 _0222E920: - ldrh r0, [r4] - bl MOD83_0222E874 - strh r0, [r5] - add r6, r6, #1 - add r4, r4, #2 - add r5, r5, #2 - cmp r6, #8 - blt _0222E920 - ldr r0, [r7, #0x10] - bl PlayerProfile_GetTrainerID_VisibleHalf - add r1, r0, #0 - ldr r0, _0222E94C ; =MOD83_0223B870 - bl MOD83_0222E8A4 - ldr r0, _0222E950 ; =MOD83_0223B860 - mov r1, #0 - strh r1, [r0, #0x1a] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r4] + bl MOD83_0222E874 + strh r0, [r5] + add r6, r6, #1 + add r4, r4, #2 + add r5, r5, #2 + cmp r6, #8 + blt _0222E920 + ldr r0, [r7, #0x10] + bl PlayerProfile_GetTrainerID_VisibleHalf + add r1, r0, #0 + ldr r0, _0222E94C ; =MOD83_0223B870 + bl MOD83_0222E8A4 + ldr r0, _0222E950 ; =MOD83_0223B860 + mov r1, #0 + strh r1, [r0, #0x1a] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E948: .word MOD83_0223B860 _0222E94C: .word MOD83_0223B870 _0222E950: .word MOD83_0223B860 - thumb_func_end MOD83_0222E910 + thumb_func_end MOD83_0222E910 - thumb_func_start MOD83_0222E954 + thumb_func_start MOD83_0222E954 MOD83_0222E954: ; 0x0222E954 - push {r3, r4, r5, lr} - sub sp, #0x48 - ldr r5, _0222EA80 ; =MOD83_0223A3C8 - add r4, r0, #0 - add r3, sp, #0x20 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x48 + ldr r5, _0222EA80 ; =MOD83_0223A3C8 + add r4, r0, #0 + add r3, sp, #0x20 + mov r2, #5 _0222E960: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _0222E960 - ldr r3, _0222EA84 ; =MOD83_0223A3B8 - add r2, sp, #0x10 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - add r0, sp, #0x20 - bl GX_SetBanks - add r0, sp, #0x10 - bl SetBothScreensModesAndDisable - mov r1, #0 - str r1, [sp] - mov r3, #0xf - ldr r0, [r4, #4] - mov r2, #1 - lsl r3, r3, #0xc - bl MOD83_022387D8 - mov r0, #1 - lsl r0, r0, #0xe - str r0, [sp] - mov r1, #1 - mov r3, #0x3e - ldr r0, [r4, #4] - add r2, r1, #0 - lsl r3, r3, #0xa - bl MOD83_022387D8 - mov r0, #0 - str r0, [sp] - mov r3, #0x1e - ldr r0, [r4, #4] - mov r1, #4 - mov r2, #1 - lsl r3, r3, #0xa - bl MOD83_022387D8 - mov r0, #1 - lsl r0, r0, #0xe - str r0, [sp] - mov r3, #7 - ldr r0, [r4, #4] - mov r1, #5 - mov r2, #1 - lsl r3, r3, #0xc - bl MOD83_022387D8 - bl FUN_0201BD5C - mov r0, #0 - ldr r2, [r4] - add r1, r0, #0 - bl FUN_02002ED0 - mov r1, #0 - str r1, [sp] - ldr r0, [r4] - mov r2, #1 - str r0, [sp, #4] - ldr r0, [r4, #4] - add r3, r2, #0 - bl FUN_0200CB00 - ldr r0, [r4, #0x14] - bl Options_GetFrame - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4] - mov r1, #0 - str r0, [sp, #4] - ldr r0, [r4, #4] - mov r2, #0xa - mov r3, #2 - bl FUN_0200CD68 - mov r0, #0x20 - str r0, [sp] - ldr r0, [r4] - mov r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0x8c - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - mov r1, #1 - str r0, [sp, #4] - str r1, [sp, #8] - ldr r0, [r4] - add r3, r1, #0 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r4] - mov r1, #2 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - ldr r0, [r4, #4] - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, [r4, #4] - mov r1, #1 - bl BgCommitTilemapBufferToVram - add r0, r4, #0 - bl MOD83_0222EA88 - add sp, #0x48 - pop {r3, r4, r5, pc} - nop + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _0222E960 + ldr r3, _0222EA84 ; =MOD83_0223A3B8 + add r2, sp, #0x10 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + add r0, sp, #0x20 + bl GX_SetBanks + add r0, sp, #0x10 + bl SetBothScreensModesAndDisable + mov r1, #0 + str r1, [sp] + mov r3, #0xf + ldr r0, [r4, #4] + mov r2, #1 + lsl r3, r3, #0xc + bl MOD83_022387D8 + mov r0, #1 + lsl r0, r0, #0xe + str r0, [sp] + mov r1, #1 + mov r3, #0x3e + ldr r0, [r4, #4] + add r2, r1, #0 + lsl r3, r3, #0xa + bl MOD83_022387D8 + mov r0, #0 + str r0, [sp] + mov r3, #0x1e + ldr r0, [r4, #4] + mov r1, #4 + mov r2, #1 + lsl r3, r3, #0xa + bl MOD83_022387D8 + mov r0, #1 + lsl r0, r0, #0xe + str r0, [sp] + mov r3, #7 + ldr r0, [r4, #4] + mov r1, #5 + mov r2, #1 + lsl r3, r3, #0xc + bl MOD83_022387D8 + bl FUN_0201BD5C + mov r0, #0 + ldr r2, [r4] + add r1, r0, #0 + bl FUN_02002ED0 + mov r1, #0 + str r1, [sp] + ldr r0, [r4] + mov r2, #1 + str r0, [sp, #4] + ldr r0, [r4, #4] + add r3, r2, #0 + bl FUN_0200CB00 + ldr r0, [r4, #0x14] + bl Options_GetFrame + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4] + mov r1, #0 + str r0, [sp, #4] + ldr r0, [r4, #4] + mov r2, #0xa + mov r3, #2 + bl FUN_0200CD68 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r4] + mov r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0x8c + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + mov r1, #1 + str r0, [sp, #4] + str r1, [sp, #8] + ldr r0, [r4] + add r3, r1, #0 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r4] + mov r1, #2 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + ldr r0, [r4, #4] + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, [r4, #4] + mov r1, #1 + bl BgCommitTilemapBufferToVram + add r0, r4, #0 + bl MOD83_0222EA88 + add sp, #0x48 + pop {r3, r4, r5, pc} + nop _0222EA80: .word MOD83_0223A3C8 _0222EA84: .word MOD83_0223A3B8 - thumb_func_end MOD83_0222E954 + thumb_func_end MOD83_0222E954 - thumb_func_start MOD83_0222EA88 + thumb_func_start MOD83_0222EA88 MOD83_0222EA88: ; 0x0222EA88 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - ldr r0, [r4] - mov r2, #4 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - ldr r0, [r4] - mov r3, #4 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #2 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - mov r3, #4 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - ldr r0, [r4, #4] - mov r1, #4 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, [r4, #4] - mov r1, #4 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222EA88 - - thumb_func_start MOD83_0222EB04 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r4] + mov r2, #4 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + ldr r0, [r4] + mov r3, #4 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #2 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + mov r3, #4 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + ldr r0, [r4, #4] + mov r1, #4 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, [r4, #4] + mov r1, #4 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222EA88 + + thumb_func_start MOD83_0222EB04 MOD83_0222EB04: ; 0x0222EB04 - push {r3, r4, lr} - sub sp, #0x5c - add r4, r0, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #0 - bne _0222EB4E - mov r0, #1 - str r0, [sp] - add r1, r4, #0 - str r0, [sp, #4] - add r0, sp, #8 - add r1, #0x18 - mov r2, #0 - mov r3, #0xc - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - ldr r3, [r4, r3] - add r0, sp, #8 - mov r1, #0x16 - mov r2, #0x10 - bl MOD83_02238934 - mov r0, #2 - str r0, [sp] - ldr r0, [r4, #4] - add r1, sp, #8 - mov r2, #5 - mov r3, #4 - bl MOD83_02238A38 - add sp, #0x5c - mov r0, #1 - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #0x5c + add r4, r0, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #0 + bne _0222EB4E + mov r0, #1 + str r0, [sp] + add r1, r4, #0 + str r0, [sp, #4] + add r0, sp, #8 + add r1, #0x18 + mov r2, #0 + mov r3, #0xc + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + ldr r3, [r4, r3] + add r0, sp, #8 + mov r1, #0x16 + mov r2, #0x10 + bl MOD83_02238934 + mov r0, #2 + str r0, [sp] + ldr r0, [r4, #4] + add r1, sp, #8 + mov r2, #5 + mov r3, #4 + bl MOD83_02238A38 + add sp, #0x5c + mov r0, #1 + pop {r3, r4, pc} _0222EB4E: - ldr r0, _0222EB78 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _0222EB70 - add r0, r4, #0 - add r0, #0x18 - mov r1, #0 - bl FUN_0200CCF8 - add r4, #0x18 - add r0, r4, #0 - bl RemoveWindow - add sp, #0x5c - mov r0, #0 - pop {r3, r4, pc} + ldr r0, _0222EB78 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _0222EB70 + add r0, r4, #0 + add r0, #0x18 + mov r1, #0 + bl FUN_0200CCF8 + add r4, #0x18 + add r0, r4, #0 + bl RemoveWindow + add sp, #0x5c + mov r0, #0 + pop {r3, r4, pc} _0222EB70: - mov r0, #1 - add sp, #0x5c - pop {r3, r4, pc} - nop + mov r0, #1 + add sp, #0x5c + pop {r3, r4, pc} + nop _0222EB78: .word gMain - thumb_func_end MOD83_0222EB04 + thumb_func_end MOD83_0222EB04 - thumb_func_start MOD83_0222EB7C + thumb_func_start MOD83_0222EB7C MOD83_0222EB7C: ; 0x0222EB7C - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - mov r0, #0xa - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - add r0, r4, #0 - add r1, r4, #0 - ldr r3, _0222EC70 ; =0x00000172 - add r0, #0x48 - add r1, #0x28 - mov r2, #0 - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r4, #0 - ldr r3, [r4, r3] - add r0, #0x48 - mov r1, #0x1b - mov r2, #4 - bl MOD83_02238934 - add r0, r4, #0 - mov r1, #1 - add r0, #0x48 - add r2, r1, #0 - bl MOD83_0223893C - mov r0, #0x46 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x48 - bl MOD83_02238AF4 - mov r3, #0x51 - lsl r3, r3, #2 - ldr r1, [r4, r3] - mov r2, #0 - add r0, r1, r0 - str r0, [r4, r3] - mov r0, #1 - str r0, [sp] - str r0, [sp, #4] - add r0, r4, #0 - add r1, r4, #0 - add r0, #0x9c - add r1, #0x18 - add r3, #0x2e - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r4, #0 - ldr r3, [r4, r3] - add r0, #0x9c - mov r1, #0x1e - mov r2, #4 - bl MOD83_02238934 - add r0, r4, #0 - add r0, #0x9c - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - mov r0, #0xb - str r0, [sp] - add r1, r4, #0 - mov r2, #1 - ldr r0, [r4, #4] - add r1, #0x9c - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x9c - bl MOD83_02238AF4 - mov r1, #0x51 - lsl r1, r1, #2 - ldr r2, [r4, r1] - add r0, r2, r0 - str r0, [r4, r1] - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #8 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xa - mov r2, #7 - mov r3, #9 - bl MOD83_02238BC4 - mov r0, #1 - str r0, [sp] - ldr r1, _0222EC74 ; =0x00003170 - mov r0, #0 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #0x4c - bl MOD83_02238DBC - ldr r1, _0222EC74 ; =0x00003170 - str r0, [r4, r1] - add r0, r4, #0 - bl MOD83_0222EC78 - add sp, #8 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + mov r0, #0xa + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r0, r4, #0 + add r1, r4, #0 + ldr r3, _0222EC70 ; =0x00000172 + add r0, #0x48 + add r1, #0x28 + mov r2, #0 + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r4, #0 + ldr r3, [r4, r3] + add r0, #0x48 + mov r1, #0x1b + mov r2, #4 + bl MOD83_02238934 + add r0, r4, #0 + mov r1, #1 + add r0, #0x48 + add r2, r1, #0 + bl MOD83_0223893C + mov r0, #0x46 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x48 + bl MOD83_02238AF4 + mov r3, #0x51 + lsl r3, r3, #2 + ldr r1, [r4, r3] + mov r2, #0 + add r0, r1, r0 + str r0, [r4, r3] + mov r0, #1 + str r0, [sp] + str r0, [sp, #4] + add r0, r4, #0 + add r1, r4, #0 + add r0, #0x9c + add r1, #0x18 + add r3, #0x2e + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r4, #0 + ldr r3, [r4, r3] + add r0, #0x9c + mov r1, #0x1e + mov r2, #4 + bl MOD83_02238934 + add r0, r4, #0 + add r0, #0x9c + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + mov r0, #0xb + str r0, [sp] + add r1, r4, #0 + mov r2, #1 + ldr r0, [r4, #4] + add r1, #0x9c + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x9c + bl MOD83_02238AF4 + mov r1, #0x51 + lsl r1, r1, #2 + ldr r2, [r4, r1] + add r0, r2, r0 + str r0, [r4, r1] + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #8 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xa + mov r2, #7 + mov r3, #9 + bl MOD83_02238BC4 + mov r0, #1 + str r0, [sp] + ldr r1, _0222EC74 ; =0x00003170 + mov r0, #0 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #0x4c + bl MOD83_02238DBC + ldr r1, _0222EC74 ; =0x00003170 + str r0, [r4, r1] + add r0, r4, #0 + bl MOD83_0222EC78 + add sp, #8 + pop {r4, pc} + .align 2, 0 _0222EC70: .word 0x00000172 _0222EC74: .word 0x00003170 - thumb_func_end MOD83_0222EB7C + thumb_func_end MOD83_0222EB7C - thumb_func_start MOD83_0222EC78 + thumb_func_start MOD83_0222EC78 MOD83_0222EC78: ; 0x0222EC78 - push {r3, r4, r5, lr} - sub sp, #0x20 - add r5, r0, #0 - ldr r0, [r5] - bl ScrStrBufs_new - add r4, r0, #0 - mov r0, #1 - str r0, [sp] - str r0, [sp, #4] - add r0, r5, #0 - add r1, r5, #0 - ldr r3, _0222ED84 ; =0x00000172 - add r0, #0xf0 - add r1, #0x38 - mov r2, #0 - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r5, #0 - ldr r3, [r5, r3] - add r0, #0xf0 - mov r1, #0x1a - mov r2, #4 - bl MOD83_02238934 - add r0, r5, #0 - add r0, #0xf0 - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - mov r0, #0x41 - lsl r0, r0, #2 - str r4, [r5, r0] - ldr r2, [r5, #0x10] - add r0, r4, #0 - mov r1, #0 - bl BufferPlayersName - ldr r0, [r5, #0x10] - bl PlayerProfile_GetTrainerID_VisibleHalf - add r2, r0, #0 - mov r0, #2 - str r0, [sp] - mov r1, #1 - add r0, r4, #0 - mov r3, #5 - str r1, [sp, #4] - bl BufferIntegerAsString - mov r0, #0x42 - str r0, [sp] - add r1, r5, #0 - ldr r0, [r5, #4] - add r1, #0xf0 - mov r2, #3 - mov r3, #0xd - bl MOD83_02238A38 - add r1, r5, #0 - mov r0, #0 - add r1, #0xf8 - str r0, [r1] - mov r1, #1 - bl GetFontAttribute - add r2, r0, #0 - add r0, r5, #0 - add r0, #0xf0 - mov r1, #0 - bl MOD83_02238944 - mov r2, #0x44 - str r2, [sp] - add r1, r5, #0 - sub r2, #0x45 - ldr r0, [r5, #4] - add r1, #0xf0 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, sp, #0x10 - bl OS_GetMacAddress - add r0, sp, #0x10 - bl MOD83_02234704 - add r1, sp, #0x1c - add r2, sp, #0x18 - str r0, [sp, #8] - str r0, [sp, #0xc] - bl MOD83_02234748 - mov r0, #2 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r2, [sp, #0x1c] - add r0, r4, #0 - mov r1, #0 - mov r3, #4 - bl BufferIntegerAsString - mov r0, #2 - str r0, [sp] - mov r1, #1 - str r1, [sp, #4] - ldr r2, [sp, #0x18] - add r0, r4, #0 - mov r3, #4 - bl BufferIntegerAsString - add r0, r5, #0 - mov r1, #1 - add r0, #0xfc - str r1, [r0] - mov r2, #0x45 - str r2, [sp] - ldr r0, [r5, #4] - add r5, #0xf0 - sub r2, #0x46 - add r1, r5, #0 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r4, #0 - bl ScrStrBufs_delete - add sp, #0x20 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x20 + add r5, r0, #0 + ldr r0, [r5] + bl ScrStrBufs_new + add r4, r0, #0 + mov r0, #1 + str r0, [sp] + str r0, [sp, #4] + add r0, r5, #0 + add r1, r5, #0 + ldr r3, _0222ED84 ; =0x00000172 + add r0, #0xf0 + add r1, #0x38 + mov r2, #0 + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r5, #0 + ldr r3, [r5, r3] + add r0, #0xf0 + mov r1, #0x1a + mov r2, #4 + bl MOD83_02238934 + add r0, r5, #0 + add r0, #0xf0 + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + mov r0, #0x41 + lsl r0, r0, #2 + str r4, [r5, r0] + ldr r2, [r5, #0x10] + add r0, r4, #0 + mov r1, #0 + bl BufferPlayersName + ldr r0, [r5, #0x10] + bl PlayerProfile_GetTrainerID_VisibleHalf + add r2, r0, #0 + mov r0, #2 + str r0, [sp] + mov r1, #1 + add r0, r4, #0 + mov r3, #5 + str r1, [sp, #4] + bl BufferIntegerAsString + mov r0, #0x42 + str r0, [sp] + add r1, r5, #0 + ldr r0, [r5, #4] + add r1, #0xf0 + mov r2, #3 + mov r3, #0xd + bl MOD83_02238A38 + add r1, r5, #0 + mov r0, #0 + add r1, #0xf8 + str r0, [r1] + mov r1, #1 + bl GetFontAttribute + add r2, r0, #0 + add r0, r5, #0 + add r0, #0xf0 + mov r1, #0 + bl MOD83_02238944 + mov r2, #0x44 + str r2, [sp] + add r1, r5, #0 + sub r2, #0x45 + ldr r0, [r5, #4] + add r1, #0xf0 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, sp, #0x10 + bl OS_GetMacAddress + add r0, sp, #0x10 + bl MOD83_02234704 + add r1, sp, #0x1c + add r2, sp, #0x18 + str r0, [sp, #8] + str r0, [sp, #0xc] + bl MOD83_02234748 + mov r0, #2 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r2, [sp, #0x1c] + add r0, r4, #0 + mov r1, #0 + mov r3, #4 + bl BufferIntegerAsString + mov r0, #2 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + ldr r2, [sp, #0x18] + add r0, r4, #0 + mov r3, #4 + bl BufferIntegerAsString + add r0, r5, #0 + mov r1, #1 + add r0, #0xfc + str r1, [r0] + mov r2, #0x45 + str r2, [sp] + ldr r0, [r5, #4] + add r5, #0xf0 + sub r2, #0x46 + add r1, r5, #0 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r4, #0 + bl ScrStrBufs_delete + add sp, #0x20 + pop {r3, r4, r5, pc} + nop _0222ED84: .word 0x00000172 - thumb_func_end MOD83_0222EC78 + thumb_func_end MOD83_0222EC78 - thumb_func_start MOD83_0222ED88 + thumb_func_start MOD83_0222ED88 MOD83_0222ED88: ; 0x0222ED88 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02238E48 - add r0, r4, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #1 - bne _0222EDD0 - add r0, r4, #0 - add r0, #0x18 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x18 - bl RemoveWindow - add r0, r4, #0 - add r0, #0x28 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x28 - bl RemoveWindow - add r0, r4, #0 - add r0, #0x38 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x38 - bl RemoveWindow + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02238E48 + add r0, r4, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #1 + bne _0222EDD0 + add r0, r4, #0 + add r0, #0x18 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x18 + bl RemoveWindow + add r0, r4, #0 + add r0, #0x28 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x28 + bl RemoveWindow + add r0, r4, #0 + add r0, #0x38 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x38 + bl RemoveWindow _0222EDD0: - ldr r0, [r4, #4] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #4 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #5 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD83_0222ED88 - - thumb_func_start MOD83_0222EDF8 + ldr r0, [r4, #4] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #4 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #5 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + bl FreeToHeap + pop {r4, pc} + thumb_func_end MOD83_0222ED88 + + thumb_func_start MOD83_0222EDF8 MOD83_0222EDF8: ; 0x0222EDF8 - push {r3, r4, r5, lr} - mov r3, #2 - ldr r2, _0222EE80 ; =0x000034DC - mov r1, #0x55 - lsl r3, r3, #0x10 - add r5, r0, #0 - bl MOD83_022387A0 - add r4, r0, #0 - mov r0, #0x55 - str r0, [r4] - bl BgConfig_Alloc - str r0, [r4, #4] - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #8] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0x10] - ldr r0, [r4, #8] - bl Sav2_Pokedex_get - str r0, [r4, #0xc] - ldr r0, [r4, #8] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0x14] - ldr r0, [r4] - bl MOD83_02238770 - ldr r0, [r4, #8] - bl FUN_0202251C - ldr r1, _0222EE84 ; =0x00003174 - mov r2, #0x53 - str r0, [r4, r1] - mov r0, #9 - lsl r2, r2, #2 - str r0, [r4, r2] - add r0, r2, #0 - mov r1, #0x28 - sub r0, #8 - str r1, [r4, r0] - add r1, r2, #0 - mov r0, #0 - add r1, #8 - str r0, [r4, r1] - add r1, r2, #0 - add r1, #0x10 - str r0, [r4, r1] - add r2, #0xc - str r0, [r4, r2] - mov r2, #3 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - ldr r1, _0222EE88 ; =0x00000496 - mov r0, #9 - mov r2, #1 - bl FUN_0200433C - mov r0, #1 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + mov r3, #2 + ldr r2, _0222EE80 ; =0x000034DC + mov r1, #0x55 + lsl r3, r3, #0x10 + add r5, r0, #0 + bl MOD83_022387A0 + add r4, r0, #0 + mov r0, #0x55 + str r0, [r4] + bl BgConfig_Alloc + str r0, [r4, #4] + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #8] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0x10] + ldr r0, [r4, #8] + bl Sav2_Pokedex_get + str r0, [r4, #0xc] + ldr r0, [r4, #8] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #0x14] + ldr r0, [r4] + bl MOD83_02238770 + ldr r0, [r4, #8] + bl FUN_0202251C + ldr r1, _0222EE84 ; =0x00003174 + mov r2, #0x53 + str r0, [r4, r1] + mov r0, #9 + lsl r2, r2, #2 + str r0, [r4, r2] + add r0, r2, #0 + mov r1, #0x28 + sub r0, #8 + str r1, [r4, r0] + add r1, r2, #0 + mov r0, #0 + add r1, #8 + str r0, [r4, r1] + add r1, r2, #0 + add r1, #0x10 + str r0, [r4, r1] + add r2, #0xc + str r0, [r4, r2] + mov r2, #3 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + ldr r1, _0222EE88 ; =0x00000496 + mov r0, #9 + mov r2, #1 + bl FUN_0200433C + mov r0, #1 + pop {r3, r4, r5, pc} + nop _0222EE80: .word 0x000034DC _0222EE84: .word 0x00003174 _0222EE88: .word 0x00000496 - thumb_func_end MOD83_0222EDF8 + thumb_func_end MOD83_0222EDF8 - thumb_func_start MOD83_0222EE8C + thumb_func_start MOD83_0222EE8C MOD83_0222EE8C: ; 0x0222EE8C - push {r3, r4, r5, r6, lr} - sub sp, #4 - add r5, r1, #0 - add r6, r0, #0 - bl OverlayManager_GetData - ldr r1, [r5] - add r4, r0, #0 - cmp r1, #0xd - bhi _0222EEF2 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r1, #0 + add r6, r0, #0 + bl OverlayManager_GetData + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #0xd + bhi _0222EEF2 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _0222EEAC: ; jump table - .short _0222EEC8 - _0222EEAC - 2 ; case 0 - .short _0222EEEA - _0222EEAC - 2 ; case 1 - .short _0222EF08 - _0222EEAC - 2 ; case 2 - .short _0222EF5A - _0222EEAC - 2 ; case 3 - .short _0222EF86 - _0222EEAC - 2 ; case 4 - .short _0222EFC2 - _0222EEAC - 2 ; case 5 - .short _0222EFFC - _0222EEAC - 2 ; case 6 - .short _0222F02C - _0222EEAC - 2 ; case 7 - .short _0222F02C - _0222EEAC - 2 ; case 8 - .short _0222F02C - _0222EEAC - 2 ; case 9 - .short _0222F02C - _0222EEAC - 2 ; case 10 - .short _0222F012 - _0222EEAC - 2 ; case 11 - .short _0222F01A - _0222EEAC - 2 ; case 12 - .short _0222F026 - _0222EEAC - 2 ; case 13 + .short _0222EEC8 - _0222EEAC - 2 ; case 0 + .short _0222EEEA - _0222EEAC - 2 ; case 1 + .short _0222EF08 - _0222EEAC - 2 ; case 2 + .short _0222EF5A - _0222EEAC - 2 ; case 3 + .short _0222EF86 - _0222EEAC - 2 ; case 4 + .short _0222EFC2 - _0222EEAC - 2 ; case 5 + .short _0222EFFC - _0222EEAC - 2 ; case 6 + .short _0222F02C - _0222EEAC - 2 ; case 7 + .short _0222F02C - _0222EEAC - 2 ; case 8 + .short _0222F02C - _0222EEAC - 2 ; case 9 + .short _0222F02C - _0222EEAC - 2 ; case 10 + .short _0222F012 - _0222EEAC - 2 ; case 11 + .short _0222F01A - _0222EEAC - 2 ; case 12 + .short _0222F026 - _0222EEAC - 2 ; case 13 _0222EEC8: - bl MOD83_0222E954 - ldr r0, [r4, #0xc] - bl Pokedex_GetSinnohDexFlag - cmp r0, #0 - bne _0222EEE4 - mov r0, #1 - add r1, r0, #0 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222E954 + ldr r0, [r4, #0xc] + bl Pokedex_GetSinnohDexFlag + cmp r0, #0 + bne _0222EEE4 + mov r0, #1 + add r1, r0, #0 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EEE4: - mov r0, #2 - str r0, [r5] - b _0222F02C + mov r0, #2 + str r0, [r5] + b _0222F02C _0222EEEA: - bl MOD83_0222EB04 - cmp r0, #0 - beq _0222EEF4 + bl MOD83_0222EB04 + cmp r0, #0 + beq _0222EEF4 _0222EEF2: - b _0222F02C + b _0222F02C _0222EEF4: - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF08: - bl MOD83_0222EB7C - ldr r0, _0222F038 ; =0x00003174 - ldr r0, [r4, r0] - bl FUN_0202ADF0 - cmp r0, #0 - bne _0222EF44 - add r0, r4, #0 - mov r1, #1 - add r0, #0x98 - str r1, [r0] - mov r0, #0x15 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r1, _0222F03C ; =0x0000317C - add r2, r5, #0 - str r0, [r4, r1] - mov r0, #1 - mov r1, #3 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222EB7C + ldr r0, _0222F038 ; =0x00003174 + ldr r0, [r4, r0] + bl FUN_0202ADF0 + cmp r0, #0 + bne _0222EF44 + add r0, r4, #0 + mov r1, #1 + add r0, #0x98 + str r1, [r0] + mov r0, #0x15 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r1, _0222F03C ; =0x0000317C + add r2, r5, #0 + str r0, [r4, r1] + mov r0, #1 + mov r1, #3 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF44: - mov r0, #0x53 - mov r1, #7 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r0, #1 - mov r1, #4 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + mov r0, #0x53 + mov r1, #7 + lsl r0, r0, #2 + str r1, [r4, r0] + mov r0, #1 + mov r1, #4 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF5A: - ldr r0, _0222F03C ; =0x0000317C - ldr r0, [r4, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _0222F02C - ldr r0, _0222F040 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r1, r0 - beq _0222F02C - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + ldr r0, _0222F03C ; =0x0000317C + ldr r0, [r4, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _0222F02C + ldr r0, _0222F040 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r1, r0 + beq _0222F02C + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF86: - bl MOD83_0222F210 - mov r1, #0x15 - lsl r1, r1, #4 - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #5 - bne _0222EFAA - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222F210 + mov r1, #0x15 + lsl r1, r1, #4 + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #5 + bne _0222EFAA + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EFAA: - cmp r0, #4 - bne _0222F02C - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + cmp r0, #4 + bne _0222F02C + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EFC2: - bl MOD83_0222EA88 - mov r0, #1 - add r1, r0, #0 - bl GX_EngineBToggleLayers - mov r0, #2 - mov r1, #0 - bl GX_EngineBToggleLayers - mov r1, #0xc6 - lsl r1, r1, #6 - ldr r0, [r4, #4] - add r1, r4, r1 - mov r2, #0x55 - bl MOD83_02233168 - mov r0, #1 - mov r1, #6 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - ldr r1, _0222F044 ; =0x000032D2 - mov r0, #4 - ldrb r2, [r4, r1] - bic r2, r0 - strb r2, [r4, r1] - b _0222F02C + bl MOD83_0222EA88 + mov r0, #1 + add r1, r0, #0 + bl GX_EngineBToggleLayers + mov r0, #2 + mov r1, #0 + bl GX_EngineBToggleLayers + mov r1, #0xc6 + lsl r1, r1, #6 + ldr r0, [r4, #4] + add r1, r4, r1 + mov r2, #0x55 + bl MOD83_02233168 + mov r0, #1 + mov r1, #6 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + ldr r1, _0222F044 ; =0x000032D2 + mov r0, #4 + ldrb r2, [r4, r1] + bic r2, r0 + strb r2, [r4, r1] + b _0222F02C _0222EFFC: - ldr r0, _0222F040 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _0222F02C - mov r0, #0 - mov r1, #0xb - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + ldr r0, _0222F040 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _0222F02C + mov r0, #0 + mov r1, #0xb + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222F012: - mov r0, #0 - bl OS_ResetSystem - b _0222F02C + mov r0, #0 + bl OS_ResetSystem + b _0222F02C _0222F01A: - add r0, r6, #0 - bl MOD83_0222ED88 - add sp, #4 - mov r0, #1 - pop {r3, r4, r5, r6, pc} + add r0, r6, #0 + bl MOD83_0222ED88 + add sp, #4 + mov r0, #1 + pop {r3, r4, r5, r6, pc} _0222F026: - add r0, r5, #0 - bl MOD83_022388CC + add r0, r5, #0 + bl MOD83_022388CC _0222F02C: - bl MOD83_02238D58 - mov r0, #0 - add sp, #4 - pop {r3, r4, r5, r6, pc} - nop + bl MOD83_02238D58 + mov r0, #0 + add sp, #4 + pop {r3, r4, r5, r6, pc} + nop _0222F038: .word 0x00003174 _0222F03C: .word 0x0000317C _0222F040: .word gMain _0222F044: .word 0x000032D2 - thumb_func_end MOD83_0222EE8C + thumb_func_end MOD83_0222EE8C - thumb_func_start MOD83_0222F048 + thumb_func_start MOD83_0222F048 MOD83_0222F048: ; 0x0222F048 - push {r4, lr} - add r4, r0, #0 - mov r0, #0x5b - bl DestroyHeap - ldr r0, _0222F06C ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _0222F070 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x55 - bl DestroyHeap - mov r0, #1 - pop {r4, pc} - nop + push {r4, lr} + add r4, r0, #0 + mov r0, #0x5b + bl DestroyHeap + ldr r0, _0222F06C ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _0222F070 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x55 + bl DestroyHeap + mov r0, #1 + pop {r4, pc} + nop _0222F06C: .word SDK_OVERLAY_MODULE_63_ID _0222F070: .word MOD63_021DBAB8 - thumb_func_end MOD83_0222F048 + thumb_func_end MOD83_0222F048 - thumb_func_start MOD83_0222F074 + thumb_func_start MOD83_0222F074 MOD83_0222F074: ; 0x0222F074 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r5, r0, #0 - mov r0, #0xc6 - lsl r0, r0, #6 - add r4, r5, r0 - mov r2, #0xd6 - add r0, r4, #0 - mov r1, #0 - lsl r2, r2, #2 - bl MI_CpuFill8 - ldr r2, _0222F1A0 ; =0x00000172 - ldr r3, [r5] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - add r6, r0, #0 - ldr r0, [r5] - bl ScrStrBufs_new - mov r1, #0xc6 - mov r2, #7 - lsl r1, r1, #6 - strh r2, [r5, r1] - ldr r3, [r5] - add r1, r6, #0 - mov r2, #0x4c - str r0, [sp] - bl ReadMsgData_ExpandPlaceholders - mov r1, #0x41 - lsl r1, r1, #2 - add r7, r0, #0 - add r1, r4, r1 - mov r2, #0x24 - bl CopyStringToU16Array - add r0, r7, #0 - bl String_dtor - mov r0, #0xc - bl MOD83_02238EF4 - add r7, r0, #0 - mov r0, #0xa - bl MOD83_02238EF4 - str r0, [sp, #4] - mov r0, #0xb - bl MOD83_02238EF4 - ldr r1, [sp, #4] - mov r2, #1 - orr r0, r1 - add r1, r7, #0 - orr r1, r0 - mov r0, #0x53 - lsl r0, r0, #2 - str r1, [r4, r0] - add r1, r0, #4 - strh r2, [r4, r1] - add r1, r0, #6 - ldrb r2, [r4, r1] - mov r1, #1 - bic r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #2 - bic r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #4 - orr r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #8 - orr r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #0x20 - add r0, r0, #6 - bic r2, r1 - strb r2, [r4, r0] - ldr r0, [sp] - ldr r3, [r5] - add r1, r6, #0 - mov r2, #0x4b - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - mov r1, #0x55 - lsl r1, r1, #2 - add r1, r4, r1 - mov r2, #0xfa - bl CopyStringToU16Array - add r0, r7, #0 - bl String_dtor - mov r0, #0xd2 - lsl r0, r0, #2 - mov r1, #0 - ldr r3, _0222F1A4 ; =0x000001EA - strb r1, [r4, r0] - add r2, r0, #2 - strh r3, [r4, r2] - add r2, r0, #4 - strh r1, [r4, r2] - add r2, r0, #6 - strh r1, [r4, r2] - add r0, #8 - strb r1, [r4, r0] - add r0, sp, #8 - bl GF_RTC_CopyDate - add r0, sp, #8 - bl RTC_ConvertDateToDay - mov r1, #0xd5 - lsl r1, r1, #2 - str r0, [r4, r1] - ldr r0, [sp] - bl ScrStrBufs_delete - add r0, r6, #0 - bl DestroyMsgData - ldr r0, _0222F1A8 ; =0x00003174 - add r1, r4, #0 - ldr r0, [r5, r0] - mov r2, #0 - bl FUN_0202AC98 - mov r0, #1 - mov r1, #0 - bl GX_EngineBToggleLayers - ldr r0, [r5, #4] - add r1, r4, #0 - bl MOD83_022391EC - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + mov r0, #0xc6 + lsl r0, r0, #6 + add r4, r5, r0 + mov r2, #0xd6 + add r0, r4, #0 + mov r1, #0 + lsl r2, r2, #2 + bl MI_CpuFill8 + ldr r2, _0222F1A0 ; =0x00000172 + ldr r3, [r5] + mov r0, #1 + mov r1, #0x1a + bl NewMsgDataFromNarc + add r6, r0, #0 + ldr r0, [r5] + bl ScrStrBufs_new + mov r1, #0xc6 + mov r2, #7 + lsl r1, r1, #6 + strh r2, [r5, r1] + ldr r3, [r5] + add r1, r6, #0 + mov r2, #0x4c + str r0, [sp] + bl ReadMsgData_ExpandPlaceholders + mov r1, #0x41 + lsl r1, r1, #2 + add r7, r0, #0 + add r1, r4, r1 + mov r2, #0x24 + bl CopyStringToU16Array + add r0, r7, #0 + bl String_dtor + mov r0, #0xc + bl MOD83_02238EF4 + add r7, r0, #0 + mov r0, #0xa + bl MOD83_02238EF4 + str r0, [sp, #4] + mov r0, #0xb + bl MOD83_02238EF4 + ldr r1, [sp, #4] + mov r2, #1 + orr r0, r1 + add r1, r7, #0 + orr r1, r0 + mov r0, #0x53 + lsl r0, r0, #2 + str r1, [r4, r0] + add r1, r0, #4 + strh r2, [r4, r1] + add r1, r0, #6 + ldrb r2, [r4, r1] + mov r1, #1 + bic r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #2 + bic r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #4 + orr r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #8 + orr r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #0x20 + add r0, r0, #6 + bic r2, r1 + strb r2, [r4, r0] + ldr r0, [sp] + ldr r3, [r5] + add r1, r6, #0 + mov r2, #0x4b + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + mov r1, #0x55 + lsl r1, r1, #2 + add r1, r4, r1 + mov r2, #0xfa + bl CopyStringToU16Array + add r0, r7, #0 + bl String_dtor + mov r0, #0xd2 + lsl r0, r0, #2 + mov r1, #0 + ldr r3, _0222F1A4 ; =0x000001EA + strb r1, [r4, r0] + add r2, r0, #2 + strh r3, [r4, r2] + add r2, r0, #4 + strh r1, [r4, r2] + add r2, r0, #6 + strh r1, [r4, r2] + add r0, #8 + strb r1, [r4, r0] + add r0, sp, #8 + bl GF_RTC_CopyDate + add r0, sp, #8 + bl RTC_ConvertDateToDay + mov r1, #0xd5 + lsl r1, r1, #2 + str r0, [r4, r1] + ldr r0, [sp] + bl ScrStrBufs_delete + add r0, r6, #0 + bl DestroyMsgData + ldr r0, _0222F1A8 ; =0x00003174 + add r1, r4, #0 + ldr r0, [r5, r0] + mov r2, #0 + bl FUN_0202AC98 + mov r0, #1 + mov r1, #0 + bl GX_EngineBToggleLayers + ldr r0, [r5, #4] + add r1, r4, #0 + bl MOD83_022391EC + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop _0222F1A0: .word 0x00000172 _0222F1A4: .word 0x000001EA _0222F1A8: .word 0x00003174 - thumb_func_end MOD83_0222F074 + thumb_func_end MOD83_0222F074 - thumb_func_start MOD83_0222F1AC + thumb_func_start MOD83_0222F1AC MOD83_0222F1AC: ; 0x0222F1AC - mov r2, #0x16 - lsl r2, r2, #4 - str r1, [r0, r2] - bx lr - thumb_func_end MOD83_0222F1AC + mov r2, #0x16 + lsl r2, r2, #4 + str r1, [r0, r2] + bx lr + thumb_func_end MOD83_0222F1AC - thumb_func_start MOD83_0222F1B4 + thumb_func_start MOD83_0222F1B4 MOD83_0222F1B4: ; 0x0222F1B4 - push {r3, r4, r5, lr} - add r5, r1, #0 - mov r1, #0x16 - lsl r1, r1, #4 - add r4, r3, #0 - ldr r3, [r0, r1] - sub r3, r3, #1 - str r3, [r0, r1] - ldr r0, [r0, r1] - cmp r0, #0 - bne _0222F1D6 - bl MOD83_02234518 - mov r0, #0x17 - str r0, [r5] - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r1, #0 + mov r1, #0x16 + lsl r1, r1, #4 + add r4, r3, #0 + ldr r3, [r0, r1] + sub r3, r3, #1 + str r3, [r0, r1] + ldr r0, [r0, r1] + cmp r0, #0 + bne _0222F1D6 + bl MOD83_02234518 + mov r0, #0x17 + str r0, [r5] + mov r0, #0 + pop {r3, r4, r5, pc} _0222F1D6: - cmp r2, #0 - beq _0222F1EE - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F1EE - bl MOD83_02234518 - mov r0, #0x16 - str r0, [r5] - mov r0, #0 - pop {r3, r4, r5, pc} + cmp r2, #0 + beq _0222F1EE + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F1EE + bl MOD83_02234518 + mov r0, #0x16 + str r0, [r5] + mov r0, #0 + pop {r3, r4, r5, pc} _0222F1EE: - cmp r4, #0 - beq _0222F206 - ldr r0, _0222F20C ; =gMain - ldr r0, [r0, #0x48] - tst r0, r4 - beq _0222F206 - bl MOD83_02234518 - mov r0, #0x1a - str r0, [r5] - mov r0, #1 - pop {r3, r4, r5, pc} + cmp r4, #0 + beq _0222F206 + ldr r0, _0222F20C ; =gMain + ldr r0, [r0, #0x48] + tst r0, r4 + beq _0222F206 + bl MOD83_02234518 + mov r0, #0x1a + str r0, [r5] + mov r0, #1 + pop {r3, r4, r5, pc} _0222F206: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0222F20C: .word gMain - thumb_func_end MOD83_0222F1B4 + thumb_func_end MOD83_0222F1B4 - thumb_func_start MOD83_0222F210 + thumb_func_start MOD83_0222F210 MOD83_0222F210: ; 0x0222F210 - push {r3, r4, r5, lr} - mov r5, #0x57 - lsl r5, r5, #2 - add r4, r0, #0 - sub r0, r5, #4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F236 - bl MOD83_0223438C - mov r1, #3 - sub r0, r1, r0 - bl FUN_02033EEC - bl MOD83_02234238 - mov r0, #1 - bl MOD83_022345C8 + push {r3, r4, r5, lr} + mov r5, #0x57 + lsl r5, r5, #2 + add r4, r0, #0 + sub r0, r5, #4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F236 + bl MOD83_0223438C + mov r1, #3 + sub r0, r1, r0 + bl FUN_02033EEC + bl MOD83_02234238 + mov r0, #1 + bl MOD83_022345C8 _0222F236: - ldr r0, [r4, r5] - cmp r0, #0x1e - bls _0222F23E - b _0222F736 + ldr r0, [r4, r5] + cmp r0, #0x1e + bls _0222F23E + b _0222F736 _0222F23E: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222F24A: ; jump table - .short _0222F288 - _0222F24A - 2 ; case 0 - .short _0222F29E - _0222F24A - 2 ; case 1 - .short _0222F2C4 - _0222F24A - 2 ; case 2 - .short _0222F2E6 - _0222F24A - 2 ; case 3 - .short _0222F310 - _0222F24A - 2 ; case 4 - .short _0222F736 - _0222F24A - 2 ; case 5 - .short _0222F736 - _0222F24A - 2 ; case 6 - .short _0222F342 - _0222F24A - 2 ; case 7 - .short _0222F3B8 - _0222F24A - 2 ; case 8 - .short _0222F3D6 - _0222F24A - 2 ; case 9 - .short _0222F420 - _0222F24A - 2 ; case 10 - .short _0222F45C - _0222F24A - 2 ; case 11 - .short _0222F476 - _0222F24A - 2 ; case 12 - .short _0222F4AA - _0222F24A - 2 ; case 13 - .short _0222F4EC - _0222F24A - 2 ; case 14 - .short _0222F50C - _0222F24A - 2 ; case 15 - .short _0222F524 - _0222F24A - 2 ; case 16 - .short _0222F53E - _0222F24A - 2 ; case 17 - .short _0222F594 - _0222F24A - 2 ; case 18 - .short _0222F61C - _0222F24A - 2 ; case 19 - .short _0222F664 - _0222F24A - 2 ; case 20 - .short _0222F736 - _0222F24A - 2 ; case 21 - .short _0222F698 - _0222F24A - 2 ; case 22 - .short _0222F69C - _0222F24A - 2 ; case 23 - .short _0222F736 - _0222F24A - 2 ; case 24 - .short _0222F736 - _0222F24A - 2 ; case 25 - .short _0222F704 - _0222F24A - 2 ; case 26 - .short _0222F736 - _0222F24A - 2 ; case 27 - .short _0222F6D0 - _0222F24A - 2 ; case 28 - .short _0222F35E - _0222F24A - 2 ; case 29 - .short _0222F39C - _0222F24A - 2 ; case 30 + .short _0222F288 - _0222F24A - 2 ; case 0 + .short _0222F29E - _0222F24A - 2 ; case 1 + .short _0222F2C4 - _0222F24A - 2 ; case 2 + .short _0222F2E6 - _0222F24A - 2 ; case 3 + .short _0222F310 - _0222F24A - 2 ; case 4 + .short _0222F736 - _0222F24A - 2 ; case 5 + .short _0222F736 - _0222F24A - 2 ; case 6 + .short _0222F342 - _0222F24A - 2 ; case 7 + .short _0222F3B8 - _0222F24A - 2 ; case 8 + .short _0222F3D6 - _0222F24A - 2 ; case 9 + .short _0222F420 - _0222F24A - 2 ; case 10 + .short _0222F45C - _0222F24A - 2 ; case 11 + .short _0222F476 - _0222F24A - 2 ; case 12 + .short _0222F4AA - _0222F24A - 2 ; case 13 + .short _0222F4EC - _0222F24A - 2 ; case 14 + .short _0222F50C - _0222F24A - 2 ; case 15 + .short _0222F524 - _0222F24A - 2 ; case 16 + .short _0222F53E - _0222F24A - 2 ; case 17 + .short _0222F594 - _0222F24A - 2 ; case 18 + .short _0222F61C - _0222F24A - 2 ; case 19 + .short _0222F664 - _0222F24A - 2 ; case 20 + .short _0222F736 - _0222F24A - 2 ; case 21 + .short _0222F698 - _0222F24A - 2 ; case 22 + .short _0222F69C - _0222F24A - 2 ; case 23 + .short _0222F736 - _0222F24A - 2 ; case 24 + .short _0222F736 - _0222F24A - 2 ; case 25 + .short _0222F704 - _0222F24A - 2 ; case 26 + .short _0222F736 - _0222F24A - 2 ; case 27 + .short _0222F6D0 - _0222F24A - 2 ; case 28 + .short _0222F35E - _0222F24A - 2 ; case 29 + .short _0222F39C - _0222F24A - 2 ; case 30 _0222F288: - add r0, r4, #0 - bl MOD83_0222E910 - bl FUN_0202E49C - mov r0, #0x52 - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] - str r1, [r4, r5] - b _0222F736 + add r0, r4, #0 + bl MOD83_0222E910 + bl FUN_0202E49C + mov r0, #0x52 + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] + str r1, [r4, r5] + b _0222F736 _0222F29E: - bl FUN_0202E4C8 - cmp r0, #0 - beq _0222F356 - mov r1, #0x5b - lsl r1, r1, #2 - ldr r0, _0222F5E0 ; =MOD83_0223A8D4 - add r1, r4, r1 - bl MOD83_02233F94 - mov r0, #0x56 - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] - bl FUN_02033E74 - mov r0, #2 - str r0, [r4, r5] - b _0222F736 + bl FUN_0202E4C8 + cmp r0, #0 + beq _0222F356 + mov r1, #0x5b + lsl r1, r1, #2 + ldr r0, _0222F5E0 ; =MOD83_0223A8D4 + add r1, r4, r1 + bl MOD83_02233F94 + mov r0, #0x56 + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] + bl FUN_02033E74 + mov r0, #2 + str r0, [r4, r5] + b _0222F736 _0222F2C4: - bl MOD83_0223427C - mov r1, #0x19 - add r0, r4, #0 - lsl r1, r1, #6 - bl MOD83_0222F1AC - add r0, r4, #0 - add r0, #0x28 - mov r1, #0xa - bl FUN_0200D858 - ldr r1, _0222F5E4 ; =0x000034D8 - str r0, [r4, r1] - mov r0, #3 - str r0, [r4, r5] - b _0222F736 + bl MOD83_0223427C + mov r1, #0x19 + add r0, r4, #0 + lsl r1, r1, #6 + bl MOD83_0222F1AC + add r0, r4, #0 + add r0, #0x28 + mov r1, #0xa + bl FUN_0200D858 + ldr r1, _0222F5E4 ; =0x000034D8 + str r0, [r4, r1] + mov r0, #3 + str r0, [r4, r5] + b _0222F736 _0222F2E6: - bl MOD83_022343A4 - cmp r0, #0 - beq _0222F302 - sub r1, r0, #1 - mov r0, #0x59 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r1, _0222F5E8 ; =0x00000708 - add r0, r4, #0 - bl MOD83_0222F1AC - mov r0, #4 - str r0, [r4, r5] + bl MOD83_022343A4 + cmp r0, #0 + beq _0222F302 + sub r1, r0, #1 + mov r0, #0x59 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r1, _0222F5E8 ; =0x00000708 + add r0, r4, #0 + bl MOD83_0222F1AC + mov r0, #4 + str r0, [r4, r5] _0222F302: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F310: - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD83_022342C8 - cmp r0, #0 - beq _0222F334 - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD83_02234304 - mov r0, #7 - str r0, [r4, r5] - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD83_022342C8 + cmp r0, #0 + beq _0222F334 + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD83_02234304 + mov r0, #7 + str r0, [r4, r5] + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] _0222F334: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F342: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F358 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F358 _0222F356: - b _0222F736 + b _0222F736 _0222F358: - mov r0, #0x1d - str r0, [r4, r5] - b _0222F736 + mov r0, #0x1d + str r0, [r4, r5] + b _0222F736 _0222F35E: - mov r0, #0x1e - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5EC ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F5E4 ; =0x000034D8 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _0222F5E4 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - ldr r0, _0222F5F0 ; =0x000005DC - bl PlaySE - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x1e - str r0, [r4, r5] - b _0222F736 + mov r0, #0x1e + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5EC ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F5E4 ; =0x000034D8 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _0222F5E4 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + ldr r0, _0222F5F0 ; =0x000005DC + bl PlaySE + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x1e + str r0, [r4, r5] + b _0222F736 _0222F39C: - ldr r0, _0222F5F4 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F3AA - mov r0, #8 - str r0, [r4, r5] + ldr r0, _0222F5F4 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F3AA + mov r0, #8 + str r0, [r4, r5] _0222F3AA: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F3B8: - bl MOD83_022343C4 - mov r0, #9 - str r0, [r4, r5] - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + bl MOD83_022343C4 + mov r0, #9 + str r0, [r4, r5] + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F3D6: - bl MOD83_02234450 - cmp r0, #0 - beq _0222F412 - bl MOD83_022343F8 - mov r0, #0xa - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x22 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5F0 ; =0x000005DC - bl PlaySE - ldr r0, _0222F5E4 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - mov r0, #1 - pop {r3, r4, r5, pc} + bl MOD83_02234450 + cmp r0, #0 + beq _0222F412 + bl MOD83_022343F8 + mov r0, #0xa + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x22 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5F0 ; =0x000005DC + bl PlaySE + ldr r0, _0222F5E4 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + mov r0, #1 + pop {r3, r4, r5, pc} _0222F412: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F420: - bl MOD83_02234450 - cmp r0, #0 - beq _0222F44E - mov r0, #0x47 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5EC ; =0x00003170 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_020200A0 - add r0, r4, #0 - bl MOD83_0222EC78 - mov r0, #0xb - str r0, [r4, r5] + bl MOD83_02234450 + cmp r0, #0 + beq _0222F44E + mov r0, #0x47 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5EC ; =0x00003170 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_020200A0 + add r0, r4, #0 + bl MOD83_0222EC78 + mov r0, #0xb + str r0, [r4, r5] _0222F44E: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F45C: - ldr r0, _0222F5F8 ; =MOD83_0223AD6C - mov r1, #0x2a - mov r2, #1 - bl MOD83_02234424 - mov r0, #0xc - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + ldr r0, _0222F5F8 ; =MOD83_0223AD6C + mov r1, #0x2a + mov r2, #1 + bl MOD83_02234424 + mov r0, #0xc + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F476: - bl MOD83_0223447C - cmp r0, #0 - beq _0222F49C - mov r0, #0xd - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #0x3c - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x47 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 + bl MOD83_0223447C + cmp r0, #0 + beq _0222F49C + mov r0, #0xd + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #0x3c + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x47 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 _0222F49C: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F4AA: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F51C - mov r0, #0x48 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x28 - mov r1, #0xa - bl FUN_0200D858 - ldr r1, _0222F5E4 ; =0x000034D8 - str r0, [r4, r1] - add r0, r4, #0 - bl MOD83_0222F074 - ldr r0, [r4, #8] - bl MOD83_022394BC - mov r0, #0xe - str r0, [r4, r5] - b _0222F736 + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F51C + mov r0, #0x48 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x28 + mov r1, #0xa + bl FUN_0200D858 + ldr r1, _0222F5E4 ; =0x000034D8 + str r0, [r4, r1] + add r0, r4, #0 + bl MOD83_0222F074 + ldr r0, [r4, #8] + bl MOD83_022394BC + mov r0, #0xe + str r0, [r4, r5] + b _0222F736 _0222F4EC: - bl MOD83_022394CC - cmp r0, #1 - bne _0222F51C - mov r0, #0xf - str r0, [r4, r5] - bl OS_GetTickLo - mov r1, #0x36 - bl _s32_div_f - mov r0, #0x16 - add r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022394CC + cmp r0, #1 + bne _0222F51C + mov r0, #0xf + str r0, [r4, r5] + bl OS_GetTickLo + mov r1, #0x36 + bl _s32_div_f + mov r0, #0x16 + add r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F50C: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F51E + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F51E _0222F51C: - b _0222F736 + b _0222F736 _0222F51E: - mov r0, #0x10 - str r0, [r4, r5] - b _0222F736 + mov r0, #0x10 + str r0, [r4, r5] + b _0222F736 _0222F524: - ldr r0, _0222F5F8 ; =MOD83_0223AD6C - mov r1, #0x2a - mov r2, #2 - bl MOD83_02234424 - mov r0, #0x11 - str r0, [r4, r5] - mov r1, #0x4b - mov r0, #0x16 - lsl r1, r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + ldr r0, _0222F5F8 ; =MOD83_0223AD6C + mov r1, #0x2a + mov r2, #2 + bl MOD83_02234424 + mov r0, #0x11 + str r0, [r4, r5] + mov r1, #0x4b + mov r0, #0x16 + lsl r1, r1, #4 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F53E: - bl MOD83_022344A8 - cmp r0, #0 - beq _0222F55A - bl MOD83_02239544 - mov r0, #0x12 - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022344A8 + cmp r0, #0 + beq _0222F55A + bl MOD83_02239544 + mov r0, #0x12 + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #4 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F55A: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F57A - bl MOD83_02234518 - mov r0, #0x17 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F57A + bl MOD83_02234518 + mov r0, #0x17 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] _0222F57A: - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F62C - bl MOD83_02234518 - mov r0, #0x16 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F62C + bl MOD83_02234518 + mov r0, #0x16 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] + b _0222F736 _0222F594: - bl MOD83_02239574 - cmp r0, #3 - bne _0222F5AE - bl MOD83_02234518 - mov r0, #0x16 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] - b _0222F5FC + bl MOD83_02239574 + cmp r0, #3 + bne _0222F5AE + bl MOD83_02234518 + mov r0, #0x16 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] + b _0222F5FC _0222F5AE: - bl MOD83_02239574 - cmp r0, #2 - beq _0222F5BC - bl MOD83_022394CC - b _0222F5FC + bl MOD83_02239574 + cmp r0, #2 + beq _0222F5BC + bl MOD83_022394CC + b _0222F5FC _0222F5BC: - bl MOD83_0223447C - cmp r0, #0 - bne _0222F5CC - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F5FC + bl MOD83_0223447C + cmp r0, #0 + bne _0222F5CC + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F5FC _0222F5CC: - mov r0, #0x13 - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - bl MOD83_02234518 - b _0222F736 - nop + mov r0, #0x13 + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #1 + lsl r0, r0, #4 + str r1, [r4, r0] + bl MOD83_02234518 + b _0222F736 + nop _0222F5E0: .word MOD83_0223A8D4 _0222F5E4: .word 0x000034D8 _0222F5E8: .word 0x00000708 @@ -3995,2973 +3995,2973 @@ _0222F5F0: .word 0x000005DC _0222F5F4: .word gMain _0222F5F8: .word MOD83_0223AD6C _0222F5FC: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F61C - bl MOD83_02234518 - mov r0, #0x17 - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #0xa - lsl r0, r0, #4 - str r1, [r4, r0] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F61C + bl MOD83_02234518 + mov r0, #0x17 + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #0xa + lsl r0, r0, #4 + str r1, [r4, r0] _0222F61C: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F62E + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F62E _0222F62C: - b _0222F736 + b _0222F736 _0222F62E: - mov r0, #0x14 - str r0, [r4, r5] - mov r0, #0x49 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F73C ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _0222F744 ; =0x000005DC - bl PlaySE - ldr r0, _0222F740 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - b _0222F736 + mov r0, #0x14 + str r0, [r4, r5] + mov r0, #0x49 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F73C ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _0222F744 ; =0x000005DC + bl PlaySE + ldr r0, _0222F740 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + b _0222F736 _0222F664: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F686 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F686 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _0222F686: - ldr r0, _0222F748 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F736 - mov r0, #0x1b - str r0, [r4, r5] - mov r0, #4 - pop {r3, r4, r5, pc} + ldr r0, _0222F748 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F736 + mov r0, #0x1b + str r0, [r4, r5] + mov r0, #4 + pop {r3, r4, r5, pc} _0222F698: - mov r0, #0x17 - str r0, [r4, r5] + mov r0, #0x17 + str r0, [r4, r5] _0222F69C: - mov r0, #0x4a - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F73C ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F6C4 - bl FUN_0200DBFC + mov r0, #0x4a + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F73C ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F6C4 + bl FUN_0200DBFC _0222F6C4: - ldr r0, _0222F740 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - mov r0, #0x1c - str r0, [r4, r5] - b _0222F736 + ldr r0, _0222F740 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + mov r0, #0x1c + str r0, [r4, r5] + b _0222F736 _0222F6D0: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F6F2 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F6F2 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _0222F6F2: - ldr r0, _0222F748 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F736 - mov r0, #0 - bl OS_ResetSystem - b _0222F736 + ldr r0, _0222F748 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F736 + mov r0, #0 + bl OS_ResetSystem + b _0222F736 _0222F704: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F736 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F732 - bl FUN_0200DBFC + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F736 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F732 + bl FUN_0200DBFC _0222F732: - mov r0, #5 - pop {r3, r4, r5, pc} + mov r0, #5 + pop {r3, r4, r5, pc} _0222F736: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0222F73C: .word 0x00003170 _0222F740: .word 0x000034D8 _0222F744: .word 0x000005DC _0222F748: .word gMain - thumb_func_end MOD83_0222F210 + thumb_func_end MOD83_0222F210 - thumb_func_start MOD83_0222F74C + thumb_func_start MOD83_0222F74C MOD83_0222F74C: ; 0x0222F74C - push {r4, lr} - ldr r1, _0222F79C ; =MOD83_0223B884 - add r4, r0, #0 - ldr r1, [r1] - cmp r1, #0 - bne _0222F798 - bl MOD83_0222F9F8 - mov r1, #0xf5 - mov r0, #0xf - lsl r1, r1, #2 - bl AllocFromHeap - ldr r1, _0222F79C ; =MOD83_0223B884 - mov r2, #0xf5 - str r0, [r1] - mov r1, #0 - lsl r2, r2, #2 - bl MI_CpuFill8 - ldr r0, _0222F79C ; =MOD83_0223B884 - mov r1, #0x32 - ldr r0, [r0] - mov r2, #0xa - strh r1, [r0, #0x24] - ldr r0, _0222F7A0 ; =MOD83_0222F89C - mov r1, #0 - bl FUN_0200CA44 - ldr r1, _0222F79C ; =MOD83_0223B884 - ldr r2, [r1] - str r0, [r2, #0x1c] - ldr r0, [r1] - str r4, [r0] - ldr r0, [r1] - add r0, r0, #4 - bl FUN_020312BC + push {r4, lr} + ldr r1, _0222F79C ; =MOD83_0223B884 + add r4, r0, #0 + ldr r1, [r1] + cmp r1, #0 + bne _0222F798 + bl MOD83_0222F9F8 + mov r1, #0xf5 + mov r0, #0xf + lsl r1, r1, #2 + bl AllocFromHeap + ldr r1, _0222F79C ; =MOD83_0223B884 + mov r2, #0xf5 + str r0, [r1] + mov r1, #0 + lsl r2, r2, #2 + bl MI_CpuFill8 + ldr r0, _0222F79C ; =MOD83_0223B884 + mov r1, #0x32 + ldr r0, [r0] + mov r2, #0xa + strh r1, [r0, #0x24] + ldr r0, _0222F7A0 ; =MOD83_0222F89C + mov r1, #0 + bl FUN_0200CA44 + ldr r1, _0222F79C ; =MOD83_0223B884 + ldr r2, [r1] + str r0, [r2, #0x1c] + ldr r0, [r1] + str r4, [r0] + ldr r0, [r1] + add r0, r0, #4 + bl FUN_020312BC _0222F798: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222F79C: .word MOD83_0223B884 _0222F7A0: .word MOD83_0222F89C - thumb_func_end MOD83_0222F74C + thumb_func_end MOD83_0222F74C - thumb_func_start MOD83_0222F7A4 + thumb_func_start MOD83_0222F7A4 MOD83_0222F7A4: ; 0x0222F7A4 - ldr r2, _0222F7B0 ; =MOD83_0223B884 - ldr r3, [r2] - str r0, [r3, #0x20] - ldr r0, [r2] - strh r1, [r0, #0x24] - bx lr - .align 2, 0 + ldr r2, _0222F7B0 ; =MOD83_0223B884 + ldr r3, [r2] + str r0, [r3, #0x20] + ldr r0, [r2] + strh r1, [r0, #0x24] + bx lr + .align 2, 0 _0222F7B0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F7A4 + thumb_func_end MOD83_0222F7A4 - thumb_func_start MOD83_0222F7B4 + thumb_func_start MOD83_0222F7B4 MOD83_0222F7B4: ; 0x0222F7B4 - push {r4, lr} - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0 - beq _0222F7E2 - mov r4, #0 - ldr r1, _0222F7E4 ; =MOD83_0223B884 - ldr r0, _0222F7E8 ; =0x000003C1 - add r3, r4, #0 + push {r4, lr} + bl FUN_02031190 + bl FUN_02030E7C + cmp r0, #0 + beq _0222F7E2 + mov r4, #0 + ldr r1, _0222F7E4 ; =MOD83_0223B884 + ldr r0, _0222F7E8 ; =0x000003C1 + add r3, r4, #0 _0222F7CA: - ldr r2, [r1] - add r2, r2, r4 - add r4, r4, #1 - strb r3, [r2, r0] - cmp r4, #0x10 - blt _0222F7CA - bl FUN_0202DBE0 - ldr r0, _0222F7EC ; =MOD83_0222F7F0 - mov r1, #0 - bl MOD83_0222F7A4 + ldr r2, [r1] + add r2, r2, r4 + add r4, r4, #1 + strb r3, [r2, r0] + cmp r4, #0x10 + blt _0222F7CA + bl FUN_0202DBE0 + ldr r0, _0222F7EC ; =MOD83_0222F7F0 + mov r1, #0 + bl MOD83_0222F7A4 _0222F7E2: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _0222F7E4: .word MOD83_0223B884 _0222F7E8: .word 0x000003C1 _0222F7EC: .word MOD83_0222F7F0 - thumb_func_end MOD83_0222F7B4 + thumb_func_end MOD83_0222F7B4 - thumb_func_start MOD83_0222F7F0 + thumb_func_start MOD83_0222F7F0 MOD83_0222F7F0: ; 0x0222F7F0 - push {r4, r5, r6, lr} - mov r4, #0 - ldr r6, _0222F824 ; =MOD83_0223B884 - add r5, r4, #0 + push {r4, r5, r6, lr} + mov r4, #0 + ldr r6, _0222F824 ; =MOD83_0223B884 + add r5, r4, #0 _0222F7F8: - ldr r0, [r6] - add r0, r0, r5 - ldr r0, [r0, #0x28] - cmp r0, #0 - bne _0222F81A - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #1 - bne _0222F81A - add r0, r4, #0 - bl FUN_0202DFA4 - ldr r1, [r6] - add r1, r1, r5 - str r0, [r1, #0x28] + ldr r0, [r6] + add r0, r0, r5 + ldr r0, [r0, #0x28] + cmp r0, #0 + bne _0222F81A + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #1 + bne _0222F81A + add r0, r4, #0 + bl FUN_0202DFA4 + ldr r1, [r6] + add r1, r1, r5 + str r0, [r1, #0x28] _0222F81A: - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #0x10 - blt _0222F7F8 - pop {r4, r5, r6, pc} - .align 2, 0 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #0x10 + blt _0222F7F8 + pop {r4, r5, r6, pc} + .align 2, 0 _0222F824: .word MOD83_0223B884 - thumb_func_end MOD83_0222F7F0 + thumb_func_end MOD83_0222F7F0 - thumb_func_start MOD83_0222F828 + thumb_func_start MOD83_0222F828 MOD83_0222F828: ; 0x0222F828 - push {r3, lr} - bl FUN_0202E4C8 - cmp r0, #0 - beq _0222F83A - ldr r0, _0222F83C ; =MOD83_0222F840 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, lr} + bl FUN_0202E4C8 + cmp r0, #0 + beq _0222F83A + ldr r0, _0222F83C ; =MOD83_0222F840 + mov r1, #0 + bl MOD83_0222F7A4 _0222F83A: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0222F83C: .word MOD83_0222F840 - thumb_func_end MOD83_0222F828 + thumb_func_end MOD83_0222F828 - thumb_func_start MOD83_0222F840 + thumb_func_start MOD83_0222F840 MOD83_0222F840: ; 0x0222F840 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F840 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F840 - thumb_func_start MOD83_0222F844 + thumb_func_start MOD83_0222F844 MOD83_0222F844: ; 0x0222F844 - push {r3, lr} - ldr r0, _0222F85C ; =MOD83_0223B884 - ldr r0, [r0] - add r0, #0x27 - ldrb r0, [r0] - bl FUN_020319D8 - ldr r0, _0222F860 ; =MOD83_0222F864 - mov r1, #0 - bl MOD83_0222F7A4 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r0, _0222F85C ; =MOD83_0223B884 + ldr r0, [r0] + add r0, #0x27 + ldrb r0, [r0] + bl FUN_020319D8 + ldr r0, _0222F860 ; =MOD83_0222F864 + mov r1, #0 + bl MOD83_0222F7A4 + pop {r3, pc} + .align 2, 0 _0222F85C: .word MOD83_0223B884 _0222F860: .word MOD83_0222F864 - thumb_func_end MOD83_0222F844 + thumb_func_end MOD83_0222F844 - thumb_func_start MOD83_0222F864 + thumb_func_start MOD83_0222F864 MOD83_0222F864: ; 0x0222F864 - push {r3, lr} - bl FUN_02031A2C - cmp r0, #0 - beq _0222F88C - ldr r0, _0222F890 ; =MOD83_0223B884 - mov r2, #0 - ldr r1, [r0] - mov r0, #0xf - lsl r0, r0, #6 - strb r2, [r1, r0] - bl FUN_0202DBE0 - mov r0, #0xab - bl FUN_02031588 - ldr r0, _0222F894 ; =MOD83_0222F898 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, lr} + bl FUN_02031A2C + cmp r0, #0 + beq _0222F88C + ldr r0, _0222F890 ; =MOD83_0223B884 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xf + lsl r0, r0, #6 + strb r2, [r1, r0] + bl FUN_0202DBE0 + mov r0, #0xab + bl FUN_02031588 + ldr r0, _0222F894 ; =MOD83_0222F898 + mov r1, #0 + bl MOD83_0222F7A4 _0222F88C: - pop {r3, pc} - nop + pop {r3, pc} + nop _0222F890: .word MOD83_0223B884 _0222F894: .word MOD83_0222F898 - thumb_func_end MOD83_0222F864 + thumb_func_end MOD83_0222F864 - thumb_func_start MOD83_0222F898 + thumb_func_start MOD83_0222F898 MOD83_0222F898: ; 0x0222F898 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F898 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F898 - thumb_func_start MOD83_0222F89C + thumb_func_start MOD83_0222F89C MOD83_0222F89C: ; 0x0222F89C - push {r3, lr} - ldr r1, _0222F8C0 ; =MOD83_0223B884 - ldr r2, [r1] - cmp r2, #0 - bne _0222F8AC - bl FUN_0200CAB4 - pop {r3, pc} + push {r3, lr} + ldr r1, _0222F8C0 ; =MOD83_0223B884 + ldr r2, [r1] + cmp r2, #0 + bne _0222F8AC + bl FUN_0200CAB4 + pop {r3, pc} _0222F8AC: - ldr r1, [r2, #0x20] - cmp r1, #0 - beq _0222F8BC - add r2, #0x26 - ldrb r0, [r2] - cmp r0, #0 - bne _0222F8BC - blx r1 + ldr r1, [r2, #0x20] + cmp r1, #0 + beq _0222F8BC + add r2, #0x26 + ldrb r0, [r2] + cmp r0, #0 + bne _0222F8BC + blx r1 _0222F8BC: - pop {r3, pc} - nop + pop {r3, pc} + nop _0222F8C0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F89C + thumb_func_end MOD83_0222F89C - thumb_func_start MOD83_0222F8C4 + thumb_func_start MOD83_0222F8C4 MOD83_0222F8C4: ; 0x0222F8C4 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl FUN_02030F40 - cmp r0, #0 - bne _0222F8EA - add r0, r4, #0 - add r1, r6, #0 - bl FUN_02031C74 - add r0, r5, #0 - bl MOD83_0222F74C - ldr r0, _0222F8EC ; =MOD83_0222F7B4 - mov r1, #0 - bl MOD83_0222F7A4 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl FUN_02030F40 + cmp r0, #0 + bne _0222F8EA + add r0, r4, #0 + add r1, r6, #0 + bl FUN_02031C74 + add r0, r5, #0 + bl MOD83_0222F74C + ldr r0, _0222F8EC ; =MOD83_0222F7B4 + mov r1, #0 + bl MOD83_0222F7A4 _0222F8EA: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _0222F8EC: .word MOD83_0222F7B4 - thumb_func_end MOD83_0222F8C4 + thumb_func_end MOD83_0222F8C4 - thumb_func_start MOD83_0222F8F0 + thumb_func_start MOD83_0222F8F0 MOD83_0222F8F0: ; 0x0222F8F0 - add r3, r0, #0 - add r2, r1, #0 - add r1, r3, #0 - ldr r3, _0222F8FC ; =FUN_02030B3C - mov r0, #0x16 - bx r3 - .align 2, 0 + add r3, r0, #0 + add r2, r1, #0 + add r1, r3, #0 + ldr r3, _0222F8FC ; =FUN_02030B3C + mov r0, #0x16 + bx r3 + .align 2, 0 _0222F8FC: .word FUN_02030B3C - thumb_func_end MOD83_0222F8F0 + thumb_func_end MOD83_0222F8F0 - thumb_func_start MOD83_0222F900 + thumb_func_start MOD83_0222F900 MOD83_0222F900: ; 0x0222F900 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl FUN_02030F40 - cmp r0, #0 - bne _0222F92C - bl MOD83_02231364 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - add r1, r4, #0 - bl FUN_02031CA8 - add r0, r5, #0 - bl MOD83_0222F74C - ldr r0, _0222F930 ; =MOD83_0222F828 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl FUN_02030F40 + cmp r0, #0 + bne _0222F92C + bl MOD83_02231364 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + add r1, r4, #0 + bl FUN_02031CA8 + add r0, r5, #0 + bl MOD83_0222F74C + ldr r0, _0222F930 ; =MOD83_0222F828 + mov r1, #0 + bl MOD83_0222F7A4 _0222F92C: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0222F930: .word MOD83_0222F828 - thumb_func_end MOD83_0222F900 + thumb_func_end MOD83_0222F900 - thumb_func_start MOD83_0222F934 + thumb_func_start MOD83_0222F934 MOD83_0222F934: ; 0x0222F934 - ldr r1, _0222F944 ; =MOD83_0223B884 - ldr r3, _0222F948 ; =MOD83_0222F7A4 - ldr r1, [r1] - add r1, #0x27 - strb r0, [r1] - ldr r0, _0222F94C ; =MOD83_0222F844 - mov r1, #0 - bx r3 - .align 2, 0 + ldr r1, _0222F944 ; =MOD83_0223B884 + ldr r3, _0222F948 ; =MOD83_0222F7A4 + ldr r1, [r1] + add r1, #0x27 + strb r0, [r1] + ldr r0, _0222F94C ; =MOD83_0222F844 + mov r1, #0 + bx r3 + .align 2, 0 _0222F944: .word MOD83_0223B884 _0222F948: .word MOD83_0222F7A4 _0222F94C: .word MOD83_0222F844 - thumb_func_end MOD83_0222F934 + thumb_func_end MOD83_0222F934 - thumb_func_start MOD83_0222F950 + thumb_func_start MOD83_0222F950 MOD83_0222F950: ; 0x0222F950 - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r4, #0 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r4, #0 _0222F956: - add r0, r4, #0 - bl FUN_0202F124 - add r1, r0, #0 - beq _0222F976 - add r0, #0x4c - ldrh r0, [r0] - cmp r0, #0 - beq _0222F976 - add r5, #0x8c - add r0, r5, #0 - mov r2, #0x50 - bl memcpy - add r0, r4, #0 - pop {r3, r4, r5, pc} + add r0, r4, #0 + bl FUN_0202F124 + add r1, r0, #0 + beq _0222F976 + add r0, #0x4c + ldrh r0, [r0] + cmp r0, #0 + beq _0222F976 + add r5, #0x8c + add r0, r5, #0 + mov r2, #0x50 + bl memcpy + add r0, r4, #0 + pop {r3, r4, r5, pc} _0222F976: - add r4, r4, #1 - cmp r4, #0x10 - blt _0222F956 - mov r0, #0 - mvn r0, r0 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0222F950 - - thumb_func_start MOD83_0222F984 + add r4, r4, #1 + cmp r4, #0x10 + blt _0222F956 + mov r0, #0 + mvn r0, r0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0222F950 + + thumb_func_start MOD83_0222F984 MOD83_0222F984: ; 0x0222F984 - ldr r1, _0222F99C ; =MOD83_0223B884 - ldr r2, [r1] - add r1, r2, #0 - add r1, #0x27 - ldrb r1, [r1] - cmp r1, r0 - bne _0222F99A - mov r0, #0xf - mov r1, #1 - lsl r0, r0, #6 - strb r1, [r2, r0] + ldr r1, _0222F99C ; =MOD83_0223B884 + ldr r2, [r1] + add r1, r2, #0 + add r1, #0x27 + ldrb r1, [r1] + cmp r1, r0 + bne _0222F99A + mov r0, #0xf + mov r1, #1 + lsl r0, r0, #6 + strb r1, [r2, r0] _0222F99A: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _0222F99C: .word MOD83_0223B884 - thumb_func_end MOD83_0222F984 + thumb_func_end MOD83_0222F984 - thumb_func_start MOD83_0222F9A0 + thumb_func_start MOD83_0222F9A0 MOD83_0222F9A0: ; 0x0222F9A0 - ldr r0, _0222F9AC ; =MOD83_0223B884 - ldr r1, [r0] - mov r0, #0xf - lsl r0, r0, #6 - ldrb r0, [r1, r0] - bx lr - .align 2, 0 + ldr r0, _0222F9AC ; =MOD83_0223B884 + ldr r1, [r0] + mov r0, #0xf + lsl r0, r0, #6 + ldrb r0, [r1, r0] + bx lr + .align 2, 0 _0222F9AC: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9A0 + thumb_func_end MOD83_0222F9A0 - thumb_func_start MOD83_0222F9B0 + thumb_func_start MOD83_0222F9B0 MOD83_0222F9B0: ; 0x0222F9B0 - mov r0, #0xd6 - lsl r0, r0, #2 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F9B0 + mov r0, #0xd6 + lsl r0, r0, #2 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F9B0 - thumb_func_start MOD83_0222F9B8 + thumb_func_start MOD83_0222F9B8 MOD83_0222F9B8: ; 0x0222F9B8 - ldr r0, _0222F9C0 ; =MOD83_0223B884 - ldr r0, [r0] - add r0, #0x68 - bx lr - .align 2, 0 + ldr r0, _0222F9C0 ; =MOD83_0223B884 + ldr r0, [r0] + add r0, #0x68 + bx lr + .align 2, 0 _0222F9C0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9B8 + thumb_func_end MOD83_0222F9B8 - thumb_func_start MOD83_0222F9C4 + thumb_func_start MOD83_0222F9C4 MOD83_0222F9C4: ; 0x0222F9C4 - ldr r1, _0222F9D4 ; =MOD83_0223B884 - mov r2, #1 - ldr r1, [r1] - add r1, r1, r0 - ldr r0, _0222F9D8 ; =0x000003C1 - strb r2, [r1, r0] - bx lr - nop + ldr r1, _0222F9D4 ; =MOD83_0223B884 + mov r2, #1 + ldr r1, [r1] + add r1, r1, r0 + ldr r0, _0222F9D8 ; =0x000003C1 + strb r2, [r1, r0] + bx lr + nop _0222F9D4: .word MOD83_0223B884 _0222F9D8: .word 0x000003C1 - thumb_func_end MOD83_0222F9C4 + thumb_func_end MOD83_0222F9C4 - thumb_func_start MOD83_0222F9DC + thumb_func_start MOD83_0222F9DC MOD83_0222F9DC: ; 0x0222F9DC - push {r3, lr} - ldr r1, _0222F9F4 ; =MOD83_0223B884 - mov r0, #0xf - ldr r1, [r1] - bl FreeToHeapExplicit - ldr r0, _0222F9F4 ; =MOD83_0223B884 - mov r1, #0 - str r1, [r0] - bl FUN_02031A08 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r1, _0222F9F4 ; =MOD83_0223B884 + mov r0, #0xf + ldr r1, [r1] + bl FreeToHeapExplicit + ldr r0, _0222F9F4 ; =MOD83_0223B884 + mov r1, #0 + str r1, [r0] + bl FUN_02031A08 + pop {r3, pc} + .align 2, 0 _0222F9F4: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9DC + thumb_func_end MOD83_0222F9DC - thumb_func_start MOD83_0222F9F8 + thumb_func_start MOD83_0222F9F8 MOD83_0222F9F8: ; 0x0222F9F8 - ldr r3, _0222FA04 ; =FUN_0202D8D0 - add r2, r0, #0 - ldr r0, _0222FA08 ; =MOD83_0223A3F0 - mov r1, #2 - bx r3 - nop + ldr r3, _0222FA04 ; =FUN_0202D8D0 + add r2, r0, #0 + ldr r0, _0222FA08 ; =MOD83_0223A3F0 + mov r1, #2 + bx r3 + nop _0222FA04: .word FUN_0202D8D0 _0222FA08: .word MOD83_0223A3F0 - thumb_func_end MOD83_0222F9F8 + thumb_func_end MOD83_0222F9F8 - thumb_func_start MOD83_0222FA0C + thumb_func_start MOD83_0222FA0C MOD83_0222FA0C: ; 0x0222FA0C - push {r4, lr} - add r4, r0, #0 - cmp r1, #1 - ldr r0, _0222FA40 ; =0x00002994 - bne _0222FA2C - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222FA3C - add r0, r4, #0 - add r0, #0x18 - mov r1, #1 - bl FUN_0200D858 - ldr r1, _0222FA40 ; =0x00002994 - str r0, [r4, r1] - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + cmp r1, #1 + ldr r0, _0222FA40 ; =0x00002994 + bne _0222FA2C + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222FA3C + add r0, r4, #0 + add r0, #0x18 + mov r1, #1 + bl FUN_0200D858 + ldr r1, _0222FA40 ; =0x00002994 + str r0, [r4, r1] + pop {r4, pc} _0222FA2C: - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222FA36 - bl FUN_0200DBFC + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222FA36 + bl FUN_0200DBFC _0222FA36: - ldr r0, _0222FA40 ; =0x00002994 - mov r1, #0 - str r1, [r4, r0] + ldr r0, _0222FA40 ; =0x00002994 + mov r1, #0 + str r1, [r4, r0] _0222FA3C: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222FA40: .word 0x00002994 - thumb_func_end MOD83_0222FA0C + thumb_func_end MOD83_0222FA0C - thumb_func_start MOD83_0222FA44 + thumb_func_start MOD83_0222FA44 MOD83_0222FA44: ; 0x0222FA44 - ldr r3, _0222FA48 ; =MOD83_0222FA0C - bx r3 - .align 2, 0 + ldr r3, _0222FA48 ; =MOD83_0222FA0C + bx r3 + .align 2, 0 _0222FA48: .word MOD83_0222FA0C - thumb_func_end MOD83_0222FA44 + thumb_func_end MOD83_0222FA44 - thumb_func_start MOD83_0222FA4C + thumb_func_start MOD83_0222FA4C MOD83_0222FA4C: ; 0x0222FA4C - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - add r7, r0, #0 - bl MOD83_02238E48 - ldr r0, [r7, #0x7c] - cmp r0, #0 - beq _0222FA62 - bl ListMenuItems_dtor + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + add r7, r0, #0 + bl MOD83_02238E48 + ldr r0, [r7, #0x7c] + cmp r0, #0 + beq _0222FA62 + bl ListMenuItems_dtor _0222FA62: - ldr r0, [r7, #0x78] - cmp r0, #0 - beq _0222FA70 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, [r7, #0x78] + cmp r0, #0 + beq _0222FA70 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _0222FA70: - add r0, r7, #0 - add r0, #0x18 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - add r0, #0x18 - bl RemoveWindow - add r0, r7, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - beq _0222FA9C - add r0, r7, #0 - add r0, #0x58 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - add r0, #0x58 - bl RemoveWindow + add r0, r7, #0 + add r0, #0x18 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + add r0, #0x18 + bl RemoveWindow + add r0, r7, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + beq _0222FA9C + add r0, r7, #0 + add r0, #0x58 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + add r0, #0x58 + bl RemoveWindow _0222FA9C: - add r5, r7, #0 - mov r6, #0 - add r4, r7, #0 - add r5, #0x28 + add r5, r7, #0 + mov r6, #0 + add r4, r7, #0 + add r5, #0x28 _0222FAA4: - ldr r0, [r4, #0x28] - cmp r0, #0 - beq _0222FAB6 - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _0222FAB6 + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _0222FAB6: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #3 - blt _0222FAA4 - ldr r0, [r7] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #4 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #5 - bl FreeBgTilemapBuffer - ldr r0, [r7] - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222FA4C - - thumb_func_start MOD83_0222FAE8 + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #3 + blt _0222FAA4 + ldr r0, [r7] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #4 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #5 + bl FreeBgTilemapBuffer + ldr r0, [r7] + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222FA4C + + thumb_func_start MOD83_0222FAE8 MOD83_0222FAE8: ; 0x0222FAE8 - push {r3, lr} - sub sp, #8 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #8 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xa - mov r2, #7 - mov r3, #9 - bl MOD83_02238BC4 - add sp, #8 - pop {r3, pc} - thumb_func_end MOD83_0222FAE8 - - thumb_func_start MOD83_0222FB0C + push {r3, lr} + sub sp, #8 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #8 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xa + mov r2, #7 + mov r3, #9 + bl MOD83_02238BC4 + add sp, #8 + pop {r3, pc} + thumb_func_end MOD83_0222FAE8 + + thumb_func_start MOD83_0222FB0C MOD83_0222FB0C: ; 0x0222FB0C - push {r3, r4, lr} - sub sp, #4 - add r4, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r1, r0 - beq _0222FB32 - str r1, [sp] - ldr r1, _0222FB40 ; =0x000005C4 - mov r0, #0 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #0x64 - bl MOD83_02238DBC - ldr r1, _0222FB40 ; =0x000005C4 - add sp, #4 - str r0, [r4, r1] - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #4 + add r4, r0, #0 + mov r0, #0 + mvn r0, r0 + cmp r1, r0 + beq _0222FB32 + str r1, [sp] + ldr r1, _0222FB40 ; =0x000005C4 + mov r0, #0 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #0x64 + bl MOD83_02238DBC + ldr r1, _0222FB40 ; =0x000005C4 + add sp, #4 + str r0, [r4, r1] + pop {r3, r4, pc} _0222FB32: - ldr r0, _0222FB40 ; =0x000005C4 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - add sp, #4 - pop {r3, r4, pc} - .align 2, 0 + ldr r0, _0222FB40 ; =0x000005C4 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 _0222FB40: .word 0x000005C4 - thumb_func_end MOD83_0222FB0C + thumb_func_end MOD83_0222FB0C - thumb_func_start MOD83_0222FB44 + thumb_func_start MOD83_0222FB44 MOD83_0222FB44: ; 0x0222FB44 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _0222FB5A - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200CCF8 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _0222FB5A + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200CCF8 _0222FB5A: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_0222FB44 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_0222FB44 - thumb_func_start MOD83_0222FB5C + thumb_func_start MOD83_0222FB5C MOD83_0222FB5C: ; 0x0222FB5C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FBB0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - beq _0222FB7A - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FBB0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + beq _0222FB7A + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C _0222FB7A: - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FBB0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - beq _0222FBAA - add r0, r4, #0 - mov r1, #0xf - bl MOD83_0222F900 - ldr r1, _0222FBB4 ; =0x00001C20 - ldr r0, _0222FBB8 ; =0x00000434 - str r1, [r4, r0] - bl FUN_02033E74 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r0, #7 - pop {r3, r4, r5, pc} + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FBB0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + beq _0222FBAA + add r0, r4, #0 + mov r1, #0xf + bl MOD83_0222F900 + ldr r1, _0222FBB4 ; =0x00001C20 + ldr r0, _0222FBB8 ; =0x00000434 + str r1, [r4, r0] + bl FUN_02033E74 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r0, #7 + pop {r3, r4, r5, pc} _0222FBAA: - mov r0, #0x13 - pop {r3, r4, r5, pc} - nop + mov r0, #0x13 + pop {r3, r4, r5, pc} + nop _0222FBB0: .word 0x000015D4 _0222FBB4: .word 0x00001C20 _0222FBB8: .word 0x00000434 - thumb_func_end MOD83_0222FB5C + thumb_func_end MOD83_0222FB5C - thumb_func_start MOD83_0222FBBC + thumb_func_start MOD83_0222FBBC MOD83_0222FBBC: ; 0x0222FBBC - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x80 - ldr r1, [r0] - cmp r1, #1 - bne _0222FBD2 - mov r0, #0x30 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x80 + ldr r1, [r0] + cmp r1, #1 + bne _0222FBD2 + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBD2: - sub r0, r1, #2 - cmp r0, #2 - bhi _0222FBDC - mov r0, #0x30 - pop {r3, r4, r5, pc} + sub r0, r1, #2 + cmp r0, #2 + bhi _0222FBDC + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBDC: - cmp r1, #5 - bne _0222FBE4 - mov r0, #0x30 - pop {r3, r4, r5, pc} + cmp r1, #5 + bne _0222FBE4 + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBE4: - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FBF4 - ldr r0, _0222FC3C ; =0x00000438 - ldr r0, [r4, r0] - bl MOD83_0222F934 + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FBF4 + ldr r0, _0222FC3C ; =0x00000438 + ldr r0, [r4, r0] + bl MOD83_0222F934 _0222FBF4: - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #6 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FC22 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #6 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FC22 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C _0222FC22: - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FC34 - mov r0, #0xab - bl FUN_02031588 - mov r0, #9 - pop {r3, r4, r5, pc} + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FC34 + mov r0, #0xab + bl FUN_02031588 + mov r0, #9 + pop {r3, r4, r5, pc} _0222FC34: - mov r0, #0x15 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0x15 + pop {r3, r4, r5, pc} + .align 2, 0 _0222FC38: .word 0x000015D4 _0222FC3C: .word 0x00000438 - thumb_func_end MOD83_0222FBBC + thumb_func_end MOD83_0222FBBC - thumb_func_start MOD83_0222FC40 + thumb_func_start MOD83_0222FC40 MOD83_0222FC40: ; 0x0222FC40 - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FCA4 ; =0x000015D4 - add r5, r4, #0 - add r6, r4, #0 - ldr r0, [r4, r0] - add r5, #0xdc - add r6, #0x8c - cmp r0, #1 - beq _0222FC5E - cmp r0, #3 - beq _0222FC84 - b _0222FC9E + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FCA4 ; =0x000015D4 + add r5, r4, #0 + add r6, r4, #0 + ldr r0, [r4, r0] + add r5, #0xdc + add r6, #0x8c + cmp r0, #1 + beq _0222FC5E + cmp r0, #3 + beq _0222FC84 + b _0222FC9E _0222FC5E: - mov r0, #0 - add r1, r0, #0 - add r2, r0, #0 - bl MOD83_0222F9B8 - mov r2, #0xd6 - add r1, r0, #0 - add r0, r5, #0 - lsl r2, r2, #2 - bl memcpy - add r0, r4, #0 - add r4, #0xdc - add r0, #0x8c - add r1, r4, #0 - mov r2, #0x56 - bl MOD83_02239374 - b _0222FC9E + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + bl MOD83_0222F9B8 + mov r2, #0xd6 + add r1, r0, #0 + add r0, r5, #0 + lsl r2, r2, #2 + bl memcpy + add r0, r4, #0 + add r4, #0xdc + add r0, #0x8c + add r1, r4, #0 + mov r2, #0x56 + bl MOD83_02239374 + b _0222FC9E _0222FC84: - ldr r7, _0222FCA8 ; =0x000005D4 - mov r2, #0xd6 - add r1, r4, r7 - add r0, r5, #0 - add r1, #0x50 - lsl r2, r2, #2 - bl memcpy - add r0, r6, #0 - add r1, r4, r7 - mov r2, #0x50 - bl memcpy + ldr r7, _0222FCA8 ; =0x000005D4 + mov r2, #0xd6 + add r1, r4, r7 + add r0, r5, #0 + add r1, #0x50 + lsl r2, r2, #2 + bl memcpy + add r0, r6, #0 + add r1, r4, r7 + mov r2, #0x50 + bl memcpy _0222FC9E: - add r0, r5, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r5, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _0222FCA4: .word 0x000015D4 _0222FCA8: .word 0x000005D4 - thumb_func_end MOD83_0222FC40 + thumb_func_end MOD83_0222FC40 - thumb_func_start MOD83_0222FCAC + thumb_func_start MOD83_0222FCAC MOD83_0222FCAC: ; 0x0222FCAC - push {r4, lr} - add r4, r0, #0 - ldr r0, _0222FCD8 ; =0x00002990 - ldr r1, [r4, r0] - cmp r1, #1 - bne _0222FCBE - mov r1, #0 - sub r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _0222FCD8 ; =0x00002990 + ldr r1, [r4, r0] + cmp r1, #1 + bne _0222FCBE + mov r1, #0 + sub r0, r0, #4 + str r1, [r4, r0] _0222FCBE: - bl MOD83_022394CC - sub r0, r0, #2 - cmp r0, #1 - bhi _0222FCD4 - ldr r0, _0222FCDC ; =0x0000061B - bl PlaySE - ldr r0, _0222FCE0 ; =0x0000298C - mov r1, #0 - str r1, [r4, r0] + bl MOD83_022394CC + sub r0, r0, #2 + cmp r0, #1 + bhi _0222FCD4 + ldr r0, _0222FCDC ; =0x0000061B + bl PlaySE + ldr r0, _0222FCE0 ; =0x0000298C + mov r1, #0 + str r1, [r4, r0] _0222FCD4: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222FCD8: .word 0x00002990 _0222FCDC: .word 0x0000061B _0222FCE0: .word 0x0000298C - thumb_func_end MOD83_0222FCAC + thumb_func_end MOD83_0222FCAC - thumb_func_start MOD83_0222FCE4 + thumb_func_start MOD83_0222FCE4 MOD83_0222FCE4: ; 0x0222FCE4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r7, r0, #0 - bl OverlayManager_GetData - add r6, r0, #0 - add r4, r6, #0 - add r5, r6, #0 - add r0, r7, #0 - add r4, #0x8c - add r5, #0xdc - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [sp] - add r0, r4, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - bne _0222FD12 - mov r7, #0 - b _0222FD3E + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r7, r0, #0 + bl OverlayManager_GetData + add r6, r0, #0 + add r4, r6, #0 + add r5, r6, #0 + add r0, r7, #0 + add r4, #0x8c + add r5, #0xdc + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [sp] + add r0, r4, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + bne _0222FD12 + mov r7, #0 + b _0222FD3E _0222FD12: - mov r1, #0x35 - add r2, r4, #0 - mov r0, #0 - lsl r1, r1, #4 - strb r0, [r5, r1] - add r2, #0x4e - ldrb r2, [r2] - mov r7, #1 - lsl r2, r2, #0x1b - lsr r2, r2, #0x1f - bne _0222FD2C - sub r1, #8 - strb r0, [r5, r1] + mov r1, #0x35 + add r2, r4, #0 + mov r0, #0 + lsl r1, r1, #4 + strb r0, [r5, r1] + add r2, #0x4e + ldrb r2, [r2] + mov r7, #1 + lsl r2, r2, #0x1b + lsr r2, r2, #0x1f + bne _0222FD2C + sub r1, #8 + strb r0, [r5, r1] _0222FD2C: - add r0, sp, #8 - bl GF_RTC_CopyDate - add r0, sp, #8 - bl RTC_ConvertDateToDay - mov r1, #0xd5 - lsl r1, r1, #2 - str r0, [r5, r1] + add r0, sp, #8 + bl GF_RTC_CopyDate + add r0, sp, #8 + bl RTC_ConvertDateToDay + mov r1, #0xd5 + lsl r1, r1, #2 + str r0, [r5, r1] _0222FD3E: - ldr r0, [sp] - bl FUN_0202251C - add r4, #0x4c - ldrh r1, [r4] - str r0, [sp, #4] - bl FUN_0202AF24 - cmp r7, #0 - bne _0222FD5E - ldr r0, [sp, #4] - add r1, r5, #0 - mov r2, #0 - bl FUN_0202AC98 - b _0222FD66 + ldr r0, [sp] + bl FUN_0202251C + add r4, #0x4c + ldrh r1, [r4] + str r0, [sp, #4] + bl FUN_0202AF24 + cmp r7, #0 + bne _0222FD5E + ldr r0, [sp, #4] + add r1, r5, #0 + mov r2, #0 + bl FUN_0202AC98 + b _0222FD66 _0222FD5E: - ldr r0, [sp, #4] - add r1, r5, #0 - bl FUN_0202AD08 + ldr r0, [sp, #4] + add r1, r5, #0 + bl FUN_0202AD08 _0222FD66: - ldr r0, [sp] - bl MOD83_022394BC - ldr r0, _0222FD7C ; =0x00002990 - mov r1, #0 - str r1, [r6, r0] - ldr r1, _0222FD80 ; =MOD83_0222FCAC - sub r0, r0, #4 - str r1, [r6, r0] - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp] + bl MOD83_022394BC + ldr r0, _0222FD7C ; =0x00002990 + mov r1, #0 + str r1, [r6, r0] + ldr r1, _0222FD80 ; =MOD83_0222FCAC + sub r0, r0, #4 + str r1, [r6, r0] + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222FD7C: .word 0x00002990 _0222FD80: .word MOD83_0222FCAC - thumb_func_end MOD83_0222FCE4 + thumb_func_end MOD83_0222FCE4 - thumb_func_start MOD83_0222FD84 + thumb_func_start MOD83_0222FD84 MOD83_0222FD84: ; 0x0222FD84 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - add r4, r1, #0 - bl OverlayManager_GetData - cmp r4, #0 - bne _0222FD98 - mov r5, #4 - b _0222FD9C + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + add r4, r1, #0 + bl OverlayManager_GetData + cmp r4, #0 + bne _0222FD98 + mov r5, #4 + b _0222FD9C _0222FD98: - mov r5, #0 - mvn r5, r5 + mov r5, #0 + mvn r5, r5 _0222FD9C: - ldr r1, [r0, #0x48] - add r4, r0, #0 - add r4, #0x48 - cmp r1, #0 - bne _0222FDC6 - mov r1, #0xa - str r1, [sp] - mov r1, #6 - str r1, [sp, #4] - mov r1, #4 - str r1, [sp, #8] - mov r2, #0 - mov r1, #0x6b - str r2, [sp, #0xc] - lsl r1, r1, #2 - str r1, [sp, #0x10] - ldr r0, [r0] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + ldr r1, [r0, #0x48] + add r4, r0, #0 + add r4, #0x48 + cmp r1, #0 + bne _0222FDC6 + mov r1, #0xa + str r1, [sp] + mov r1, #6 + str r1, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + mov r2, #0 + mov r1, #0x6b + str r2, [sp, #0xc] + lsl r1, r1, #2 + str r1, [sp, #0x10] + ldr r0, [r0] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FDC6: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - ldr r1, _0222FDE4 ; =MOD83_0223ADD8 - add r0, r6, #0 - mov r2, #2 - add r3, r4, #0 - str r5, [sp] - bl MOD83_022303B0 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + ldr r1, _0222FDE4 ; =MOD83_0223ADD8 + add r0, r6, #0 + mov r2, #2 + add r3, r4, #0 + str r5, [sp] + bl MOD83_022303B0 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FDE4: .word MOD83_0223ADD8 - thumb_func_end MOD83_0222FD84 + thumb_func_end MOD83_0222FD84 - thumb_func_start MOD83_0222FDE8 + thumb_func_start MOD83_0222FDE8 MOD83_0222FDE8: ; 0x0222FDE8 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FE20 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FE14 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FE20 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FE14 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C _0222FE14: - bl FUN_02033ED0 - add r0, r5, #0 - bl MOD83_02230118 - pop {r3, r4, r5, pc} - .align 2, 0 + bl FUN_02033ED0 + add r0, r5, #0 + bl MOD83_02230118 + pop {r3, r4, r5, pc} + .align 2, 0 _0222FE20: .word 0x000015D4 - thumb_func_end MOD83_0222FDE8 + thumb_func_end MOD83_0222FDE8 - thumb_func_start MOD83_0222FE24 + thumb_func_start MOD83_0222FE24 MOD83_0222FE24: ; 0x0222FE24 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r5, r0, #0 - bl MOD83_02238700 - cmp r0, #0 - beq _0222FE3C - mov r1, #2 - b _0222FE3E + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r5, r0, #0 + bl MOD83_02238700 + cmp r0, #0 + beq _0222FE3C + mov r1, #2 + b _0222FE3E _0222FE3C: - mov r1, #1 + mov r1, #1 _0222FE3E: - ldr r0, _0222FE98 ; =0x000015D4 - str r1, [r5, r0] - add r0, r5, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r4, r5, #0 - ldr r0, [r5, #0x48] - add r4, #0x48 - cmp r0, #0 - bne _0222FE76 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r5] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + ldr r0, _0222FE98 ; =0x000015D4 + str r1, [r5, r0] + add r0, r5, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r4, r5, #0 + ldr r0, [r5, #0x48] + add r4, #0x48 + cmp r0, #0 + bne _0222FE76 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r5] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FE76: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r2, #2 - ldr r1, _0222FE9C ; =MOD83_0223ADC8 - add r0, r6, #0 - add r3, r4, #0 - str r2, [sp] - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - nop + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r2, #2 + ldr r1, _0222FE9C ; =MOD83_0223ADC8 + add r0, r6, #0 + add r3, r4, #0 + str r2, [sp] + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + nop _0222FE98: .word 0x000015D4 _0222FE9C: .word MOD83_0223ADC8 - thumb_func_end MOD83_0222FE24 + thumb_func_end MOD83_0222FE24 - thumb_func_start MOD83_0222FEA0 + thumb_func_start MOD83_0222FEA0 MOD83_0222FEA0: ; 0x0222FEA0 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FF08 ; =0x000015D4 - mov r1, #4 - str r1, [r4, r0] - add r0, r4, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r5, r4, #0 - ldr r0, [r4, #0x48] - add r5, #0x48 - cmp r0, #0 - bne _0222FEE6 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, r5, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FF08 ; =0x000015D4 + mov r1, #4 + str r1, [r4, r0] + add r0, r4, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r5, r4, #0 + ldr r0, [r4, #0x48] + add r5, #0x48 + cmp r0, #0 + bne _0222FEE6 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, r5, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FEE6: - add r0, r5, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #0x4e - str r0, [sp] - ldr r1, _0222FF0C ; =MOD83_0223AD98 - add r0, r6, #0 - mov r2, #2 - add r3, r5, #0 - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r5, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #0x4e + str r0, [sp] + ldr r1, _0222FF0C ; =MOD83_0223AD98 + add r0, r6, #0 + mov r2, #2 + add r3, r5, #0 + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FF08: .word 0x000015D4 _0222FF0C: .word MOD83_0223AD98 - thumb_func_end MOD83_0222FEA0 + thumb_func_end MOD83_0222FEA0 - thumb_func_start MOD83_0222FF10 + thumb_func_start MOD83_0222FF10 MOD83_0222FF10: ; 0x0222FF10 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FF78 ; =0x000015D4 - mov r1, #3 - str r1, [r4, r0] - add r0, r4, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r5, r4, #0 - ldr r0, [r4, #0x48] - add r5, #0x48 - cmp r0, #0 - bne _0222FF56 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, r5, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FF78 ; =0x000015D4 + mov r1, #3 + str r1, [r4, r0] + add r0, r4, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r5, r4, #0 + ldr r0, [r4, #0x48] + add r5, #0x48 + cmp r0, #0 + bne _0222FF56 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, r5, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FF56: - add r0, r5, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #0x4d - str r0, [sp] - ldr r1, _0222FF7C ; =MOD83_0223ADA8 - add r0, r6, #0 - mov r2, #2 - add r3, r5, #0 - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r5, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #0x4d + str r0, [sp] + ldr r1, _0222FF7C ; =MOD83_0223ADA8 + add r0, r6, #0 + mov r2, #2 + add r3, r5, #0 + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FF78: .word 0x000015D4 _0222FF7C: .word MOD83_0223ADA8 - thumb_func_end MOD83_0222FF10 + thumb_func_end MOD83_0222FF10 - thumb_func_start MOD83_0222FF80 + thumb_func_start MOD83_0222FF80 MOD83_0222FF80: ; 0x0222FF80 - push {r4, r5, lr} - sub sp, #0x14 - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r1, [r0, #0x48] - add r4, #0x48 - cmp r1, #0 - bne _0222FFB4 - mov r1, #0xa - str r1, [sp] - mov r1, #6 - str r1, [sp, #4] - mov r1, #4 - str r1, [sp, #8] - mov r2, #0 - mov r1, #0x6b - str r2, [sp, #0xc] - lsl r1, r1, #2 - str r1, [sp, #0x10] - ldr r0, [r0] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r1, [r0, #0x48] + add r4, #0x48 + cmp r1, #0 + bne _0222FFB4 + mov r1, #0xa + str r1, [sp] + mov r1, #6 + str r1, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + mov r2, #0 + mov r1, #0x6b + str r2, [sp, #0xc] + lsl r1, r1, #2 + str r1, [sp, #0x10] + ldr r0, [r0] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FFB4: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #4 - str r0, [sp] - ldr r1, _0222FFD4 ; =MOD83_0223ADB8 - add r0, r5, #0 - mov r2, #2 - add r3, r4, #0 - bl MOD83_022303B0 - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #4 + str r0, [sp] + ldr r1, _0222FFD4 ; =MOD83_0223ADB8 + add r0, r5, #0 + mov r2, #2 + add r3, r4, #0 + bl MOD83_022303B0 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 _0222FFD4: .word MOD83_0223ADB8 - thumb_func_end MOD83_0222FF80 + thumb_func_end MOD83_0222FF80 - thumb_func_start MOD83_0222FFD8 + thumb_func_start MOD83_0222FFD8 MOD83_0222FFD8: ; 0x0222FFD8 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - bl FUN_02033ED0 - ldr r0, _0223000C ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _02230004 - bl MOD83_0222F9DC + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + bl FUN_02033ED0 + ldr r0, _0223000C ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _02230004 + bl MOD83_0222F9DC _02230004: - add r0, r5, #0 - bl MOD83_02230118 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r5, #0 + bl MOD83_02230118 + pop {r3, r4, r5, pc} + .align 2, 0 _0223000C: .word 0x000015D4 - thumb_func_end MOD83_0222FFD8 + thumb_func_end MOD83_0222FFD8 - thumb_func_start MOD83_02230010 + thumb_func_start MOD83_02230010 MOD83_02230010: ; 0x02230010 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - ldr r0, _02230044 ; =MOD83_0223B888 - mov r1, #0x24 - str r1, [r0, #0x10] - mov r0, #0x20 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + ldr r0, _02230044 ; =MOD83_0223B888 + mov r1, #0x24 + str r1, [r0, #0x10] + mov r0, #0x20 + pop {r3, r4, r5, pc} + nop _02230044: .word MOD83_0223B888 - thumb_func_end MOD83_02230010 + thumb_func_end MOD83_02230010 - thumb_func_start MOD83_02230048 + thumb_func_start MOD83_02230048 MOD83_02230048: ; 0x02230048 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x80 - ldr r0, [r0] - sub r0, r0, #2 - cmp r0, #2 - bhi _02230060 - mov r0, #0x30 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x80 + ldr r0, [r0] + sub r0, r0, #2 + cmp r0, #2 + bhi _02230060 + mov r0, #0x30 + pop {r3, r4, r5, pc} _02230060: - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r4, #0x18 - add r0, r5, #0 - add r1, r4, #0 - mov r2, #7 - bl MOD83_0223050C - mov r0, #0x21 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_02230048 - - thumb_func_start MOD83_02230084 + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r4, #0x18 + add r0, r5, #0 + add r1, r4, #0 + mov r2, #7 + bl MOD83_0223050C + mov r0, #0x21 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_02230048 + + thumb_func_start MOD83_02230084 MOD83_02230084: ; 0x02230084 - push {r3, lr} - ldr r0, _022300A8 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x27 - beq _02230096 - cmp r0, #0x28 - beq _02230096 - cmp r0, #0x2f - bne _022300A4 + push {r3, lr} + ldr r0, _022300A8 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x27 + beq _02230096 + cmp r0, #0x28 + beq _02230096 + cmp r0, #0x2f + bne _022300A4 _02230096: - bl MOD83_02239A14 - cmp r0, #0 - beq _022300A4 - ldr r0, _022300A8 ; =MOD83_0223B888 - mov r1, #0x2a - str r1, [r0, #0x10] + bl MOD83_02239A14 + cmp r0, #0 + beq _022300A4 + ldr r0, _022300A8 ; =MOD83_0223B888 + mov r1, #0x2a + str r1, [r0, #0x10] _022300A4: - mov r0, #0x23 - pop {r3, pc} - .align 2, 0 + mov r0, #0x23 + pop {r3, pc} + .align 2, 0 _022300A8: .word MOD83_0223B888 - thumb_func_end MOD83_02230084 + thumb_func_end MOD83_02230084 - thumb_func_start MOD83_022300AC + thumb_func_start MOD83_022300AC MOD83_022300AC: ; 0x022300AC - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r1, #1 - ldr r0, _022300F0 ; =0x000015DC - lsl r1, r1, #0xc - str r1, [r4, r0] - ldr r0, _022300F4 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - mov r0, #0x1b - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r1, #1 + ldr r0, _022300F0 ; =0x000015DC + lsl r1, r1, #0xc + str r1, [r4, r0] + ldr r0, _022300F4 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + mov r0, #0x1b + pop {r3, r4, r5, pc} + nop _022300F0: .word 0x000015DC _022300F4: .word 0x00002620 - thumb_func_end MOD83_022300AC + thumb_func_end MOD83_022300AC - thumb_func_start MOD83_022300F8 + thumb_func_start MOD83_022300F8 MOD83_022300F8: ; 0x022300F8 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022300F8 - - thumb_func_start MOD83_02230118 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022300F8 + + thumb_func_start MOD83_02230118 MOD83_02230118: ; 0x02230118 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r5, r0, #0 - ldr r0, [r5, #4] - bl FUN_0202251C - ldr r0, _02230194 ; =0x000005C8 - ldr r1, [r5, r0] - cmp r1, #0x1e - bne _0223013E - mov r1, #1 - add r0, r0, #4 - str r1, [r5, r0] - add r0, r5, #0 - bl MOD83_022313E4 + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r5, r0, #0 + ldr r0, [r5, #4] + bl FUN_0202251C + ldr r0, _02230194 ; =0x000005C8 + ldr r1, [r5, r0] + cmp r1, #0x1e + bne _0223013E + mov r1, #1 + add r0, r0, #4 + str r1, [r5, r0] + add r0, r5, #0 + bl MOD83_022313E4 _0223013E: - add r0, r5, #0 - add r0, #0x28 - mov r1, #0 - bl MOD83_0222FB44 - add r4, r5, #0 - ldr r0, [r5, #0x38] - add r4, #0x38 - cmp r0, #0 - bne _02230172 - mov r0, #9 - str r0, [sp] - mov r0, #0x10 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x49 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r5] - add r1, r4, #0 - mov r3, #0xf - bl AddWindowParameterized + add r0, r5, #0 + add r0, #0x28 + mov r1, #0 + bl MOD83_0222FB44 + add r4, r5, #0 + ldr r0, [r5, #0x38] + add r4, #0x38 + cmp r0, #0 + bne _02230172 + mov r0, #9 + str r0, [sp] + mov r0, #0x10 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x49 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r5] + add r1, r4, #0 + mov r3, #0xf + bl AddWindowParameterized _02230172: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #1 - str r0, [sp] - ldr r1, _02230198 ; =MOD83_0223AE20 - add r0, r6, #0 - mov r2, #4 - add r3, r4, #0 - bl MOD83_022303B0 - mov r0, #4 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #1 + str r0, [sp] + ldr r1, _02230198 ; =MOD83_0223AE20 + add r0, r6, #0 + mov r2, #4 + add r3, r4, #0 + bl MOD83_022303B0 + mov r0, #4 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _02230194: .word 0x000005C8 _02230198: .word MOD83_0223AE20 - thumb_func_end MOD83_02230118 + thumb_func_end MOD83_02230118 - thumb_func_start MOD83_0223019C + thumb_func_start MOD83_0223019C MOD83_0223019C: ; 0x0223019C - push {r4, lr} - bl OverlayManager_GetData - ldr r1, _022301CC ; =0x000005C8 - add r4, r0, #0 - ldr r2, [r4, r1] - cmp r2, #0x1e - bne _022301B6 - mov r2, #1 - add r1, r1, #4 - str r2, [r4, r1] - bl MOD83_022313E4 + push {r4, lr} + bl OverlayManager_GetData + ldr r1, _022301CC ; =0x000005C8 + add r4, r0, #0 + ldr r2, [r4, r1] + cmp r2, #0x1e + bne _022301B6 + mov r2, #1 + add r1, r1, #4 + str r2, [r4, r1] + bl MOD83_022313E4 _022301B6: - ldr r2, _022301D0 ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x35 - mov r3, #2 - bl MOD83_0223886C - mov r0, #0 - mvn r0, r0 - pop {r4, pc} - nop + ldr r2, _022301D0 ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x35 + mov r3, #2 + bl MOD83_0223886C + mov r0, #0 + mvn r0, r0 + pop {r4, pc} + nop _022301CC: .word 0x000005C8 _022301D0: .word 0x000015D8 - thumb_func_end MOD83_0223019C + thumb_func_end MOD83_0223019C - thumb_func_start MOD83_022301D4 + thumb_func_start MOD83_022301D4 MOD83_022301D4: ; 0x022301D4 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _02230204 ; =0x000005C8 - ldr r1, [r4, r0] - cmp r1, #0x1e - bne _022301EA - mov r1, #1 - add r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _02230204 ; =0x000005C8 + ldr r1, [r4, r0] + cmp r1, #0x1e + bne _022301EA + mov r1, #1 + add r0, r0, #4 + str r1, [r4, r0] _022301EA: - mov r0, #1 - bl MOD83_02238860 - ldr r2, _02230208 ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x34 - mov r3, #2 - bl MOD83_0223886C - mov r0, #0 - mvn r0, r0 - pop {r4, pc} - .align 2, 0 + mov r0, #1 + bl MOD83_02238860 + ldr r2, _02230208 ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x34 + mov r3, #2 + bl MOD83_0223886C + mov r0, #0 + mvn r0, r0 + pop {r4, pc} + .align 2, 0 _02230204: .word 0x000005C8 _02230208: .word 0x000015D8 - thumb_func_end MOD83_022301D4 + thumb_func_end MOD83_022301D4 - thumb_func_start MOD83_0223020C + thumb_func_start MOD83_0223020C MOD83_0223020C: ; 0x0223020C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - add r5, r3, #0 - ldr r3, _02230254 ; =MOD83_0223A418 - add r7, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - add r2, sp, #0 - ldmia r3!, {r0, r1} - mov ip, r2 - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldr r0, [r3] - lsr r1, r6, #0xb - str r0, [r2] - add r0, sp, #0 - strb r1, [r0, #0x12] - lsr r1, r5, #0xe - strb r1, [r0, #0x13] - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - mov r2, ip - mov r3, #0 - bl InitBgFromTemplate - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - bl BgClearTilemapBufferAndCommit - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + add r5, r3, #0 + ldr r3, _02230254 ; =MOD83_0223A418 + add r7, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + add r2, sp, #0 + ldmia r3!, {r0, r1} + mov ip, r2 + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r3] + lsr r1, r6, #0xb + str r0, [r2] + add r0, sp, #0 + strb r1, [r0, #0x12] + lsr r1, r5, #0xe + strb r1, [r0, #0x13] + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + mov r2, ip + mov r3, #0 + bl InitBgFromTemplate + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + bl BgClearTilemapBufferAndCommit + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02230254: .word MOD83_0223A418 - thumb_func_end MOD83_0223020C + thumb_func_end MOD83_0223020C - thumb_func_start MOD83_02230258 + thumb_func_start MOD83_02230258 MOD83_02230258: ; 0x02230258 - push {r3, r4, r5, lr} - sub sp, #0x10 - ldr r5, _022302B0 ; =MOD83_0223A408 - add r3, sp, #0 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - mov r1, #0 - mov r2, #0xf - add r0, r4, #0 - lsl r2, r2, #0xc - add r3, r1, #0 - bl MOD83_0223020C - mov r1, #1 - mov r2, #0x3e - add r0, r4, #0 - lsl r2, r2, #0xa - lsl r3, r1, #0xf - bl MOD83_0223020C - mov r2, #0xe - add r0, r4, #0 - mov r1, #4 - lsl r2, r2, #0xa - mov r3, #0 - bl MOD83_0223020C - mov r2, #0x1e - mov r3, #1 - add r0, r4, #0 - mov r1, #5 - lsl r2, r2, #0xa - lsl r3, r3, #0xe - bl MOD83_0223020C - add sp, #0x10 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + sub sp, #0x10 + ldr r5, _022302B0 ; =MOD83_0223A408 + add r3, sp, #0 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + mov r1, #0 + mov r2, #0xf + add r0, r4, #0 + lsl r2, r2, #0xc + add r3, r1, #0 + bl MOD83_0223020C + mov r1, #1 + mov r2, #0x3e + add r0, r4, #0 + lsl r2, r2, #0xa + lsl r3, r1, #0xf + bl MOD83_0223020C + mov r2, #0xe + add r0, r4, #0 + mov r1, #4 + lsl r2, r2, #0xa + mov r3, #0 + bl MOD83_0223020C + mov r2, #0x1e + mov r3, #1 + add r0, r4, #0 + mov r1, #5 + lsl r2, r2, #0xa + lsl r3, r3, #0xe + bl MOD83_0223020C + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 _022302B0: .word MOD83_0223A408 - thumb_func_end MOD83_02230258 + thumb_func_end MOD83_02230258 - thumb_func_start MOD83_022302B4 + thumb_func_start MOD83_022302B4 MOD83_022302B4: ; 0x022302B4 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - mov r2, #4 - str r0, [sp] - mov r0, #0x56 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - add r2, r4, #0 - mov r3, #5 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #2 - add r2, r4, #0 - mov r3, #5 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #5 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #5 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022302B4 - - thumb_func_start MOD83_02230330 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + mov r2, #4 + str r0, [sp] + mov r0, #0x56 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + add r2, r4, #0 + mov r3, #5 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #2 + add r2, r4, #0 + mov r3, #5 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #5 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #5 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022302B4 + + thumb_func_start MOD83_02230330 MOD83_02230330: ; 0x02230330 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0x8c - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - add r2, r4, #0 - add r3, r1, #0 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #2 - add r2, r4, #0 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #1 - bl BgCommitTilemapBufferToVram - add r0, r4, #0 - bl MOD83_022302B4 - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02230330 - - thumb_func_start MOD83_022303B0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0x8c + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + add r2, r4, #0 + add r3, r1, #0 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #2 + add r2, r4, #0 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #1 + bl BgCommitTilemapBufferToVram + add r0, r4, #0 + bl MOD83_022302B4 + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02230330 + + thumb_func_start MOD83_022303B0 MOD83_022303B0: ; 0x022303B0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x28 - str r0, [sp] - add r5, r1, #0 - add r7, r2, #0 - str r3, [sp, #4] - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, [r4, #0x7c] - cmp r0, #0 - beq _022303CC - bl ListMenuItems_dtor + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x28 + str r0, [sp] + add r5, r1, #0 + add r7, r2, #0 + str r3, [sp, #4] + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, [r4, #0x7c] + cmp r0, #0 + beq _022303CC + bl ListMenuItems_dtor _022303CC: - add r0, r7, #0 - mov r1, #0x56 - bl ListMenuItems_ctor - str r0, [r4, #0x7c] - ldr r2, _0223045C ; =0x00000172 - mov r0, #0 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - mov r6, #0 - str r0, [r4, #0x10] - cmp r7, #0 - ble _022303FE + add r0, r7, #0 + mov r1, #0x56 + bl ListMenuItems_ctor + str r0, [r4, #0x7c] + ldr r2, _0223045C ; =0x00000172 + mov r0, #0 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + mov r6, #0 + str r0, [r4, #0x10] + cmp r7, #0 + ble _022303FE _022303EA: - ldr r0, [r4, #0x7c] - ldr r1, [r4, #0x10] - ldr r2, [r5] - ldr r3, [r5, #4] - bl ListMenuItems_AppendFromMsgData - add r6, r6, #1 - add r5, #8 - cmp r6, r7 - blt _022303EA + ldr r0, [r4, #0x7c] + ldr r1, [r4, #0x10] + ldr r2, [r5] + ldr r3, [r5, #4] + bl ListMenuItems_AppendFromMsgData + add r6, r6, #1 + add r5, #8 + cmp r6, r7 + blt _022303EA _022303FE: - ldr r0, [r4, #0x10] - bl DestroyMsgData - ldr r3, _02230460 ; =MOD83_0223AE00 - add r2, sp, #8 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldr r0, [r4, #0x7c] - str r0, [sp, #8] - add r0, sp, #8 - strh r7, [r0, #0x12] - ldrh r1, [r0, #0x12] - strh r1, [r0, #0x10] - ldr r0, [sp, #4] - str r0, [sp, #0x14] - ldr r0, [r4, #0x78] - cmp r0, #0 - beq _02230436 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, [r4, #0x10] + bl DestroyMsgData + ldr r3, _02230460 ; =MOD83_0223AE00 + add r2, sp, #8 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r4, #0x7c] + str r0, [sp, #8] + add r0, sp, #8 + strh r7, [r0, #0x12] + ldrh r1, [r0, #0x12] + strh r1, [r0, #0x10] + ldr r0, [sp, #4] + str r0, [sp, #0x14] + ldr r0, [r4, #0x78] + cmp r0, #0 + beq _02230436 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _02230436: - mov r1, #0 - add r0, sp, #8 - add r2, r1, #0 - mov r3, #0x56 - bl ListMenuInit - str r0, [r4, #0x78] - mov r0, #0 - ldr r2, [sp, #0x40] - mvn r0, r0 - cmp r2, r0 - beq _02230458 - add r4, #0x18 - ldr r0, [sp] - add r1, r4, #0 - bl MOD83_0223050C + mov r1, #0 + add r0, sp, #8 + add r2, r1, #0 + mov r3, #0x56 + bl ListMenuInit + str r0, [r4, #0x78] + mov r0, #0 + ldr r2, [sp, #0x40] + mvn r0, r0 + cmp r2, r0 + beq _02230458 + add r4, #0x18 + ldr r0, [sp] + add r1, r4, #0 + bl MOD83_0223050C _02230458: - add sp, #0x28 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add sp, #0x28 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0223045C: .word 0x00000172 _02230460: .word MOD83_0223AE00 - thumb_func_end MOD83_022303B0 + thumb_func_end MOD83_022303B0 - thumb_func_start MOD83_02230464 + thumb_func_start MOD83_02230464 MOD83_02230464: ; 0x02230464 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x40 - str r0, [sp, #0x14] - str r1, [sp, #0x1c] - str r2, [sp, #0x18] - bl OverlayManager_GetData - add r7, r0, #0 - ldr r0, [r7, #4] - mov r5, #0 - bl FUN_0202251C - ldr r1, _02230508 ; =MOD83_0223AD98 - add r4, r7, #0 - ldr r2, [r1, #0x50] - ldr r1, [r1, #0x54] - add r4, #0x28 - add r5, r5, #1 - str r2, [sp, #0x20] - str r1, [sp, #0x24] - bl FUN_0202AE70 - cmp r0, #0 - beq _022304A8 - lsl r6, r5, #3 - add r0, sp, #0x20 - add r1, r0, r6 - ldr r0, _02230508 ; =MOD83_0223AD98 - add r5, r5, #1 - ldr r3, [r0, #0x58] - ldr r2, [r0, #0x5c] - add r0, sp, #0x20 - str r3, [r0, r6] - str r2, [r1, #4] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x40 + str r0, [sp, #0x14] + str r1, [sp, #0x1c] + str r2, [sp, #0x18] + bl OverlayManager_GetData + add r7, r0, #0 + ldr r0, [r7, #4] + mov r5, #0 + bl FUN_0202251C + ldr r1, _02230508 ; =MOD83_0223AD98 + add r4, r7, #0 + ldr r2, [r1, #0x50] + ldr r1, [r1, #0x54] + add r4, #0x28 + add r5, r5, #1 + str r2, [sp, #0x20] + str r1, [sp, #0x24] + bl FUN_0202AE70 + cmp r0, #0 + beq _022304A8 + lsl r6, r5, #3 + add r0, sp, #0x20 + add r1, r0, r6 + ldr r0, _02230508 ; =MOD83_0223AD98 + add r5, r5, #1 + ldr r3, [r0, #0x58] + ldr r2, [r0, #0x5c] + add r0, sp, #0x20 + str r3, [r0, r6] + str r2, [r1, #4] _022304A8: - lsl r6, r5, #3 - add r0, sp, #0x20 - add r1, r0, r6 - ldr r0, _02230508 ; =MOD83_0223AD98 - ldr r3, [r0, #0x60] - ldr r2, [r0, #0x64] - add r0, sp, #0x20 - str r3, [r0, r6] - str r2, [r1, #4] - ldr r0, [r4] - cmp r0, #0 - bne _022304E6 - mov r0, #7 - str r0, [sp] - mov r0, #0x10 - str r0, [sp, #4] - add r0, r5, #1 - lsl r0, r0, #0x19 - lsr r0, r0, #0x18 - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - mov r2, #0 - lsl r0, r0, #0x10 - str r2, [sp, #0xc] - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, [r7] - add r1, r4, #0 - mov r3, #8 - bl AddWindowParameterized + lsl r6, r5, #3 + add r0, sp, #0x20 + add r1, r0, r6 + ldr r0, _02230508 ; =MOD83_0223AD98 + ldr r3, [r0, #0x60] + ldr r2, [r0, #0x64] + add r0, sp, #0x20 + str r3, [r0, r6] + str r2, [r1, #4] + ldr r0, [r4] + cmp r0, #0 + bne _022304E6 + mov r0, #7 + str r0, [sp] + mov r0, #0x10 + str r0, [sp, #4] + add r0, r5, #1 + lsl r0, r0, #0x19 + lsr r0, r0, #0x18 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + mov r2, #0 + lsl r0, r0, #0x10 + str r2, [sp, #0xc] + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, [r7] + add r1, r4, #0 + mov r3, #8 + bl AddWindowParameterized _022304E6: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - ldr r0, [sp, #0x18] - add r1, sp, #0x20 - str r0, [sp] - ldr r0, [sp, #0x14] - add r2, r5, #1 - add r3, r4, #0 - bl MOD83_022303B0 - add sp, #0x40 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + ldr r0, [sp, #0x18] + add r1, sp, #0x20 + str r0, [sp] + ldr r0, [sp, #0x14] + add r2, r5, #1 + add r3, r4, #0 + bl MOD83_022303B0 + add sp, #0x40 + pop {r3, r4, r5, r6, r7, pc} + nop _02230508: .word MOD83_0223AD98 - thumb_func_end MOD83_02230464 + thumb_func_end MOD83_02230464 - thumb_func_start MOD83_0223050C + thumb_func_start MOD83_0223050C MOD83_0223050C: ; 0x0223050C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r1, #0 - add r7, r2, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r2, _0223059C ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - str r0, [r4, #0x10] - mov r0, #0x56 - bl ScrStrBufs_new - str r0, [r4, #0xc] - mov r0, #1 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - ldr r6, [r4, #0x14] - cmp r6, #0 - bne _02230554 - ldr r0, [r4, #0xc] - ldr r1, [r4, #0x10] - add r2, r7, #0 - mov r3, #0x56 - bl ReadMsgData_ExpandPlaceholders - add r6, r0, #0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r1, #0 + add r7, r2, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r2, _0223059C ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + str r0, [r4, #0x10] + mov r0, #0x56 + bl ScrStrBufs_new + str r0, [r4, #0xc] + mov r0, #1 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + ldr r6, [r4, #0x14] + cmp r6, #0 + bne _02230554 + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x10] + add r2, r7, #0 + mov r3, #0x56 + bl ReadMsgData_ExpandPlaceholders + add r6, r0, #0 _02230554: - mov r3, #0 - str r3, [sp] - ldr r0, [r4, #0x68] - mov r1, #1 - str r0, [sp, #4] - ldr r0, _022305A0 ; =0x0001020F - add r2, r6, #0 - str r0, [sp, #8] - str r3, [sp, #0xc] - add r0, r5, #0 - bl AddTextPrinterParameterized2 - str r0, [r4, #0x6c] - ldr r0, [r4, #0x14] - cmp r0, #0 - bne _0223057A - add r0, r6, #0 - bl String_dtor + mov r3, #0 + str r3, [sp] + ldr r0, [r4, #0x68] + mov r1, #1 + str r0, [sp, #4] + ldr r0, _022305A0 ; =0x0001020F + add r2, r6, #0 + str r0, [sp, #8] + str r3, [sp, #0xc] + add r0, r5, #0 + bl AddTextPrinterParameterized2 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _0223057A + add r0, r6, #0 + bl String_dtor _0223057A: - add r0, r5, #0 - mov r1, #0 - mov r2, #1 - mov r3, #2 - bl FUN_0200D0BC - ldr r0, [r4, #0x10] - bl DestroyMsgData - ldr r0, [r4, #0xc] - bl ScrStrBufs_delete - mov r0, #0xff - str r0, [r4, #0x68] - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r5, #0 + mov r1, #0 + mov r2, #1 + mov r3, #2 + bl FUN_0200D0BC + ldr r0, [r4, #0x10] + bl DestroyMsgData + ldr r0, [r4, #0xc] + bl ScrStrBufs_delete + mov r0, #0xff + str r0, [r4, #0x68] + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _0223059C: .word 0x00000172 _022305A0: .word 0x0001020F - thumb_func_end MOD83_0223050C + thumb_func_end MOD83_0223050C - thumb_func_start MOD83_022305A4 + thumb_func_start MOD83_022305A4 MOD83_022305A4: ; 0x022305A4 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - mov r0, #0x25 - mov r1, #0x56 - bl String_ctor - add r1, r6, #0 - mov r2, #0x24 - add r4, r0, #0 - bl CopyU16ArrayToStringN - mov r0, #0 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - mov r1, #0 - str r1, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02230600 ; =0x0001020F - add r2, r4, #0 - str r0, [sp, #8] - add r0, r5, #0 - add r3, r1, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - mov r1, #0 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - add r0, r4, #0 - bl String_dtor - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + mov r0, #0x25 + mov r1, #0x56 + bl String_ctor + add r1, r6, #0 + mov r2, #0x24 + add r4, r0, #0 + bl CopyU16ArrayToStringN + mov r0, #0 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02230600 ; =0x0001020F + add r2, r4, #0 + str r0, [sp, #8] + add r0, r5, #0 + add r3, r1, #0 + str r1, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + mov r1, #0 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + add r0, r4, #0 + bl String_dtor + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02230600: .word 0x0001020F - thumb_func_end MOD83_022305A4 + thumb_func_end MOD83_022305A4 - thumb_func_start MOD83_02230604 + thumb_func_start MOD83_02230604 MOD83_02230604: ; 0x02230604 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - ldr r0, [r0, #0x78] - bl ListMenu_ProcessInput - add r4, r0, #0 - mov r0, #1 - mvn r0, r0 - cmp r4, r0 - beq _02230628 - add r0, r0, #1 - cmp r4, r0 - beq _0223065E - b _02230642 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + ldr r0, [r0, #0x78] + bl ListMenu_ProcessInput + add r4, r0, #0 + mov r0, #1 + mvn r0, r0 + cmp r4, r0 + beq _02230628 + add r0, r0, #1 + cmp r4, r0 + beq _0223065E + b _02230642 _02230628: - ldr r0, _02230660 ; =0x000005DC - bl PlaySE - cmp r6, #0 - beq _0223065E - add r0, r7, #0 - blx r6 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223065E - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02230660 ; =0x000005DC + bl PlaySE + cmp r6, #0 + beq _0223065E + add r0, r7, #0 + blx r6 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223065E + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _02230642: - ldr r0, _02230660 ; =0x000005DC - bl PlaySE - cmp r4, #0 - beq _0223065E - ldr r0, _02230664 ; =MOD83_0223B888 - str r4, [r0, #0xc] - add r0, r7, #0 - blx r4 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223065E - str r0, [r5] + ldr r0, _02230660 ; =0x000005DC + bl PlaySE + cmp r4, #0 + beq _0223065E + ldr r0, _02230664 ; =MOD83_0223B888 + str r4, [r0, #0xc] + add r0, r7, #0 + blx r4 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223065E + str r0, [r5] _0223065E: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02230660: .word 0x000005DC _02230664: .word MOD83_0223B888 - thumb_func_end MOD83_02230604 + thumb_func_end MOD83_02230604 - thumb_func_start MOD83_02230668 + thumb_func_start MOD83_02230668 MOD83_02230668: ; 0x02230668 - push {r4, r5, lr} - sub sp, #0x14 - add r5, r0, #0 - add r4, r1, #0 - bl FUN_0201BD5C - mov r0, #0 - add r1, r0, #0 - mov r2, #0x56 - bl FUN_02002ED0 - mov r0, #0 - mov r1, #0x20 - mov r2, #0x56 - bl FUN_02002ED0 - ldr r0, [r4, #8] - bl Options_GetFrame - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #1 - mov r3, #2 - bl FUN_0200CD68 - mov r0, #1 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CB00 - mov r0, #5 - ldr r1, _02230710 ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - add r0, r4, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #0 - bne _022306EC - mov r0, #0x13 - str r0, [sp] - mov r0, #0x1b - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - add r1, r4, #0 - str r2, [sp, #0xc] - mov r0, #0x28 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x18 - mov r3, #2 - bl AddWindowParameterized + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + add r4, r1, #0 + bl FUN_0201BD5C + mov r0, #0 + add r1, r0, #0 + mov r2, #0x56 + bl FUN_02002ED0 + mov r0, #0 + mov r1, #0x20 + mov r2, #0x56 + bl FUN_02002ED0 + ldr r0, [r4, #8] + bl Options_GetFrame + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #1 + mov r3, #2 + bl FUN_0200CD68 + mov r0, #1 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CB00 + mov r0, #5 + ldr r1, _02230710 ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + add r0, r4, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #0 + bne _022306EC + mov r0, #0x13 + str r0, [sp] + mov r0, #0x1b + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + add r1, r4, #0 + str r2, [sp, #0xc] + mov r0, #0x28 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x18 + mov r3, #2 + bl AddWindowParameterized _022306EC: - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #0 - bl MOD83_0223050C - add r0, r5, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - ldr r0, [r4] - bl MOD83_02230330 - mov r0, #1 - add sp, #0x14 - pop {r4, r5, pc} - nop + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #0 + bl MOD83_0223050C + add r0, r5, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + ldr r0, [r4] + bl MOD83_02230330 + mov r0, #1 + add sp, #0x14 + pop {r4, r5, pc} + nop _02230710: .word 0x00007D8C - thumb_func_end MOD83_02230668 + thumb_func_end MOD83_02230668 - thumb_func_start MOD83_02230714 + thumb_func_start MOD83_02230714 MOD83_02230714: ; 0x02230714 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r1, _022307A4 ; =0x000015DC - add r0, r6, #0 - add r1, r4, r1 - bl MOD83_02239F34 - cmp r0, #4 - bhi _022307A2 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r1, _022307A4 ; =0x000015DC + add r0, r6, #0 + add r1, r4, r1 + bl MOD83_02239F34 + cmp r0, #4 + bhi _022307A2 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223073A: ; jump table - .short _022307A2 - _0223073A - 2 ; case 0 - .short _02230744 - _0223073A - 2 ; case 1 - .short _02230768 - _0223073A - 2 ; case 2 - .short _02230768 - _0223073A - 2 ; case 3 - .short _02230776 - _0223073A - 2 ; case 4 + .short _022307A2 - _0223073A - 2 ; case 0 + .short _02230744 - _0223073A - 2 ; case 1 + .short _02230768 - _0223073A - 2 ; case 2 + .short _02230768 - _0223073A - 2 ; case 3 + .short _02230776 - _0223073A - 2 ; case 4 _02230744: - ldr r1, _022307A8 ; =0x000015FC - add r0, r4, #0 - mov r2, #0xea - add r0, #0x8c - add r1, r4, r1 - lsl r2, r2, #2 - bl memcpy - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x1b - add r4, #0x84 - str r0, [r4] - mov r0, #0x13 - str r0, [r5] - pop {r4, r5, r6, pc} + ldr r1, _022307A8 ; =0x000015FC + add r0, r4, #0 + mov r2, #0xea + add r0, #0x8c + add r1, r4, r1 + lsl r2, r2, #2 + bl memcpy + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x1b + add r4, #0x84 + str r0, [r4] + mov r0, #0x13 + str r0, [r5] + pop {r4, r5, r6, pc} _02230768: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x11 - str r0, [r5] - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x11 + str r0, [r5] + pop {r4, r5, r6, pc} _02230776: - ldr r0, _022307AC ; =0x00002624 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _022307AC ; =0x00002624 - add r0, r4, r0 - bl RemoveWindow - ldr r0, [r4] - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r0, _022307B0 ; =0x000005DC - bl PlaySE - add r0, r6, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - str r0, [r5] + ldr r0, _022307AC ; =0x00002624 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _022307AC ; =0x00002624 + add r0, r4, r0 + bl RemoveWindow + ldr r0, [r4] + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r0, _022307B0 ; =0x000005DC + bl PlaySE + add r0, r6, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + str r0, [r5] _022307A2: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _022307A4: .word 0x000015DC _022307A8: .word 0x000015FC _022307AC: .word 0x00002624 _022307B0: .word 0x000005DC - thumb_func_end MOD83_02230714 + thumb_func_end MOD83_02230714 - thumb_func_start MOD83_022307B4 + thumb_func_start MOD83_022307B4 MOD83_022307B4: ; 0x022307B4 - push {r3, r4, r5, r6, lr} - sub sp, #0x5c - add r5, r0, #0 - ldr r0, _0223083C ; =0x00002610 - ldr r4, [r5, r0] - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - bne _022307C8 - mov r4, #0xb + push {r3, r4, r5, r6, lr} + sub sp, #0x5c + add r5, r0, #0 + ldr r0, _0223083C ; =0x00002610 + ldr r4, [r5, r0] + mov r0, #0 + mvn r0, r0 + cmp r4, r0 + bne _022307C8 + mov r4, #0xb _022307C8: - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, [r5] - mov r1, #0 - bl BgClearTilemapBufferAndCommit - mov r0, #0x56 - bl ScrStrBufs_new - mov r1, #2 - str r1, [sp] - mov r1, #1 - str r1, [sp, #4] - ldr r2, _02230840 ; =0x00002614 - mov r1, #0 - ldr r2, [r5, r2] - mov r3, #5 - add r6, r0, #0 - bl BufferIntegerAsString - mov r0, #0x1f - ldr r1, _02230844 ; =0x00002624 - str r0, [sp] - mov r0, #3 - str r0, [sp, #4] - ldr r3, _02230848 ; =0x00000265 - add r0, sp, #8 - add r1, r5, r1 - mov r2, #1 - bl MOD83_022388E4 - add r0, sp, #8 - mov r1, #0x18 - mov r2, #0x10 - mov r3, #0x64 - bl MOD83_02238934 - add r0, sp, #8 - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - str r6, [sp, #0x1c] - str r4, [sp] - mov r2, #4 - ldr r0, [r5] - add r1, sp, #8 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r6, #0 - bl ScrStrBufs_delete - add sp, #0x5c - pop {r3, r4, r5, r6, pc} - nop + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, [r5] + mov r1, #0 + bl BgClearTilemapBufferAndCommit + mov r0, #0x56 + bl ScrStrBufs_new + mov r1, #2 + str r1, [sp] + mov r1, #1 + str r1, [sp, #4] + ldr r2, _02230840 ; =0x00002614 + mov r1, #0 + ldr r2, [r5, r2] + mov r3, #5 + add r6, r0, #0 + bl BufferIntegerAsString + mov r0, #0x1f + ldr r1, _02230844 ; =0x00002624 + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + ldr r3, _02230848 ; =0x00000265 + add r0, sp, #8 + add r1, r5, r1 + mov r2, #1 + bl MOD83_022388E4 + add r0, sp, #8 + mov r1, #0x18 + mov r2, #0x10 + mov r3, #0x64 + bl MOD83_02238934 + add r0, sp, #8 + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + str r6, [sp, #0x1c] + str r4, [sp] + mov r2, #4 + ldr r0, [r5] + add r1, sp, #8 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r6, #0 + bl ScrStrBufs_delete + add sp, #0x5c + pop {r3, r4, r5, r6, pc} + nop _0223083C: .word 0x00002610 _02230840: .word 0x00002614 _02230844: .word 0x00002624 _02230848: .word 0x00000265 - thumb_func_end MOD83_022307B4 + thumb_func_end MOD83_022307B4 - thumb_func_start MOD83_0223084C + thumb_func_start MOD83_0223084C MOD83_0223084C: ; 0x0223084C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r1, r0, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #3 - bne _02230862 - mov r4, #0x15 - b _0223088C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r1, r0, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #3 + bne _02230862 + mov r4, #0x15 + b _0223088C _02230862: - cmp r0, #4 - bne _0223086A - mov r4, #0x19 - b _0223088C + cmp r0, #4 + bne _0223086A + mov r4, #0x19 + b _0223088C _0223086A: - cmp r0, #2 - bne _02230872 - mov r4, #0x16 - b _0223088C + cmp r0, #2 + bne _02230872 + mov r4, #0x16 + b _0223088C _02230872: - cmp r0, #1 - bne _0223087A - mov r4, #0x1b - b _0223088C + cmp r0, #1 + bne _0223087A + mov r4, #0x1b + b _0223088C _0223087A: - cmp r0, #5 - bne _0223088C - add r0, r5, #0 - add r1, #0x18 - mov r2, #9 - mov r3, #0x33 - bl MOD83_0223089C - pop {r3, r4, r5, pc} + cmp r0, #5 + bne _0223088C + add r0, r5, #0 + add r1, #0x18 + mov r2, #9 + mov r3, #0x33 + bl MOD83_0223089C + pop {r3, r4, r5, pc} _0223088C: - add r0, r5, #0 - add r1, #0x18 - add r2, r4, #0 - mov r3, #0x32 - bl MOD83_0223089C - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0223084C - - thumb_func_start MOD83_0223089C + add r0, r5, #0 + add r1, #0x18 + add r2, r4, #0 + mov r3, #0x32 + bl MOD83_0223089C + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0223084C + + thumb_func_start MOD83_0223089C MOD83_0223089C: ; 0x0223089C - push {r4, r5, r6, r7, lr} - sub sp, #0xc - str r0, [sp] - add r6, r1, #0 - add r5, r2, #0 - str r3, [sp, #4] - bl OverlayManager_GetData - add r4, r0, #0 - cmp r6, #0 - beq _022308F8 - cmp r5, #0 - beq _022308F8 - ldr r2, _02230920 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - add r7, r0, #0 - mov r0, #0x56 - bl ScrStrBufs_new - add r1, r7, #0 - add r2, r5, #0 - mov r3, #0x56 - str r0, [sp, #8] - bl ReadMsgData_ExpandPlaceholders - str r0, [r4, #0x14] - mov r0, #1 - str r0, [r4, #0x68] - ldr r0, [sp] - add r1, r6, #0 - add r2, r5, #0 - bl MOD83_0223050C - ldr r0, [sp, #4] - str r0, [r4, #0x74] - ldr r0, [sp, #8] - bl ScrStrBufs_delete - add r0, r7, #0 - bl DestroyMsgData - b _02230918 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + str r0, [sp] + add r6, r1, #0 + add r5, r2, #0 + str r3, [sp, #4] + bl OverlayManager_GetData + add r4, r0, #0 + cmp r6, #0 + beq _022308F8 + cmp r5, #0 + beq _022308F8 + ldr r2, _02230920 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + add r7, r0, #0 + mov r0, #0x56 + bl ScrStrBufs_new + add r1, r7, #0 + add r2, r5, #0 + mov r3, #0x56 + str r0, [sp, #8] + bl ReadMsgData_ExpandPlaceholders + str r0, [r4, #0x14] + mov r0, #1 + str r0, [r4, #0x68] + ldr r0, [sp] + add r1, r6, #0 + add r2, r5, #0 + bl MOD83_0223050C + ldr r0, [sp, #4] + str r0, [r4, #0x74] + ldr r0, [sp, #8] + bl ScrStrBufs_delete + add r0, r7, #0 + bl DestroyMsgData + b _02230918 _022308F8: - ldr r0, [r4, #0x6c] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _02230918 - ldr r0, [r4, #0x14] - bl String_dtor - mov r0, #0 - str r0, [r4, #0x14] - str r0, [r4, #0x68] - add sp, #0xc - ldr r0, [r4, #0x74] - pop {r4, r5, r6, r7, pc} + ldr r0, [r4, #0x6c] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _02230918 + ldr r0, [r4, #0x14] + bl String_dtor + mov r0, #0 + str r0, [r4, #0x14] + str r0, [r4, #0x68] + add sp, #0xc + ldr r0, [r4, #0x74] + pop {r4, r5, r6, r7, pc} _02230918: - mov r0, #0x31 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - nop + mov r0, #0x31 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + nop _02230920: .word 0x00000172 - thumb_func_end MOD83_0223089C + thumb_func_end MOD83_0223089C - thumb_func_start MOD83_02230924 + thumb_func_start MOD83_02230924 MOD83_02230924: ; 0x02230924 - push {r3, lr} - ldr r1, _02230950 ; =0x000015D4 - ldr r0, [r0, r1] - cmp r0, #4 - bhi _0223094C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r1, _02230950 ; =0x000015D4 + ldr r0, [r0, r1] + cmp r0, #4 + bhi _0223094C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223093A: ; jump table - .short _0223094C - _0223093A - 2 ; case 0 - .short _02230944 - _0223093A - 2 ; case 1 - .short _0223094C - _0223093A - 2 ; case 2 - .short _0223094C - _0223093A - 2 ; case 3 - .short _0223094C - _0223093A - 2 ; case 4 + .short _0223094C - _0223093A - 2 ; case 0 + .short _02230944 - _0223093A - 2 ; case 1 + .short _0223094C - _0223093A - 2 ; case 2 + .short _0223094C - _0223093A - 2 ; case 3 + .short _0223094C - _0223093A - 2 ; case 4 _02230944: - bl MOD83_0222F9DC - bl FUN_02033ED0 + bl MOD83_0222F9DC + bl FUN_02033ED0 _0223094C: - pop {r3, pc} - nop + pop {r3, pc} + nop _02230950: .word 0x000015D4 - thumb_func_end MOD83_02230924 + thumb_func_end MOD83_02230924 - thumb_func_start MOD83_02230954 + thumb_func_start MOD83_02230954 MOD83_02230954: ; 0x02230954 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl MOD83_02231370 - mov r0, #3 - mov r1, #0x56 - lsl r2, r0, #0x10 - bl CreateHeap - ldr r1, _022309FC ; =0x00002998 - add r0, r5, #0 - mov r2, #0x56 - bl OverlayManager_CreateAndGetData - ldr r2, _022309FC ; =0x00002998 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x56 - bl BgConfig_Alloc - str r0, [r4] - bl GX_DisableEngineALayers - bl GX_DisableEngineBLayers - bl MOD83_022331C0 - ldr r0, [r4] - bl MOD83_02230258 - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - ldr r1, _02230A00 ; =0x00000496 - mov r0, #0xa - mov r2, #1 - bl FUN_0200433C - mov r0, #0x56 - bl MOD83_SetHeapId - bl MOD83_02238700 - cmp r0, #0 - beq _022309D0 - ldr r0, _02230A04 ; =0x000015D4 - mov r1, #2 - str r1, [r4, r0] - ldr r0, _02230A08 ; =gGameVersion - ldrb r0, [r0] - bl FUN_02016438 - mov r0, #1 - bl MOD83_02239450 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl MOD83_02231370 + mov r0, #3 + mov r1, #0x56 + lsl r2, r0, #0x10 + bl CreateHeap + ldr r1, _022309FC ; =0x00002998 + add r0, r5, #0 + mov r2, #0x56 + bl OverlayManager_CreateAndGetData + ldr r2, _022309FC ; =0x00002998 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x56 + bl BgConfig_Alloc + str r0, [r4] + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers + bl MOD83_022331C0 + ldr r0, [r4] + bl MOD83_02230258 + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + ldr r1, _02230A00 ; =0x00000496 + mov r0, #0xa + mov r2, #1 + bl FUN_0200433C + mov r0, #0x56 + bl MOD83_SetHeapId + bl MOD83_02238700 + cmp r0, #0 + beq _022309D0 + ldr r0, _02230A04 ; =0x000015D4 + mov r1, #2 + str r1, [r4, r0] + ldr r0, _02230A08 ; =gGameVersion + ldrb r0, [r0] + bl FUN_02016438 + mov r0, #1 + bl MOD83_02239450 _022309D0: - ldr r0, _02230A0C ; =0x000005C8 - mov r1, #0x1d - str r1, [r4, r0] - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #4] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #8] - mov r0, #0xff - mov r2, #3 - str r0, [r4, #0x68] - mov r0, #0 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - mov r0, #1 - pop {r3, r4, r5, pc} - nop + ldr r0, _02230A0C ; =0x000005C8 + mov r1, #0x1d + str r1, [r4, r0] + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #4] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #8] + mov r0, #0xff + mov r2, #3 + str r0, [r4, #0x68] + mov r0, #0 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + mov r0, #1 + pop {r3, r4, r5, pc} + nop _022309FC: .word 0x00002998 _02230A00: .word 0x00000496 _02230A04: .word 0x000015D4 _02230A08: .word gGameVersion _02230A0C: .word 0x000005C8 - thumb_func_end MOD83_02230954 + thumb_func_end MOD83_02230954 - thumb_func_start MOD83_02230A10 + thumb_func_start MOD83_02230A10 MOD83_02230A10: ; 0x02230A10 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - bl CTRDG_IsExisting - ldr r0, _02230D5C ; =0x000005C8 - ldr r0, [r4, r0] - cmp r0, #0x1d - beq _02230A30 - add r0, r4, #0 - bl MOD83_022313E4 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + bl CTRDG_IsExisting + ldr r0, _02230D5C ; =0x000005C8 + ldr r0, [r4, r0] + cmp r0, #0x1d + beq _02230A30 + add r0, r4, #0 + bl MOD83_022313E4 _02230A30: - ldr r3, [r5] - cmp r3, #0x38 - bls _02230A3A - bl _02231334 + ldr r3, [r5] + cmp r3, #0x38 + bls _02230A3A + bl _02231334 _02230A3A: - add r0, r3, r3 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r3, r3 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02230A46: ; jump table - .short _02230AB8 - _02230A46 - 2 ; case 0 - .short _02230ACA - _02230A46 - 2 ; case 1 - .short _02230AE8 - _02230A46 - 2 ; case 2 - .short _02230AF2 - _02230A46 - 2 ; case 3 - .short _02230B00 - _02230A46 - 2 ; case 4 - .short _02230B0E - _02230A46 - 2 ; case 5 - .short _02231334 - _02230A46 - 2 ; case 6 - .short _02230CA0 - _02230A46 - 2 ; case 7 - .short _02230D50 - _02230A46 - 2 ; case 8 - .short _02230D8C - _02230A46 - 2 ; case 9 - .short _02230E4C - _02230A46 - 2 ; case 10 - .short _02230E9A - _02230A46 - 2 ; case 11 - .short _02230EBC - _02230A46 - 2 ; case 12 - .short _02230F4C - _02230A46 - 2 ; case 13 - .short _02230FA2 - _02230A46 - 2 ; case 14 - .short _02230FCE - _02230A46 - 2 ; case 15 - .short _0223100E - _02230A46 - 2 ; case 16 - .short _02231030 - _02230A46 - 2 ; case 17 - .short _0223105A - _02230A46 - 2 ; case 18 - .short _0223107A - _02230A46 - 2 ; case 19 - .short _0223110E - _02230A46 - 2 ; case 20 - .short _0223111A - _02230A46 - 2 ; case 21 - .short _0223113C - _02230A46 - 2 ; case 22 - .short _02231172 - _02230A46 - 2 ; case 23 - .short _0223118C - _02230A46 - 2 ; case 24 - .short _02231204 - _02230A46 - 2 ; case 25 - .short _02231334 - _02230A46 - 2 ; case 26 - .short _02230B1C - _02230A46 - 2 ; case 27 - .short _02231334 - _02230A46 - 2 ; case 28 - .short _02231334 - _02230A46 - 2 ; case 29 - .short _02231334 - _02230A46 - 2 ; case 30 - .short _02230BD6 - _02230A46 - 2 ; case 31 - .short _02230B28 - _02230A46 - 2 ; case 32 - .short _02230BE8 - _02230A46 - 2 ; case 33 - .short _02230C0A - _02230A46 - 2 ; case 34 - .short _02230C7C - _02230A46 - 2 ; case 35 - .short _02231334 - _02230A46 - 2 ; case 36 - .short _02231334 - _02230A46 - 2 ; case 37 - .short _02231334 - _02230A46 - 2 ; case 38 - .short _02231334 - _02230A46 - 2 ; case 39 - .short _02231334 - _02230A46 - 2 ; case 40 - .short _02231334 - _02230A46 - 2 ; case 41 - .short _02231334 - _02230A46 - 2 ; case 42 - .short _02231334 - _02230A46 - 2 ; case 43 - .short _02231334 - _02230A46 - 2 ; case 44 - .short _02231334 - _02230A46 - 2 ; case 45 - .short _02231334 - _02230A46 - 2 ; case 46 - .short _02231334 - _02230A46 - 2 ; case 47 - .short _02231220 - _02230A46 - 2 ; case 48 - .short _02231244 - _02230A46 - 2 ; case 49 - .short _02231252 - _02230A46 - 2 ; case 50 - .short _0223126E - _02230A46 - 2 ; case 51 - .short _02231284 - _02230A46 - 2 ; case 52 - .short _02231298 - _02230A46 - 2 ; case 53 - .short _022312AA - _02230A46 - 2 ; case 54 - .short _022312EC - _02230A46 - 2 ; case 55 - .short _0223132E - _02230A46 - 2 ; case 56 + .short _02230AB8 - _02230A46 - 2 ; case 0 + .short _02230ACA - _02230A46 - 2 ; case 1 + .short _02230AE8 - _02230A46 - 2 ; case 2 + .short _02230AF2 - _02230A46 - 2 ; case 3 + .short _02230B00 - _02230A46 - 2 ; case 4 + .short _02230B0E - _02230A46 - 2 ; case 5 + .short _02231334 - _02230A46 - 2 ; case 6 + .short _02230CA0 - _02230A46 - 2 ; case 7 + .short _02230D50 - _02230A46 - 2 ; case 8 + .short _02230D8C - _02230A46 - 2 ; case 9 + .short _02230E4C - _02230A46 - 2 ; case 10 + .short _02230E9A - _02230A46 - 2 ; case 11 + .short _02230EBC - _02230A46 - 2 ; case 12 + .short _02230F4C - _02230A46 - 2 ; case 13 + .short _02230FA2 - _02230A46 - 2 ; case 14 + .short _02230FCE - _02230A46 - 2 ; case 15 + .short _0223100E - _02230A46 - 2 ; case 16 + .short _02231030 - _02230A46 - 2 ; case 17 + .short _0223105A - _02230A46 - 2 ; case 18 + .short _0223107A - _02230A46 - 2 ; case 19 + .short _0223110E - _02230A46 - 2 ; case 20 + .short _0223111A - _02230A46 - 2 ; case 21 + .short _0223113C - _02230A46 - 2 ; case 22 + .short _02231172 - _02230A46 - 2 ; case 23 + .short _0223118C - _02230A46 - 2 ; case 24 + .short _02231204 - _02230A46 - 2 ; case 25 + .short _02231334 - _02230A46 - 2 ; case 26 + .short _02230B1C - _02230A46 - 2 ; case 27 + .short _02231334 - _02230A46 - 2 ; case 28 + .short _02231334 - _02230A46 - 2 ; case 29 + .short _02231334 - _02230A46 - 2 ; case 30 + .short _02230BD6 - _02230A46 - 2 ; case 31 + .short _02230B28 - _02230A46 - 2 ; case 32 + .short _02230BE8 - _02230A46 - 2 ; case 33 + .short _02230C0A - _02230A46 - 2 ; case 34 + .short _02230C7C - _02230A46 - 2 ; case 35 + .short _02231334 - _02230A46 - 2 ; case 36 + .short _02231334 - _02230A46 - 2 ; case 37 + .short _02231334 - _02230A46 - 2 ; case 38 + .short _02231334 - _02230A46 - 2 ; case 39 + .short _02231334 - _02230A46 - 2 ; case 40 + .short _02231334 - _02230A46 - 2 ; case 41 + .short _02231334 - _02230A46 - 2 ; case 42 + .short _02231334 - _02230A46 - 2 ; case 43 + .short _02231334 - _02230A46 - 2 ; case 44 + .short _02231334 - _02230A46 - 2 ; case 45 + .short _02231334 - _02230A46 - 2 ; case 46 + .short _02231334 - _02230A46 - 2 ; case 47 + .short _02231220 - _02230A46 - 2 ; case 48 + .short _02231244 - _02230A46 - 2 ; case 49 + .short _02231252 - _02230A46 - 2 ; case 50 + .short _0223126E - _02230A46 - 2 ; case 51 + .short _02231284 - _02230A46 - 2 ; case 52 + .short _02231298 - _02230A46 - 2 ; case 53 + .short _022312AA - _02230A46 - 2 ; case 54 + .short _022312EC - _02230A46 - 2 ; case 55 + .short _0223132E - _02230A46 - 2 ; case 56 _02230AB8: - mov r0, #0x56 - bl MOD83_02238770 - ldr r0, _02230D60 ; =0x000015D8 - str r5, [r4, r0] - mov r0, #1 - str r0, [r5] - bl _02231334 + mov r0, #0x56 + bl MOD83_02238770 + ldr r0, _02230D60 ; =0x000015D8 + str r5, [r4, r0] + mov r0, #1 + str r0, [r5] + bl _02231334 _02230ACA: - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_02230668 - add r0, r4, #0 - bl MOD83_0222FAE8 - mov r0, #1 - mov r1, #3 - add r2, r5, #0 - mov r3, #2 - bl MOD83_0223886C - bl _02231334 + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_02230668 + add r0, r4, #0 + bl MOD83_0222FAE8 + mov r0, #1 + mov r1, #3 + add r2, r5, #0 + mov r3, #2 + bl MOD83_0223886C + bl _02231334 _02230AE8: - add r0, r5, #0 - bl MOD83_022388CC - bl _02231334 + add r0, r5, #0 + bl MOD83_022388CC + bl _02231334 _02230AF2: - ldr r2, _02230D64 ; =MOD83_022301D4 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D64 ; =MOD83_022301D4 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B00: - ldr r2, _02230D68 ; =MOD83_022300F8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D68 ; =MOD83_022300F8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B0E: - ldr r2, _02230D6C ; =MOD83_0222FDE8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D6C ; =MOD83_0222FDE8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B1C: - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230714 - bl _02231334 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230714 + bl _02231334 _02230B28: - add r0, r4, #0 - bl MOD83_022314B4 - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x2c - bne _02230BC0 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #1 - bne _02230B6C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x30 - str r0, [r5] - b _02230BC0 + add r0, r4, #0 + bl MOD83_022314B4 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x2c + bne _02230BC0 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #1 + bne _02230B6C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x30 + str r0, [r5] + b _02230BC0 _02230B6C: - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _02230B9A - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _02230B9A + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _02230B9A: - bl MOD83_02239DA0 - add r1, r4, #0 - add r2, r0, #0 - add r0, r6, #0 - add r1, #0x58 - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - bl MOD83_0222FF80 - mov r0, #0x1f - str r0, [r5] + bl MOD83_02239DA0 + add r1, r4, #0 + add r2, r0, #0 + add r0, r6, #0 + add r1, #0x58 + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + bl MOD83_0222FF80 + mov r0, #0x1f + str r0, [r5] _02230BC0: - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - sub r0, #0x2d - cmp r0, #1 - bls _02230BCC - b _02231334 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + sub r0, #0x2d + cmp r0, #1 + bls _02230BCC + b _02231334 _02230BCC: - bl MOD83_02231494 - mov r0, #0x11 - str r0, [r5] - b _02231334 + bl MOD83_02231494 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230BD6: - ldr r2, _02230D74 ; =MOD83_02230084 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - add r0, r4, #0 - bl MOD83_022314B4 - b _02231334 + ldr r2, _02230D74 ; =MOD83_02230084 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + add r0, r4, #0 + bl MOD83_022314B4 + b _02231334 _02230BE8: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0x22 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0x22 + str r0, [r5] + b _02231334 _02230C0A: - bl MOD83_02239574 - cmp r0, #4 - bne _02230C16 - bl MOD83_02239544 + bl MOD83_02239574 + cmp r0, #4 + bne _02230C16 + bl MOD83_02239544 _02230C16: - bl MOD83_02239574 - cmp r0, #2 - bne _02230C48 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - ldr r0, _02230D78 ; =0x00000624 - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #2 + bne _02230C48 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + ldr r0, _02230D78 ; =0x00000624 + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230C48: - bl MOD83_02239574 - cmp r0, #3 - bne _02230D38 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1a - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #3 + bne _02230D38 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1a + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230C7C: - add r0, r4, #0 - bl MOD83_022314B4 - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r1, [r0, #0x10] - add r0, r1, #0 - sub r0, #0x2c - cmp r0, #2 - bhi _02230D38 - cmp r1, #0x2e - bne _02230C96 - bl MOD83_02231494 + add r0, r4, #0 + bl MOD83_022314B4 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r1, [r0, #0x10] + add r0, r1, #0 + sub r0, #0x2c + cmp r0, #2 + bhi _02230D38 + cmp r1, #0x2e + bne _02230C96 + bl MOD83_02231494 _02230C96: - add r0, r6, #0 - bl MOD83_0222FFD8 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FFD8 + str r0, [r5] + b _02231334 _02230CA0: - add r0, r4, #0 - bl MOD83_0222F950 - ldr r1, _02230D7C ; =0x00000438 - str r0, [r4, r1] - mov r0, #0 - ldr r1, [r4, r1] - mvn r0, r0 - cmp r1, r0 - beq _02230D20 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _02230CFA - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + bl MOD83_0222F950 + ldr r1, _02230D7C ; =0x00000438 + str r0, [r4, r1] + mov r0, #0 + ldr r1, [r4, r1] + mvn r0, r0 + cmp r1, r0 + beq _02230D20 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _02230CFA + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _02230CFA: - add r1, r4, #0 - add r2, r4, #0 - add r0, r6, #0 - add r1, #0x58 - add r2, #0x8c - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - mov r1, #0 - bl MOD83_0222FD84 - mov r0, #8 - str r0, [r5] + add r1, r4, #0 + add r2, r4, #0 + add r0, r6, #0 + add r1, #0x58 + add r2, #0x8c + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + mov r1, #0 + bl MOD83_0222FD84 + mov r0, #8 + str r0, [r5] _02230D20: - ldr r0, _02230D80 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _02230D3A - ldr r0, _02230D84 ; =0x00000434 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _02230D3A + ldr r0, _02230D80 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _02230D3A + ldr r0, _02230D84 ; =0x00000434 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _02230D3A _02230D38: - b _02231334 + b _02231334 _02230D3A: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r0, #0x11 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230D50: - ldr r2, _02230D88 ; =MOD83_0222FFD8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - b _02231334 - .align 2, 0 + ldr r2, _02230D88 ; =MOD83_0222FFD8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + b _02231334 + .align 2, 0 _02230D5C: .word 0x000005C8 _02230D60: .word 0x000015D8 _02230D64: .word MOD83_022301D4 @@ -6975,421 +6975,421 @@ _02230D80: .word gMain _02230D84: .word 0x00000434 _02230D88: .word MOD83_0222FFD8 _02230D8C: - bl FUN_02031190 - add r7, r0, #0 - beq _02230DE4 - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - beq _02230DE4 - mov r0, #0xab - bl FUN_020315D8 - cmp r0, #1 - bne _02230E14 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #1 - add r1, r0, #0 - bl FUN_020334E8 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #7 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r1, #0x96 - ldr r0, _02231120 ; =0x00000434 - lsl r1, r1, #2 - str r1, [r4, r0] - mov r0, #0xa - str r0, [r5] - b _02230E14 + bl FUN_02031190 + add r7, r0, #0 + beq _02230DE4 + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + beq _02230DE4 + mov r0, #0xab + bl FUN_020315D8 + cmp r0, #1 + bne _02230E14 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #1 + add r1, r0, #0 + bl FUN_020334E8 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #7 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r1, #0x96 + ldr r0, _02231120 ; =0x00000434 + lsl r1, r1, #2 + str r1, [r4, r0] + mov r0, #0xa + str r0, [r5] + b _02230E14 _02230DE4: - cmp r7, #0 - beq _02230E14 - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230E14 - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x10 - str r0, [r5] - b _02231334 + cmp r7, #0 + beq _02230E14 + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230E14 + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x10 + str r0, [r5] + b _02231334 _02230E14: - ldr r0, _02231124 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _02230E2C - ldr r0, _02231120 ; =0x00000434 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02230F1C + ldr r0, _02231124 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _02230E2C + ldr r0, _02231120 ; =0x00000434 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02230F1C _02230E2C: - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x11 - str r0, [r5] - b _02231334 + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230E4C: - bl MOD83_0222F9A0 - cmp r0, #0 - beq _02230E58 - mov r0, #0xb - str r0, [r5] + bl MOD83_0222F9A0 + cmp r0, #0 + beq _02230E58 + mov r0, #0xb + str r0, [r5] _02230E58: - bl FUN_02031190 - ldr r1, _02231124 ; =gMain - ldr r2, [r1, #0x48] - mov r1, #2 - tst r1, r2 - bne _02230E84 - ldr r1, _02231120 ; =0x00000434 - ldr r2, [r4, r1] - sub r2, r2, #1 - str r2, [r4, r1] - ldr r1, [r4, r1] - cmp r1, #0 - beq _02230E84 - cmp r0, #0 - beq _02230F1C - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230F1C + bl FUN_02031190 + ldr r1, _02231124 ; =gMain + ldr r2, [r1, #0x48] + mov r1, #2 + tst r1, r2 + bne _02230E84 + ldr r1, _02231120 ; =0x00000434 + ldr r2, [r4, r1] + sub r2, r2, #1 + str r2, [r4, r1] + ldr r1, [r4, r1] + cmp r1, #0 + beq _02230E84 + cmp r0, #0 + beq _02230F1C + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230F1C _02230E84: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r0, #0x11 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230E9A: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - mov r0, #0 - add r1, r0, #0 - bl FUN_020334E8 - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0xc - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + mov r0, #0 + add r1, r0, #0 + bl FUN_020334E8 + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0xc + str r0, [r5] + b _02231334 _02230EBC: - bl FUN_02031190 - cmp r0, #0 - beq _02230EFA - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230EFA - bl MOD83_0222F9DC - ldr r0, _02231128 ; =0x00002990 - mov r1, #1 - str r1, [r4, r0] - bl MOD83_0223955C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - mov r0, #0xe - str r0, [r5] - b _02231334 + bl FUN_02031190 + cmp r0, #0 + beq _02230EFA + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230EFA + bl MOD83_0222F9DC + ldr r0, _02231128 ; =0x00002990 + mov r1, #1 + str r1, [r4, r0] + bl MOD83_0223955C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + mov r0, #0xe + str r0, [r5] + b _02231334 _02230EFA: - bl MOD83_02239574 - cmp r0, #4 - bne _02230F14 - mov r0, #0x93 - bl FUN_02031588 - mov r0, #0xd - str r0, [r5] - ldr r0, _0223112C ; =0x0000043C - mov r1, #0x78 - str r1, [r4, r0] - b _02231334 + bl MOD83_02239574 + cmp r0, #4 + bne _02230F14 + mov r0, #0x93 + bl FUN_02031588 + mov r0, #0xd + str r0, [r5] + ldr r0, _0223112C ; =0x0000043C + mov r1, #0x78 + str r1, [r4, r0] + b _02231334 _02230F14: - bl MOD83_02239574 - cmp r0, #3 - beq _02230F1E + bl MOD83_02239574 + cmp r0, #3 + beq _02230F1E _02230F1C: - b _02231334 + b _02231334 _02230F1E: - bl MOD83_0223955C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x1a - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_0223955C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x1a + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230F4C: - mov r0, #0x93 - bl FUN_020315D8 - cmp r0, #1 - bne _02230F66 - bl MOD83_02239544 - ldr r0, _0223112C ; =0x0000043C - mov r1, #0xa - str r1, [r4, r0] - mov r0, #0xf - str r0, [r5] - b _02231334 + mov r0, #0x93 + bl FUN_020315D8 + cmp r0, #1 + bne _02230F66 + bl MOD83_02239544 + ldr r0, _0223112C ; =0x0000043C + mov r1, #0xa + str r1, [r4, r0] + mov r0, #0xf + str r0, [r5] + b _02231334 _02230F66: - ldr r0, _0223112C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231062 - bl MOD83_0223955C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x1a - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + ldr r0, _0223112C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231062 + bl MOD83_0223955C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x1a + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230FA2: - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1c - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1c + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230FCE: - ldr r0, _0223112C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231062 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - ldr r0, _02231130 ; =0x00000624 - bl PlaySE - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + ldr r0, _0223112C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231062 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + ldr r0, _02231130 ; =0x00000624 + bl PlaySE + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _0223100E: - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x18 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - mov r0, #0x12 - str r0, [r5] - b _02231334 + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x18 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + mov r0, #0x12 + str r0, [r5] + b _02231334 _02231030: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x17 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - mov r0, #0x12 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x17 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + mov r0, #0x12 + str r0, [r5] + b _02231334 _0223105A: - ldr r0, _02231124 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - bne _02231064 + ldr r0, _02231124 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + bne _02231064 _02231062: - b _02231334 + b _02231334 _02231064: - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r0, r6, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - str r0, [r5] - b _02231334 + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r0, r6, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + str r0, [r5] + b _02231334 _0223107A: - add r0, r4, #0 - add r0, #0x84 - ldr r0, [r0] - cmp r0, #0x1b - beq _02231090 - add r0, r4, #0 - mov r1, #0xea - add r0, #0x8c - lsl r1, r1, #2 - bl MOD83_02238728 + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0x1b + beq _02231090 + add r0, r4, #0 + mov r1, #0xea + add r0, #0x8c + lsl r1, r1, #2 + bl MOD83_02238728 _02231090: - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #1 - bne _022310B8 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x30 - str r0, [r5] - b _02231334 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #1 + bne _022310B8 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x30 + str r0, [r5] + b _02231334 _022310B8: - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _022310E6 - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _022310E6 + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _022310E6: - add r1, r4, #0 - add r2, r4, #0 - add r0, r6, #0 - add r1, #0x58 - add r2, #0x8c - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - mov r1, #0 - bl MOD83_0222FD84 - mov r0, #0x14 - str r0, [r5] - b _02231334 + add r1, r4, #0 + add r2, r4, #0 + add r0, r6, #0 + add r1, #0x58 + add r2, #0x8c + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + mov r1, #0 + bl MOD83_0222FD84 + mov r0, #0x14 + str r0, [r5] + b _02231334 _0223110E: - ldr r2, _02231138 ; =MOD83_0222FFD8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - b _02231334 + ldr r2, _02231138 ; =MOD83_0222FFD8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + b _02231334 _0223111A: - mov r0, #0x16 - str r0, [r5] - b _02231334 - .align 2, 0 + mov r0, #0x16 + str r0, [r5] + b _02231334 + .align 2, 0 _02231120: .word 0x00000434 _02231124: .word gMain _02231128: .word 0x00002990 @@ -7398,1804 +7398,1804 @@ _02231130: .word 0x00000624 _02231134: .word 0x000005DC _02231138: .word MOD83_0222FFD8 _0223113C: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #7 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - ldr r0, _0223134C ; =0x0000043C - mov r1, #0x3c - str r1, [r4, r0] - mov r0, #0x17 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #7 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + ldr r0, _0223134C ; =0x0000043C + mov r1, #0x3c + str r1, [r4, r0] + mov r0, #0x17 + str r0, [r5] + b _02231334 _02231172: - ldr r0, _0223134C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231212 - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0x18 - str r0, [r5] - b _02231334 + ldr r0, _0223134C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231212 + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0x18 + str r0, [r5] + b _02231334 _0223118C: - bl MOD83_02239574 - cmp r0, #4 - bne _02231198 - bl MOD83_02239544 + bl MOD83_02239574 + cmp r0, #4 + bne _02231198 + bl MOD83_02239544 _02231198: - bl MOD83_02239574 - cmp r0, #2 - bne _022311D0 - ldr r0, _0223134C ; =0x0000043C - mov r1, #1 - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - ldr r0, _02231350 ; =0x00000624 - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x19 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #2 + bne _022311D0 + ldr r0, _0223134C ; =0x0000043C + mov r1, #1 + str r1, [r4, r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + ldr r0, _02231350 ; =0x00000624 + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x19 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _022311D0: - bl MOD83_02239574 - cmp r0, #3 - bne _02231212 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1a - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #3 + bne _02231212 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1a + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02231204: - ldr r0, _0223134C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r1, [r4, r0] - cmp r1, #0 - beq _02231214 + ldr r0, _0223134C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r1, [r4, r0] + cmp r1, #0 + beq _02231214 _02231212: - b _02231334 + b _02231334 _02231214: - mov r1, #1 - lsl r1, r1, #0x10 - str r1, [r4, r0] - mov r0, #0x36 - str r0, [r5] - b _02231334 + mov r1, #1 + lsl r1, r1, #0x10 + str r1, [r4, r0] + mov r0, #0x36 + str r0, [r5] + b _02231334 _02231220: - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #5 - beq _02231230 - add r0, r4, #0 - bl MOD83_02230924 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #5 + beq _02231230 + add r0, r4, #0 + bl MOD83_02230924 _02231230: - add r0, r6, #0 - bl MOD83_0223084C - str r0, [r5] - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - b _02231334 + add r0, r6, #0 + bl MOD83_0223084C + str r0, [r5] + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + b _02231334 _02231244: - mov r1, #0 - add r0, r6, #0 - add r2, r1, #0 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + mov r1, #0 + add r0, r6, #0 + add r2, r1, #0 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02231252: - ldr r0, _02231354 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02231334 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r6, #0 - bl MOD83_022300F8 - str r0, [r5] - b _02231334 + ldr r0, _02231354 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02231334 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r6, #0 + bl MOD83_022300F8 + str r0, [r5] + b _02231334 _0223126E: - add r0, r6, #0 - mov r1, #1 - bl MOD83_0222FD84 - mov r0, #8 - str r0, [r5] - add r0, r4, #0 - mov r1, #0 - add r0, #0x80 - str r1, [r0] - b _02231334 + add r0, r6, #0 + mov r1, #1 + bl MOD83_0222FD84 + mov r0, #8 + str r0, [r5] + add r0, r4, #0 + mov r1, #0 + add r0, #0x80 + str r1, [r0] + b _02231334 _02231284: - add r0, r6, #0 - bl MOD83_0222FA4C - mov r0, #0x11 - mov r1, #0 - lsl r0, r0, #6 - str r1, [r4, r0] - add sp, #0x14 - mov r0, #1 - pop {r4, r5, r6, r7, pc} + add r0, r6, #0 + bl MOD83_0222FA4C + mov r0, #0x11 + mov r1, #0 + lsl r0, r0, #6 + str r1, [r4, r0] + add sp, #0x14 + mov r0, #1 + pop {r4, r5, r6, r7, pc} _02231298: - add r0, r6, #0 - bl MOD83_0222FA4C - mov r1, #0x11 - mov r0, #1 - lsl r1, r1, #6 - add sp, #0x14 - str r0, [r4, r1] - pop {r4, r5, r6, r7, pc} + add r0, r6, #0 + bl MOD83_0222FA4C + mov r1, #0x11 + mov r0, #1 + lsl r1, r1, #6 + add sp, #0x14 + str r0, [r4, r1] + pop {r4, r5, r6, r7, pc} _022312AA: - ldr r0, _02231354 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02231334 - ldr r0, _02231358 ; =0x000005DC - bl PlaySE - add r0, r4, #0 - add r0, #0xda - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - cmp r0, #1 - bne _022312D6 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x37 - mov r3, #2 - bl MOD83_0223886C - b _02231334 + ldr r0, _02231354 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02231334 + ldr r0, _02231358 ; =0x000005DC + bl PlaySE + add r0, r4, #0 + add r0, #0xda + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + cmp r0, #1 + bne _022312D6 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x37 + mov r3, #2 + bl MOD83_0223886C + b _02231334 _022312D6: - mov r0, #1 - bl MOD83_02238860 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x38 - mov r3, #2 - bl MOD83_0223886C - b _02231334 + mov r0, #1 + bl MOD83_02238860 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x38 + mov r3, #2 + bl MOD83_0223886C + b _02231334 _022312EC: - ldr r0, [r4] - bl MOD83_022302B4 - mov r0, #1 - mov r1, #0 - bl GX_EngineBToggleLayers - mov r0, #2 - mov r1, #1 - bl GX_EngineBToggleLayers - add r1, r4, #0 - ldr r0, [r4] - add r1, #0xdc - mov r2, #0x56 - bl MOD83_02233168 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #1 - ldr r2, [r4, r2] - mov r1, #0x36 - mov r3, #2 - bl MOD83_0223886C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - b _02231334 + ldr r0, [r4] + bl MOD83_022302B4 + mov r0, #1 + mov r1, #0 + bl GX_EngineBToggleLayers + mov r0, #2 + mov r1, #1 + bl GX_EngineBToggleLayers + add r1, r4, #0 + ldr r0, [r4] + add r1, #0xdc + mov r2, #0x56 + bl MOD83_02233168 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #1 + ldr r2, [r4, r2] + mov r1, #0x36 + mov r3, #2 + bl MOD83_0223886C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + b _02231334 _0223132E: - mov r0, #0 - bl OS_ResetSystem + mov r0, #0 + bl OS_ResetSystem _02231334: - ldr r0, _02231360 ; =0x0000298C - ldr r1, [r4, r0] - cmp r1, #0 - beq _02231340 - add r0, r4, #0 - blx r1 + ldr r0, _02231360 ; =0x0000298C + ldr r1, [r4, r0] + cmp r1, #0 + beq _02231340 + add r0, r4, #0 + blx r1 _02231340: - bl MOD83_02238D58 - mov r0, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - nop + bl MOD83_02238D58 + mov r0, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + nop _0223134C: .word 0x0000043C _02231350: .word 0x00000624 _02231354: .word gMain _02231358: .word 0x000005DC _0223135C: .word 0x000015D8 _02231360: .word 0x0000298C - thumb_func_end MOD83_02230A10 + thumb_func_end MOD83_02230A10 - thumb_func_start MOD83_02231364 + thumb_func_start MOD83_02231364 MOD83_02231364: ; 0x02231364 - ldr r0, _0223136C ; =MOD83_0223B888 - ldr r0, [r0, #4] - bx lr - nop + ldr r0, _0223136C ; =MOD83_0223B888 + ldr r0, [r0, #4] + bx lr + nop _0223136C: .word MOD83_0223B888 - thumb_func_end MOD83_02231364 + thumb_func_end MOD83_02231364 - thumb_func_start MOD83_02231370 + thumb_func_start MOD83_02231370 MOD83_02231370: ; 0x02231370 - ldr r1, _02231378 ; =MOD83_0223B888 - str r0, [r1, #4] - bx lr - nop + ldr r1, _02231378 ; =MOD83_0223B888 + str r0, [r1, #4] + bx lr + nop _02231378: .word MOD83_0223B888 - thumb_func_end MOD83_02231370 + thumb_func_end MOD83_02231370 - thumb_func_start MOD83_0223137C + thumb_func_start MOD83_0223137C MOD83_0223137C: ; 0x0223137C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - mov r0, #0x11 - lsl r0, r0, #6 - ldr r0, [r4, r0] - cmp r0, #0 - bne _0223139A - ldr r0, _022313D0 ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _022313D4 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - b _022313A6 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + mov r0, #0x11 + lsl r0, r0, #6 + ldr r0, [r4, r0] + cmp r0, #0 + bne _0223139A + ldr r0, _022313D0 ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _022313D4 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + b _022313A6 _0223139A: - cmp r0, #1 - bne _022313A6 - ldr r0, _022313D8 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _022313DC ; =MOD83_0223A444 - bl RegisterMainOverlay + cmp r0, #1 + bne _022313A6 + ldr r0, _022313D8 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _022313DC ; =MOD83_0223A444 + bl RegisterMainOverlay _022313A6: - mov r0, #0x5b - bl DestroyHeap - add r0, r5, #0 - bl OverlayManager_FreeData - mov r0, #0x56 - bl DestroyHeap - ldr r0, _022313E0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - bne _022313C6 - mov r0, #0 - bl FUN_02016438 + mov r0, #0x5b + bl DestroyHeap + add r0, r5, #0 + bl OverlayManager_FreeData + mov r0, #0x56 + bl DestroyHeap + ldr r0, _022313E0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + bne _022313C6 + mov r0, #0 + bl FUN_02016438 _022313C6: - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _022313D0: .word SDK_OVERLAY_MODULE_63_ID _022313D4: .word MOD63_021DBAB8 _022313D8: .word SDK_OVERLAY_MODULE_83_ID _022313DC: .word MOD83_0223A444 _022313E0: .word 0x000015D4 - thumb_func_end MOD83_0223137C + thumb_func_end MOD83_0223137C - thumb_func_start MOD83_022313E4 + thumb_func_start MOD83_022313E4 MOD83_022313E4: ; 0x022313E4 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02231438 ; =0x000005C8 - ldr r0, [r4, r0] - cmp r0, #0x1c - beq _022313FA - cmp r0, #0x1d - beq _02231436 - cmp r0, #0x1e - beq _0223140E - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldr r0, _02231438 ; =0x000005C8 + ldr r0, [r4, r0] + cmp r0, #0x1c + beq _022313FA + cmp r0, #0x1d + beq _02231436 + cmp r0, #0x1e + beq _0223140E + pop {r4, pc} _022313FA: - ldr r0, [r4, #4] - bl FUN_02032D44 - ldr r0, _0223143C ; =0x000005CC - mov r1, #0x78 - str r1, [r4, r0] - mov r1, #0x1e - sub r0, r0, #4 - str r1, [r4, r0] - pop {r4, pc} + ldr r0, [r4, #4] + bl FUN_02032D44 + ldr r0, _0223143C ; =0x000005CC + mov r1, #0x78 + str r1, [r4, r0] + mov r1, #0x1e + sub r0, r0, #4 + str r1, [r4, r0] + pop {r4, pc} _0223140E: - bl FUN_02032D9C - mov r1, #1 - tst r0, r1 - beq _0223141E - mov r0, #0x5d - lsl r0, r0, #4 - str r1, [r4, r0] + bl FUN_02032D9C + mov r1, #1 + tst r0, r1 + beq _0223141E + mov r0, #0x5d + lsl r0, r0, #4 + str r1, [r4, r0] _0223141E: - ldr r0, _0223143C ; =0x000005CC - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231436 - bl FUN_02032D80 - ldr r0, _02231438 ; =0x000005C8 - mov r1, #0x1d - str r1, [r4, r0] + ldr r0, _0223143C ; =0x000005CC + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231436 + bl FUN_02032D80 + ldr r0, _02231438 ; =0x000005C8 + mov r1, #0x1d + str r1, [r4, r0] _02231436: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02231438: .word 0x000005C8 _0223143C: .word 0x000005CC - thumb_func_end MOD83_022313E4 + thumb_func_end MOD83_022313E4 - thumb_func_start MOD83_02231440 + thumb_func_start MOD83_02231440 MOD83_02231440: ; 0x02231440 - cmp r0, #4 - bhi _0223148C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r0, #4 + bhi _0223148C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02231450: ; jump table - .short _0223145A - _02231450 - 2 ; case 0 - .short _02231462 - _02231450 - 2 ; case 1 - .short _0223146A - _02231450 - 2 ; case 2 - .short _02231472 - _02231450 - 2 ; case 3 - .short _02231486 - _02231450 - 2 ; case 4 + .short _0223145A - _02231450 - 2 ; case 0 + .short _02231462 - _02231450 - 2 ; case 1 + .short _0223146A - _02231450 - 2 ; case 2 + .short _02231472 - _02231450 - 2 ; case 3 + .short _02231486 - _02231450 - 2 ; case 4 _0223145A: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x27 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x27 + str r1, [r0, #0x10] + bx lr _02231462: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x28 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x28 + str r1, [r0, #0x10] + bx lr _0223146A: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x29 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x29 + str r1, [r0, #0x10] + bx lr _02231472: - ldr r0, _02231490 ; =MOD83_0223B888 - ldr r1, [r0, #0x10] - cmp r1, #0x29 - bne _02231480 - mov r1, #0x2b - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + ldr r1, [r0, #0x10] + cmp r1, #0x29 + bne _02231480 + mov r1, #0x2b + str r1, [r0, #0x10] + bx lr _02231480: - mov r1, #0x2e - str r1, [r0, #0x10] - bx lr + mov r1, #0x2e + str r1, [r0, #0x10] + bx lr _02231486: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x2f - str r1, [r0, #0x10] + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x2f + str r1, [r0, #0x10] _0223148C: - bx lr - nop + bx lr + nop _02231490: .word MOD83_0223B888 - thumb_func_end MOD83_02231440 + thumb_func_end MOD83_02231440 - thumb_func_start MOD83_02231494 + thumb_func_start MOD83_02231494 MOD83_02231494: ; 0x02231494 - push {r3, lr} - bl FUN_0202E4F0 - ldr r0, _022314B0 ; =MOD83_0223B888 - ldr r0, [r0, #8] - bl FreeToHeap - bl FUN_02033ED0 - ldr r0, _022314B0 ; =MOD83_0223B888 - mov r1, #0 - str r1, [r0, #8] - pop {r3, pc} - nop + push {r3, lr} + bl FUN_0202E4F0 + ldr r0, _022314B0 ; =MOD83_0223B888 + ldr r0, [r0, #8] + bl FreeToHeap + bl FUN_02033ED0 + ldr r0, _022314B0 ; =MOD83_0223B888 + mov r1, #0 + str r1, [r0, #8] + pop {r3, pc} + nop _022314B0: .word MOD83_0223B888 - thumb_func_end MOD83_02231494 + thumb_func_end MOD83_02231494 - thumb_func_start MOD83_022314B4 + thumb_func_start MOD83_022314B4 MOD83_022314B4: ; 0x022314B4 - push {r4, lr} - add r4, r0, #0 - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x2b - bne _022314DA - bl MOD83_02231494 - bl MOD83_02239CEC - cmp r0, #0 - beq _022314D4 - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2c - str r1, [r0, #0x10] - b _022314DA + push {r4, lr} + add r4, r0, #0 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x2b + bne _022314DA + bl MOD83_02231494 + bl MOD83_02239CEC + cmp r0, #0 + beq _022314D4 + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2c + str r1, [r0, #0x10] + b _022314DA _022314D4: - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2d - str r1, [r0, #0x10] + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2d + str r1, [r0, #0x10] _022314DA: - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x24 - beq _022314F6 - cmp r0, #0x25 - beq _022314F6 - cmp r0, #0x26 - beq _022314F6 - cmp r0, #0x27 - beq _022314F6 - cmp r0, #0x28 - beq _022314F6 - cmp r0, #0x2a - bne _02231502 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x24 + beq _022314F6 + cmp r0, #0x25 + beq _022314F6 + cmp r0, #0x26 + beq _022314F6 + cmp r0, #0x27 + beq _022314F6 + cmp r0, #0x28 + beq _022314F6 + cmp r0, #0x2a + bne _02231502 _022314F6: - bl WM_GetLinkLevel - mov r1, #3 - sub r0, r1, r0 - bl FUN_02033EEC + bl WM_GetLinkLevel + mov r1, #3 + sub r0, r1, r0 + bl FUN_02033EEC _02231502: - ldr r1, _022315C0 ; =MOD83_0223B888 - ldr r0, [r1, #0x10] - sub r0, #0x24 - cmp r0, #0xb - bhi _0223157C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r1, _022315C0 ; =MOD83_0223B888 + ldr r0, [r1, #0x10] + sub r0, #0x24 + cmp r0, #0xb + bhi _0223157C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02231518: ; jump table - .short _02231530 - _02231518 - 2 ; case 0 - .short _0223153C - _02231518 - 2 ; case 1 - .short _0223157C - _02231518 - 2 ; case 2 - .short _0223157C - _02231518 - 2 ; case 3 - .short _02231572 - _02231518 - 2 ; case 4 - .short _0223157C - _02231518 - 2 ; case 5 - .short _0223157C - _02231518 - 2 ; case 6 - .short _0223157C - _02231518 - 2 ; case 7 - .short _0223157C - _02231518 - 2 ; case 8 - .short _0223157C - _02231518 - 2 ; case 9 - .short _0223157A - _02231518 - 2 ; case 10 - .short _0223157C - _02231518 - 2 ; case 11 + .short _02231530 - _02231518 - 2 ; case 0 + .short _0223153C - _02231518 - 2 ; case 1 + .short _0223157C - _02231518 - 2 ; case 2 + .short _0223157C - _02231518 - 2 ; case 3 + .short _02231572 - _02231518 - 2 ; case 4 + .short _0223157C - _02231518 - 2 ; case 5 + .short _0223157C - _02231518 - 2 ; case 6 + .short _0223157C - _02231518 - 2 ; case 7 + .short _0223157C - _02231518 - 2 ; case 8 + .short _0223157C - _02231518 - 2 ; case 9 + .short _0223157A - _02231518 - 2 ; case 10 + .short _0223157C - _02231518 - 2 ; case 11 _02231530: - bl FUN_0202E49C - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x25 - str r1, [r0, #0x10] - b _0223157C + bl FUN_0202E49C + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x25 + str r1, [r0, #0x10] + b _0223157C _0223153C: - bl FUN_0202E4C8 - cmp r0, #1 - bne _0223157C - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0 - str r1, [r0] - bl MOD83_02239D98 - add r1, r0, #0 - mov r0, #0x56 - bl AllocFromHeap - add r2, r0, #0 - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r1, _022315C4 ; =MOD83_02231440 - str r2, [r0, #8] - ldr r0, _022315C8 ; =0x000005D4 - add r0, r4, r0 - bl MOD83_02239A98 - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x26 - str r1, [r0, #0x10] - bl FUN_02033E74 - b _0223157C + bl FUN_0202E4C8 + cmp r0, #1 + bne _0223157C + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0 + str r1, [r0] + bl MOD83_02239D98 + add r1, r0, #0 + mov r0, #0x56 + bl AllocFromHeap + add r2, r0, #0 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r1, _022315C4 ; =MOD83_02231440 + str r2, [r0, #8] + ldr r0, _022315C8 ; =0x000005D4 + add r0, r4, r0 + bl MOD83_02239A98 + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x26 + str r1, [r0, #0x10] + bl FUN_02033E74 + b _0223157C _02231572: - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - b _0223157C + ldr r0, [r1] + add r0, r0, #1 + str r0, [r1] + b _0223157C _0223157A: - pop {r4, pc} + pop {r4, pc} _0223157C: - ldr r0, _022315CC ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _022315BC - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - sub r0, #0x27 - cmp r0, #8 - bhi _022315BC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, _022315CC ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _022315BC + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + sub r0, #0x27 + cmp r0, #8 + bhi _022315BC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223159C: ; jump table - .short _022315AE - _0223159C - 2 ; case 0 - .short _022315AE - _0223159C - 2 ; case 1 - .short _022315BC - _0223159C - 2 ; case 2 - .short _022315BC - _0223159C - 2 ; case 3 - .short _022315BC - _0223159C - 2 ; case 4 - .short _022315BC - _0223159C - 2 ; case 5 - .short _022315BC - _0223159C - 2 ; case 6 - .short _022315BC - _0223159C - 2 ; case 7 - .short _022315AE - _0223159C - 2 ; case 8 + .short _022315AE - _0223159C - 2 ; case 0 + .short _022315AE - _0223159C - 2 ; case 1 + .short _022315BC - _0223159C - 2 ; case 2 + .short _022315BC - _0223159C - 2 ; case 3 + .short _022315BC - _0223159C - 2 ; case 4 + .short _022315BC - _0223159C - 2 ; case 5 + .short _022315BC - _0223159C - 2 ; case 6 + .short _022315BC - _0223159C - 2 ; case 7 + .short _022315AE - _0223159C - 2 ; case 8 _022315AE: - bl MOD83_02239A14 - cmp r0, #0 - beq _022315BC - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2a - str r1, [r0, #0x10] + bl MOD83_02239A14 + cmp r0, #0 + beq _022315BC + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2a + str r1, [r0, #0x10] _022315BC: - pop {r4, pc} - nop + pop {r4, pc} + nop _022315C0: .word MOD83_0223B888 _022315C4: .word MOD83_02231440 _022315C8: .word 0x000005D4 _022315CC: .word gMain - thumb_func_end MOD83_022314B4 + thumb_func_end MOD83_022314B4 - thumb_func_start MOD83_022315D0 + thumb_func_start MOD83_022315D0 MOD83_022315D0: ; 0x022315D0 - push {r3, lr} - sub sp, #8 - bl MOD83_022315F8 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0xd - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xf - mov r2, #0xc - mov r3, #0xe - bl MOD83_02238BC4 - add sp, #8 - pop {r3, pc} - thumb_func_end MOD83_022315D0 - - thumb_func_start MOD83_022315F8 + push {r3, lr} + sub sp, #8 + bl MOD83_022315F8 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0xd + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xf + mov r2, #0xc + mov r3, #0xe + bl MOD83_02238BC4 + add sp, #8 + pop {r3, pc} + thumb_func_end MOD83_022315D0 + + thumb_func_start MOD83_022315F8 MOD83_022315F8: ; 0x022315F8 - push {r4, lr} - add r4, r0, #0 - ldr r0, _0223165C ; =0x00002D64 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231608 - bl FUN_0201FFC8 + push {r4, lr} + add r4, r0, #0 + ldr r0, _0223165C ; =0x00002D64 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231608 + bl FUN_0201FFC8 _02231608: - ldr r0, _02231660 ; =0x00002D68 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231614 - bl FUN_0201FFC8 + ldr r0, _02231660 ; =0x00002D68 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231614 + bl FUN_0201FFC8 _02231614: - ldr r0, _02231660 ; =0x00002D68 - mov r1, #0 - str r1, [r4, r0] - ldr r2, [r4, r0] - sub r1, r0, #4 - str r2, [r4, r1] - add r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0223162C - bl FUN_0201FFC8 + ldr r0, _02231660 ; =0x00002D68 + mov r1, #0 + str r1, [r4, r0] + ldr r2, [r4, r0] + sub r1, r0, #4 + str r2, [r4, r1] + add r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0223162C + bl FUN_0201FFC8 _0223162C: - ldr r0, _02231664 ; =0x00002D70 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231638 - bl FUN_0201FFC8 + ldr r0, _02231664 ; =0x00002D70 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231638 + bl FUN_0201FFC8 _02231638: - ldr r0, _02231668 ; =0x00002D74 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231644 - bl FUN_0201FFC8 + ldr r0, _02231668 ; =0x00002D74 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231644 + bl FUN_0201FFC8 _02231644: - ldr r1, _02231668 ; =0x00002D74 - mov r0, #0 - str r0, [r4, r1] - ldr r2, [r4, r1] - sub r0, r1, #4 - str r2, [r4, r0] - ldr r0, [r4, r0] - sub r1, #8 - str r0, [r4, r1] - bl MOD83_02238E48 - pop {r4, pc} - .align 2, 0 + ldr r1, _02231668 ; =0x00002D74 + mov r0, #0 + str r0, [r4, r1] + ldr r2, [r4, r1] + sub r0, r1, #4 + str r2, [r4, r0] + ldr r0, [r4, r0] + sub r1, #8 + str r0, [r4, r1] + bl MOD83_02238E48 + pop {r4, pc} + .align 2, 0 _0223165C: .word 0x00002D64 _02231660: .word 0x00002D68 _02231664: .word 0x00002D70 _02231668: .word 0x00002D74 - thumb_func_end MOD83_022315F8 + thumb_func_end MOD83_022315F8 - thumb_func_start MOD83_0223166C + thumb_func_start MOD83_0223166C MOD83_0223166C: ; 0x0223166C - push {r3, r4, lr} - sub sp, #4 - ldr r1, _022316B4 ; =0x00003CEC - add r4, r0, #0 - mov r0, #0 - str r0, [r4, r1] - mov r1, #1 - str r1, [sp] - ldr r1, _022316B8 ; =0x00002D64 - mov r2, #0x48 - ldr r1, [r4, r1] - mov r3, #0xa8 - bl MOD83_02238DBC - ldr r1, _022316B8 ; =0x00002D64 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_02020238 - mov r0, #0 - ldr r1, _022316BC ; =0x00002D68 - str r0, [sp] - ldr r1, [r4, r1] - mov r2, #0xb8 - mov r3, #0xa8 - bl MOD83_02238DBC - ldr r1, _022316BC ; =0x00002D68 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_02020238 - add sp, #4 - pop {r3, r4, pc} - .align 2, 0 + push {r3, r4, lr} + sub sp, #4 + ldr r1, _022316B4 ; =0x00003CEC + add r4, r0, #0 + mov r0, #0 + str r0, [r4, r1] + mov r1, #1 + str r1, [sp] + ldr r1, _022316B8 ; =0x00002D64 + mov r2, #0x48 + ldr r1, [r4, r1] + mov r3, #0xa8 + bl MOD83_02238DBC + ldr r1, _022316B8 ; =0x00002D64 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_02020238 + mov r0, #0 + ldr r1, _022316BC ; =0x00002D68 + str r0, [sp] + ldr r1, [r4, r1] + mov r2, #0xb8 + mov r3, #0xa8 + bl MOD83_02238DBC + ldr r1, _022316BC ; =0x00002D68 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_02020238 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 _022316B4: .word 0x00003CEC _022316B8: .word 0x00002D64 _022316BC: .word 0x00002D68 - thumb_func_end MOD83_0223166C + thumb_func_end MOD83_0223166C - thumb_func_start MOD83_022316C0 + thumb_func_start MOD83_022316C0 MOD83_022316C0: ; 0x022316C0 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _022316D6 - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200CCF8 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _022316D6 + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200CCF8 _022316D6: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022316C0 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022316C0 - thumb_func_start MOD83_022316D8 + thumb_func_start MOD83_022316D8 MOD83_022316D8: ; 0x022316D8 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _022316EE - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200D0E0 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _022316EE + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200D0E0 _022316EE: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022316D8 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022316D8 - thumb_func_start MOD83_022316F0 + thumb_func_start MOD83_022316F0 MOD83_022316F0: ; 0x022316F0 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r0, #0 - ldr r0, _02231794 ; =0x00002B6C - add r4, r1, #0 - ldr r0, [r5, r0] - add r7, r2, #0 - str r3, [sp] - cmp r0, #0 - beq _02231708 - bl ListMenuItems_dtor + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r0, #0 + ldr r0, _02231794 ; =0x00002B6C + add r4, r1, #0 + ldr r0, [r5, r0] + add r7, r2, #0 + str r3, [sp] + cmp r0, #0 + beq _02231708 + bl ListMenuItems_dtor _02231708: - ldr r0, _02231798 ; =0x00002B68 - ldr r0, [r5, r0] - cmp r0, #0 - beq _02231718 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, _02231798 ; =0x00002B68 + ldr r0, [r5, r0] + cmp r0, #0 + beq _02231718 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _02231718: - add r0, r7, #0 - mov r1, #0x57 - bl ListMenuItems_ctor - ldr r1, _02231794 ; =0x00002B6C - ldr r2, _0223179C ; =0x00000172 - str r0, [r5, r1] - mov r0, #0 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _022317A0 ; =0x000029A4 - mov r6, #0 - str r0, [r5, r1] - cmp r7, #0 - ble _02231752 + add r0, r7, #0 + mov r1, #0x57 + bl ListMenuItems_ctor + ldr r1, _02231794 ; =0x00002B6C + ldr r2, _0223179C ; =0x00000172 + str r0, [r5, r1] + mov r0, #0 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _022317A0 ; =0x000029A4 + mov r6, #0 + str r0, [r5, r1] + cmp r7, #0 + ble _02231752 _0223173A: - ldr r0, _02231794 ; =0x00002B6C - ldr r1, _022317A0 ; =0x000029A4 - ldr r0, [r5, r0] - ldr r1, [r5, r1] - ldr r2, [r4] - ldr r3, [r4, #4] - bl ListMenuItems_AppendFromMsgData - add r6, r6, #1 - add r4, #8 - cmp r6, r7 - blt _0223173A + ldr r0, _02231794 ; =0x00002B6C + ldr r1, _022317A0 ; =0x000029A4 + ldr r0, [r5, r0] + ldr r1, [r5, r1] + ldr r2, [r4] + ldr r3, [r4, #4] + bl ListMenuItems_AppendFromMsgData + add r6, r6, #1 + add r4, #8 + cmp r6, r7 + blt _0223173A _02231752: - ldr r0, _022317A0 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r4, _022317A4 ; =MOD83_0223AE90 - add r3, sp, #4 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, _02231794 ; =0x00002B6C - mov r1, #0 - ldr r0, [r5, r0] - mov r3, #0x57 - str r0, [sp, #4] - add r0, sp, #4 - strh r7, [r0, #0x10] - ldr r0, [sp] - str r0, [sp, #0x10] - add r0, r2, #0 - add r2, r1, #0 - bl ListMenuInit - ldr r1, _02231798 ; =0x00002B68 - str r0, [r5, r1] - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - nop + ldr r0, _022317A0 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r4, _022317A4 ; =MOD83_0223AE90 + add r3, sp, #4 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, _02231794 ; =0x00002B6C + mov r1, #0 + ldr r0, [r5, r0] + mov r3, #0x57 + str r0, [sp, #4] + add r0, sp, #4 + strh r7, [r0, #0x10] + ldr r0, [sp] + str r0, [sp, #0x10] + add r0, r2, #0 + add r2, r1, #0 + bl ListMenuInit + ldr r1, _02231798 ; =0x00002B68 + str r0, [r5, r1] + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop _02231794: .word 0x00002B6C _02231798: .word 0x00002B68 _0223179C: .word 0x00000172 _022317A0: .word 0x000029A4 _022317A4: .word MOD83_0223AE90 - thumb_func_end MOD83_022316F0 + thumb_func_end MOD83_022316F0 - thumb_func_start MOD83_022317A8 + thumb_func_start MOD83_022317A8 MOD83_022317A8: ; 0x022317A8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - ldr r2, _02231818 ; =0x00000172 - add r5, r0, #0 - add r7, r1, #0 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - add r4, r0, #0 - mov r0, #0x57 - bl ScrStrBufs_new - add r6, r0, #0 - mov r0, #1 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - add r0, r6, #0 - add r1, r4, #0 - add r2, r7, #0 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _0223181C ; =0x00010200 - mov r1, #1 - str r0, [sp, #8] - add r0, r5, #0 - add r2, r7, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - bl CopyWindowToVram - add r0, r7, #0 - bl String_dtor - add r0, r4, #0 - bl DestroyMsgData - add r0, r6, #0 - bl ScrStrBufs_delete - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + ldr r2, _02231818 ; =0x00000172 + add r5, r0, #0 + add r7, r1, #0 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + add r4, r0, #0 + mov r0, #0x57 + bl ScrStrBufs_new + add r6, r0, #0 + mov r0, #1 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + add r0, r6, #0 + add r1, r4, #0 + add r2, r7, #0 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _0223181C ; =0x00010200 + mov r1, #1 + str r0, [sp, #8] + add r0, r5, #0 + add r2, r7, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + bl CopyWindowToVram + add r0, r7, #0 + bl String_dtor + add r0, r4, #0 + bl DestroyMsgData + add r0, r6, #0 + bl ScrStrBufs_delete + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02231818: .word 0x00000172 _0223181C: .word 0x00010200 - thumb_func_end MOD83_022317A8 + thumb_func_end MOD83_022317A8 - thumb_func_start MOD83_02231820 + thumb_func_start MOD83_02231820 MOD83_02231820: ; 0x02231820 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x57 - mov r3, #0x1e - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xb - mov r2, #0 - lsl r3, r3, #4 - bl GfGfxLoader_GXLoadPal - mov r0, #0x20 - str r0, [sp] - mov r0, #0x57 - mov r3, #6 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x10 - mov r2, #0 - lsl r3, r3, #6 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #3 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x57 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #0x11 - add r2, r4, #0 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x57 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #0x12 - add r2, r4, #0 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #0xc - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #1 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02231820 - - thumb_func_start MOD83_022318B0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x57 + mov r3, #0x1e + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xb + mov r2, #0 + lsl r3, r3, #4 + bl GfGfxLoader_GXLoadPal + mov r0, #0x20 + str r0, [sp] + mov r0, #0x57 + mov r3, #6 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x10 + mov r2, #0 + lsl r3, r3, #6 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #3 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x57 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #0x11 + add r2, r4, #0 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x57 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #0x12 + add r2, r4, #0 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #0xc + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #1 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02231820 + + thumb_func_start MOD83_022318B0 MOD83_022318B0: ; 0x022318B0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022318DC ; =0x00002B70 - mov r1, #0x2e - add r0, r4, r0 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #0xa - bl MOD83_02231F88 - mov r0, #0xd - pop {r4, pc} - .align 2, 0 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022318DC ; =0x00002B70 + mov r1, #0x2e + add r0, r4, r0 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #0xa + bl MOD83_02231F88 + mov r0, #0xd + pop {r4, pc} + .align 2, 0 _022318DC: .word 0x00002B70 - thumb_func_end MOD83_022318B0 + thumb_func_end MOD83_022318B0 - thumb_func_start MOD83_022318E0 + thumb_func_start MOD83_022318E0 MOD83_022318E0: ; 0x022318E0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r4, r1] - add r1, #0x20 - ldr r1, [r4, r1] - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #1 - ldr r0, _0223192C ; =0x00002B70 - bne _0223190C - add r0, r4, r0 - mov r1, #0x3e - bl MOD83_022317A8 - b _02231914 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r4, r1] + add r1, #0x20 + ldr r1, [r4, r1] + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #1 + ldr r0, _0223192C ; =0x00002B70 + bne _0223190C + add r0, r4, r0 + mov r1, #0x3e + bl MOD83_022317A8 + b _02231914 _0223190C: - add r0, r4, r0 - mov r1, #0x3d - bl MOD83_022317A8 + add r0, r4, r0 + mov r1, #0x3d + bl MOD83_022317A8 _02231914: - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #9 - bl MOD83_02231F88 - mov r0, #0xc - pop {r4, pc} - nop + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #9 + bl MOD83_02231F88 + mov r0, #0xc + pop {r4, pc} + nop _0223192C: .word 0x00002B70 - thumb_func_end MOD83_022318E0 + thumb_func_end MOD83_022318E0 - thumb_func_start MOD83_02231930 + thumb_func_start MOD83_02231930 MOD83_02231930: ; 0x02231930 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022319C0 ; =0x00002B70 - mov r1, #0x3f - add r0, r4, r0 - bl MOD83_022317A8 - ldr r0, _022319C0 ; =0x00002B70 - mov r1, #0x13 - add r0, r4, r0 - bl FUN_0200D858 - ldr r1, _022319C4 ; =0x00003CF0 - str r0, [r4, r1] - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r4, r1] - add r1, #0x20 - ldr r1, [r4, r1] - bl FUN_0202ADC8 - ldr r0, _022319C8 ; =0x00002B44 - ldr r0, [r4, r0] - bl FUN_02022720 - ldr r0, _022319C4 ; =0x00003CF0 - ldr r0, [r4, r0] - bl FUN_0200DBFC - mov r0, #0xad - lsl r0, r0, #6 - ldr r0, [r4, r0] - bl FUN_0202AE70 - cmp r0, #0 - bne _02231984 - mov r0, #0x1a - pop {r4, pc} + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022319C0 ; =0x00002B70 + mov r1, #0x3f + add r0, r4, r0 + bl MOD83_022317A8 + ldr r0, _022319C0 ; =0x00002B70 + mov r1, #0x13 + add r0, r4, r0 + bl FUN_0200D858 + ldr r1, _022319C4 ; =0x00003CF0 + str r0, [r4, r1] + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r4, r1] + add r1, #0x20 + ldr r1, [r4, r1] + bl FUN_0202ADC8 + ldr r0, _022319C8 ; =0x00002B44 + ldr r0, [r4, r0] + bl FUN_02022720 + ldr r0, _022319C4 ; =0x00003CF0 + ldr r0, [r4, r0] + bl FUN_0200DBFC + mov r0, #0xad + lsl r0, r0, #6 + ldr r0, [r4, r0] + bl FUN_0202AE70 + cmp r0, #0 + bne _02231984 + mov r0, #0x1a + pop {r4, pc} _02231984: - ldr r1, _022319CC ; =0x00002B60 - add r0, r4, #0 - ldr r1, [r4, r1] - mov r2, #1 - bl MOD83_022320A4 - ldr r1, _022319CC ; =0x00002B60 - str r0, [r4, r1] - add r1, #0x10 - add r0, r4, r1 - mov r1, #0x24 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #8 - bl MOD83_02231F88 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - mov r0, #5 - pop {r4, pc} - nop + ldr r1, _022319CC ; =0x00002B60 + add r0, r4, #0 + ldr r1, [r4, r1] + mov r2, #1 + bl MOD83_022320A4 + ldr r1, _022319CC ; =0x00002B60 + str r0, [r4, r1] + add r1, #0x10 + add r0, r4, r1 + mov r1, #0x24 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #8 + bl MOD83_02231F88 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + mov r0, #5 + pop {r4, pc} + nop _022319C0: .word 0x00002B70 _022319C4: .word 0x00003CF0 _022319C8: .word 0x00002B44 _022319CC: .word 0x00002B60 - thumb_func_end MOD83_02231930 + thumb_func_end MOD83_02231930 - thumb_func_start MOD83_022319D0 + thumb_func_start MOD83_022319D0 MOD83_022319D0: ; 0x022319D0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022319FC ; =0x00002B70 - mov r1, #0x24 - add r0, r4, r0 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #8 - bl MOD83_02231F88 - mov r0, #5 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022319FC ; =0x00002B70 + mov r1, #0x24 + add r0, r4, r0 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #8 + bl MOD83_02231F88 + mov r0, #5 + pop {r4, pc} + .align 2, 0 _022319FC: .word 0x00002B70 - thumb_func_end MOD83_022319D0 + thumb_func_end MOD83_022319D0 - thumb_func_start MOD83_02231A00 + thumb_func_start MOD83_02231A00 MOD83_02231A00: ; 0x02231A00 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02231A40 ; =0x00002B6C - ldr r0, [r4, r0] - bl ListMenuItems_dtor - mov r1, #0 - ldr r0, _02231A40 ; =0x00002B6C - add r2, r1, #0 - str r1, [r4, r0] - sub r0, r0, #4 - ldr r0, [r4, r0] - bl DestroyListMenu - ldr r0, _02231A44 ; =0x00002B68 - mov r1, #0 - str r1, [r4, r0] - add r0, #0x18 - add r0, r4, r0 - bl MOD83_022316C0 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - bl RemoveWindow - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + ldr r0, _02231A40 ; =0x00002B6C + ldr r0, [r4, r0] + bl ListMenuItems_dtor + mov r1, #0 + ldr r0, _02231A40 ; =0x00002B6C + add r2, r1, #0 + str r1, [r4, r0] + sub r0, r0, #4 + ldr r0, [r4, r0] + bl DestroyListMenu + ldr r0, _02231A44 ; =0x00002B68 + mov r1, #0 + str r1, [r4, r0] + add r0, #0x18 + add r0, r4, r0 + bl MOD83_022316C0 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + bl RemoveWindow + pop {r4, pc} + .align 2, 0 _02231A40: .word 0x00002B6C _02231A44: .word 0x00002B68 - thumb_func_end MOD83_02231A00 + thumb_func_end MOD83_02231A00 - thumb_func_start MOD83_02231A48 + thumb_func_start MOD83_02231A48 MOD83_02231A48: ; 0x02231A48 - mov r0, #1 - bx lr - thumb_func_end MOD83_02231A48 + mov r0, #1 + bx lr + thumb_func_end MOD83_02231A48 - thumb_func_start MOD83_02231A4C + thumb_func_start MOD83_02231A4C MOD83_02231A4C: ; 0x02231A4C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r0, #0 - add r7, r1, #0 - ldr r1, [r5] - mov r0, #0x25 - add r4, r2, #0 - bl String_ctor - ldr r1, _02231A9C ; =0x00002B60 - add r6, r0, #0 - ldr r2, [r5, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r1] - mov r1, #0x41 - lsl r1, r1, #2 - add r1, r2, r1 - mov r2, #0x24 - bl CopyU16ArrayToStringN - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r4, [sp, #8] - add r0, r7, #0 - mov r1, #1 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - mov r0, #1 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r0, #0 + add r7, r1, #0 + ldr r1, [r5] + mov r0, #0x25 + add r4, r2, #0 + bl String_ctor + ldr r1, _02231A9C ; =0x00002B60 + add r6, r0, #0 + ldr r2, [r5, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r1] + mov r1, #0x41 + lsl r1, r1, #2 + add r1, r2, r1 + mov r2, #0x24 + bl CopyU16ArrayToStringN + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r4, [sp, #8] + add r0, r7, #0 + mov r1, #1 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r6, #0 + bl String_dtor + mov r0, #1 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _02231A9C: .word 0x00002B60 - thumb_func_end MOD83_02231A4C + thumb_func_end MOD83_02231A4C - thumb_func_start MOD83_02231AA0 + thumb_func_start MOD83_02231AA0 MOD83_02231AA0: ; 0x02231AA0 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r4, r0, #0 - ldr r0, _02231B10 ; =0x00002B60 - add r6, r1, #0 - ldr r1, [r4, r0] - add r5, r2, #0 - lsl r2, r1, #2 - add r3, r4, r2 - add r2, r0, #0 - sub r2, #0xc - ldr r3, [r3, r2] - ldr r2, _02231B14 ; =0x00000152 - ldrb r2, [r3, r2] - lsl r2, r2, #0x1c - lsr r2, r2, #0x1f - bne _02231AC6 - mov r2, #0x27 - b _02231ADE + push {r4, r5, r6, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, _02231B10 ; =0x00002B60 + add r6, r1, #0 + ldr r1, [r4, r0] + add r5, r2, #0 + lsl r2, r1, #2 + add r3, r4, r2 + add r2, r0, #0 + sub r2, #0xc + ldr r3, [r3, r2] + ldr r2, _02231B14 ; =0x00000152 + ldrb r2, [r3, r2] + lsl r2, r2, #0x1c + lsr r2, r2, #0x1f + bne _02231AC6 + mov r2, #0x27 + b _02231ADE _02231AC6: - sub r0, #0x20 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231AD8 - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #1 - bne _02231ADC + sub r0, #0x20 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231AD8 + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #1 + bne _02231ADC _02231AD8: - mov r2, #0x25 - b _02231ADE + mov r2, #0x25 + b _02231ADE _02231ADC: - mov r2, #0x26 + mov r2, #0x26 _02231ADE: - ldr r1, _02231B18 ; =0x000029A0 - ldr r3, [r4] - ldr r0, [r4, r1] - add r1, r1, #4 - ldr r1, [r4, r1] - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r5, [sp, #8] - add r0, r6, #0 - mov r1, #1 - add r2, r4, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl String_dtor - mov r0, #1 - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + ldr r1, _02231B18 ; =0x000029A0 + ldr r3, [r4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r5, [sp, #8] + add r0, r6, #0 + mov r1, #1 + add r2, r4, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl String_dtor + mov r0, #1 + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02231B10: .word 0x00002B60 _02231B14: .word 0x00000152 _02231B18: .word 0x000029A0 - thumb_func_end MOD83_02231AA0 + thumb_func_end MOD83_02231AA0 - thumb_func_start MOD83_02231B1C + thumb_func_start MOD83_02231B1C MOD83_02231B1C: ; 0x02231B1C - push {r4, lr} - sub sp, #0x18 - ldr r1, _02231B7C ; =0x00002B60 - add r4, r0, #0 - ldr r2, [r4, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r4, r2 - ldr r2, [r2, r1] - mov r1, #0xd5 - lsl r1, r1, #2 - ldr r1, [r2, r1] - add r0, sp, #8 - bl RTC_ConvertDayToDate - mov r0, #2 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231B80 ; =0x000029A0 - mov r2, #0x7d - ldr r3, [sp, #8] - lsl r2, r2, #4 - add r2, r3, r2 - ldr r0, [r4, r0] - mov r1, #0 - mov r3, #4 - bl BufferIntegerAsString - ldr r0, _02231B80 ; =0x000029A0 - ldr r2, [sp, #0xc] - ldr r0, [r4, r0] - mov r1, #1 - bl BufferMonthNameAbbr - mov r1, #2 - str r1, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231B80 ; =0x000029A0 - ldr r2, [sp, #0x10] - ldr r0, [r4, r0] - add r3, r1, #0 - bl BufferIntegerAsString - mov r0, #1 - add sp, #0x18 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x18 + ldr r1, _02231B7C ; =0x00002B60 + add r4, r0, #0 + ldr r2, [r4, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r4, r2 + ldr r2, [r2, r1] + mov r1, #0xd5 + lsl r1, r1, #2 + ldr r1, [r2, r1] + add r0, sp, #8 + bl RTC_ConvertDayToDate + mov r0, #2 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231B80 ; =0x000029A0 + mov r2, #0x7d + ldr r3, [sp, #8] + lsl r2, r2, #4 + add r2, r3, r2 + ldr r0, [r4, r0] + mov r1, #0 + mov r3, #4 + bl BufferIntegerAsString + ldr r0, _02231B80 ; =0x000029A0 + ldr r2, [sp, #0xc] + ldr r0, [r4, r0] + mov r1, #1 + bl BufferMonthNameAbbr + mov r1, #2 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231B80 ; =0x000029A0 + ldr r2, [sp, #0x10] + ldr r0, [r4, r0] + add r3, r1, #0 + bl BufferIntegerAsString + mov r0, #1 + add sp, #0x18 + pop {r4, pc} + .align 2, 0 _02231B7C: .word 0x00002B60 _02231B80: .word 0x000029A0 - thumb_func_end MOD83_02231B1C + thumb_func_end MOD83_02231B1C - thumb_func_start MOD83_02231B84 + thumb_func_start MOD83_02231B84 MOD83_02231B84: ; 0x02231B84 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r0, #0 - add r7, r1, #0 - mov r0, #0xfb - mov r1, #0x57 - add r4, r2, #0 - bl String_ctor - ldr r1, _02231BD4 ; =0x00002B60 - add r6, r0, #0 - ldr r2, [r5, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r1] - mov r1, #0x55 - lsl r1, r1, #2 - add r1, r2, r1 - mov r2, #0xfa - bl CopyU16ArrayToStringN - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r4, [sp, #8] - add r0, r7, #0 - mov r1, #1 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - mov r0, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r0, #0 + add r7, r1, #0 + mov r0, #0xfb + mov r1, #0x57 + add r4, r2, #0 + bl String_ctor + ldr r1, _02231BD4 ; =0x00002B60 + add r6, r0, #0 + ldr r2, [r5, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r1] + mov r1, #0x55 + lsl r1, r1, #2 + add r1, r2, r1 + mov r2, #0xfa + bl CopyU16ArrayToStringN + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r4, [sp, #8] + add r0, r7, #0 + mov r1, #1 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r6, #0 + bl String_dtor + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _02231BD4: .word 0x00002B60 - thumb_func_end MOD83_02231B84 + thumb_func_end MOD83_02231B84 - thumb_func_start MOD83_02231BD8 + thumb_func_start MOD83_02231BD8 MOD83_02231BD8: ; 0x02231BD8 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r3, r0, #0 - ldr r0, _02231C50 ; =0x00002B60 - add r6, r1, #0 - ldr r1, [r3, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r3, r1 - ldr r1, [r1, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - add r5, r2, #0 - ldrb r2, [r1, r0] - cmp r2, #0xff - bne _02231C2C - ldr r1, _02231C54 ; =0x000029A0 - mov r2, #0x33 - ldr r0, [r3, r1] - add r1, r1, #4 - ldr r1, [r3, r1] - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r5, [sp, #8] - add r0, r6, #0 - mov r1, #1 - add r2, r4, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl String_dtor - add sp, #0x10 - mov r0, #0 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #0x10 + add r3, r0, #0 + ldr r0, _02231C50 ; =0x00002B60 + add r6, r1, #0 + ldr r1, [r3, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r3, r1 + ldr r1, [r1, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + add r5, r2, #0 + ldrb r2, [r1, r0] + cmp r2, #0xff + bne _02231C2C + ldr r1, _02231C54 ; =0x000029A0 + mov r2, #0x33 + ldr r0, [r3, r1] + add r1, r1, #4 + ldr r1, [r3, r1] + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r5, [sp, #8] + add r0, r6, #0 + mov r1, #1 + add r2, r4, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl String_dtor + add sp, #0x10 + mov r0, #0 + pop {r4, r5, r6, pc} _02231C2C: - cmp r2, #0 - beq _02231C48 - mov r1, #0 - str r1, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231C54 ; =0x000029A0 - ldr r0, [r3, r0] - mov r3, #3 - bl BufferIntegerAsString - add sp, #0x10 - mov r0, #1 - pop {r4, r5, r6, pc} + cmp r2, #0 + beq _02231C48 + mov r1, #0 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231C54 ; =0x000029A0 + ldr r0, [r3, r0] + mov r3, #3 + bl BufferIntegerAsString + add sp, #0x10 + mov r0, #1 + pop {r4, r5, r6, pc} _02231C48: - mov r0, #0 - add sp, #0x10 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #0x10 + pop {r4, r5, r6, pc} + nop _02231C50: .word 0x00002B60 _02231C54: .word 0x000029A0 - thumb_func_end MOD83_02231BD8 + thumb_func_end MOD83_02231BD8 - thumb_func_start MOD83_02231C58 + thumb_func_start MOD83_02231C58 MOD83_02231C58: ; 0x02231C58 - push {r4, r5, r6, r7, lr} - sub sp, #0x34 - add r5, r0, #0 - mov r0, #0 - add r7, r1, #0 - add r1, r0, #1 - ldr r0, _02231D38 ; =MOD83_0223AE40 - ldr r2, _02231D38 ; =MOD83_0223AE40 - ldr r0, [r0, #0x30] - ldr r2, [r2, #0x34] - str r0, [sp, #0x14] - ldr r0, _02231D3C ; =0x00002B60 - str r2, [sp, #0x18] - ldr r2, [r5, r0] - sub r0, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - ldrb r0, [r2, r0] - add r4, r1, #0 - add r6, sp, #0x14 - cmp r0, #0 - beq _02231C9C - ldr r0, _02231D38 ; =MOD83_0223AE40 - ldr r2, _02231D38 ; =MOD83_0223AE40 - ldr r0, [r0, #0x38] - add r4, r1, #1 - lsl r1, r1, #3 - ldr r2, [r2, #0x3c] - add r3, r6, r1 - str r0, [r6, r1] - str r2, [r3, #4] + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + add r5, r0, #0 + mov r0, #0 + add r7, r1, #0 + add r1, r0, #1 + ldr r0, _02231D38 ; =MOD83_0223AE40 + ldr r2, _02231D38 ; =MOD83_0223AE40 + ldr r0, [r0, #0x30] + ldr r2, [r2, #0x34] + str r0, [sp, #0x14] + ldr r0, _02231D3C ; =0x00002B60 + str r2, [sp, #0x18] + ldr r2, [r5, r0] + sub r0, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + ldrb r0, [r2, r0] + add r4, r1, #0 + add r6, sp, #0x14 + cmp r0, #0 + beq _02231C9C + ldr r0, _02231D38 ; =MOD83_0223AE40 + ldr r2, _02231D38 ; =MOD83_0223AE40 + ldr r0, [r0, #0x38] + add r4, r1, #1 + lsl r1, r1, #3 + ldr r2, [r2, #0x3c] + add r3, r6, r1 + str r0, [r6, r1] + str r2, [r3, #4] _02231C9C: - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r5, r1] - add r1, #0x20 - ldr r1, [r5, r1] - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #0 - bne _02231CC2 - ldr r2, _02231D38 ; =MOD83_0223AE40 - lsl r1, r4, #3 - ldr r0, [r2, #0x40] - add r6, sp, #0x14 - ldr r2, [r2, #0x44] - add r3, r6, r1 - str r0, [r6, r1] - add r4, r4, #1 - str r2, [r3, #4] + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r5, r1] + add r1, #0x20 + ldr r1, [r5, r1] + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #0 + bne _02231CC2 + ldr r2, _02231D38 ; =MOD83_0223AE40 + lsl r1, r4, #3 + ldr r0, [r2, #0x40] + add r6, sp, #0x14 + ldr r2, [r2, #0x44] + add r3, r6, r1 + str r0, [r6, r1] + add r4, r4, #1 + str r2, [r3, #4] _02231CC2: - ldr r2, _02231D38 ; =MOD83_0223AE40 - lsl r1, r4, #3 - ldr r0, [r2, #0x48] - add r6, sp, #0x14 - str r0, [r6, r1] - ldr r2, [r2, #0x4c] - add r3, r6, r1 - ldr r0, _02231D40 ; =0x00002B3C - str r2, [r3, #4] - ldr r6, [r5, r0] - add r0, r7, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - bl RemoveWindow - add r1, r4, #1 - mov r0, #4 - sub r0, r0, r1 - ldr r1, [r6, #8] - lsl r0, r0, #1 - add r1, r1, r0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp] - ldr r1, [r6, #0xc] - mov r2, #2 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #4] - ldr r1, [r6, #0x10] - sub r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - ldr r0, _02231D44 ; =0x00002B38 - add r1, r7, #0 - ldr r0, [r5, r0] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02231D48 ; =0x0000299C - ldr r3, [r6, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized - add r0, r5, #0 - add r1, sp, #0x14 - add r2, r4, #1 - add r3, r7, #0 - bl MOD83_022316F0 - mov r0, #1 - add sp, #0x34 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, _02231D38 ; =MOD83_0223AE40 + lsl r1, r4, #3 + ldr r0, [r2, #0x48] + add r6, sp, #0x14 + str r0, [r6, r1] + ldr r2, [r2, #0x4c] + add r3, r6, r1 + ldr r0, _02231D40 ; =0x00002B3C + str r2, [r3, #4] + ldr r6, [r5, r0] + add r0, r7, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + bl RemoveWindow + add r1, r4, #1 + mov r0, #4 + sub r0, r0, r1 + ldr r1, [r6, #8] + lsl r0, r0, #1 + add r1, r1, r0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp] + ldr r1, [r6, #0xc] + mov r2, #2 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #4] + ldr r1, [r6, #0x10] + sub r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + ldr r0, _02231D44 ; =0x00002B38 + add r1, r7, #0 + ldr r0, [r5, r0] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02231D48 ; =0x0000299C + ldr r3, [r6, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized + add r0, r5, #0 + add r1, sp, #0x14 + add r2, r4, #1 + add r3, r7, #0 + bl MOD83_022316F0 + mov r0, #1 + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02231D38: .word MOD83_0223AE40 _02231D3C: .word 0x00002B60 _02231D40: .word 0x00002B3C _02231D44: .word 0x00002B38 _02231D48: .word 0x0000299C - thumb_func_end MOD83_02231C58 + thumb_func_end MOD83_02231C58 - thumb_func_start MOD83_02231D4C + thumb_func_start MOD83_02231D4C MOD83_02231D4C: ; 0x02231D4C - push {r3, lr} - add r3, r1, #0 - ldr r1, _02231D5C ; =MOD83_0223AE40 - mov r2, #2 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + add r3, r1, #0 + ldr r1, _02231D5C ; =MOD83_0223AE40 + mov r2, #2 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02231D5C: .word MOD83_0223AE40 - thumb_func_end MOD83_02231D4C + thumb_func_end MOD83_02231D4C - thumb_func_start MOD83_02231D60 + thumb_func_start MOD83_02231D60 MOD83_02231D60: ; 0x02231D60 - push {r3, lr} - add r3, r1, #0 - ldr r1, _02231D70 ; =MOD83_0223AE60 - mov r2, #2 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + add r3, r1, #0 + ldr r1, _02231D70 ; =MOD83_0223AE60 + mov r2, #2 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02231D70: .word MOD83_0223AE60 - thumb_func_end MOD83_02231D60 + thumb_func_end MOD83_02231D60 - thumb_func_start MOD83_02231D74 + thumb_func_start MOD83_02231D74 MOD83_02231D74: ; 0x02231D74 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, _02231D94 ; =0x00002B70 - add r4, r1, #0 - add r0, r5, r0 - mov r1, #2 - bl MOD83_022317A8 - ldr r1, _02231D98 ; =MOD83_0223AE50 - add r0, r5, #0 - mov r2, #2 - add r3, r4, #0 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _02231D94 ; =0x00002B70 + add r4, r1, #0 + add r0, r5, r0 + mov r1, #2 + bl MOD83_022317A8 + ldr r1, _02231D98 ; =MOD83_0223AE50 + add r0, r5, #0 + mov r2, #2 + add r3, r4, #0 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _02231D94: .word 0x00002B70 _02231D98: .word MOD83_0223AE50 - thumb_func_end MOD83_02231D74 + thumb_func_end MOD83_02231D74 - thumb_func_start MOD83_02231D9C + thumb_func_start MOD83_02231D9C MOD83_02231D9C: ; 0x02231D9C - push {r3, lr} - sub sp, #8 - mov r3, #1 - str r3, [sp] - ldr r1, _02231DB8 ; =0x000029A0 - str r3, [sp, #4] - ldr r0, [r0, r1] - mov r1, #0 - add r2, r1, #0 - bl BufferIntegerAsString - mov r0, #1 - add sp, #8 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + sub sp, #8 + mov r3, #1 + str r3, [sp] + ldr r1, _02231DB8 ; =0x000029A0 + str r3, [sp, #4] + ldr r0, [r0, r1] + mov r1, #0 + add r2, r1, #0 + bl BufferIntegerAsString + mov r0, #1 + add sp, #8 + pop {r3, pc} + .align 2, 0 _02231DB8: .word 0x000029A0 - thumb_func_end MOD83_02231D9C + thumb_func_end MOD83_02231D9C - thumb_func_start MOD83_02231DBC + thumb_func_start MOD83_02231DBC MOD83_02231DBC: ; 0x02231DBC - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x57 - str r0, [sp, #8] - add r6, r2, #0 - mov r0, #0 - add r4, r3, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02231DE4 - mov r0, #0x1b - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x57 + str r0, [sp, #8] + add r6, r2, #0 + mov r0, #0 + add r4, r3, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02231DE4 + mov r0, #0x1b + str r0, [r4] _02231DE4: - ldr r0, _02231DEC ; =0x00002BE0 - str r6, [r5, r0] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 + ldr r0, _02231DEC ; =0x00002BE0 + str r6, [r5, r0] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 _02231DEC: .word 0x00002BE0 - thumb_func_end MOD83_02231DBC + thumb_func_end MOD83_02231DBC - thumb_func_start MOD83_02231DF0 + thumb_func_start MOD83_02231DF0 MOD83_02231DF0: ; 0x02231DF0 - push {r4, r5, r6, r7, lr} - sub sp, #0x34 - add r5, r0, #0 - str r2, [sp, #0x14] - ldr r2, _02231F68 ; =0x00000172 - ldr r3, [r5] - mov r0, #1 - mov r1, #0x1a - ldr r4, _02231F6C ; =MOD83_0223AEB0 - bl NewMsgDataFromNarc - ldr r1, _02231F70 ; =0x000029A4 - str r0, [r5, r1] - ldr r0, [r5] - bl ScrStrBufs_new - ldr r1, _02231F74 ; =0x000029A0 - str r0, [r5, r1] - ldr r1, _02231F78 ; =0x00002B64 - ldr r0, [sp, #0x14] - str r0, [r5, r1] - ldr r1, [sp, #0x14] - add r0, r5, #0 - bl MOD83_02232118 - mov r0, #0 - str r0, [sp, #0x2c] - ldr r0, _02231F7C ; =0x000029A8 - add r7, r4, #0 - str r5, [sp, #0x1c] - add r6, r5, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + add r5, r0, #0 + str r2, [sp, #0x14] + ldr r2, _02231F68 ; =0x00000172 + ldr r3, [r5] + mov r0, #1 + mov r1, #0x1a + ldr r4, _02231F6C ; =MOD83_0223AEB0 + bl NewMsgDataFromNarc + ldr r1, _02231F70 ; =0x000029A4 + str r0, [r5, r1] + ldr r0, [r5] + bl ScrStrBufs_new + ldr r1, _02231F74 ; =0x000029A0 + str r0, [r5, r1] + ldr r1, _02231F78 ; =0x00002B64 + ldr r0, [sp, #0x14] + str r0, [r5, r1] + ldr r1, [sp, #0x14] + add r0, r5, #0 + bl MOD83_02232118 + mov r0, #0 + str r0, [sp, #0x2c] + ldr r0, _02231F7C ; =0x000029A8 + add r7, r4, #0 + str r5, [sp, #0x1c] + add r6, r5, r0 _02231E2E: - ldr r1, [r7] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _02231E50 - cmp r1, #2 - beq _02231E50 - ldr r1, [sp, #0x1c] - ldr r0, _02231F7C ; =0x000029A8 - ldr r0, [r1, r0] - cmp r0, #0 - beq _02231E50 - add r0, r6, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r6, #0 - bl RemoveWindow + ldr r1, [r7] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _02231E50 + cmp r1, #2 + beq _02231E50 + ldr r1, [sp, #0x1c] + ldr r0, _02231F7C ; =0x000029A8 + ldr r0, [r1, r0] + cmp r0, #0 + beq _02231E50 + add r0, r6, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r6, #0 + bl RemoveWindow _02231E50: - ldr r0, [sp, #0x1c] - add r7, #0x30 - add r0, #0x10 - str r0, [sp, #0x1c] - ldr r0, [sp, #0x2c] - add r6, #0x10 - add r0, r0, #1 - str r0, [sp, #0x2c] - cmp r0, #0x13 - blo _02231E2E - mov r0, #0 - str r0, [sp, #0x18] - ldr r0, _02231F7C ; =0x000029A8 - mov r7, #0x31 - str r5, [sp, #0x24] - str r5, [sp, #0x20] - add r6, r5, r0 + ldr r0, [sp, #0x1c] + add r7, #0x30 + add r0, #0x10 + str r0, [sp, #0x1c] + ldr r0, [sp, #0x2c] + add r6, #0x10 + add r0, r0, #1 + str r0, [sp, #0x2c] + cmp r0, #0x13 + blo _02231E2E + mov r0, #0 + str r0, [sp, #0x18] + ldr r0, _02231F7C ; =0x000029A8 + mov r7, #0x31 + str r5, [sp, #0x24] + str r5, [sp, #0x20] + add r6, r5, r0 _02231E72: - ldr r1, [r4] - ldr r0, [sp, #0x14] - cmp r0, r1 - bne _02231F2E - ldr r1, [sp, #0x24] - ldr r0, _02231F7C ; =0x000029A8 - ldr r0, [r1, r0] - cmp r0, #0 - bne _02231EBE - ldr r1, [sp, #0x20] - ldr r0, _02231F80 ; =0x00002AE8 - mov r2, #0 - str r7, [r1, r0] - ldr r0, [r4, #8] - add r1, r6, #0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4, #0xc] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #4] - ldr r0, [r4, #0x10] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02231F84 ; =0x0000299C - ldr r3, [r4, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + ldr r1, [r4] + ldr r0, [sp, #0x14] + cmp r0, r1 + bne _02231F2E + ldr r1, [sp, #0x24] + ldr r0, _02231F7C ; =0x000029A8 + ldr r0, [r1, r0] + cmp r0, #0 + bne _02231EBE + ldr r1, [sp, #0x20] + ldr r0, _02231F80 ; =0x00002AE8 + mov r2, #0 + str r7, [r1, r0] + ldr r0, [r4, #8] + add r1, r6, #0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4, #0xc] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + ldr r0, [r4, #0x10] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02231F84 ; =0x0000299C + ldr r3, [r4, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02231EBE: - ldr r0, [r4, #0x14] - ldr r1, [r4, #0x1c] - lsl r0, r0, #0x18 - lsl r1, r1, #0x18 - lsr r0, r0, #0x18 - lsr r1, r1, #0x18 - bl GetFontAttribute - add r1, r0, #0 - add r0, r6, #0 - bl FillWindowPixelBuffer - ldr r0, [r4, #0x18] - ldr r3, [r4, #0x24] - str r0, [sp, #0x28] - ldr r2, [sp, #0x28] - add r0, r5, #0 - add r1, r6, #0 - blx r3 - cmp r0, #1 - bne _02231F20 - ldr r2, [r4, #0x20] - cmp r2, #0 - beq _02231F20 - ldr r0, _02231F74 ; =0x000029A0 - ldr r1, _02231F70 ; =0x000029A4 - ldr r0, [r5, r0] - ldr r1, [r5, r1] - ldr r3, [r5] - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x30] - ldr r0, [r4, #0x2c] - ldr r2, [sp, #0x30] - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [sp, #0x28] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r1, [r4, #0x14] - ldr r3, [r4, #0x28] - add r0, r6, #0 - bl AddTextPrinterParameterized2 - ldr r0, [sp, #0x30] - bl String_dtor + ldr r0, [r4, #0x14] + ldr r1, [r4, #0x1c] + lsl r0, r0, #0x18 + lsl r1, r1, #0x18 + lsr r0, r0, #0x18 + lsr r1, r1, #0x18 + bl GetFontAttribute + add r1, r0, #0 + add r0, r6, #0 + bl FillWindowPixelBuffer + ldr r0, [r4, #0x18] + ldr r3, [r4, #0x24] + str r0, [sp, #0x28] + ldr r2, [sp, #0x28] + add r0, r5, #0 + add r1, r6, #0 + blx r3 + cmp r0, #1 + bne _02231F20 + ldr r2, [r4, #0x20] + cmp r2, #0 + beq _02231F20 + ldr r0, _02231F74 ; =0x000029A0 + ldr r1, _02231F70 ; =0x000029A4 + ldr r0, [r5, r0] + ldr r1, [r5, r1] + ldr r3, [r5] + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x30] + ldr r0, [r4, #0x2c] + ldr r2, [sp, #0x30] + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [sp, #0x28] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r1, [r4, #0x14] + ldr r3, [r4, #0x28] + add r0, r6, #0 + bl AddTextPrinterParameterized2 + ldr r0, [sp, #0x30] + bl String_dtor _02231F20: - add r0, r6, #0 - bl CopyWindowToVram - ldr r1, [r4, #0xc] - ldr r0, [r4, #0x10] - mul r0, r1 - add r7, r7, r0 + add r0, r6, #0 + bl CopyWindowToVram + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x10] + mul r0, r1 + add r7, r7, r0 _02231F2E: - ldr r0, [sp, #0x24] - add r4, #0x30 - add r0, #0x10 - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - add r6, #0x10 - add r0, r0, #4 - str r0, [sp, #0x20] - ldr r0, [sp, #0x18] - add r0, r0, #1 - str r0, [sp, #0x18] - cmp r0, #0x13 - blo _02231E72 - ldr r0, _02231F70 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _02231F74 ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _02231F64 - add r0, r5, #0 - bl MOD83_0223227C + ldr r0, [sp, #0x24] + add r4, #0x30 + add r0, #0x10 + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + add r6, #0x10 + add r0, r0, #4 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + add r0, r0, #1 + str r0, [sp, #0x18] + cmp r0, #0x13 + blo _02231E72 + ldr r0, _02231F70 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _02231F74 ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _02231F64 + add r0, r5, #0 + bl MOD83_0223227C _02231F64: - add sp, #0x34 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02231F68: .word 0x00000172 _02231F6C: .word MOD83_0223AEB0 _02231F70: .word 0x000029A4 @@ -9204,130 +9204,130 @@ _02231F78: .word 0x00002B64 _02231F7C: .word 0x000029A8 _02231F80: .word 0x00002AE8 _02231F84: .word 0x0000299C - thumb_func_end MOD83_02231DF0 + thumb_func_end MOD83_02231DF0 - thumb_func_start MOD83_02231F88 + thumb_func_start MOD83_02231F88 MOD83_02231F88: ; 0x02231F88 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r5, r0, #0 - add r7, r3, #0 - mov r3, #0x30 - ldr r0, _02232084 ; =MOD83_0223AEB0 - mul r3, r2 - add r6, r1, #0 - add r4, r0, r3 - ldr r0, [r6] - cmp r0, #0 - bne _02231FD2 - ldr r0, [r4, #8] - mov r2, #2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4, #0xc] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #4] - ldr r0, [r4, #0x10] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02232088 ; =0x0000299C - ldr r3, [r4, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + add r7, r3, #0 + mov r3, #0x30 + ldr r0, _02232084 ; =MOD83_0223AEB0 + mul r3, r2 + add r6, r1, #0 + add r4, r0, r3 + ldr r0, [r6] + cmp r0, #0 + bne _02231FD2 + ldr r0, [r4, #8] + mov r2, #2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4, #0xc] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + ldr r0, [r4, #0x10] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02232088 ; =0x0000299C + ldr r3, [r4, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02231FD2: - ldr r1, [r4, #0x1c] - add r0, r6, #0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FillWindowPixelBuffer - ldr r0, [r4, #0x20] - cmp r0, #0 - beq _02231FFE - ldr r2, _0223208C ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _02232090 ; =0x000029A4 - str r0, [r5, r1] - mov r0, #0x57 - bl ScrStrBufs_new - ldr r1, _02232094 ; =0x000029A0 - str r0, [r5, r1] + ldr r1, [r4, #0x1c] + add r0, r6, #0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + bl FillWindowPixelBuffer + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _02231FFE + ldr r2, _0223208C ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _02232090 ; =0x000029A4 + str r0, [r5, r1] + mov r0, #0x57 + bl ScrStrBufs_new + ldr r1, _02232094 ; =0x000029A0 + str r0, [r5, r1] _02231FFE: - ldr r0, _02232098 ; =0x00002B38 - ldr r2, _0223209C ; =0x00010200 - str r7, [r5, r0] - add r0, r0, #4 - str r4, [r5, r0] - ldr r3, [r4, #0x24] - add r0, r5, #0 - add r1, r6, #0 - blx r3 - ldr r2, [r4, #0x20] - cmp r2, #0 - beq _02232054 - ldr r1, _02232094 ; =0x000029A0 - mov r3, #0x57 - ldr r0, [r5, r1] - add r1, r1, #4 - ldr r1, [r5, r1] - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x14] - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [r4, #0x18] - ldr r2, [sp, #0x14] - str r0, [sp, #8] - str r3, [sp, #0xc] - ldr r1, [r4, #0x14] - add r0, r6, #0 - bl AddTextPrinterParameterized2 - ldr r0, [sp, #0x14] - bl String_dtor - ldr r0, _02232090 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _02232094 ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete + ldr r0, _02232098 ; =0x00002B38 + ldr r2, _0223209C ; =0x00010200 + str r7, [r5, r0] + add r0, r0, #4 + str r4, [r5, r0] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r1, r6, #0 + blx r3 + ldr r2, [r4, #0x20] + cmp r2, #0 + beq _02232054 + ldr r1, _02232094 ; =0x000029A0 + mov r3, #0x57 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x14] + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [r4, #0x18] + ldr r2, [sp, #0x14] + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r1, [r4, #0x14] + add r0, r6, #0 + bl AddTextPrinterParameterized2 + ldr r0, [sp, #0x14] + bl String_dtor + ldr r0, _02232090 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _02232094 ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete _02232054: - ldr r0, _022320A0 ; =0x00002B70 - add r0, r5, r0 - cmp r6, r0 - bne _0223206A - add r0, r6, #0 - mov r1, #0 - mov r2, #0x13 - mov r3, #0xa - bl FUN_0200D0BC - b _02232076 + ldr r0, _022320A0 ; =0x00002B70 + add r0, r5, r0 + cmp r6, r0 + bne _0223206A + add r0, r6, #0 + mov r1, #0 + mov r2, #0x13 + mov r3, #0xa + bl FUN_0200D0BC + b _02232076 _0223206A: - add r0, r6, #0 - mov r1, #0 - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CCA4 + add r0, r6, #0 + mov r1, #0 + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CCA4 _02232076: - ldr r1, [r4, #0xc] - ldr r0, [r4, #0x10] - mul r0, r1 - add r0, r7, r0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x10] + mul r0, r1 + add r0, r7, r0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop _02232084: .word MOD83_0223AEB0 _02232088: .word 0x0000299C _0223208C: .word 0x00000172 @@ -9336,880 +9336,880 @@ _02232094: .word 0x000029A0 _02232098: .word 0x00002B38 _0223209C: .word 0x00010200 _022320A0: .word 0x00002B70 - thumb_func_end MOD83_02231F88 + thumb_func_end MOD83_02231F88 - thumb_func_start MOD83_022320A4 + thumb_func_start MOD83_022320A4 MOD83_022320A4: ; 0x022320A4 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - add r6, r2, #0 - add r7, r4, #0 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r5, r0, #0 + add r6, r2, #0 + add r7, r4, #0 _022320AE: - add r4, r4, r6 - cmp r4, #3 - bne _022320B6 - mov r4, #0 + add r4, r4, r6 + cmp r4, #3 + bne _022320B6 + mov r4, #0 _022320B6: - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - bne _022320C0 - mov r4, #2 + mov r0, #0 + mvn r0, r0 + cmp r4, r0 + bne _022320C0 + mov r4, #2 _022320C0: - cmp r7, r4 - beq _022320D4 - mov r0, #0xad - lsl r0, r0, #6 - ldr r0, [r5, r0] - add r1, r4, #0 - bl FUN_0202AE4C - cmp r0, #0 - beq _022320AE + cmp r7, r4 + beq _022320D4 + mov r0, #0xad + lsl r0, r0, #6 + ldr r0, [r5, r0] + add r1, r4, #0 + bl FUN_0202AE4C + cmp r0, #0 + beq _022320AE _022320D4: - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022320A4 + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022320A4 - thumb_func_start MOD83_022320D8 + thumb_func_start MOD83_022320D8 MOD83_022320D8: ; 0x022320D8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r4, r2, #0 - mov r2, #1 - add r5, r0, #0 - str r2, [sp] - add r6, r3, #0 - ldr r3, [r5] - mov r0, #0x74 - bl GfGfxLoader_LoadFromNarc - add r1, sp, #4 - add r7, r0, #0 - bl NNS_G2dGetUnpackedScreenData - ldr r0, _02232114 ; =0x0000299C - ldr r2, [sp, #4] - lsl r1, r4, #0x18 - ldr r0, [r5, r0] - lsr r1, r1, #0x18 - add r2, #0xc - add r3, r6, #0 - bl BG_LoadScreenTilemapData - add r0, r7, #0 - bl FreeToHeap - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r4, r2, #0 + mov r2, #1 + add r5, r0, #0 + str r2, [sp] + add r6, r3, #0 + ldr r3, [r5] + mov r0, #0x74 + bl GfGfxLoader_LoadFromNarc + add r1, sp, #4 + add r7, r0, #0 + bl NNS_G2dGetUnpackedScreenData + ldr r0, _02232114 ; =0x0000299C + ldr r2, [sp, #4] + lsl r1, r4, #0x18 + ldr r0, [r5, r0] + lsr r1, r1, #0x18 + add r2, #0xc + add r3, r6, #0 + bl BG_LoadScreenTilemapData + add r0, r7, #0 + bl FreeToHeap + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _02232114: .word 0x0000299C - thumb_func_end MOD83_022320D8 + thumb_func_end MOD83_022320D8 - thumb_func_start MOD83_02232118 + thumb_func_start MOD83_02232118 MOD83_02232118: ; 0x02232118 - push {r3, r4, r5, lr} - sub sp, #0x10 - add r5, r0, #0 - mov r0, #1 - lsl r0, r0, #8 - str r0, [sp] - ldr r0, [r5] - mov r2, #0 - add r4, r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #3 - add r3, r2, #0 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #3 - lsl r0, r0, #0xc - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #6 - bl GfGfxLoader_LoadCharData - cmp r4, #0 - beq _0223215E - cmp r4, #1 - beq _0223217E - b _0223219C + push {r3, r4, r5, lr} + sub sp, #0x10 + add r5, r0, #0 + mov r0, #1 + lsl r0, r0, #8 + str r0, [sp] + ldr r0, [r5] + mov r2, #0 + add r4, r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #3 + add r3, r2, #0 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #3 + lsl r0, r0, #0xc + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #6 + bl GfGfxLoader_LoadCharData + cmp r4, #0 + beq _0223215E + cmp r4, #1 + beq _0223217E + b _0223219C _0223215E: - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #4 - bl GfGfxLoader_LoadScrnData - b _0223219C + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #4 + bl GfGfxLoader_LoadScrnData + b _0223219C _0223217E: - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #5 - bl GfGfxLoader_LoadScrnData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #5 + bl GfGfxLoader_LoadScrnData _0223219C: - mov r0, #0x20 - str r0, [sp] - ldr r0, [r5] - mov r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0xec - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #2 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r3, #3 - bl GfGfxLoader_LoadCharData - mov r2, #3 - add r0, r5, #0 - mov r1, #2 - lsl r3, r2, #9 - bl MOD83_022320D8 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #0xb - str r0, [sp, #8] - ldr r0, _02232204 ; =0x0000299C - mov r2, #0 - ldr r0, [r5, r0] - mov r1, #3 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, _02232204 ; =0x0000299C - mov r1, #3 - ldr r0, [r5, r0] - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r5] + mov r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0xec + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #2 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r3, #3 + bl GfGfxLoader_LoadCharData + mov r2, #3 + add r0, r5, #0 + mov r1, #2 + lsl r3, r2, #9 + bl MOD83_022320D8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #0xb + str r0, [sp, #8] + ldr r0, _02232204 ; =0x0000299C + mov r2, #0 + ldr r0, [r5, r0] + mov r1, #3 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, _02232204 ; =0x0000299C + mov r1, #3 + ldr r0, [r5, r0] + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 _02232204: .word 0x0000299C - thumb_func_end MOD83_02232118 + thumb_func_end MOD83_02232118 - thumb_func_start MOD83_02232208 + thumb_func_start MOD83_02232208 MOD83_02232208: ; 0x02232208 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - ldr r1, _02232270 ; =0x00002B68 - ldr r0, [r0, r1] - bl ListMenu_ProcessInput - add r4, r0, #0 - mov r0, #1 - mvn r0, r0 - cmp r4, r0 - beq _0223222E - add r0, r0, #1 - cmp r4, r0 - beq _0223226C - b _02232248 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + ldr r1, _02232270 ; =0x00002B68 + ldr r0, [r0, r1] + bl ListMenu_ProcessInput + add r4, r0, #0 + mov r0, #1 + mvn r0, r0 + cmp r4, r0 + beq _0223222E + add r0, r0, #1 + cmp r4, r0 + beq _0223226C + b _02232248 _0223222E: - ldr r0, _02232274 ; =0x000005DC - bl PlaySE - cmp r6, #0 - beq _0223226C - add r0, r7, #0 - blx r6 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223226C - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02232274 ; =0x000005DC + bl PlaySE + cmp r6, #0 + beq _0223226C + add r0, r7, #0 + blx r6 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223226C + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _02232248: - ldr r0, _02232274 ; =0x000005DC - bl PlaySE - cmp r4, #0 - beq _0223226C - cmp r4, #0x1e - bhs _0223225A - str r4, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02232274 ; =0x000005DC + bl PlaySE + cmp r4, #0 + beq _0223226C + cmp r4, #0x1e + bhs _0223225A + str r4, [r5] + pop {r3, r4, r5, r6, r7, pc} _0223225A: - ldr r0, _02232278 ; =MOD83_0223B89C - str r4, [r0] - add r0, r7, #0 - blx r4 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223226C - str r0, [r5] + ldr r0, _02232278 ; =MOD83_0223B89C + str r4, [r0] + add r0, r7, #0 + blx r4 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223226C + str r0, [r5] _0223226C: - pop {r3, r4, r5, r6, r7, pc} - nop + pop {r3, r4, r5, r6, r7, pc} + nop _02232270: .word 0x00002B68 _02232274: .word 0x000005DC _02232278: .word MOD83_0223B89C - thumb_func_end MOD83_02232208 + thumb_func_end MOD83_02232208 - thumb_func_start MOD83_0223227C + thumb_func_start MOD83_0223227C MOD83_0223227C: ; 0x0223227C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - ldr r1, _02232398 ; =0x00002D6C - add r5, r0, #0 - ldr r0, [r5, r1] - cmp r0, #0 - bne _022322DC - add r0, r1, #4 - ldr r0, [r5, r0] - cmp r0, #0 - bne _022322DC - add r1, #8 - ldr r0, [r5, r1] - cmp r0, #0 - bne _022322DC - bl MOD83_02238B38 - cmp r0, #1 - bne _022322A8 - add r0, r5, #0 - bl MOD83_022315F8 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + ldr r1, _02232398 ; =0x00002D6C + add r5, r0, #0 + ldr r0, [r5, r1] + cmp r0, #0 + bne _022322DC + add r0, r1, #4 + ldr r0, [r5, r0] + cmp r0, #0 + bne _022322DC + add r1, #8 + ldr r0, [r5, r1] + cmp r0, #0 + bne _022322DC + bl MOD83_02238B38 + cmp r0, #1 + bne _022322A8 + add r0, r5, #0 + bl MOD83_022315F8 _022322A8: - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0x18 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x1a - mov r2, #0x17 - mov r3, #0x19 - bl MOD83_02238BC4 - bl FUN_0206B888 - add r1, r0, #0 - mov r0, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #1 - str r0, [sp, #4] - mov r0, #0x13 - mov r3, #0x60 - bl GfGfxLoader_GXLoadPal + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0x18 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x1a + mov r2, #0x17 + mov r3, #0x19 + bl MOD83_02238BC4 + bl FUN_0206B888 + add r1, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #1 + str r0, [sp, #4] + mov r0, #0x13 + mov r3, #0x60 + bl GfGfxLoader_GXLoadPal _022322DC: - mov r0, #0xb2 - mov r6, #0 - str r0, [sp, #0x10] - str r6, [sp, #8] - add r4, r5, #0 - mov r7, #0x64 + mov r0, #0xb2 + mov r6, #0 + str r0, [sp, #0x10] + str r6, [sp, #8] + add r4, r5, #0 + mov r7, #0x64 _022322E8: - ldr r0, _0223239C ; =0x00002B60 - ldr r0, [r5, r0] - lsl r0, r0, #2 - add r1, r5, r0 - ldr r0, _022323A0 ; =0x00002B54 - ldr r1, [r1, r0] - ldr r0, [sp, #8] - add r1, r1, r0 - ldr r0, _022323A4 ; =0x0000034A - ldrh r0, [r1, r0] - str r0, [sp, #0xc] - cmp r0, #0 - bne _02232312 - ldr r0, _02232398 ; =0x00002D6C - ldr r0, [r4, r0] - cmp r0, #0 - beq _0223237C - mov r1, #0 - bl FUN_020200A0 - b _0223237C + ldr r0, _0223239C ; =0x00002B60 + ldr r0, [r5, r0] + lsl r0, r0, #2 + add r1, r5, r0 + ldr r0, _022323A0 ; =0x00002B54 + ldr r1, [r1, r0] + ldr r0, [sp, #8] + add r1, r1, r0 + ldr r0, _022323A4 ; =0x0000034A + ldrh r0, [r1, r0] + str r0, [sp, #0xc] + cmp r0, #0 + bne _02232312 + ldr r0, _02232398 ; =0x00002D6C + ldr r0, [r4, r0] + cmp r0, #0 + beq _0223237C + mov r1, #0 + bl FUN_020200A0 + b _0223237C _02232312: - add r0, r6, #0 - add r0, #0xa - str r0, [sp] - ldr r1, _02232398 ; =0x00002D6C - ldr r2, [sp, #0x10] - ldr r1, [r4, r1] - mov r0, #0 - mov r3, #0x10 - bl MOD83_02238DBC - ldr r1, _02232398 ; =0x00002D6C - str r0, [r4, r1] - mov r1, #0 - ldr r0, [sp, #0xc] - add r2, r1, #0 - bl FUN_0206B6D4 - add r1, r0, #0 - ldr r0, [r5] - mov r2, #0 - str r0, [sp] - mov r0, #0x13 - add r3, sp, #0x18 - bl GfGfxLoader_GetCharData - str r0, [sp, #0x14] - ldr r0, [sp, #0x18] - mov r1, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #8 - bl DC_FlushRange - ldr r0, [sp, #0x18] - mov r2, #2 - ldr r0, [r0, #0x14] - lsl r1, r7, #5 - lsl r2, r2, #8 - bl GX_LoadOBJ - mov r1, #0 - ldr r0, [sp, #0xc] - add r2, r1, #0 - bl FUN_0206B7BC - add r1, r0, #0 - ldr r0, _02232398 ; =0x00002D6C - add r1, r1, #3 - ldr r0, [r4, r0] - bl FUN_02020248 - ldr r0, [sp, #0x14] - bl FreeToHeap + add r0, r6, #0 + add r0, #0xa + str r0, [sp] + ldr r1, _02232398 ; =0x00002D6C + ldr r2, [sp, #0x10] + ldr r1, [r4, r1] + mov r0, #0 + mov r3, #0x10 + bl MOD83_02238DBC + ldr r1, _02232398 ; =0x00002D6C + str r0, [r4, r1] + mov r1, #0 + ldr r0, [sp, #0xc] + add r2, r1, #0 + bl FUN_0206B6D4 + add r1, r0, #0 + ldr r0, [r5] + mov r2, #0 + str r0, [sp] + mov r0, #0x13 + add r3, sp, #0x18 + bl GfGfxLoader_GetCharData + str r0, [sp, #0x14] + ldr r0, [sp, #0x18] + mov r1, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #8 + bl DC_FlushRange + ldr r0, [sp, #0x18] + mov r2, #2 + ldr r0, [r0, #0x14] + lsl r1, r7, #5 + lsl r2, r2, #8 + bl GX_LoadOBJ + mov r1, #0 + ldr r0, [sp, #0xc] + add r2, r1, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, _02232398 ; =0x00002D6C + add r1, r1, #3 + ldr r0, [r4, r0] + bl FUN_02020248 + ldr r0, [sp, #0x14] + bl FreeToHeap _0223237C: - ldr r0, [sp, #8] - add r6, r6, #1 - add r0, r0, #2 - str r0, [sp, #8] - ldr r0, [sp, #0x10] - add r4, r4, #4 - add r0, #0x19 - add r7, #0x10 - str r0, [sp, #0x10] - cmp r6, #3 - blt _022322E8 - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + ldr r0, [sp, #8] + add r6, r6, #1 + add r0, r0, #2 + str r0, [sp, #8] + ldr r0, [sp, #0x10] + add r4, r4, #4 + add r0, #0x19 + add r7, #0x10 + str r0, [sp, #0x10] + cmp r6, #3 + blt _022322E8 + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _02232398: .word 0x00002D6C _0223239C: .word 0x00002B60 _022323A0: .word 0x00002B54 _022323A4: .word 0x0000034A - thumb_func_end MOD83_0223227C + thumb_func_end MOD83_0223227C - thumb_func_start MOD83_022323A8 + thumb_func_start MOD83_022323A8 MOD83_022323A8: ; 0x022323A8 - push {r4, lr} - mov r2, #2 - add r4, r0, #0 - mov r0, #3 - mov r1, #0x57 - lsl r2, r2, #0x10 - bl CreateHeap - ldr r1, _0223240C ; =0x00003CF4 - add r0, r4, #0 - mov r2, #0x57 - bl OverlayManager_CreateAndGetData - ldr r2, _0223240C ; =0x00003CF4 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x57 - bl BgConfig_Alloc - ldr r1, _02232410 ; =0x0000299C - str r0, [r4, r1] - mov r0, #0x57 - str r0, [r4] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - ldr r0, _02232414 ; =0x00002B60 - mov r1, #2 - str r1, [r4, r0] - mov r1, #1 - add r0, #0x7c - str r1, [r4, r0] - mov r0, #0x57 - bl MOD83_02238770 - mov r2, #3 - mov r0, #0 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - mov r0, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + mov r2, #2 + add r4, r0, #0 + mov r0, #3 + mov r1, #0x57 + lsl r2, r2, #0x10 + bl CreateHeap + ldr r1, _0223240C ; =0x00003CF4 + add r0, r4, #0 + mov r2, #0x57 + bl OverlayManager_CreateAndGetData + ldr r2, _0223240C ; =0x00003CF4 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x57 + bl BgConfig_Alloc + ldr r1, _02232410 ; =0x0000299C + str r0, [r4, r1] + mov r0, #0x57 + str r0, [r4] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + ldr r0, _02232414 ; =0x00002B60 + mov r1, #2 + str r1, [r4, r0] + mov r1, #1 + add r0, #0x7c + str r1, [r4, r0] + mov r0, #0x57 + bl MOD83_02238770 + mov r2, #3 + mov r0, #0 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + mov r0, #1 + pop {r4, pc} + .align 2, 0 _0223240C: .word 0x00003CF4 _02232410: .word 0x0000299C _02232414: .word 0x00002B60 - thumb_func_end MOD83_022323A8 + thumb_func_end MOD83_022323A8 - thumb_func_start MOD83_02232418 + thumb_func_start MOD83_02232418 MOD83_02232418: ; 0x02232418 - push {r4, lr} - add r4, r1, #0 - bl FUN_020129C8 - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_0201299C - ldr r1, _02232438 ; =0x04000010 - mov r2, #8 - mov r3, #1 - bl FUN_020129D8 - pop {r4, pc} - nop + push {r4, lr} + add r4, r1, #0 + bl FUN_020129C8 + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_0201299C + ldr r1, _02232438 ; =0x04000010 + mov r2, #8 + mov r3, #1 + bl FUN_020129D8 + pop {r4, pc} + nop _02232438: .word 0x04000010 - thumb_func_end MOD83_02232418 + thumb_func_end MOD83_02232418 - thumb_func_start MOD83_0223243C + thumb_func_start MOD83_0223243C MOD83_0223243C: ; 0x0223243C - push {r3, r4, r5, lr} - ldr r4, _02232490 ; =0x000030D0 - ldr r5, _02232494 ; =0x00000C14 - add r4, r0, r4 - add r0, r5, #0 - str r1, [r4, r5] - sub r0, #0xc - str r2, [r4, r0] - add r0, r5, #0 - sub r0, #8 - sub r5, #0x14 - str r3, [r4, r0] - ldr r0, [r4, r5] - cmp r0, #0 - bne _0223246E - mov r2, #6 - lsl r2, r2, #8 - mov r0, #0x57 - add r1, r4, #0 - add r2, r4, r2 - bl FUN_02012944 - mov r1, #3 - lsl r1, r1, #0xa - str r0, [r4, r1] + push {r3, r4, r5, lr} + ldr r4, _02232490 ; =0x000030D0 + ldr r5, _02232494 ; =0x00000C14 + add r4, r0, r4 + add r0, r5, #0 + str r1, [r4, r5] + sub r0, #0xc + str r2, [r4, r0] + add r0, r5, #0 + sub r0, #8 + sub r5, #0x14 + str r3, [r4, r0] + ldr r0, [r4, r5] + cmp r0, #0 + bne _0223246E + mov r2, #6 + lsl r2, r2, #8 + mov r0, #0x57 + add r1, r4, #0 + add r2, r4, r2 + bl FUN_02012944 + mov r1, #3 + lsl r1, r1, #0xa + str r0, [r4, r1] _0223246E: - ldr r0, _02232498 ; =0x00000C04 - ldr r0, [r4, r0] - cmp r0, #0 - bne _02232486 - mov r2, #1 - ldr r0, _0223249C ; =MOD83_02232418 - add r1, r4, #0 - lsl r2, r2, #0xa - bl FUN_0200CA60 - ldr r1, _02232498 ; =0x00000C04 - str r0, [r4, r1] + ldr r0, _02232498 ; =0x00000C04 + ldr r0, [r4, r0] + cmp r0, #0 + bne _02232486 + mov r2, #1 + ldr r0, _0223249C ; =MOD83_02232418 + add r1, r4, #0 + lsl r2, r2, #0xa + bl FUN_0200CA60 + ldr r1, _02232498 ; =0x00000C04 + str r0, [r4, r1] _02232486: - mov r0, #0xc1 - mov r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0xc1 + mov r1, #1 + lsl r0, r0, #4 + str r1, [r4, r0] + pop {r3, r4, r5, pc} + .align 2, 0 _02232490: .word 0x000030D0 _02232494: .word 0x00000C14 _02232498: .word 0x00000C04 _0223249C: .word MOD83_02232418 - thumb_func_end MOD83_0223243C + thumb_func_end MOD83_0223243C - thumb_func_start MOD83_022324A0 + thumb_func_start MOD83_022324A0 MOD83_022324A0: ; 0x022324A0 - push {r4, lr} - ldr r1, _022324D4 ; =0x000030D0 - add r4, r0, r1 - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - cmp r0, #0 - beq _022324B4 - bl FUN_02012974 + push {r4, lr} + ldr r1, _022324D4 ; =0x000030D0 + add r4, r0, r1 + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + cmp r0, #0 + beq _022324B4 + bl FUN_02012974 _022324B4: - ldr r0, _022324D8 ; =0x00000C04 - ldr r0, [r4, r0] - cmp r0, #0 - beq _022324C0 - bl FUN_0200CAB4 + ldr r0, _022324D8 ; =0x00000C04 + ldr r0, [r4, r0] + cmp r0, #0 + beq _022324C0 + bl FUN_0200CAB4 _022324C0: - mov r0, #3 - mov r1, #0 - lsl r0, r0, #0xa - str r1, [r4, r0] - add r0, r0, #4 - str r1, [r4, r0] - bl FUN_020129C8 - pop {r4, pc} - nop + mov r0, #3 + mov r1, #0 + lsl r0, r0, #0xa + str r1, [r4, r0] + add r0, r0, #4 + str r1, [r4, r0] + bl FUN_020129C8 + pop {r4, pc} + nop _022324D4: .word 0x000030D0 _022324D8: .word 0x00000C04 - thumb_func_end MOD83_022324A0 + thumb_func_end MOD83_022324A0 - thumb_func_start MOD83_022324DC + thumb_func_start MOD83_022324DC MOD83_022324DC: ; 0x022324DC - push {r3, r4, r5, r6, r7, lr} - ldr r1, _022325E4 ; =0x000030D0 - mov r5, #0x15 - add r4, r0, r1 - mov r0, #0xc1 - lsl r0, r0, #4 - ldr r1, [r4, r0] - lsl r5, r5, #0xe - cmp r1, #0 - bne _022324F4 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + ldr r1, _022325E4 ; =0x000030D0 + mov r5, #0x15 + add r4, r0, r1 + mov r0, #0xc1 + lsl r0, r0, #4 + ldr r1, [r4, r0] + lsl r5, r5, #0xe + cmp r1, #0 + bne _022324F4 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022324F4: - add r1, r0, #4 - ldr r1, [r4, r1] - cmp r1, #1 - bne _02232542 - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - sub r1, r0, #4 - ldr r1, [r4, r1] - add r2, r2, r1 - add r1, r0, #0 - sub r1, #8 - str r2, [r4, r1] - sub r1, r0, #4 - ldr r2, [r4, r1] - add r1, r2, #0 - add r2, r2, r1 - sub r1, r0, #4 - str r2, [r4, r1] - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - asr r1, r2, #0xb - lsr r1, r1, #0x14 - add r1, r2, r1 - asr r2, r1, #0xc - mov r1, #0xfa - lsl r1, r1, #2 - cmp r2, r1 - ble _0223257C - mov r2, #0 - add r1, r0, #0 - str r2, [r4, r0] - sub r1, #8 - str r2, [r4, r1] - sub r0, r0, #4 - mov r5, #0xa8 - str r2, [r4, r0] - b _0223257C + add r1, r0, #4 + ldr r1, [r4, r1] + cmp r1, #1 + bne _02232542 + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + sub r1, r0, #4 + ldr r1, [r4, r1] + add r2, r2, r1 + add r1, r0, #0 + sub r1, #8 + str r2, [r4, r1] + sub r1, r0, #4 + ldr r2, [r4, r1] + add r1, r2, #0 + add r2, r2, r1 + sub r1, r0, #4 + str r2, [r4, r1] + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + asr r1, r2, #0xb + lsr r1, r1, #0x14 + add r1, r2, r1 + asr r2, r1, #0xc + mov r1, #0xfa + lsl r1, r1, #2 + cmp r2, r1 + ble _0223257C + mov r2, #0 + add r1, r0, #0 + str r2, [r4, r0] + sub r1, #8 + str r2, [r4, r1] + sub r0, r0, #4 + mov r5, #0xa8 + str r2, [r4, r0] + b _0223257C _02232542: - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - sub r1, r0, #4 - ldr r1, [r4, r1] - sub r2, r2, r1 - add r1, r0, #0 - sub r1, #8 - str r2, [r4, r1] - sub r1, r0, #4 - ldr r2, [r4, r1] - lsr r1, r2, #0x1f - add r1, r2, r1 - asr r2, r1, #1 - sub r1, r0, #4 - str r2, [r4, r1] - mov r2, #1 - ldr r1, [r4, r1] - lsl r2, r2, #0xa - cmp r1, r2 - bge _0223257C - mov r1, #0 - lsl r3, r2, #2 - add r2, r0, #0 - str r1, [r4, r0] - sub r2, #8 - str r3, [r4, r2] - sub r0, r0, #4 - str r1, [r4, r0] + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + sub r1, r0, #4 + ldr r1, [r4, r1] + sub r2, r2, r1 + add r1, r0, #0 + sub r1, #8 + str r2, [r4, r1] + sub r1, r0, #4 + ldr r2, [r4, r1] + lsr r1, r2, #0x1f + add r1, r2, r1 + asr r2, r1, #1 + sub r1, r0, #4 + str r2, [r4, r1] + mov r2, #1 + ldr r1, [r4, r1] + lsl r2, r2, #0xa + cmp r1, r2 + bge _0223257C + mov r1, #0 + lsl r3, r2, #2 + add r2, r0, #0 + str r1, [r4, r0] + sub r2, #8 + str r3, [r4, r2] + sub r0, r0, #4 + str r1, [r4, r0] _0223257C: - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_02012988 - add r2, r0, #0 - mov r0, #0x54 - add r3, r0, #0 - add r3, #0xfc + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_02012988 + add r2, r0, #0 + mov r0, #0x54 + add r3, r0, #0 + add r3, #0xfc _0223258E: - asr r1, r5, #0xb - lsr r1, r1, #0x14 - add r1, r5, r1 - asr r1, r1, #0xc - bpl _0223259A - mov r1, #0 + asr r1, r5, #0xb + lsr r1, r1, #0x14 + add r1, r5, r1 + asr r1, r1, #0xc + bpl _0223259A + mov r1, #0 _0223259A: - cmp r1, #0xa8 - ble _022325A0 - mov r1, #0xa8 + cmp r1, #0xa8 + ble _022325A0 + mov r1, #0xa8 _022325A0: - lsl r6, r3, #1 - add r7, r2, r6 - sub r6, r1, r0 - strh r6, [r7, #6] - ldrh r6, [r7, #6] - sub r1, r0, r1 - add r3, r3, #4 - strh r6, [r7, #2] - mov r6, #0xa8 - sub r6, r6, r0 - lsl r6, r6, #3 - add r6, r2, r6 - strh r1, [r6, #6] - ldrh r1, [r6, #6] - add r0, r0, #1 - strh r1, [r6, #2] - ldr r1, _022325E8 ; =0x00000C08 - ldr r1, [r4, r1] - add r5, r5, r1 - cmp r0, #0xa8 - blt _0223258E - mov r1, #6 - add r0, r2, #0 - lsl r1, r1, #8 - bl DC_FlushRange - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_020129B4 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r6, r3, #1 + add r7, r2, r6 + sub r6, r1, r0 + strh r6, [r7, #6] + ldrh r6, [r7, #6] + sub r1, r0, r1 + add r3, r3, #4 + strh r6, [r7, #2] + mov r6, #0xa8 + sub r6, r6, r0 + lsl r6, r6, #3 + add r6, r2, r6 + strh r1, [r6, #6] + ldrh r1, [r6, #6] + add r0, r0, #1 + strh r1, [r6, #2] + ldr r1, _022325E8 ; =0x00000C08 + ldr r1, [r4, r1] + add r5, r5, r1 + cmp r0, #0xa8 + blt _0223258E + mov r1, #6 + add r0, r2, #0 + lsl r1, r1, #8 + bl DC_FlushRange + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_020129B4 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _022325E4: .word 0x000030D0 _022325E8: .word 0x00000C08 - thumb_func_end MOD83_022324DC + thumb_func_end MOD83_022324DC - thumb_func_start MOD83_022325EC + thumb_func_start MOD83_022325EC MOD83_022325EC: ; 0x022325EC - push {r4, lr} - add r4, r0, #0 - bl MOD83_022394CC - sub r0, r0, #2 - cmp r0, #1 - bhi _02232606 - ldr r0, _02232608 ; =0x0000061B - bl PlaySE - ldr r0, _0223260C ; =0x00003CE8 - mov r1, #0 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + bl MOD83_022394CC + sub r0, r0, #2 + cmp r0, #1 + bhi _02232606 + ldr r0, _02232608 ; =0x0000061B + bl PlaySE + ldr r0, _0223260C ; =0x00003CE8 + mov r1, #0 + str r1, [r4, r0] _02232606: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02232608: .word 0x0000061B _0223260C: .word 0x00003CE8 - thumb_func_end MOD83_022325EC + thumb_func_end MOD83_022325EC - thumb_func_start MOD83_02232610 + thumb_func_start MOD83_02232610 MOD83_02232610: ; 0x02232610 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02232658 ; =0x00002B60 - ldr r1, [r4, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r4, r1 - ldr r2, [r1, r0] - mov r0, #0x35 - lsl r0, r0, #4 - ldrb r1, [r2, r0] - cmp r1, #0xff - beq _0223262E - add r1, r1, #1 - strb r1, [r2, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _02232658 ; =0x00002B60 + ldr r1, [r4, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r4, r1 + ldr r2, [r1, r0] + mov r0, #0x35 + lsl r0, r0, #4 + ldrb r1, [r2, r0] + cmp r1, #0xff + beq _0223262E + add r1, r1, #1 + strb r1, [r2, r0] _0223262E: - ldr r0, _02232658 ; =0x00002B60 - ldr r1, [r4, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r4, r1 - ldr r2, [r1, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - ldrb r1, [r2, r0] - cmp r1, #0xff - beq _02232648 - sub r1, r1, #1 - strb r1, [r2, r0] + ldr r0, _02232658 ; =0x00002B60 + ldr r1, [r4, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r4, r1 + ldr r2, [r1, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + ldrb r1, [r2, r0] + cmp r1, #0xff + beq _02232648 + sub r1, r1, #1 + strb r1, [r2, r0] _02232648: - ldr r0, _0223265C ; =0x00002B44 - ldr r0, [r4, r0] - bl MOD83_022394BC - ldr r1, _02232660 ; =MOD83_022325EC - ldr r0, _02232664 ; =0x00003CE8 - str r1, [r4, r0] - pop {r4, pc} - .align 2, 0 + ldr r0, _0223265C ; =0x00002B44 + ldr r0, [r4, r0] + bl MOD83_022394BC + ldr r1, _02232660 ; =MOD83_022325EC + ldr r0, _02232664 ; =0x00003CE8 + str r1, [r4, r0] + pop {r4, pc} + .align 2, 0 _02232658: .word 0x00002B60 _0223265C: .word 0x00002B44 _02232660: .word MOD83_022325EC _02232664: .word 0x00003CE8 - thumb_func_end MOD83_02232610 + thumb_func_end MOD83_02232610 - thumb_func_start MOD83_02232668 + thumb_func_start MOD83_02232668 MOD83_02232668: ; 0x02232668 - push {r3, r4, r5, r6, r7, lr} - add r7, r2, #0 - ldr r2, _02232768 ; =gMain - add r6, r1, #0 - ldr r3, [r2, #0x48] - ldr r1, _0223276C ; =0x00003CEC - add r5, r0, #0 - mov r2, #0x10 - ldr r0, [r5, r1] - tst r2, r3 - beq _02232686 - cmp r0, #1 - beq _02232686 - mov r2, #1 - str r2, [r5, r1] + push {r3, r4, r5, r6, r7, lr} + add r7, r2, #0 + ldr r2, _02232768 ; =gMain + add r6, r1, #0 + ldr r3, [r2, #0x48] + ldr r1, _0223276C ; =0x00003CEC + add r5, r0, #0 + mov r2, #0x10 + ldr r0, [r5, r1] + tst r2, r3 + beq _02232686 + cmp r0, #1 + beq _02232686 + mov r2, #1 + str r2, [r5, r1] _02232686: - ldr r1, _02232768 ; =gMain - ldr r2, [r1, #0x48] - mov r1, #0x20 - tst r1, r2 - beq _0223269C - ldr r1, _0223276C ; =0x00003CEC - ldr r2, [r5, r1] - cmp r2, #0 - beq _0223269C - mov r2, #0 - str r2, [r5, r1] + ldr r1, _02232768 ; =gMain + ldr r2, [r1, #0x48] + mov r1, #0x20 + tst r1, r2 + beq _0223269C + ldr r1, _0223276C ; =0x00003CEC + ldr r2, [r5, r1] + cmp r2, #0 + beq _0223269C + mov r2, #0 + str r2, [r5, r1] _0223269C: - ldr r1, _0223276C ; =0x00003CEC - ldr r1, [r5, r1] - cmp r0, r1 - beq _022326CC - cmp r1, #0 - bne _022326AC - mov r1, #1 - b _022326AE + ldr r1, _0223276C ; =0x00003CEC + ldr r1, [r5, r1] + cmp r0, r1 + beq _022326CC + cmp r1, #0 + bne _022326AC + mov r1, #1 + b _022326AE _022326AC: - mov r1, #0 + mov r1, #0 _022326AE: - ldr r0, _02232770 ; =0x00002D64 - ldr r0, [r5, r0] - bl FUN_02020130 - ldr r0, _0223276C ; =0x00003CEC - ldr r0, [r5, r0] - cmp r0, #0 - beq _022326C2 - mov r1, #1 - b _022326C4 + ldr r0, _02232770 ; =0x00002D64 + ldr r0, [r5, r0] + bl FUN_02020130 + ldr r0, _0223276C ; =0x00003CEC + ldr r0, [r5, r0] + cmp r0, #0 + beq _022326C2 + mov r1, #1 + b _022326C4 _022326C2: - mov r1, #0 + mov r1, #0 _022326C4: - ldr r0, _02232774 ; =0x00002D68 - ldr r0, [r5, r0] - bl FUN_02020130 + ldr r0, _02232774 ; =0x00002D68 + ldr r0, [r5, r0] + bl FUN_02020130 _022326CC: - ldr r0, _02232768 ; =gMain - mov r4, #0 - ldr r1, [r0, #0x48] - mov r0, #2 - add r2, r1, #0 - tst r2, r0 - beq _022326DE - add r4, r0, #0 - b _0223270E + ldr r0, _02232768 ; =gMain + mov r4, #0 + ldr r1, [r0, #0x48] + mov r0, #2 + add r2, r1, #0 + tst r2, r0 + beq _022326DE + add r4, r0, #0 + b _0223270E _022326DE: - mov r0, #1 - and r1, r0 - beq _022326F4 - cmp r6, #0 - beq _022326F4 - ldr r2, _0223276C ; =0x00003CEC - ldr r2, [r5, r2] - cmp r2, #0 - bne _022326F4 - add r4, r0, #0 - b _0223270E + mov r0, #1 + and r1, r0 + beq _022326F4 + cmp r6, #0 + beq _022326F4 + ldr r2, _0223276C ; =0x00003CEC + ldr r2, [r5, r2] + cmp r2, #0 + bne _022326F4 + add r4, r0, #0 + b _0223270E _022326F4: - cmp r1, #0 - beq _02232704 - ldr r0, _0223276C ; =0x00003CEC - ldr r0, [r5, r0] - cmp r0, #1 - bne _02232704 - mov r4, #2 - b _0223270E + cmp r1, #0 + beq _02232704 + ldr r0, _0223276C ; =0x00003CEC + ldr r0, [r5, r0] + cmp r0, #1 + bne _02232704 + mov r4, #2 + b _0223270E _02232704: - cmp r1, #0 - beq _0223270E - cmp r6, #0 - bne _0223270E - mov r4, #3 + cmp r1, #0 + beq _0223270E + cmp r6, #0 + bne _0223270E + mov r4, #3 _0223270E: - cmp r4, #1 - bne _02232746 - ldr r0, _02232778 ; =0x000005DC - bl PlaySE - mov r0, #0xab - bl FUN_02031588 - mov r3, #0xa - ldr r1, _0223277C ; =0x00002BD4 - mov r0, #1 - str r0, [r5, r1] - mov r0, #0x15 - sub r1, #0x64 - str r0, [r7] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x11 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r0, _02232780 ; =0x00002B70 - mov r1, #0x13 - add r0, r5, r0 - bl FUN_0200D858 - ldr r1, _02232784 ; =0x00003CF0 - str r0, [r5, r1] + cmp r4, #1 + bne _02232746 + ldr r0, _02232778 ; =0x000005DC + bl PlaySE + mov r0, #0xab + bl FUN_02031588 + mov r3, #0xa + ldr r1, _0223277C ; =0x00002BD4 + mov r0, #1 + str r0, [r5, r1] + mov r0, #0x15 + sub r1, #0x64 + str r0, [r7] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x11 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r0, _02232780 ; =0x00002B70 + mov r1, #0x13 + add r0, r5, r0 + bl FUN_0200D858 + ldr r1, _02232784 ; =0x00003CF0 + str r0, [r5, r1] _02232746: - cmp r4, #2 - bne _0223275A - ldr r0, _02232778 ; =0x000005DC - bl PlaySE - add r0, r5, #0 - add r1, r7, #0 - mov r2, #0x13 - bl MOD83_02233084 + cmp r4, #2 + bne _0223275A + ldr r0, _02232778 ; =0x000005DC + bl PlaySE + add r0, r5, #0 + add r1, r7, #0 + mov r2, #0x13 + bl MOD83_02233084 _0223275A: - cmp r4, #3 - bne _02232764 - ldr r0, _02232778 ; =0x000005DC - bl PlaySE + cmp r4, #3 + bne _02232764 + ldr r0, _02232778 ; =0x000005DC + bl PlaySE _02232764: - pop {r3, r4, r5, r6, r7, pc} - nop + pop {r3, r4, r5, r6, r7, pc} + nop _02232768: .word gMain _0223276C: .word 0x00003CEC _02232770: .word 0x00002D64 @@ -10218,453 +10218,453 @@ _02232778: .word 0x000005DC _0223277C: .word 0x00002BD4 _02232780: .word 0x00002B70 _02232784: .word 0x00003CF0 - thumb_func_end MOD83_02232668 + thumb_func_end MOD83_02232668 - thumb_func_start MOD83_02232788 + thumb_func_start MOD83_02232788 MOD83_02232788: ; 0x02232788 - push {r4, r5, r6, lr} - sub sp, #8 - add r5, r1, #0 - add r6, r0, #0 - bl OverlayManager_GetData - ldr r1, [r5] - add r4, r0, #0 - cmp r1, #0x1d - bls _0223279E - b _02232CF4 + push {r4, r5, r6, lr} + sub sp, #8 + add r5, r1, #0 + add r6, r0, #0 + bl OverlayManager_GetData + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #0x1d + bls _0223279E + b _02232CF4 _0223279E: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _022327AA: ; jump table - .short _022327E6 - _022327AA - 2 ; case 0 - .short _02232854 - _022327AA - 2 ; case 1 - .short _02232866 - _022327AA - 2 ; case 2 - .short _022328DC - _022327AA - 2 ; case 3 - .short _02232956 - _022327AA - 2 ; case 4 - .short _0223297E - _022327AA - 2 ; case 5 - .short _0223299E - _022327AA - 2 ; case 6 - .short _022329D6 - _022327AA - 2 ; case 7 - .short _022329FA - _022327AA - 2 ; case 8 - .short _02232A20 - _022327AA - 2 ; case 9 - .short _02232A4C - _022327AA - 2 ; case 10 - .short _02232A88 - _022327AA - 2 ; case 11 - .short _02232AAC - _022327AA - 2 ; case 12 - .short _02232AB8 - _022327AA - 2 ; case 13 - .short _02232AC4 - _022327AA - 2 ; case 14 - .short _02232AD6 - _022327AA - 2 ; case 15 - .short _02232AE2 - _022327AA - 2 ; case 16 - .short _02232B24 - _022327AA - 2 ; case 17 - .short _02232B3A - _022327AA - 2 ; case 18 - .short _02232BDC - _022327AA - 2 ; case 19 - .short _02232BE8 - _022327AA - 2 ; case 20 - .short _02232C36 - _022327AA - 2 ; case 21 - .short _02232C26 - _022327AA - 2 ; case 22 - .short _02232C6A - _022327AA - 2 ; case 23 - .short _02232C7E - _022327AA - 2 ; case 24 - .short _02232CB8 - _022327AA - 2 ; case 25 - .short _02232CC8 - _022327AA - 2 ; case 26 - .short _02232CD4 - _022327AA - 2 ; case 27 - .short _02232CE4 - _022327AA - 2 ; case 28 - .short _02232CF4 - _022327AA - 2 ; case 29 + .short _022327E6 - _022327AA - 2 ; case 0 + .short _02232854 - _022327AA - 2 ; case 1 + .short _02232866 - _022327AA - 2 ; case 2 + .short _022328DC - _022327AA - 2 ; case 3 + .short _02232956 - _022327AA - 2 ; case 4 + .short _0223297E - _022327AA - 2 ; case 5 + .short _0223299E - _022327AA - 2 ; case 6 + .short _022329D6 - _022327AA - 2 ; case 7 + .short _022329FA - _022327AA - 2 ; case 8 + .short _02232A20 - _022327AA - 2 ; case 9 + .short _02232A4C - _022327AA - 2 ; case 10 + .short _02232A88 - _022327AA - 2 ; case 11 + .short _02232AAC - _022327AA - 2 ; case 12 + .short _02232AB8 - _022327AA - 2 ; case 13 + .short _02232AC4 - _022327AA - 2 ; case 14 + .short _02232AD6 - _022327AA - 2 ; case 15 + .short _02232AE2 - _022327AA - 2 ; case 16 + .short _02232B24 - _022327AA - 2 ; case 17 + .short _02232B3A - _022327AA - 2 ; case 18 + .short _02232BDC - _022327AA - 2 ; case 19 + .short _02232BE8 - _022327AA - 2 ; case 20 + .short _02232C36 - _022327AA - 2 ; case 21 + .short _02232C26 - _022327AA - 2 ; case 22 + .short _02232C6A - _022327AA - 2 ; case 23 + .short _02232C7E - _022327AA - 2 ; case 24 + .short _02232CB8 - _022327AA - 2 ; case 25 + .short _02232CC8 - _022327AA - 2 ; case 26 + .short _02232CD4 - _022327AA - 2 ; case 27 + .short _02232CE4 - _022327AA - 2 ; case 28 + .short _02232CF4 - _022327AA - 2 ; case 29 _022327E6: - add r0, r6, #0 - bl OverlayManager_GetField18 - ldr r1, [r0, #8] - ldr r0, _02232B54 ; =0x00002B44 - str r1, [r4, r0] - ldr r0, [r4, r0] - bl FUN_0202251C - mov r1, #0xad - lsl r1, r1, #6 - str r0, [r4, r1] - add r0, r1, #4 - ldr r0, [r4, r0] - bl Sav2_PlayerData_GetOptionsAddr - ldr r1, _02232B58 ; =0x00002B48 - str r0, [r4, r1] - ldr r0, [r4, r1] - bl Options_GetFrame - ldr r1, _02232B5C ; =0x00002B4C - str r0, [r4, r1] - sub r1, #0xc - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_0202AC64 - ldr r1, _02232B60 ; =0x00002B54 - str r0, [r4, r1] - sub r1, #0x14 - ldr r0, [r4, r1] - mov r1, #1 - bl FUN_0202AC64 - ldr r1, _02232B64 ; =0x00002B58 - str r0, [r4, r1] - sub r1, #0x18 - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_0202AC64 - ldr r1, _02232B68 ; =0x00002B5C - mov r2, #1 - str r0, [r4, r1] - add r1, r1, #4 - ldr r1, [r4, r1] - add r0, r4, #0 - bl MOD83_022320A4 - ldr r1, _02232B6C ; =0x00002B60 - str r0, [r4, r1] - mov r0, #1 - str r0, [r5] - b _02232CF4 + add r0, r6, #0 + bl OverlayManager_GetField18 + ldr r1, [r0, #8] + ldr r0, _02232B54 ; =0x00002B44 + str r1, [r4, r0] + ldr r0, [r4, r0] + bl FUN_0202251C + mov r1, #0xad + lsl r1, r1, #6 + str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + bl Sav2_PlayerData_GetOptionsAddr + ldr r1, _02232B58 ; =0x00002B48 + str r0, [r4, r1] + ldr r0, [r4, r1] + bl Options_GetFrame + ldr r1, _02232B5C ; =0x00002B4C + str r0, [r4, r1] + sub r1, #0xc + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_0202AC64 + ldr r1, _02232B60 ; =0x00002B54 + str r0, [r4, r1] + sub r1, #0x14 + ldr r0, [r4, r1] + mov r1, #1 + bl FUN_0202AC64 + ldr r1, _02232B64 ; =0x00002B58 + str r0, [r4, r1] + sub r1, #0x18 + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_0202AC64 + ldr r1, _02232B68 ; =0x00002B5C + mov r2, #1 + str r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + add r0, r4, #0 + bl MOD83_022320A4 + ldr r1, _02232B6C ; =0x00002B60 + str r0, [r4, r1] + mov r0, #1 + str r0, [r5] + b _02232CF4 _02232854: - bl MOD83_022331C0 - ldr r0, _02232B70 ; =0x0000299C - ldr r0, [r4, r0] - bl MOD83_022331E0 - mov r0, #2 - str r0, [r5] - b _02232CF4 + bl MOD83_022331C0 + ldr r0, _02232B70 ; =0x0000299C + ldr r0, [r4, r0] + bl MOD83_022331E0 + mov r0, #2 + str r0, [r5] + b _02232CF4 _02232866: - bl FUN_0201BD5C - add r0, r4, #0 - mov r1, #0 - bl MOD83_02232118 - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x57 - bl FUN_02002ED0 - mov r1, #0 - str r1, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r2, #1 - ldr r0, [r4, r0] - mov r3, #0xd - bl FUN_0200CB00 - mov r0, #1 - str r0, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r1, #0 - ldr r0, [r4, r0] - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, _02232B5C ; =0x00002B4C - mov r1, #0 - ldr r0, [r4, r0] - mov r2, #0x13 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r3, #0xa - ldr r0, [r4, r0] - bl FUN_0200CD68 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - add r0, r4, #0 - mov r1, #1 - mov r2, #3 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl FUN_0201BD5C + add r0, r4, #0 + mov r1, #0 + bl MOD83_02232118 + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x57 + bl FUN_02002ED0 + mov r1, #0 + str r1, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r2, #1 + ldr r0, [r4, r0] + mov r3, #0xd + bl FUN_0200CB00 + mov r0, #1 + str r0, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r1, #0 + ldr r0, [r4, r0] + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, _02232B5C ; =0x00002B4C + mov r1, #0 + ldr r0, [r4, r0] + mov r2, #0x13 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r3, #0xa + ldr r0, [r4, r0] + bl FUN_0200CD68 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + add r0, r4, #0 + mov r1, #1 + mov r2, #3 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _022328DC: - ldr r1, _02232B6C ; =0x00002B60 - mov r2, #0x40 - ldr r6, [r4, r1] - ldr r1, _02232B74 ; =gMain - ldr r1, [r1, #0x48] - add r3, r1, #0 - tst r3, r2 - beq _022328F8 - add r1, r6, #0 - sub r2, #0x41 - bl MOD83_022320A4 - add r6, r0, #0 - b _02232934 + ldr r1, _02232B6C ; =0x00002B60 + mov r2, #0x40 + ldr r6, [r4, r1] + ldr r1, _02232B74 ; =gMain + ldr r1, [r1, #0x48] + add r3, r1, #0 + tst r3, r2 + beq _022328F8 + add r1, r6, #0 + sub r2, #0x41 + bl MOD83_022320A4 + add r6, r0, #0 + b _02232934 _022328F8: - mov r2, #0x80 - tst r2, r1 - beq _0223290A - add r1, r6, #0 - mov r2, #1 - bl MOD83_022320A4 - add r6, r0, #0 - b _02232934 + mov r2, #0x80 + tst r2, r1 + beq _0223290A + add r1, r6, #0 + mov r2, #1 + bl MOD83_022320A4 + add r6, r0, #0 + b _02232934 _0223290A: - mov r0, #2 - tst r0, r1 - beq _02232924 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - add r0, r4, #0 - mov r1, #0 - mov r2, #0x1c - add r3, r5, #0 - bl MOD83_02231DBC - b _02232934 + mov r0, #2 + tst r0, r1 + beq _02232924 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + add r0, r4, #0 + mov r1, #0 + mov r2, #0x1c + add r3, r5, #0 + bl MOD83_02231DBC + b _02232934 _02232924: - mov r0, #1 - tst r0, r1 - beq _02232934 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - mov r0, #4 - str r0, [r5] + mov r0, #1 + tst r0, r1 + beq _02232934 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + mov r0, #4 + str r0, [r5] _02232934: - ldr r0, _02232B6C ; =0x00002B60 - ldr r0, [r4, r0] - cmp r0, r6 - bne _0223293E - b _02232CF4 + ldr r0, _02232B6C ; =0x00002B60 + ldr r0, [r4, r0] + cmp r0, r6 + bne _0223293E + b _02232CF4 _0223293E: - mov r0, #6 - lsl r0, r0, #8 - bl PlaySE - ldr r0, _02232B6C ; =0x00002B60 - mov r1, #1 - str r6, [r4, r0] - add r0, r4, #0 - mov r2, #0 - bl MOD83_02231DF0 - b _02232CF4 + mov r0, #6 + lsl r0, r0, #8 + bl PlaySE + ldr r0, _02232B6C ; =0x00002B60 + mov r1, #1 + str r6, [r4, r0] + add r0, r4, #0 + mov r2, #0 + bl MOD83_02231DF0 + b _02232CF4 _02232956: - ldr r1, _02232B7C ; =0x00002B70 - mov r3, #0xa - add r1, r4, r1 - mov r2, #7 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r3, _02232B80 ; =0x00002B90 - mov r2, #8 - add r1, r3, #0 - str r0, [r4, r3] - sub r1, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02231F88 - mov r0, #5 - str r0, [r5] - b _02232CF4 + ldr r1, _02232B7C ; =0x00002B70 + mov r3, #0xa + add r1, r4, r1 + mov r2, #7 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r3, _02232B80 ; =0x00002B90 + mov r2, #8 + add r1, r3, #0 + str r0, [r4, r3] + sub r1, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02231F88 + mov r0, #5 + str r0, [r5] + b _02232CF4 _0223297E: - add r0, r6, #0 - add r1, r5, #0 - mov r2, #0 - bl MOD83_02232208 - ldr r0, _02232B74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _02232A54 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - mov r0, #0xb - str r0, [r5] - b _02232CF4 + add r0, r6, #0 + add r1, r5, #0 + mov r2, #0 + bl MOD83_02232208 + ldr r0, _02232B74 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _02232A54 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + mov r0, #0xb + str r0, [r5] + b _02232CF4 _0223299E: - mov r0, #6 - lsl r0, r0, #8 - bl PlaySE - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - bl MOD83_022316C0 - mov r1, #1 - add r0, r4, #0 - lsl r2, r1, #0xc - mov r3, #0x66 - bl MOD83_0223243C - mov r0, #7 - str r0, [r5] - b _02232CF4 + mov r0, #6 + lsl r0, r0, #8 + bl PlaySE + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + bl MOD83_022316C0 + mov r1, #1 + add r0, r4, #0 + lsl r2, r1, #0xc + mov r3, #0x66 + bl MOD83_0223243C + mov r0, #7 + str r0, [r5] + b _02232CF4 _022329D6: - bl MOD83_022324DC - cmp r0, #0 - beq _02232A54 - mov r1, #1 - add r0, r4, #0 - add r2, r1, #0 - bl MOD83_02231DF0 - ldr r2, _02232B84 ; =0x00708000 - add r0, r4, #0 - mov r1, #0 - lsr r3, r2, #1 - bl MOD83_0223243C - mov r0, #8 - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + cmp r0, #0 + beq _02232A54 + mov r1, #1 + add r0, r4, #0 + add r2, r1, #0 + bl MOD83_02231DF0 + ldr r2, _02232B84 ; =0x00708000 + add r0, r4, #0 + mov r1, #0 + lsr r3, r2, #1 + bl MOD83_0223243C + mov r0, #8 + str r0, [r5] + b _02232CF4 _022329FA: - bl MOD83_022324DC - ldr r0, _02232B74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r1, r0 - beq _02232A54 - lsl r0, r0, #9 - bl PlaySE - mov r1, #1 - add r0, r4, #0 - lsl r2, r1, #0xc - mov r3, #0x66 - bl MOD83_0223243C - mov r0, #9 - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + ldr r0, _02232B74 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r1, r0 + beq _02232A54 + lsl r0, r0, #9 + bl PlaySE + mov r1, #1 + add r0, r4, #0 + lsl r2, r1, #0xc + mov r3, #0x66 + bl MOD83_0223243C + mov r0, #9 + str r0, [r5] + b _02232CF4 _02232A20: - bl MOD83_022324DC - cmp r0, #0 - beq _02232A54 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - ldr r2, _02232B84 ; =0x00708000 - add r0, r4, #0 - mov r1, #0 - lsr r3, r2, #1 - bl MOD83_0223243C - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #0xa - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + cmp r0, #0 + beq _02232A54 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + ldr r2, _02232B84 ; =0x00708000 + add r0, r4, #0 + mov r1, #0 + lsr r3, r2, #1 + bl MOD83_0223243C + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #0xa + str r0, [r5] + b _02232CF4 _02232A4C: - bl MOD83_022324DC - cmp r0, #0 - bne _02232A56 + bl MOD83_022324DC + cmp r0, #0 + bne _02232A56 _02232A54: - b _02232CF4 + b _02232CF4 _02232A56: - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - mov r2, #0x13 - mov r3, #0xa - bl FUN_0200D0BC - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CCA4 - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add r0, r4, #0 - bl MOD83_022324A0 - mov r0, #5 - str r0, [r5] - b _02232CF4 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + mov r2, #0x13 + mov r3, #0xa + bl FUN_0200D0BC + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CCA4 + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add r0, r4, #0 + bl MOD83_022324A0 + mov r0, #5 + str r0, [r5] + b _02232CF4 _02232A88: - bl MOD83_02231A00 - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl RemoveWindow - mov r0, #3 - str r0, [r5] - b _02232CF4 + bl MOD83_02231A00 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl RemoveWindow + mov r0, #3 + str r0, [r5] + b _02232CF4 _02232AAC: - ldr r2, _02232B88 ; =MOD83_022319D0 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02232208 - b _02232CF4 + ldr r2, _02232B88 ; =MOD83_022319D0 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02232208 + b _02232CF4 _02232AB8: - ldr r2, _02232B88 ; =MOD83_022319D0 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02232208 - b _02232CF4 + ldr r2, _02232B88 ; =MOD83_022319D0 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02232208 + b _02232CF4 _02232AC4: - mov r1, #0xae - lsl r1, r1, #6 - ldr r2, _02232B8C ; =0x00010200 - add r1, r4, r1 - bl MOD83_02231D74 - mov r0, #0xd - str r0, [r5] - b _02232CF4 + mov r1, #0xae + lsl r1, r1, #6 + ldr r2, _02232B8C ; =0x00010200 + add r1, r4, r1 + bl MOD83_02231D74 + mov r0, #0xd + str r0, [r5] + b _02232CF4 _02232AD6: - mov r1, #0 - mov r2, #0x10 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x10 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232AE2: - bl MOD83_02231A00 - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl RemoveWindow - add r0, r4, #0 - mov r1, #0 - mov r2, #3 - bl MOD83_02231DF0 - ldr r0, _02232B70 ; =0x0000299C - ldr r0, [r4, r0] - bl MOD83_02231820 - add r0, r4, #0 - bl MOD83_022315D0 - add r0, r4, #0 - bl MOD83_0223166C - mov r0, #0x11 - str r0, [r5] - b _02232CF4 + bl MOD83_02231A00 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl RemoveWindow + add r0, r4, #0 + mov r1, #0 + mov r2, #3 + bl MOD83_02231DF0 + ldr r0, _02232B70 ; =0x0000299C + ldr r0, [r4, r0] + bl MOD83_02231820 + add r0, r4, #0 + bl MOD83_022315D0 + add r0, r4, #0 + bl MOD83_0223166C + mov r0, #0x11 + str r0, [r5] + b _02232CF4 _02232B24: - bl MOD83_02232D44 - bl FUN_02033E74 - add r0, r4, #0 - mov r1, #1 - mov r2, #0x12 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl MOD83_02232D44 + bl FUN_02033E74 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x12 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232B3A: - mov r6, #0 - add r0, r6, #0 - bl FUN_02030E7C - cmp r0, #0 - beq _02232BD0 - add r0, r4, #0 - add r0, #0x90 - bl FUN_0202F10C - ldr r1, _02232B90 ; =0x00002AA8 - b _02232B94 - nop + mov r6, #0 + add r0, r6, #0 + bl FUN_02030E7C + cmp r0, #0 + beq _02232BD0 + add r0, r4, #0 + add r0, #0x90 + bl FUN_0202F10C + ldr r1, _02232B90 ; =0x00002AA8 + b _02232B94 + nop _02232B54: .word 0x00002B44 _02232B58: .word 0x00002B48 _02232B5C: .word 0x00002B4C @@ -10682,186 +10682,186 @@ _02232B88: .word MOD83_022319D0 _02232B8C: .word 0x00010200 _02232B90: .word 0x00002AA8 _02232B94: - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02232E0C - add r6, r0, #0 - bne _02232BC0 - ldr r0, _02232D18 ; =0x00002BD0 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232BC0 - ldr r0, _02232D1C ; =0x00002AA8 - mov r1, #0 - add r0, r4, r0 - bl FillWindowPixelBuffer - ldr r0, _02232D1C ; =0x00002AA8 - add r0, r4, r0 - bl CopyWindowToVram - ldr r0, _02232D18 ; =0x00002BD0 - mov r1, #0 - str r1, [r4, r0] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02232E0C + add r6, r0, #0 + bne _02232BC0 + ldr r0, _02232D18 ; =0x00002BD0 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232BC0 + ldr r0, _02232D1C ; =0x00002AA8 + mov r1, #0 + add r0, r4, r0 + bl FillWindowPixelBuffer + ldr r0, _02232D1C ; =0x00002AA8 + add r0, r4, r0 + bl CopyWindowToVram + ldr r0, _02232D18 ; =0x00002BD0 + mov r1, #0 + str r1, [r4, r0] _02232BC0: - ldr r1, _02232D20 ; =0x00002A98 - add r0, r4, #0 - add r1, r4, r1 - add r2, r6, #0 - bl MOD83_02232FE4 - ldr r0, _02232D18 ; =0x00002BD0 - str r6, [r4, r0] + ldr r1, _02232D20 ; =0x00002A98 + add r0, r4, #0 + add r1, r4, r1 + add r2, r6, #0 + bl MOD83_02232FE4 + ldr r0, _02232D18 ; =0x00002BD0 + str r6, [r4, r0] _02232BD0: - add r0, r4, #0 - add r1, r6, #0 - add r2, r5, #0 - bl MOD83_02232668 - b _02232CF4 + add r0, r4, #0 + add r1, r6, #0 + add r2, r5, #0 + bl MOD83_02232668 + b _02232CF4 _02232BDC: - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232BE8: - bl MOD83_022315F8 - ldr r0, _02232D24 ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - bl MOD83_022316C0 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x57 - bl FUN_02002ED0 - add r0, r4, #0 - mov r1, #1 - mov r2, #4 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl MOD83_022315F8 + ldr r0, _02232D24 ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + bl MOD83_022316C0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x57 + bl FUN_02002ED0 + add r0, r4, #0 + mov r1, #1 + mov r2, #4 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232C26: - bl FUN_02031810 - cmp r0, #0 - bne _02232CF4 - ldr r0, _02232D28 ; =0x00002BE0 - ldr r0, [r4, r0] - str r0, [r5] - b _02232CF4 + bl FUN_02031810 + cmp r0, #0 + bne _02232CF4 + ldr r0, _02232D28 ; =0x00002BE0 + ldr r0, [r4, r0] + str r0, [r5] + b _02232CF4 _02232C36: - ldr r0, _02232D2C ; =0x00002BD4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02232CF4 - ldr r1, _02232D30 ; =0x00002D78 - add r0, r4, #0 - ldr r2, [r4] - add r0, #0x90 - add r1, r4, r1 - bl MOD83_022392EC - ldr r0, _02232D30 ; =0x00002D78 - mov r1, #0xd6 - add r0, r4, r0 - lsl r1, r1, #2 - bl MOD83_0222F8F0 - add r0, r4, #0 - bl MOD83_02232610 - mov r0, #0x17 - str r0, [r5] - b _02232CF4 + ldr r0, _02232D2C ; =0x00002BD4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02232CF4 + ldr r1, _02232D30 ; =0x00002D78 + add r0, r4, #0 + ldr r2, [r4] + add r0, #0x90 + add r1, r4, r1 + bl MOD83_022392EC + ldr r0, _02232D30 ; =0x00002D78 + mov r1, #0xd6 + add r0, r4, r0 + lsl r1, r1, #2 + bl MOD83_0222F8F0 + add r0, r4, #0 + bl MOD83_02232610 + mov r0, #0x17 + str r0, [r5] + b _02232CF4 _02232C6A: - bl MOD83_02239574 - cmp r0, #4 - bne _02232CF4 - mov r0, #0x93 - bl FUN_02031588 - mov r0, #0x18 - str r0, [r5] - b _02232CF4 + bl MOD83_02239574 + cmp r0, #4 + bne _02232CF4 + mov r0, #0x93 + bl FUN_02031588 + mov r0, #0x18 + str r0, [r5] + b _02232CF4 _02232C7E: - bl MOD83_02232DF0 - cmp r0, #0 - beq _02232C90 - mov r0, #0x93 - bl FUN_020315D8 - cmp r0, #1 - bne _02232CF4 + bl MOD83_02232DF0 + cmp r0, #0 + beq _02232C90 + mov r0, #0x93 + bl FUN_020315D8 + cmp r0, #1 + bne _02232CF4 _02232C90: - bl MOD83_02239544 - ldr r1, _02232D24 ; =0x00002B70 - mov r3, #0xa - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0x12 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r0, _02232D34 ; =0x00003CF0 - ldr r0, [r4, r0] - bl FUN_0200DBFC - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x19 - bl MOD83_02233084 - b _02232CF4 + bl MOD83_02239544 + ldr r1, _02232D24 ; =0x00002B70 + mov r3, #0xa + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0x12 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r0, _02232D34 ; =0x00003CF0 + ldr r0, [r4, r0] + bl FUN_0200DBFC + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x19 + bl MOD83_02233084 + b _02232CF4 _02232CB8: - ldr r0, _02232D38 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _02232CF4 - mov r0, #0x13 - str r0, [r5] - b _02232CF4 + ldr r0, _02232D38 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _02232CF4 + mov r0, #0x13 + str r0, [r5] + b _02232CF4 _02232CC8: - mov r1, #0 - mov r2, #0x1c - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x1c + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232CD4: - bl FUN_0200E308 - cmp r0, #0 - beq _02232CF4 - ldr r0, _02232D28 ; =0x00002BE0 - ldr r0, [r4, r0] - str r0, [r5] - b _02232CF4 + bl FUN_0200E308 + cmp r0, #0 + beq _02232CF4 + ldr r0, _02232D28 ; =0x00002BE0 + ldr r0, [r4, r0] + str r0, [r5] + b _02232CF4 _02232CE4: - bl MOD83_022315F8 - add r0, r4, #0 - bl MOD83_022324A0 - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + bl MOD83_022315F8 + add r0, r4, #0 + bl MOD83_022324A0 + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _02232CF4: - ldr r0, _02232D3C ; =0x00002BE4 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232D00 - bl FUN_0201FDEC + ldr r0, _02232D3C ; =0x00002BE4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232D00 + bl FUN_0201FDEC _02232D00: - bl MOD83_02238D58 - ldr r0, _02232D40 ; =0x00003CE8 - ldr r1, [r4, r0] - cmp r1, #0 - beq _02232D10 - add r0, r4, #0 - blx r1 + bl MOD83_02238D58 + ldr r0, _02232D40 ; =0x00003CE8 + ldr r1, [r4, r0] + cmp r1, #0 + beq _02232D10 + add r0, r4, #0 + blx r1 _02232D10: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #8 + pop {r4, r5, r6, pc} + nop _02232D18: .word 0x00002BD0 _02232D1C: .word 0x00002AA8 _02232D20: .word 0x00002A98 @@ -10873,8099 +10873,8099 @@ _02232D34: .word 0x00003CF0 _02232D38: .word gMain _02232D3C: .word 0x00002BE4 _02232D40: .word 0x00003CE8 - thumb_func_end MOD83_02232788 + thumb_func_end MOD83_02232788 - thumb_func_start MOD83_02232D44 + thumb_func_start MOD83_02232D44 MOD83_02232D44: ; 0x02232D44 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, _02232DA8 ; =0x00002B60 - mov r2, #0xd6 - ldr r1, [r5, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r5, r1 - ldr r4, [r1, r0] - add r0, r5, #0 - add r0, #0xe0 - add r1, r4, #0 - lsl r2, r2, #2 - bl memcpy - mov r1, #0x41 - add r0, r5, #0 - lsl r1, r1, #2 - add r0, #0x90 - add r1, r4, r1 - mov r2, #0x50 - bl memcpy - ldr r0, _02232DAC ; =0x00000428 - mov r1, #0 - strb r1, [r5, r0] - add r0, r5, #0 - add r0, #0xde - ldrb r1, [r0] - mov r0, #0x10 - mov r2, #0xf - bic r1, r0 - add r0, r5, #0 - add r0, #0xde - strb r1, [r0] - add r0, r5, #0 - add r0, #0xde - ldrb r1, [r0] - mov r0, #0x20 - orr r1, r0 - add r0, r5, #0 - add r0, #0xde - strb r1, [r0] - ldr r1, _02232DB0 ; =0x00002B44 - add r0, r5, #4 - ldr r1, [r5, r1] - bl MOD83_0222F8C4 - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _02232DA8 ; =0x00002B60 + mov r2, #0xd6 + ldr r1, [r5, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r5, r1 + ldr r4, [r1, r0] + add r0, r5, #0 + add r0, #0xe0 + add r1, r4, #0 + lsl r2, r2, #2 + bl memcpy + mov r1, #0x41 + add r0, r5, #0 + lsl r1, r1, #2 + add r0, #0x90 + add r1, r4, r1 + mov r2, #0x50 + bl memcpy + ldr r0, _02232DAC ; =0x00000428 + mov r1, #0 + strb r1, [r5, r0] + add r0, r5, #0 + add r0, #0xde + ldrb r1, [r0] + mov r0, #0x10 + mov r2, #0xf + bic r1, r0 + add r0, r5, #0 + add r0, #0xde + strb r1, [r0] + add r0, r5, #0 + add r0, #0xde + ldrb r1, [r0] + mov r0, #0x20 + orr r1, r0 + add r0, r5, #0 + add r0, #0xde + strb r1, [r0] + ldr r1, _02232DB0 ; =0x00002B44 + add r0, r5, #4 + ldr r1, [r5, r1] + bl MOD83_0222F8C4 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02232DA8: .word 0x00002B60 _02232DAC: .word 0x00000428 _02232DB0: .word 0x00002B44 - thumb_func_end MOD83_02232D44 + thumb_func_end MOD83_02232D44 - thumb_func_start MOD83_02232DB4 + thumb_func_start MOD83_02232DB4 MOD83_02232DB4: ; 0x02232DB4 - push {r3, r4} - ldr r3, [r0] - ldr r1, [r0, #4] - add r2, r0, #0 - mov r4, #0 - cmp r1, r3 - bge _02232DC8 - add r3, r1, #0 - mov r4, #1 - add r2, r0, #4 + push {r3, r4} + ldr r3, [r0] + ldr r1, [r0, #4] + add r2, r0, #0 + mov r4, #0 + cmp r1, r3 + bge _02232DC8 + add r3, r1, #0 + mov r4, #1 + add r2, r0, #4 _02232DC8: - ldr r1, [r0, #8] - cmp r1, r3 - bge _02232DD6 - add r2, r0, #0 - add r3, r1, #0 - mov r4, #2 - add r2, #8 + ldr r1, [r0, #8] + cmp r1, r3 + bge _02232DD6 + add r2, r0, #0 + add r3, r1, #0 + mov r4, #2 + add r2, #8 _02232DD6: - ldr r1, [r0, #0xc] - cmp r1, r3 - bge _02232DE2 - add r2, r0, #0 - mov r4, #3 - add r2, #0xc + ldr r1, [r0, #0xc] + cmp r1, r3 + bge _02232DE2 + add r2, r0, #0 + mov r4, #3 + add r2, #0xc _02232DE2: - ldr r0, _02232DEC ; =0x3FFF0001 - str r0, [r2] - add r0, r4, #1 - pop {r3, r4} - bx lr - .align 2, 0 + ldr r0, _02232DEC ; =0x3FFF0001 + str r0, [r2] + add r0, r4, #1 + pop {r3, r4} + bx lr + .align 2, 0 _02232DEC: .word 0x3FFF0001 - thumb_func_end MOD83_02232DB4 + thumb_func_end MOD83_02232DB4 - thumb_func_start MOD83_02232DF0 + thumb_func_start MOD83_02232DF0 MOD83_02232DF0: ; 0x02232DF0 - push {r3, r4, r5, lr} - mov r5, #0 - mov r4, #1 + push {r3, r4, r5, lr} + mov r5, #0 + mov r4, #1 _02232DF6: - add r0, r4, #0 - bl FUN_0202DFA4 - cmp r0, #0 - beq _02232E02 - add r5, r5, #1 + add r0, r4, #0 + bl FUN_0202DFA4 + cmp r0, #0 + beq _02232E02 + add r5, r5, #1 _02232E02: - add r4, r4, #1 - cmp r4, #5 - blt _02232DF6 - add r0, r5, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02232DF0 - - thumb_func_start MOD83_02232E0C + add r4, r4, #1 + cmp r4, #5 + blt _02232DF6 + add r0, r5, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02232DF0 + + thumb_func_start MOD83_02232E0C MOD83_02232E0C: ; 0x02232E0C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x48 - add r5, r0, #0 - mov r6, #0 - mov r0, #1 - str r1, [sp, #0x10] - add r7, r6, #0 - str r0, [sp, #0x24] - add r4, r5, #4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x48 + add r5, r0, #0 + mov r6, #0 + mov r0, #1 + str r1, [sp, #0x10] + add r7, r6, #0 + str r0, [sp, #0x24] + add r4, r5, #4 _02232E1E: - ldr r0, [sp, #0x24] - bl FUN_0202DFA4 - cmp r0, #0 - bne _02232E40 - ldr r0, _02232FCC ; =0x00002BA8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232E32 - add r7, r7, #1 + ldr r0, [sp, #0x24] + bl FUN_0202DFA4 + cmp r0, #0 + bne _02232E40 + ldr r0, _02232FCC ; =0x00002BA8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232E32 + add r7, r7, #1 _02232E32: - ldr r0, _02232FCC ; =0x00002BA8 - mov r1, #0 - str r1, [r4, r0] - ldr r1, _02232FD0 ; =0x3FFF0001 - add r0, #0x14 - str r1, [r4, r0] - b _02232E68 + ldr r0, _02232FCC ; =0x00002BA8 + mov r1, #0 + str r1, [r4, r0] + ldr r1, _02232FD0 ; =0x3FFF0001 + add r0, #0x14 + str r1, [r4, r0] + b _02232E68 _02232E40: - ldr r1, _02232FCC ; =0x00002BA8 - ldr r1, [r4, r1] - cmp r1, r0 - beq _02232E66 - ldr r1, _02232FCC ; =0x00002BA8 - add r7, r7, #1 - str r0, [r4, r1] - add r0, r1, #0 - add r1, #0x34 - ldr r1, [r5, r1] - add r0, #0x34 - add r2, r1, #1 - ldr r0, [r5, r0] - ldr r1, _02232FD4 ; =0x00002BDC - add r6, r6, #1 - str r2, [r5, r1] - sub r1, #0x20 - str r0, [r4, r1] - b _02232E68 + ldr r1, _02232FCC ; =0x00002BA8 + ldr r1, [r4, r1] + cmp r1, r0 + beq _02232E66 + ldr r1, _02232FCC ; =0x00002BA8 + add r7, r7, #1 + str r0, [r4, r1] + add r0, r1, #0 + add r1, #0x34 + ldr r1, [r5, r1] + add r0, #0x34 + add r2, r1, #1 + ldr r0, [r5, r0] + ldr r1, _02232FD4 ; =0x00002BDC + add r6, r6, #1 + str r2, [r5, r1] + sub r1, #0x20 + str r0, [r4, r1] + b _02232E68 _02232E66: - add r6, r6, #1 + add r6, r6, #1 _02232E68: - ldr r0, [sp, #0x24] - add r4, r4, #4 - add r0, r0, #1 - str r0, [sp, #0x24] - cmp r0, #5 - blt _02232E1E - cmp r7, #0 - bne _02232E7E - add sp, #0x48 - add r0, r6, #0 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [sp, #0x24] + add r4, r4, #4 + add r0, r0, #1 + str r0, [sp, #0x24] + cmp r0, #5 + blt _02232E1E + cmp r7, #0 + bne _02232E7E + add sp, #0x48 + add r0, r6, #0 + pop {r3, r4, r5, r6, r7, pc} _02232E7E: - mov r1, #0xaf - lsl r1, r1, #6 - ldr r0, [r5, r1] - str r0, [sp, #0x38] - add r0, r1, #4 - ldr r0, [r5, r0] - str r0, [sp, #0x3c] - add r0, r1, #0 - add r0, #8 - ldr r0, [r5, r0] - add r1, #0xc - str r0, [sp, #0x40] - ldr r0, [r5, r1] - str r0, [sp, #0x44] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x28] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x2c] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x30] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x34] - mov r0, #0x57 - bl ScrStrBufs_new - add r4, r0, #0 - ldr r2, _02232FD8 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - str r0, [sp, #0x1c] - mov r5, #0 - ldr r0, [sp, #0x10] - add r1, r5, #0 - bl FillWindowPixelBuffer - add r0, r5, #0 - str r0, [sp, #0x14] - cmp r6, #0 - ble _02232FAE - add r0, sp, #0x28 - str r0, [sp, #0x18] + mov r1, #0xaf + lsl r1, r1, #6 + ldr r0, [r5, r1] + str r0, [sp, #0x38] + add r0, r1, #4 + ldr r0, [r5, r0] + str r0, [sp, #0x3c] + add r0, r1, #0 + add r0, #8 + ldr r0, [r5, r0] + add r1, #0xc + str r0, [sp, #0x40] + ldr r0, [r5, r1] + str r0, [sp, #0x44] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x28] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x2c] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x30] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x34] + mov r0, #0x57 + bl ScrStrBufs_new + add r4, r0, #0 + ldr r2, _02232FD8 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + str r0, [sp, #0x1c] + mov r5, #0 + ldr r0, [sp, #0x10] + add r1, r5, #0 + bl FillWindowPixelBuffer + add r0, r5, #0 + str r0, [sp, #0x14] + cmp r6, #0 + ble _02232FAE + add r0, sp, #0x28 + str r0, [sp, #0x18] _02232EE6: - ldr r0, [sp, #0x18] - ldr r0, [r0] - bl FUN_0202DFA4 - add r7, r0, #0 - beq _02232F9E - add r0, r4, #0 - mov r1, #0 - add r2, r7, #0 - bl BufferPlayersName - ldr r1, [sp, #0x1c] - add r0, r4, #0 - mov r2, #0x35 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x20] - add r0, r7, #0 - bl PlayerProfile_GetTrainerGender - cmp r0, #0 - str r5, [sp] - bne _02232F30 - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02232FDC ; =0x00050600 - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x20] - add r3, r1, #0 - bl AddTextPrinterParameterized2 - b _02232F4A + ldr r0, [sp, #0x18] + ldr r0, [r0] + bl FUN_0202DFA4 + add r7, r0, #0 + beq _02232F9E + add r0, r4, #0 + mov r1, #0 + add r2, r7, #0 + bl BufferPlayersName + ldr r1, [sp, #0x1c] + add r0, r4, #0 + mov r2, #0x35 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x20] + add r0, r7, #0 + bl PlayerProfile_GetTrainerGender + cmp r0, #0 + str r5, [sp] + bne _02232F30 + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02232FDC ; =0x00050600 + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x20] + add r3, r1, #0 + bl AddTextPrinterParameterized2 + b _02232F4A _02232F30: - mov r0, #0xff - str r0, [sp, #4] - mov r0, #0xc1 - lsl r0, r0, #0xa - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - mov r1, #0 - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x20] - add r3, r1, #0 - bl AddTextPrinterParameterized2 + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0xc1 + lsl r0, r0, #0xa + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + mov r1, #0 + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x20] + add r3, r1, #0 + bl AddTextPrinterParameterized2 _02232F4A: - ldr r0, [sp, #0x20] - bl String_dtor - add r0, r7, #0 - bl PlayerProfile_GetTrainerID - add r2, r0, #0 - mov r0, #2 - str r0, [sp] - mov r0, #1 - lsl r2, r2, #0x10 - str r0, [sp, #4] - add r0, r4, #0 - mov r1, #0 - lsr r2, r2, #0x10 - mov r3, #5 - bl BufferIntegerAsString - ldr r1, [sp, #0x1c] - add r0, r4, #0 - mov r2, #0x36 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - str r5, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02232FE0 ; =0x000E0F00 - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x10] - add r2, r7, #0 - mov r3, #0x50 - bl AddTextPrinterParameterized2 - add r0, r7, #0 - bl String_dtor - add r5, #0x18 + ldr r0, [sp, #0x20] + bl String_dtor + add r0, r7, #0 + bl PlayerProfile_GetTrainerID + add r2, r0, #0 + mov r0, #2 + str r0, [sp] + mov r0, #1 + lsl r2, r2, #0x10 + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0 + lsr r2, r2, #0x10 + mov r3, #5 + bl BufferIntegerAsString + ldr r1, [sp, #0x1c] + add r0, r4, #0 + mov r2, #0x36 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + str r5, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02232FE0 ; =0x000E0F00 + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + add r2, r7, #0 + mov r3, #0x50 + bl AddTextPrinterParameterized2 + add r0, r7, #0 + bl String_dtor + add r5, #0x18 _02232F9E: - ldr r0, [sp, #0x18] - add r0, r0, #4 - str r0, [sp, #0x18] - ldr r0, [sp, #0x14] - add r0, r0, #1 - str r0, [sp, #0x14] - cmp r0, r6 - blt _02232EE6 + ldr r0, [sp, #0x18] + add r0, r0, #4 + str r0, [sp, #0x18] + ldr r0, [sp, #0x14] + add r0, r0, #1 + str r0, [sp, #0x14] + cmp r0, r6 + blt _02232EE6 _02232FAE: - cmp r6, #0 - beq _02232FB8 - ldr r0, [sp, #0x10] - bl CopyWindowToVram + cmp r6, #0 + beq _02232FB8 + ldr r0, [sp, #0x10] + bl CopyWindowToVram _02232FB8: - ldr r0, [sp, #0x1c] - bl DestroyMsgData - add r0, r4, #0 - bl ScrStrBufs_delete - add r0, r6, #0 - add sp, #0x48 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, [sp, #0x1c] + bl DestroyMsgData + add r0, r4, #0 + bl ScrStrBufs_delete + add r0, r6, #0 + add sp, #0x48 + pop {r3, r4, r5, r6, r7, pc} + nop _02232FCC: .word 0x00002BA8 _02232FD0: .word 0x3FFF0001 _02232FD4: .word 0x00002BDC _02232FD8: .word 0x00000172 _02232FDC: .word 0x00050600 _02232FE0: .word 0x000E0F00 - thumb_func_end MOD83_02232E0C + thumb_func_end MOD83_02232E0C - thumb_func_start MOD83_02232FE4 + thumb_func_start MOD83_02232FE4 MOD83_02232FE4: ; 0x02232FE4 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r0, #0 - ldr r0, _02233070 ; =0x00002B94 - add r4, r1, #0 - str r2, [r5, r0] - ldr r2, _02233074 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _02233078 ; =0x000029A4 - str r0, [r5, r1] - mov r0, #0x57 - bl ScrStrBufs_new - ldr r1, _0223307C ; =0x000029A0 - str r0, [r5, r1] - add r0, r4, #0 - mov r1, #0 - bl FillWindowPixelBuffer - mov r3, #1 - str r3, [sp] - ldr r0, _0223307C ; =0x000029A0 - str r3, [sp, #4] - ldr r2, _02233070 ; =0x00002B94 - ldr r0, [r5, r0] - ldr r2, [r5, r2] - mov r1, #0 - bl BufferIntegerAsString - ldr r1, _0223307C ; =0x000029A0 - mov r2, #0x38 - ldr r0, [r5, r1] - add r1, r1, #4 - ldr r1, [r5, r1] - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r6, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02233080 ; =0x00010200 - mov r1, #1 - str r0, [sp, #8] - add r0, r4, #0 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl CopyWindowToVram - add r0, r6, #0 - bl String_dtor - ldr r0, _02233078 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _0223307C ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r5, r0, #0 + ldr r0, _02233070 ; =0x00002B94 + add r4, r1, #0 + str r2, [r5, r0] + ldr r2, _02233074 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _02233078 ; =0x000029A4 + str r0, [r5, r1] + mov r0, #0x57 + bl ScrStrBufs_new + ldr r1, _0223307C ; =0x000029A0 + str r0, [r5, r1] + add r0, r4, #0 + mov r1, #0 + bl FillWindowPixelBuffer + mov r3, #1 + str r3, [sp] + ldr r0, _0223307C ; =0x000029A0 + str r3, [sp, #4] + ldr r2, _02233070 ; =0x00002B94 + ldr r0, [r5, r0] + ldr r2, [r5, r2] + mov r1, #0 + bl BufferIntegerAsString + ldr r1, _0223307C ; =0x000029A0 + mov r2, #0x38 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r6, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02233080 ; =0x00010200 + mov r1, #1 + str r0, [sp, #8] + add r0, r4, #0 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl CopyWindowToVram + add r0, r6, #0 + bl String_dtor + ldr r0, _02233078 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _0223307C ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02233070: .word 0x00002B94 _02233074: .word 0x00000172 _02233078: .word 0x000029A4 _0223307C: .word 0x000029A0 _02233080: .word 0x00010200 - thumb_func_end MOD83_02232FE4 + thumb_func_end MOD83_02232FE4 - thumb_func_start MOD83_02233084 + thumb_func_start MOD83_02233084 MOD83_02233084: ; 0x02233084 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl MOD83_0222F9DC - bl FUN_02033ED0 - ldr r0, _022330A0 ; =0x00002BE0 - str r6, [r5, r0] - mov r0, #0x16 - str r0, [r4] - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl MOD83_0222F9DC + bl FUN_02033ED0 + ldr r0, _022330A0 ; =0x00002BE0 + str r6, [r5, r0] + mov r0, #0x16 + str r0, [r4] + pop {r4, r5, r6, pc} + nop _022330A0: .word 0x00002BE0 - thumb_func_end MOD83_02233084 + thumb_func_end MOD83_02233084 - thumb_func_start MOD83_022330A4 + thumb_func_start MOD83_022330A4 MOD83_022330A4: ; 0x022330A4 - push {r3, r4, r5, r6, r7, lr} - str r0, [sp] - bl OverlayManager_GetData - add r7, r0, #0 - ldr r0, _02233154 ; =0x000029A8 - mov r6, #0 - add r4, r7, #0 - add r5, r7, r0 + push {r3, r4, r5, r6, r7, lr} + str r0, [sp] + bl OverlayManager_GetData + add r7, r0, #0 + ldr r0, _02233154 ; =0x000029A8 + mov r6, #0 + add r4, r7, #0 + add r5, r7, r0 _022330B6: - ldr r0, _02233154 ; =0x000029A8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _022330CA - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, _02233154 ; =0x000029A8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _022330CA + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _022330CA: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #0x13 - blo _022330B6 - ldr r0, _02233158 ; =0x00002B70 - ldr r1, [r7, r0] - cmp r1, #0 - beq _022330EA - add r0, r7, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02233158 ; =0x00002B70 - add r0, r7, r0 - bl RemoveWindow + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #0x13 + blo _022330B6 + ldr r0, _02233158 ; =0x00002B70 + ldr r1, [r7, r0] + cmp r1, #0 + beq _022330EA + add r0, r7, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02233158 ; =0x00002B70 + add r0, r7, r0 + bl RemoveWindow _022330EA: - mov r0, #0xae - lsl r0, r0, #6 - ldr r1, [r7, r0] - cmp r1, #0 - beq _02233104 - add r0, r7, r0 - bl ClearWindowTilemapAndCopyToVram - mov r0, #0xae - lsl r0, r0, #6 - add r0, r7, r0 - bl RemoveWindow + mov r0, #0xae + lsl r0, r0, #6 + ldr r1, [r7, r0] + cmp r1, #0 + beq _02233104 + add r0, r7, r0 + bl ClearWindowTilemapAndCopyToVram + mov r0, #0xae + lsl r0, r0, #6 + add r0, r7, r0 + bl RemoveWindow _02233104: - ldr r0, _0223315C ; =0x0000299C - mov r1, #0 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #1 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #2 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #3 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - ldr r0, [r7, r0] - bl FreeToHeap - ldr r0, _02233160 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _02233164 ; =MOD83_0223A434 - bl RegisterMainOverlay - mov r0, #0x5b - bl DestroyHeap - ldr r0, [sp] - bl OverlayManager_FreeData - mov r0, #0x57 - bl DestroyHeap - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, _0223315C ; =0x0000299C + mov r1, #0 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #1 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #2 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #3 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + ldr r0, [r7, r0] + bl FreeToHeap + ldr r0, _02233160 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _02233164 ; =MOD83_0223A434 + bl RegisterMainOverlay + mov r0, #0x5b + bl DestroyHeap + ldr r0, [sp] + bl OverlayManager_FreeData + mov r0, #0x57 + bl DestroyHeap + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + nop _02233154: .word 0x000029A8 _02233158: .word 0x00002B70 _0223315C: .word 0x0000299C _02233160: .word SDK_OVERLAY_MODULE_83_ID _02233164: .word MOD83_0223A434 - thumb_func_end MOD83_022330A4 + thumb_func_end MOD83_022330A4 - thumb_func_start MOD83_02233168 + thumb_func_start MOD83_02233168 MOD83_02233168: ; 0x02233168 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - add r7, r1, #0 - add r5, r2, #0 - bl MOD83_022331E0 - ldr r1, _022331B4 ; =0x00003CF4 - add r0, r5, #0 - bl AllocFromHeapAtEnd - ldr r2, _022331B4 ; =0x00003CF4 - mov r1, #0 - add r4, r0, #0 - bl memset - ldr r0, _022331B8 ; =0x0000299C - mov r1, #0x1e - str r6, [r4, r0] - mov r0, #0 - lsl r1, r1, #4 - add r2, r5, #0 - str r5, [r4] - bl FUN_02002ED0 - ldr r0, _022331BC ; =0x00002B54 - mov r2, #0 - str r7, [r4, r0] - add r0, #0xc - str r2, [r4, r0] - add r0, r4, #0 - mov r1, #1 - bl MOD83_02231DF0 - add r0, r4, #0 - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + add r7, r1, #0 + add r5, r2, #0 + bl MOD83_022331E0 + ldr r1, _022331B4 ; =0x00003CF4 + add r0, r5, #0 + bl AllocFromHeapAtEnd + ldr r2, _022331B4 ; =0x00003CF4 + mov r1, #0 + add r4, r0, #0 + bl memset + ldr r0, _022331B8 ; =0x0000299C + mov r1, #0x1e + str r6, [r4, r0] + mov r0, #0 + lsl r1, r1, #4 + add r2, r5, #0 + str r5, [r4] + bl FUN_02002ED0 + ldr r0, _022331BC ; =0x00002B54 + mov r2, #0 + str r7, [r4, r0] + add r0, #0xc + str r2, [r4, r0] + add r0, r4, #0 + mov r1, #1 + bl MOD83_02231DF0 + add r0, r4, #0 + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + nop _022331B4: .word 0x00003CF4 _022331B8: .word 0x0000299C _022331BC: .word 0x00002B54 - thumb_func_end MOD83_02233168 + thumb_func_end MOD83_02233168 - thumb_func_start MOD83_022331C0 + thumb_func_start MOD83_022331C0 MOD83_022331C0: ; 0x022331C0 - push {r4, lr} - sub sp, #0x28 - ldr r4, _022331DC ; =MOD83_0223A4D4 - add r3, sp, #0 - mov r2, #5 + push {r4, lr} + sub sp, #0x28 + ldr r4, _022331DC ; =MOD83_0223A4D4 + add r3, sp, #0 + mov r2, #5 _022331CA: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _022331CA - add r0, sp, #0 - bl GX_SetBanks - add sp, #0x28 - pop {r4, pc} - .align 2, 0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _022331CA + add r0, sp, #0 + bl GX_SetBanks + add sp, #0x28 + pop {r4, pc} + .align 2, 0 _022331DC: .word MOD83_0223A4D4 - thumb_func_end MOD83_022331C0 + thumb_func_end MOD83_022331C0 - thumb_func_start MOD83_022331E0 + thumb_func_start MOD83_022331E0 MOD83_022331E0: ; 0x022331E0 - push {r3, r4, r5, lr} - sub sp, #0x80 - ldr r5, _022332A0 ; =MOD83_0223A454 - add r3, sp, #0x70 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - ldr r5, _022332A4 ; =MOD83_0223A480 - add r3, sp, #0x54 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - add r0, r4, #0 - add r3, r1, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332A8 ; =MOD83_0223A4B8 - add r3, sp, #0x38 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #1 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332AC ; =MOD83_0223A49C - add r3, sp, #0x1c - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #2 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #2 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332B0 ; =MOD83_0223A464 - add r3, sp, #0 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #3 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #3 - bl BgClearTilemapBufferAndCommit - add sp, #0x80 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x80 + ldr r5, _022332A0 ; =MOD83_0223A454 + add r3, sp, #0x70 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + ldr r5, _022332A4 ; =MOD83_0223A480 + add r3, sp, #0x54 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #0 + str r0, [r3] + add r0, r4, #0 + add r3, r1, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332A8 ; =MOD83_0223A4B8 + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332AC ; =MOD83_0223A49C + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #2 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332B0 ; =MOD83_0223A464 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #3 + bl BgClearTilemapBufferAndCommit + add sp, #0x80 + pop {r3, r4, r5, pc} + nop _022332A0: .word MOD83_0223A454 _022332A4: .word MOD83_0223A480 _022332A8: .word MOD83_0223A4B8 _022332AC: .word MOD83_0223A49C _022332B0: .word MOD83_0223A464 - thumb_func_end MOD83_022331E0 + thumb_func_end MOD83_022331E0 - thumb_func_start MOD83_022332B4 + thumb_func_start MOD83_022332B4 MOD83_022332B4: ; 0x022332B4 - push {r3, r4, r5, r6, r7, lr} - add r5, r1, #0 - add r7, r0, #0 - bl FUN_0202251C - mov r1, #0 - ldr r4, [r5, #0x48] - mvn r1, r1 - add r6, r0, #0 - cmp r4, r1 - bne _022332E8 - add r2, r5, #0 - add r2, #0x4c - ldrh r2, [r2] - lsr r1, r1, #0x10 - cmp r2, r1 - bne _022332E8 - bl FUN_0202AC28 - add r0, r7, #0 - mov r1, #0 - bl FUN_020227A0 - mov r0, #0 - bl OS_ResetSystem + push {r3, r4, r5, r6, r7, lr} + add r5, r1, #0 + add r7, r0, #0 + bl FUN_0202251C + mov r1, #0 + ldr r4, [r5, #0x48] + mvn r1, r1 + add r6, r0, #0 + cmp r4, r1 + bne _022332E8 + add r2, r5, #0 + add r2, #0x4c + ldrh r2, [r2] + lsr r1, r1, #0x10 + cmp r2, r1 + bne _022332E8 + bl FUN_0202AC28 + add r0, r7, #0 + mov r1, #0 + bl FUN_020227A0 + mov r0, #0 + bl OS_ResetSystem _022332E8: - cmp r4, #0 - bne _022332F0 - mov r4, #0 - mvn r4, r4 + cmp r4, #0 + bne _022332F0 + mov r4, #0 + mvn r4, r4 _022332F0: - .ifdef DIAMOND - mov r0, #1 - .else - mov r0, #2 - .endif - lsl r0, r0, #0xa - tst r0, r4 - bne _022332FC - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + .ifdef DIAMOND + mov r0, #1 + .else + mov r0, #2 + .endif + lsl r0, r0, #0xa + tst r0, r4 + bne _022332FC + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022332FC: - add r0, r5, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - cmp r0, #1 - bne _0223331E - add r1, r5, #0 - add r1, #0x4c - ldrh r1, [r1] - add r0, r6, #0 - bl FUN_0202AEF4 - cmp r0, #1 - bne _0223331E - mov r0, #2 - pop {r3, r4, r5, r6, r7, pc} + add r0, r5, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + cmp r0, #1 + bne _0223331E + add r1, r5, #0 + add r1, #0x4c + ldrh r1, [r1] + add r0, r6, #0 + bl FUN_0202AEF4 + cmp r0, #1 + bne _0223331E + mov r0, #2 + pop {r3, r4, r5, r6, r7, pc} _0223331E: - add r0, r5, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - cmp r0, #1 - bne _0223333A - add r0, r6, #0 - bl FUN_0202AE0C - cmp r0, #0 - bne _0223333A - mov r0, #4 - pop {r3, r4, r5, r6, r7, pc} + add r0, r5, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + cmp r0, #1 + bne _0223333A + add r0, r6, #0 + bl FUN_0202AE0C + cmp r0, #0 + bne _0223333A + mov r0, #4 + pop {r3, r4, r5, r6, r7, pc} _0223333A: - add r0, r6, #0 - bl FUN_0202ADF0 - cmp r0, #0 - bne _02233348 - mov r0, #3 - pop {r3, r4, r5, r6, r7, pc} + add r0, r6, #0 + bl FUN_0202ADF0 + cmp r0, #0 + bne _02233348 + mov r0, #3 + pop {r3, r4, r5, r6, r7, pc} _02233348: - add r5, #0x4e - ldrb r0, [r5] - lsl r0, r0, #0x1a - lsr r0, r0, #0x1f - cmp r0, #1 - bne _02233358 - mov r0, #5 - pop {r3, r4, r5, r6, r7, pc} + add r5, #0x4e + ldrb r0, [r5] + lsl r0, r0, #0x1a + lsr r0, r0, #0x1f + cmp r0, #1 + bne _02233358 + mov r0, #5 + pop {r3, r4, r5, r6, r7, pc} _02233358: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022332B4 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022332B4 - thumb_func_start MOD83_0223335C + thumb_func_start MOD83_0223335C MOD83_0223335C: ; 0x0223335C - push {r3, lr} - mov r0, #4 - bl MOD83_02234580 - bl MOD83_02234C34 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223335C - - thumb_func_start MOD83_0223336C + push {r3, lr} + mov r0, #4 + bl MOD83_02234580 + bl MOD83_02234C34 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223335C + + thumb_func_start MOD83_0223336C MOD83_0223336C: ; 0x0223336C - push {r3, lr} - bl MOD83_02234704 - str r0, [sp] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223336C - - thumb_func_start MOD83_02233378 + push {r3, lr} + bl MOD83_02234704 + str r0, [sp] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223336C + + thumb_func_start MOD83_02233378 MOD83_02233378: ; 0x02233378 - push {r3, lr} - bl MOD83_02234724 - add r1, sp, #0 - strh r0, [r1] - mov r0, #0 - ldrsh r0, [r1, r0] - pop {r3, pc} - thumb_func_end MOD83_02233378 - - thumb_func_start MOD83_02233388 + push {r3, lr} + bl MOD83_02234724 + add r1, sp, #0 + strh r0, [r1] + mov r0, #0 + ldrsh r0, [r1, r0] + pop {r3, pc} + thumb_func_end MOD83_02233378 + + thumb_func_start MOD83_02233388 MOD83_02233388: ; 0x02233388 - push {r4, lr} - bl MOD83_0223458C - cmp r0, #0xc - bne _022333AA - bl MOD83_0223456C - add r4, r0, #0 - ldr r0, [r4, #0x1c] - cmp r0, #0 - bne _022333A6 - bl MOD83_02234C34 - mov r0, #1 - str r0, [r4, #0x1c] + push {r4, lr} + bl MOD83_0223458C + cmp r0, #0xc + bne _022333AA + bl MOD83_0223456C + add r4, r0, #0 + ldr r0, [r4, #0x1c] + cmp r0, #0 + bne _022333A6 + bl MOD83_02234C34 + mov r0, #1 + str r0, [r4, #0x1c] _022333A6: - mov r0, #1 - pop {r4, pc} + mov r0, #1 + pop {r4, pc} _022333AA: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233388 + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233388 - thumb_func_start MOD83_022333B0 + thumb_func_start MOD83_022333B0 MOD83_022333B0: ; 0x022333B0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223466C - mov r3, #0 - add r1, r3, #0 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223466C + mov r3, #0 + add r1, r3, #0 _022333BC: - ldr r2, [r0] - cmp r2, #0 - beq _022333CC - ldrh r2, [r0, #6] - cmp r4, r2 - bne _022333CC - strb r1, [r0, #8] - strb r1, [r0, #0xa] + ldr r2, [r0] + cmp r2, #0 + beq _022333CC + ldrh r2, [r0, #6] + cmp r4, r2 + bne _022333CC + strb r1, [r0, #8] + strb r1, [r0, #0xa] _022333CC: - add r3, r3, #1 - add r0, #0xc - cmp r3, #8 - blt _022333BC - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022333B0 - - thumb_func_start MOD83_022333D8 + add r3, r3, #1 + add r0, #0xc + cmp r3, #8 + blt _022333BC + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022333B0 + + thumb_func_start MOD83_022333D8 MOD83_022333D8: ; 0x022333D8 - push {r3, lr} - bl MOD83_0223466C - add r1, r0, #0 - add r1, #0x62 - ldrh r3, [r1] - mov r2, #1 - add r1, r3, #0 - tst r1, r2 - beq _022333FE - add r1, r0, #0 - add r1, #0x62 - ldrh r3, [r1] - mov r1, #1 - add r0, #0x62 - bic r3, r1 - strh r3, [r0] - add r0, r2, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_0223466C + add r1, r0, #0 + add r1, #0x62 + ldrh r3, [r1] + mov r2, #1 + add r1, r3, #0 + tst r1, r2 + beq _022333FE + add r1, r0, #0 + add r1, #0x62 + ldrh r3, [r1] + mov r1, #1 + add r0, #0x62 + bic r3, r1 + strh r3, [r0] + add r0, r2, #0 + pop {r3, pc} _022333FE: - mov r1, #0x40 - add r2, r3, #0 - tst r2, r1 - beq _02233418 - add r1, r0, #0 - add r1, #0x62 - ldrh r2, [r1] - mov r1, #0x40 - add r0, #0x62 - bic r2, r1 - strh r2, [r0] - mov r0, #7 - pop {r3, pc} + mov r1, #0x40 + add r2, r3, #0 + tst r2, r1 + beq _02233418 + add r1, r0, #0 + add r1, #0x62 + ldrh r2, [r1] + mov r1, #0x40 + add r0, #0x62 + bic r2, r1 + strh r2, [r0] + mov r0, #7 + pop {r3, pc} _02233418: - lsl r1, r1, #6 - tst r1, r3 - beq _02233430 - add r1, r0, #0 - add r1, #0x62 - ldrh r2, [r1] - ldr r1, _02233434 ; =0xFFFFEFFF - add r0, #0x62 - and r1, r2 - strh r1, [r0] - mov r0, #0xd - pop {r3, pc} + lsl r1, r1, #6 + tst r1, r3 + beq _02233430 + add r1, r0, #0 + add r1, #0x62 + ldrh r2, [r1] + ldr r1, _02233434 ; =0xFFFFEFFF + add r0, #0x62 + and r1, r2 + strh r1, [r0] + mov r0, #0xd + pop {r3, pc} _02233430: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _02233434: .word 0xFFFFEFFF - thumb_func_end MOD83_022333D8 + thumb_func_end MOD83_022333D8 - thumb_func_start MOD83_02233438 + thumb_func_start MOD83_02233438 MOD83_02233438: ; 0x02233438 - push {r4, lr} - bl MOD83_0223466C - add r4, r0, #0 - mov r1, #1 - add r0, #0x60 - strb r1, [r0] - bl WM_GetAllowedChannel - add r1, r4, #0 - add r1, #0x62 - strh r0, [r1] - add r0, r4, #0 - add r0, #0x62 - ldrh r1, [r0] - cmp r1, #0 - beq _02233462 - mov r0, #2 - lsl r0, r0, #0xe - cmp r1, r0 - bne _02233466 + push {r4, lr} + bl MOD83_0223466C + add r4, r0, #0 + mov r1, #1 + add r0, #0x60 + strb r1, [r0] + bl WM_GetAllowedChannel + add r1, r4, #0 + add r1, #0x62 + strh r0, [r1] + add r0, r4, #0 + add r0, #0x62 + ldrh r1, [r0] + cmp r1, #0 + beq _02233462 + mov r0, #2 + lsl r0, r0, #0xe + cmp r1, r0 + bne _02233466 _02233462: - mov r0, #0 - pop {r4, pc} + mov r0, #0 + pop {r4, pc} _02233466: - add r0, r4, #0 - mov r1, #0x66 - add r0, #0x61 - strb r1, [r0] - mov r0, #0 - add r4, #0x64 - strb r0, [r4] - mov r0, #1 - pop {r4, pc} - thumb_func_end MOD83_02233438 - - thumb_func_start MOD83_02233478 + add r0, r4, #0 + mov r1, #0x66 + add r0, #0x61 + strb r1, [r0] + mov r0, #0 + add r4, #0x64 + strb r0, [r4] + mov r0, #1 + pop {r4, pc} + thumb_func_end MOD83_02233438 + + thumb_func_start MOD83_02233478 MOD83_02233478: ; 0x02233478 - push {r4, lr} - bl MOD83_02234564 - add r4, r0, #0 - bl WM_GetDispersionBeaconPeriod - strh r0, [r4, #0x18] - bl WM_GetNextTgid - strh r0, [r4, #0xc] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233478 - - thumb_func_start MOD83_02233490 + push {r4, lr} + bl MOD83_02234564 + add r4, r0, #0 + bl WM_GetDispersionBeaconPeriod + strh r0, [r4, #0x18] + bl WM_GetNextTgid + strh r0, [r4, #0xc] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233478 + + thumb_func_start MOD83_02233490 MOD83_02233490: ; 0x02233490 - push {r4, lr} - bl MOD83_022345D4 - add r4, r0, #0 - bl MOD83_02234610 - str r0, [r4] - bl MOD83_02234564 - ldrh r0, [r0, #0x32] - strh r0, [r4, #4] - bl WM_GetDispersionScanPeriod - strh r0, [r4, #6] - mov r0, #0xff - strb r0, [r4, #8] - strb r0, [r4, #9] - strb r0, [r4, #0xa] - strb r0, [r4, #0xb] - strb r0, [r4, #0xc] - strb r0, [r4, #0xd] - pop {r4, pc} - thumb_func_end MOD83_02233490 - - thumb_func_start MOD83_022334BC + push {r4, lr} + bl MOD83_022345D4 + add r4, r0, #0 + bl MOD83_02234610 + str r0, [r4] + bl MOD83_02234564 + ldrh r0, [r0, #0x32] + strh r0, [r4, #4] + bl WM_GetDispersionScanPeriod + strh r0, [r4, #6] + mov r0, #0xff + strb r0, [r4, #8] + strb r0, [r4, #9] + strb r0, [r4, #0xa] + strb r0, [r4, #0xb] + strb r0, [r4, #0xc] + strb r0, [r4, #0xd] + pop {r4, pc} + thumb_func_end MOD83_02233490 + + thumb_func_start MOD83_022334BC MOD83_022334BC: ; 0x022334BC - push {r3, r4, r5, r6, r7, lr} - bl MOD83_022345D4 - add r7, r0, #0 - bl WM_GetAllowedChannel - add r3, r0, #0 - beq _02233508 - ldrh r2, [r7, #4] - mov r1, #0 - mov r0, #1 - mov ip, r2 - mov r4, #0x1c + push {r3, r4, r5, r6, r7, lr} + bl MOD83_022345D4 + add r7, r0, #0 + bl WM_GetAllowedChannel + add r3, r0, #0 + beq _02233508 + ldrh r2, [r7, #4] + mov r1, #0 + mov r0, #1 + mov ip, r2 + mov r4, #0x1c _022334D6: - lsr r6, r2, #0x1f - lsl r5, r2, #0x1c - sub r5, r5, r6 - ror r5, r4 - add r5, r6, r5 - add r6, r0, #0 - lsl r6, r5 - add r5, r3, #0 - tst r5, r6 - beq _02233500 - mov r0, ip - add r0, r0, r1 - lsr r2, r0, #0x1f - lsl r1, r0, #0x1c - sub r1, r1, r2 - mov r0, #0x1c - ror r1, r0 - add r0, r2, r1 - add r0, r0, #1 - strh r0, [r7, #4] - pop {r3, r4, r5, r6, r7, pc} + lsr r6, r2, #0x1f + lsl r5, r2, #0x1c + sub r5, r5, r6 + ror r5, r4 + add r5, r6, r5 + add r6, r0, #0 + lsl r6, r5 + add r5, r3, #0 + tst r5, r6 + beq _02233500 + mov r0, ip + add r0, r0, r1 + lsr r2, r0, #0x1f + lsl r1, r0, #0x1c + sub r1, r1, r2 + mov r0, #0x1c + ror r1, r0 + add r0, r2, r1 + add r0, r0, #1 + strh r0, [r7, #4] + pop {r3, r4, r5, r6, r7, pc} _02233500: - add r1, r1, #1 - add r2, r2, #1 - cmp r1, #0x10 - blt _022334D6 + add r1, r1, #1 + add r2, r2, #1 + cmp r1, #0x10 + blt _022334D6 _02233508: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_022334BC + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_022334BC - thumb_func_start MOD83_0223350C + thumb_func_start MOD83_0223350C MOD83_0223350C: ; 0x0223350C - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #8 - bne _02233524 - bl MOD83_02234958 - bl MOD83_0223335C + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #8 + bne _02233524 + bl MOD83_02234958 + bl MOD83_0223335C _02233524: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0223350C + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0223350C - thumb_func_start MOD83_02233528 + thumb_func_start MOD83_02233528 MOD83_02233528: ; 0x02233528 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - beq _0223353C - bl MOD83_02234958 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + beq _0223353C + bl MOD83_02234958 _0223353C: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233528 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233528 - thumb_func_start MOD83_02233540 + thumb_func_start MOD83_02233540 MOD83_02233540: ; 0x02233540 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233576 - mov r0, #2 - bl MOD83_02234580 - bl MOD83_0223458C - cmp r0, #0xc - bne _02233562 - bl MOD83_022349CC - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233576 + mov r0, #2 + bl MOD83_02234580 + bl MOD83_0223458C + cmp r0, #0xc + bne _02233562 + bl MOD83_022349CC + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233562: - bl MOD83_02234BF8 - cmp r0, #0 - bne _0223357E - bl MOD83_022349CC - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + bl MOD83_02234BF8 + cmp r0, #0 + bne _0223357E + bl MOD83_022349CC + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233576: - bl MOD83_02234958 - bl MOD83_022349CC + bl MOD83_02234958 + bl MOD83_022349CC _0223357E: - pop {r3, pc} - thumb_func_end MOD83_02233540 + pop {r3, pc} + thumb_func_end MOD83_02233540 - thumb_func_start MOD83_02233580 + thumb_func_start MOD83_02233580 MOD83_02233580: ; 0x02233580 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _022335AA - bl MOD83_0223458C - cmp r0, #0xc - bne _022335A2 - bl WM_Finish - mov r0, #0xc - bl MOD83_02234580 - mov r0, #1 - bl MOD83_0223464C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _022335AA + bl MOD83_0223458C + cmp r0, #0xc + bne _022335A2 + bl WM_Finish + mov r0, #0xc + bl MOD83_02234580 + mov r0, #1 + bl MOD83_0223464C + pop {r3, pc} _022335A2: - mov r0, #1 - bl MOD83_02234580 - pop {r3, pc} + mov r0, #1 + bl MOD83_02234580 + pop {r3, pc} _022335AA: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233580 - - thumb_func_start MOD83_022335B8 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233580 + + thumb_func_start MOD83_022335B8 MOD83_022335B8: ; 0x022335B8 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldrh r0, [r5, #2] - cmp r0, #0 - bne _02233616 - bl MOD83_0223466C - add r4, r0, #0 - add r0, #0x61 - ldrh r1, [r5, #0xa] - ldrb r0, [r0] - cmp r0, r1 - ble _022335E0 - add r0, r4, #0 - add r0, #0x61 - strb r1, [r0] - add r0, r4, #0 - ldrh r1, [r5, #8] - add r0, #0x64 - strb r1, [r0] + push {r3, r4, r5, lr} + add r5, r0, #0 + ldrh r0, [r5, #2] + cmp r0, #0 + bne _02233616 + bl MOD83_0223466C + add r4, r0, #0 + add r0, #0x61 + ldrh r1, [r5, #0xa] + ldrb r0, [r0] + cmp r0, r1 + ble _022335E0 + add r0, r4, #0 + add r0, #0x61 + strb r1, [r0] + add r0, r4, #0 + ldrh r1, [r5, #8] + add r0, #0x64 + strb r1, [r0] _022335E0: - bl MOD83_022333D8 - cmp r0, #0 - beq _022335F6 - bl MOD83_022349EC - cmp r0, #0 - bne _0223361E - bl MOD83_0223335C - pop {r3, r4, r5, pc} + bl MOD83_022333D8 + cmp r0, #0 + beq _022335F6 + bl MOD83_022349EC + cmp r0, #0 + bne _0223361E + bl MOD83_0223335C + pop {r3, r4, r5, pc} _022335F6: - add r4, #0x61 - ldrb r0, [r4] - cmp r0, #0x66 - bhs _02233610 - bl MOD83_02233478 - bl MOD83_02234A18 - cmp r0, #0 - bne _0223361E - bl MOD83_0223335C - pop {r3, r4, r5, pc} + add r4, #0x61 + ldrb r0, [r4] + cmp r0, #0x66 + bhs _02233610 + bl MOD83_02233478 + bl MOD83_02234A18 + cmp r0, #0 + bne _0223361E + bl MOD83_0223335C + pop {r3, r4, r5, pc} _02233610: - bl MOD83_0223335C - pop {r3, r4, r5, pc} + bl MOD83_0223335C + pop {r3, r4, r5, pc} _02233616: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _0223361E: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022335B8 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022335B8 - thumb_func_start MOD83_02233620 + thumb_func_start MOD83_02233620 MOD83_02233620: ; 0x02233620 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _0223363E - bl MOD83_02233388 - cmp r0, #0 - bne _02233646 - bl MOD83_02234A54 - cmp r0, #0 - bne _02233646 - bl MOD83_0223335C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _0223363E + bl MOD83_02233388 + cmp r0, #0 + bne _02233646 + bl MOD83_02234A54 + cmp r0, #0 + bne _02233646 + bl MOD83_0223335C + pop {r3, pc} _0223363E: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233646: - pop {r3, pc} - thumb_func_end MOD83_02233620 + pop {r3, pc} + thumb_func_end MOD83_02233620 - thumb_func_start MOD83_02233648 + thumb_func_start MOD83_02233648 MOD83_02233648: ; 0x02233648 - push {r4, r5, lr} - sub sp, #0xc - add r5, r0, #0 - ldrh r0, [r5, #8] - bl MOD83_0223495C - ldrh r0, [r5, #2] - cmp r0, #0 - beq _0223365C - b _0223376E + push {r4, r5, lr} + sub sp, #0xc + add r5, r0, #0 + ldrh r0, [r5, #8] + bl MOD83_0223495C + ldrh r0, [r5, #2] + cmp r0, #0 + beq _0223365C + b _0223376E _0223365C: - bl MOD83_0223466C - add r4, r0, #0 - mov r0, #8 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - beq _02233672 - b _02233776 + bl MOD83_0223466C + add r4, r0, #0 + mov r0, #8 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + beq _02233672 + b _02233776 _02233672: - add r0, r4, #0 - add r0, #0x60 - ldrb r0, [r0] - cmp r0, #1 - bne _02233684 - add r0, r4, #0 - mov r1, #2 - add r0, #0x60 - strb r1, [r0] + add r0, r4, #0 + add r0, #0x60 + ldrb r0, [r0] + cmp r0, #1 + bne _02233684 + add r0, r4, #0 + mov r1, #2 + add r0, #0x60 + strb r1, [r0] _02233684: - ldrh r0, [r5, #8] - cmp r0, #7 - bgt _0223369C - bge _022336BE - cmp r0, #2 - bgt _02233776 - cmp r0, #0 - blt _02233776 - beq _022336A4 - add sp, #0xc - cmp r0, #2 - pop {r4, r5, pc} + ldrh r0, [r5, #8] + cmp r0, #7 + bgt _0223369C + bge _022336BE + cmp r0, #2 + bgt _02233776 + cmp r0, #0 + blt _02233776 + beq _022336A4 + add sp, #0xc + cmp r0, #2 + pop {r4, r5, pc} _0223369C: - cmp r0, #9 - beq _02233764 - add sp, #0xc - pop {r4, r5, pc} + cmp r0, #9 + beq _02233764 + add sp, #0xc + pop {r4, r5, pc} _022336A4: - bl MOD83_02234B80 - cmp r0, #0 - bne _022336B4 - bl MOD83_0223335C - add sp, #0xc - pop {r4, r5, pc} + bl MOD83_02234B80 + cmp r0, #0 + bne _022336B4 + bl MOD83_0223335C + add sp, #0xc + pop {r4, r5, pc} _022336B4: - mov r0, #0 - bl MOD83_0223461C - add sp, #0xc - pop {r4, r5, pc} + mov r0, #0 + bl MOD83_0223461C + add sp, #0xc + pop {r4, r5, pc} _022336BE: - bl MOD83_0223466C - bl MOD83_02234968 - add r4, #0x60 - ldrb r0, [r4] - cmp r0, #2 - bne _02233776 - add r4, r5, #0 - add r4, #0x14 - bl MOD83_022346BC - ldr r1, [r5, #0x14] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233776 - bl MOD83_022346CC - ldr r1, [r4] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233776 - bl MOD83_022346DC - ldr r1, [r4, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02233776 - bl MOD83_0223466C - add r4, r0, #0 - add r0, r5, #0 - add r0, #0xa - bl MOD83_0223336C - str r0, [sp, #4] - str r0, [sp, #8] - add r0, r5, #0 - add r0, #0xa - bl MOD83_02233378 - add r1, sp, #0 - strh r0, [r1] - ldrh r0, [r1] - ldr r2, [sp, #8] - add r3, r4, #0 - strh r0, [r1, #2] - mov r0, #0 + bl MOD83_0223466C + bl MOD83_02234968 + add r4, #0x60 + ldrb r0, [r4] + cmp r0, #2 + bne _02233776 + add r4, r5, #0 + add r4, #0x14 + bl MOD83_022346BC + ldr r1, [r5, #0x14] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233776 + bl MOD83_022346CC + ldr r1, [r4] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233776 + bl MOD83_022346DC + ldr r1, [r4, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02233776 + bl MOD83_0223466C + add r4, r0, #0 + add r0, r5, #0 + add r0, #0xa + bl MOD83_0223336C + str r0, [sp, #4] + str r0, [sp, #8] + add r0, r5, #0 + add r0, #0xa + bl MOD83_02233378 + add r1, sp, #0 + strh r0, [r1] + ldrh r0, [r1] + ldr r2, [sp, #8] + add r3, r4, #0 + strh r0, [r1, #2] + mov r0, #0 _02233722: - ldr r1, [r3] - cmp r1, r2 - bne _0223373A - mov r1, #0xc - mul r1, r0 - ldrh r0, [r5, #0x10] - add r1, r4, r1 - add sp, #0xc - strh r0, [r1, #6] - mov r0, #1 - strb r0, [r1, #0xa] - pop {r4, r5, pc} + ldr r1, [r3] + cmp r1, r2 + bne _0223373A + mov r1, #0xc + mul r1, r0 + ldrh r0, [r5, #0x10] + add r1, r4, r1 + add sp, #0xc + strh r0, [r1, #6] + mov r0, #1 + strb r0, [r1, #0xa] + pop {r4, r5, pc} _0223373A: - cmp r1, #0 - bne _02233758 - mov r1, #0xc - mul r1, r0 - str r2, [r4, r1] - add r0, sp, #0 - ldrh r0, [r0, #2] - add r1, r4, r1 - add sp, #0xc - strh r0, [r1, #4] - ldrh r0, [r5, #0x10] - strh r0, [r1, #6] - mov r0, #1 - strb r0, [r1, #0xa] - pop {r4, r5, pc} + cmp r1, #0 + bne _02233758 + mov r1, #0xc + mul r1, r0 + str r2, [r4, r1] + add r0, sp, #0 + ldrh r0, [r0, #2] + add r1, r4, r1 + add sp, #0xc + strh r0, [r1, #4] + ldrh r0, [r5, #0x10] + strh r0, [r1, #6] + mov r0, #1 + strb r0, [r1, #0xa] + pop {r4, r5, pc} _02233758: - add r0, r0, #1 - add r3, #0xc - cmp r0, #8 - blt _02233722 - add sp, #0xc - pop {r4, r5, pc} + add r0, r0, #1 + add r3, #0xc + cmp r0, #8 + blt _02233722 + add sp, #0xc + pop {r4, r5, pc} _02233764: - ldrh r0, [r5, #0x10] - bl MOD83_022333B0 - add sp, #0xc - pop {r4, r5, pc} + ldrh r0, [r5, #0x10] + bl MOD83_022333B0 + add sp, #0xc + pop {r4, r5, pc} _0223376E: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233776: - add sp, #0xc - pop {r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_02233648 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_02233648 - thumb_func_start MOD83_0223377C + thumb_func_start MOD83_0223377C MOD83_0223377C: ; 0x0223377C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r4, r1, #0 - str r0, [sp] - bl MOD83_02234664 - add r7, r0, #0 - add r0, r4, #4 - bl MOD83_0223336C - str r0, [sp, #8] - str r0, [sp, #0xc] - add r0, r4, #4 - bl MOD83_02233378 - add r2, sp, #4 - strh r0, [r2] - ldrh r0, [r2] - ldr r6, [sp, #0xc] - add r1, r7, #0 - strh r0, [r2, #2] - ldrh r3, [r2, #2] - mov r0, #0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r4, r1, #0 + str r0, [sp] + bl MOD83_02234664 + add r7, r0, #0 + add r0, r4, #4 + bl MOD83_0223336C + str r0, [sp, #8] + str r0, [sp, #0xc] + add r0, r4, #4 + bl MOD83_02233378 + add r2, sp, #4 + strh r0, [r2] + ldrh r0, [r2] + ldr r6, [sp, #0xc] + add r1, r7, #0 + strh r0, [r2, #2] + ldrh r3, [r2, #2] + mov r0, #0 _022337AA: - ldr r2, [r1] - add r5, r1, #0 - add r5, #0x34 - cmp r2, r6 - bne _022337C0 - ldrh r5, [r5] - cmp r5, r3 - bne _022337C0 - add sp, #0x10 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r2, [r1] + add r5, r1, #0 + add r5, #0x34 + cmp r2, r6 + bne _022337C0 + ldrh r5, [r5] + cmp r5, r3 + bne _022337C0 + add sp, #0x10 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022337C0: - cmp r2, #0 - bne _0223380C - mov r1, #0x38 - mul r1, r0 - ldr r0, [sp, #0xc] - add r5, r4, #0 - str r0, [r7, r1] - add r0, r7, r1 - add r5, #0x58 - add r3, r0, #4 - mov r2, #0xc + cmp r2, #0 + bne _0223380C + mov r1, #0x38 + mul r1, r0 + ldr r0, [sp, #0xc] + add r5, r4, #0 + str r0, [r7, r1] + add r0, r7, r1 + add r5, #0x58 + add r3, r0, #4 + mov r2, #0xc _022337D6: - ldrh r0, [r5] - add r5, r5, #2 - strh r0, [r3] - add r3, r3, #2 - sub r2, r2, #1 - bne _022337D6 - add r3, r7, r1 - add r4, #0x70 - add r3, #0x1c - mov r2, #0xc + ldrh r0, [r5] + add r5, r5, #2 + strh r0, [r3] + add r3, r3, #2 + sub r2, r2, #1 + bne _022337D6 + add r3, r7, r1 + add r4, #0x70 + add r3, #0x1c + mov r2, #0xc _022337EA: - ldrh r0, [r4] - add r4, r4, #2 - strh r0, [r3] - add r3, r3, #2 - sub r2, r2, #1 - bne _022337EA - add r0, sp, #4 - ldrh r0, [r0, #2] - add r1, r7, r1 - strh r0, [r1, #0x34] - ldr r0, [sp] - add r1, #0x36 - ldrh r0, [r0, #0x12] - add sp, #0x10 - strb r0, [r1] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + add r4, r4, #2 + strh r0, [r3] + add r3, r3, #2 + sub r2, r2, #1 + bne _022337EA + add r0, sp, #4 + ldrh r0, [r0, #2] + add r1, r7, r1 + strh r0, [r1, #0x34] + ldr r0, [sp] + add r1, #0x36 + ldrh r0, [r0, #0x12] + add sp, #0x10 + strb r0, [r1] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0223380C: - add r0, r0, #1 - add r1, #0x38 - cmp r0, #8 - blt _022337AA - mov r0, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_0223377C - - thumb_func_start MOD83_0223381C + add r0, r0, #1 + add r1, #0x38 + cmp r0, #8 + blt _022337AA + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_0223377C + + thumb_func_start MOD83_0223381C MOD83_0223381C: ; 0x0223381C - push {r3, lr} - bl MOD83_022334BC - bl MOD83_02234A70 - cmp r0, #0 - bne _0223382E - bl MOD83_0223335C + push {r3, lr} + bl MOD83_022334BC + bl MOD83_02234A70 + cmp r0, #0 + bne _0223382E + bl MOD83_0223335C _0223382E: - pop {r3, pc} - thumb_func_end MOD83_0223381C + pop {r3, pc} + thumb_func_end MOD83_0223381C - thumb_func_start MOD83_02233830 + thumb_func_start MOD83_02233830 MOD83_02233830: ; 0x02233830 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234610 - add r4, r0, #0 - bl MOD83_02234664 - add r5, r0, #0 - bl MOD83_02233388 - cmp r0, #0 - beq _0223384C - mov r0, #1 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234610 + add r4, r0, #0 + bl MOD83_02234664 + add r5, r0, #0 + bl MOD83_02233388 + cmp r0, #0 + beq _0223384C + mov r0, #1 + pop {r4, r5, r6, pc} _0223384C: - mov r1, #0 - add r2, r1, #0 - add r3, r5, #0 + mov r1, #0 + add r2, r1, #0 + add r3, r5, #0 _02233852: - ldr r0, [r3] - cmp r0, #0 - beq _0223385C - mov r1, #1 - b _02233864 + ldr r0, [r3] + cmp r0, #0 + beq _0223385C + mov r1, #1 + b _02233864 _0223385C: - add r2, r2, #1 - add r3, #0x38 - cmp r2, #8 - blt _02233852 + add r2, r2, #1 + add r3, #0x38 + cmp r2, #8 + blt _02233852 _02233864: - cmp r1, #0 - beq _02233882 - mov r0, #7 - lsl r0, r0, #6 - ldrh r0, [r5, r0] - cmp r0, #0 - bne _02233882 - bl MOD83_02234B2C - cmp r0, #0 - bne _0223387E - bl MOD83_0223335C + cmp r1, #0 + beq _02233882 + mov r0, #7 + lsl r0, r0, #6 + ldrh r0, [r5, r0] + cmp r0, #0 + bne _02233882 + bl MOD83_02234B2C + cmp r0, #0 + bne _0223387E + bl MOD83_0223335C _0223387E: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _02233882: - add r0, r4, #0 - mov r1, #0xc0 - bl DC_InvalidateRange - bl MOD83_02234664 - bl MOD83_02234964 - ldrh r0, [r6, #0x36] - cmp r0, #8 - blo _0223390C - bl MOD83_022346B0 - ldr r1, [r4, #0x44] - cmp r1, r0 - bne _0223390C - add r5, r4, #0 - add r5, #0x50 - bl MOD83_022346BC - ldr r1, [r4, #0x50] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _0223390C - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _0223390C - bl MOD83_022346DC - ldr r1, [r5, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _0223390C - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_0223377C - cmp r0, #0 - beq _022338FC - bl MOD83_02234664 - ldr r1, _02233910 ; =0x000001C2 - ldrb r2, [r0, r1] - add r2, r2, #1 - strb r2, [r0, r1] - ldrb r0, [r0, r1] - cmp r0, #0x1c - bls _0223390C - bl MOD83_02234B2C - cmp r0, #0 - bne _0223390C - bl MOD83_0223335C - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #0xc0 + bl DC_InvalidateRange + bl MOD83_02234664 + bl MOD83_02234964 + ldrh r0, [r6, #0x36] + cmp r0, #8 + blo _0223390C + bl MOD83_022346B0 + ldr r1, [r4, #0x44] + cmp r1, r0 + bne _0223390C + add r5, r4, #0 + add r5, #0x50 + bl MOD83_022346BC + ldr r1, [r4, #0x50] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _0223390C + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _0223390C + bl MOD83_022346DC + ldr r1, [r5, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _0223390C + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_0223377C + cmp r0, #0 + beq _022338FC + bl MOD83_02234664 + ldr r1, _02233910 ; =0x000001C2 + ldrb r2, [r0, r1] + add r2, r2, #1 + strb r2, [r0, r1] + ldrb r0, [r0, r1] + cmp r0, #0x1c + bls _0223390C + bl MOD83_02234B2C + cmp r0, #0 + bne _0223390C + bl MOD83_0223335C + mov r0, #1 + pop {r4, r5, r6, pc} _022338FC: - bl MOD83_02234B2C - cmp r0, #0 - bne _02233908 - bl MOD83_0223335C + bl MOD83_02234B2C + cmp r0, #0 + bne _02233908 + bl MOD83_0223335C _02233908: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _0223390C: - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 _02233910: .word 0x000001C2 - thumb_func_end MOD83_02233830 + thumb_func_end MOD83_02233830 - thumb_func_start MOD83_02233914 + thumb_func_start MOD83_02233914 MOD83_02233914: ; 0x02233914 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _0223397A - bl MOD83_02234610 - bl MOD83_02234960 - mov r0, #6 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233982 - bl MOD83_022345A4 - cmp r0, #1 - bne _02233954 - bl MOD83_02234664 - ldr r2, _02233984 ; =0x000001C3 - mov r1, #0xf0 - ldrb r3, [r0, r2] - bic r3, r1 - mov r1, #0x10 - orr r1, r3 - strb r1, [r0, r2] + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _0223397A + bl MOD83_02234610 + bl MOD83_02234960 + mov r0, #6 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233982 + bl MOD83_022345A4 + cmp r0, #1 + bne _02233954 + bl MOD83_02234664 + ldr r2, _02233984 ; =0x000001C3 + mov r1, #0xf0 + ldrb r3, [r0, r2] + bic r3, r1 + mov r1, #0x10 + orr r1, r3 + strb r1, [r0, r2] _02233954: - ldrh r0, [r4, #8] - cmp r0, #4 - beq _02233968 - cmp r0, #5 - bne _0223396E - add r0, r4, #0 - bl MOD83_02233830 - cmp r0, #0 - bne _02233982 + ldrh r0, [r4, #8] + cmp r0, #4 + beq _02233968 + cmp r0, #5 + bne _0223396E + add r0, r4, #0 + bl MOD83_02233830 + cmp r0, #0 + bne _02233982 _02233968: - bl MOD83_0223381C - pop {r4, pc} + bl MOD83_0223381C + pop {r4, pc} _0223396E: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _0223397A: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233982: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02233984: .word 0x000001C3 - thumb_func_end MOD83_02233914 + thumb_func_end MOD83_02233914 - thumb_func_start MOD83_02233988 + thumb_func_start MOD83_02233988 MOD83_02233988: ; 0x02233988 - push {r4, r5, r6, lr} - sub sp, #8 - bl MOD83_02234610 - add r4, r0, #0 - bl MOD83_02234664 - add r6, r0, #0 - bl MOD83_02234564 - bl MOD83_02233388 - cmp r0, #0 - beq _022339AA - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #8 + bl MOD83_02234610 + add r4, r0, #0 + bl MOD83_02234664 + add r6, r0, #0 + bl MOD83_02234564 + bl MOD83_02233388 + cmp r0, #0 + beq _022339AA + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _022339AA: - add r0, r4, #0 - mov r1, #0xc0 - bl DC_InvalidateRange - bl MOD83_02234664 - bl MOD83_02234964 - ldrh r0, [r4, #0x3c] - cmp r0, #8 - blo _02233A24 - bl MOD83_022346B0 - ldr r1, [r4, #0x44] - cmp r1, r0 - bne _02233A24 - add r5, r4, #0 - add r5, #0x50 - bl MOD83_022346BC - ldr r1, [r4, #0x50] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233A24 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233A24 - bl MOD83_022346DC - ldr r1, [r5, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02233A24 - add r0, r4, #4 - bl MOD83_0223336C - ldr r1, _02233A2C ; =0x000001C3 - str r0, [sp] - ldrb r1, [r6, r1] - str r0, [sp, #4] - lsl r1, r1, #0x1c - lsr r2, r1, #0x1c - mov r1, #0x38 - mul r1, r2 - ldr r1, [r6, r1] - cmp r1, r0 - bne _02233A24 - bl MOD83_02234B2C - cmp r0, #0 - bne _02233A1E - bl MOD83_0223335C + add r0, r4, #0 + mov r1, #0xc0 + bl DC_InvalidateRange + bl MOD83_02234664 + bl MOD83_02234964 + ldrh r0, [r4, #0x3c] + cmp r0, #8 + blo _02233A24 + bl MOD83_022346B0 + ldr r1, [r4, #0x44] + cmp r1, r0 + bne _02233A24 + add r5, r4, #0 + add r5, #0x50 + bl MOD83_022346BC + ldr r1, [r4, #0x50] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233A24 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233A24 + bl MOD83_022346DC + ldr r1, [r5, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02233A24 + add r0, r4, #4 + bl MOD83_0223336C + ldr r1, _02233A2C ; =0x000001C3 + str r0, [sp] + ldrb r1, [r6, r1] + str r0, [sp, #4] + lsl r1, r1, #0x1c + lsr r2, r1, #0x1c + mov r1, #0x38 + mul r1, r2 + ldr r1, [r6, r1] + cmp r1, r0 + bne _02233A24 + bl MOD83_02234B2C + cmp r0, #0 + bne _02233A1E + bl MOD83_0223335C _02233A1E: - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _02233A24: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #8 + pop {r4, r5, r6, pc} + nop _02233A2C: .word 0x000001C3 - thumb_func_end MOD83_02233988 + thumb_func_end MOD83_02233988 - thumb_func_start MOD83_02233A30 + thumb_func_start MOD83_02233A30 MOD83_02233A30: ; 0x02233A30 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233A90 - bl MOD83_02234664 - ldr r2, _02233A9C ; =0x000001C3 - mov r1, #0xf0 - ldrb r3, [r0, r2] - bic r3, r1 - mov r1, #0x20 - orr r1, r3 - strb r1, [r0, r2] - mov r0, #6 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233A98 - ldrh r0, [r4, #8] - cmp r0, #4 - beq _02233A72 - cmp r0, #5 - bne _02233A84 - bl MOD83_02233988 - cmp r0, #0 - bne _02233A98 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233A90 + bl MOD83_02234664 + ldr r2, _02233A9C ; =0x000001C3 + mov r1, #0xf0 + ldrb r3, [r0, r2] + bic r3, r1 + mov r1, #0x20 + orr r1, r3 + strb r1, [r0, r2] + mov r0, #6 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233A98 + ldrh r0, [r4, #8] + cmp r0, #4 + beq _02233A72 + cmp r0, #5 + bne _02233A84 + bl MOD83_02233988 + cmp r0, #0 + bne _02233A98 _02233A72: - bl MOD83_022334BC - bl MOD83_02234A94 - cmp r0, #0 - bne _02233A98 - bl MOD83_0223335C - pop {r4, pc} + bl MOD83_022334BC + bl MOD83_02234A94 + cmp r0, #0 + bne _02233A98 + bl MOD83_0223335C + pop {r4, pc} _02233A84: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _02233A90: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233A98: - pop {r4, pc} - nop + pop {r4, pc} + nop _02233A9C: .word 0x000001C3 - thumb_func_end MOD83_02233A30 + thumb_func_end MOD83_02233A30 - thumb_func_start MOD83_02233AA0 + thumb_func_start MOD83_02233AA0 MOD83_02233AA0: ; 0x02233AA0 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233AE4 - mov r0, #7 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233AEC - bl MOD83_022345A4 - cmp r0, #1 - bne _02233AEC - bl MOD83_02234664 - ldr r1, _02233AF0 ; =0x000001C3 - ldrb r0, [r0, r1] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1c - cmp r0, #2 - bne _02233AEC - bl MOD83_02234B48 - cmp r0, #0 - bne _02233ADC - bl MOD83_0223335C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233AE4 + mov r0, #7 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233AEC + bl MOD83_022345A4 + cmp r0, #1 + bne _02233AEC + bl MOD83_02234664 + ldr r1, _02233AF0 ; =0x000001C3 + ldrb r0, [r0, r1] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1c + cmp r0, #2 + bne _02233AEC + bl MOD83_02234B48 + cmp r0, #0 + bne _02233ADC + bl MOD83_0223335C + pop {r3, pc} _02233ADC: - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233AE4: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233AEC: - pop {r3, pc} - nop + pop {r3, pc} + nop _02233AF0: .word 0x000001C3 - thumb_func_end MOD83_02233AA0 + thumb_func_end MOD83_02233AA0 - thumb_func_start MOD83_02233AF4 + thumb_func_start MOD83_02233AF4 MOD83_02233AF4: ; 0x02233AF4 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233B7A - mov r0, #9 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233B82 - ldrh r0, [r4, #8] - cmp r0, #9 - bhi _02233B6E - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233B7A + mov r0, #9 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233B82 + ldrh r0, [r4, #8] + cmp r0, #9 + bhi _02233B6E + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02233B24: ; jump table - .short _02233B6E - _02233B24 - 2 ; case 0 - .short _02233B6E - _02233B24 - 2 ; case 1 - .short _02233B6E - _02233B24 - 2 ; case 2 - .short _02233B6E - _02233B24 - 2 ; case 3 - .short _02233B6E - _02233B24 - 2 ; case 4 - .short _02233B6E - _02233B24 - 2 ; case 5 - .short _02233B82 - _02233B24 - 2 ; case 6 - .short _02233B38 - _02233B24 - 2 ; case 7 - .short _02233B82 - _02233B24 - 2 ; case 8 - .short _02233B58 - _02233B24 - 2 ; case 9 + .short _02233B6E - _02233B24 - 2 ; case 0 + .short _02233B6E - _02233B24 - 2 ; case 1 + .short _02233B6E - _02233B24 - 2 ; case 2 + .short _02233B6E - _02233B24 - 2 ; case 3 + .short _02233B6E - _02233B24 - 2 ; case 4 + .short _02233B6E - _02233B24 - 2 ; case 5 + .short _02233B82 - _02233B24 - 2 ; case 6 + .short _02233B38 - _02233B24 - 2 ; case 7 + .short _02233B82 - _02233B24 - 2 ; case 8 + .short _02233B58 - _02233B24 - 2 ; case 9 _02233B38: - ldrh r0, [r4, #0xa] - bl MOD83_0223461C - mov r0, #1 - bl MOD83_02234634 - mov r0, #0 - bl MOD83_02234640 - bl MOD83_02234B80 - cmp r0, #0 - bne _02233B82 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #0xa] + bl MOD83_0223461C + mov r0, #1 + bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234640 + bl MOD83_02234B80 + cmp r0, #0 + bne _02233B82 + bl MOD83_0223335C + pop {r4, pc} _02233B58: - bl MOD83_02234628 - cmp r0, #0 - beq _02233B66 - mov r0, #1 - bl MOD83_02234640 + bl MOD83_02234628 + cmp r0, #0 + beq _02233B66 + mov r0, #1 + bl MOD83_02234640 _02233B66: - mov r0, #0 - bl MOD83_02234634 - pop {r4, pc} + mov r0, #0 + bl MOD83_02234634 + pop {r4, pc} _02233B6E: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _02233B7A: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233B82: - pop {r4, pc} - thumb_func_end MOD83_02233AF4 + pop {r4, pc} + thumb_func_end MOD83_02233AF4 - thumb_func_start MOD83_02233B84 + thumb_func_start MOD83_02233B84 MOD83_02233B84: ; 0x02233B84 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _02233BBE - cmp r0, #2 - bne _02233BD6 - bl MOD83_02233438 - cmp r0, #0 - beq _02233BB8 - bl MOD83_022333D8 - bl MOD83_022349EC - cmp r0, #0 - beq _02233BB8 - bl MOD83_0223466C - mov r1, #1 - add r0, #0x60 - strb r1, [r0] - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _02233BBE + cmp r0, #2 + bne _02233BD6 + bl MOD83_02233438 + cmp r0, #0 + beq _02233BB8 + bl MOD83_022333D8 + bl MOD83_022349EC + cmp r0, #0 + beq _02233BB8 + bl MOD83_0223466C + mov r1, #1 + add r0, #0x60 + strb r1, [r0] + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233BB8: - bl MOD83_0223335C - pop {r3, pc} + bl MOD83_0223335C + pop {r3, pc} _02233BBE: - bl MOD83_02233490 - bl MOD83_02234A70 - cmp r0, #0 - bne _02233BD0 - bl MOD83_0223335C - pop {r3, pc} + bl MOD83_02233490 + bl MOD83_02234A70 + cmp r0, #0 + bne _02233BD0 + bl MOD83_0223335C + pop {r3, pc} _02233BD0: - mov r0, #3 - bl MOD83_02234580 + mov r0, #3 + bl MOD83_02234580 _02233BD6: - pop {r3, pc} - thumb_func_end MOD83_02233B84 + pop {r3, pc} + thumb_func_end MOD83_02233B84 - thumb_func_start MOD83_02233BD8 + thumb_func_start MOD83_02233BD8 MOD83_02233BD8: ; 0x02233BD8 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233C12 - ldrh r0, [r4] - cmp r0, #0xe - bne _02233BF6 - bl MOD83_02233388 - cmp r0, #0 - bne _02233C22 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233C12 + ldrh r0, [r4] + cmp r0, #0xe + bne _02233BF6 + bl MOD83_02233388 + cmp r0, #0 + bne _02233C22 _02233BF6: - bl MOD83_022345A4 - cmp r0, #1 - beq _02233C0A - cmp r0, #2 - bne _02233C22 - mov r0, #0xa - bl MOD83_02234580 - pop {r4, pc} + bl MOD83_022345A4 + cmp r0, #1 + beq _02233C0A + cmp r0, #2 + bne _02233C22 + mov r0, #0xa + bl MOD83_02234580 + pop {r4, pc} _02233C0A: - mov r0, #0xb - bl MOD83_02234580 - pop {r4, pc} + mov r0, #0xb + bl MOD83_02234580 + pop {r4, pc} _02233C12: - cmp r0, #9 - beq _02233C22 - cmp r0, #0xd - beq _02233C22 - cmp r0, #0xf - beq _02233C22 - bl MOD83_0223335C + cmp r0, #9 + beq _02233C22 + cmp r0, #0xd + beq _02233C22 + cmp r0, #0xf + beq _02233C22 + bl MOD83_0223335C _02233C22: - pop {r4, pc} - thumb_func_end MOD83_02233BD8 + pop {r4, pc} + thumb_func_end MOD83_02233BD8 - thumb_func_start MOD83_02233C24 + thumb_func_start MOD83_02233C24 MOD83_02233C24: ; 0x02233C24 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #1 - bne _02233C9A - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233C9A - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233C9A - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - ldrb r0, [r4, #0x1c] - cmp r1, r0 - bne _02233C9A - ldr r0, [r4, #0xc] - bl MOD83_0223496C - ldr r0, [r4, #0xc] - bl MOD83_02234934 - cmp r0, #0 - beq _02233C96 - ldr r0, [r5, #8] - lsl r0, r0, #0x10 - lsr r0, r0, #0x18 - cmp r0, #1 - beq _02233C96 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #1 + bne _02233C9A + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233C9A + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233C9A + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + ldrb r0, [r4, #0x1c] + cmp r1, r0 + bne _02233C9A + ldr r0, [r4, #0xc] + bl MOD83_0223496C + ldr r0, [r4, #0xc] + bl MOD83_02234934 + cmp r0, #0 + beq _02233C96 + ldr r0, [r5, #8] + lsl r0, r0, #0x10 + lsr r0, r0, #0x18 + cmp r0, #1 + beq _02233C96 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r4, r5, r6, pc} _02233C96: - mov r0, #0 - strb r0, [r4, #0x19] + mov r0, #0 + strb r0, [r4, #0x19] _02233C9A: - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02233C24 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02233C24 - thumb_func_start MOD83_02233C9C + thumb_func_start MOD83_02233C9C MOD83_02233C9C: ; 0x02233C9C - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #2 - bne _02233D24 - ldrb r0, [r4, #0x19] - cmp r0, #2 - beq _02233D24 - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233D24 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233D24 - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, #0xfd - bne _02233D24 - bl MOD83_0223466C - ldrh r5, [r6, #0x12] - mov r2, #0 - add r3, r0, #0 + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #2 + bne _02233D24 + ldrb r0, [r4, #0x19] + cmp r0, #2 + beq _02233D24 + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233D24 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233D24 + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r0, #0xfd + bne _02233D24 + bl MOD83_0223466C + ldrh r5, [r6, #0x12] + mov r2, #0 + add r3, r0, #0 _02233CFE: - ldrh r1, [r3, #6] - cmp r5, r1 - bne _02233D1C - mov r1, #0xc - mul r1, r2 - add r1, r0, r1 - mov r2, #1 - strb r2, [r1, #8] - mov r0, #3 - strb r0, [r1, #9] - mov r0, #0xb4 - strb r0, [r4, #0x1a] - mov r0, #0 - strb r0, [r4, #0x19] - pop {r4, r5, r6, pc} + ldrh r1, [r3, #6] + cmp r5, r1 + bne _02233D1C + mov r1, #0xc + mul r1, r2 + add r1, r0, r1 + mov r2, #1 + strb r2, [r1, #8] + mov r0, #3 + strb r0, [r1, #9] + mov r0, #0xb4 + strb r0, [r4, #0x1a] + mov r0, #0 + strb r0, [r4, #0x19] + pop {r4, r5, r6, pc} _02233D1C: - add r2, r2, #1 - add r3, #0xc - cmp r2, #8 - blt _02233CFE + add r2, r2, #1 + add r3, #0xc + cmp r2, #8 + blt _02233CFE _02233D24: - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02233C9C + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02233C9C - thumb_func_start MOD83_02233D28 + thumb_func_start MOD83_02233D28 MOD83_02233D28: ; 0x02233D28 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x1c] - cmp r0, #0xfd - bne _02233D40 - add r0, r6, #0 - bl MOD83_02233C9C - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x1c] + cmp r0, #0xfd + bne _02233D40 + add r0, r6, #0 + bl MOD83_02233C9C + pop {r4, r5, r6, pc} _02233D40: - ldrb r0, [r4, #0x19] - cmp r0, #1 - beq _02233D4C - ldrb r0, [r4, #0x19] - cmp r0, #3 - bne _02233DE8 + ldrb r0, [r4, #0x19] + cmp r0, #1 + beq _02233D4C + ldrb r0, [r4, #0x19] + cmp r0, #3 + bne _02233DE8 _02233D4C: - ldrb r0, [r4, #0x1b] - cmp r0, #0 - bne _02233DE8 - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233DE8 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233DE8 - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - ldrb r0, [r4, #0x1c] - cmp r1, r0 - bne _02233DE8 - ldr r0, [r4, #0xc] - bl MOD83_0223496C - mov r0, #0 - strb r0, [r4, #0x19] - ldr r0, [r4, #0xc] - bl MOD83_02234934 - cmp r0, #0 - beq _02233DDA - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, #0xfd - bne _02233DBA - add r0, r6, #0 - bl MOD83_02233C9C - b _02233DCC + ldrb r0, [r4, #0x1b] + cmp r0, #0 + bne _02233DE8 + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233DE8 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233DE8 + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + ldrb r0, [r4, #0x1c] + cmp r1, r0 + bne _02233DE8 + ldr r0, [r4, #0xc] + bl MOD83_0223496C + mov r0, #0 + strb r0, [r4, #0x19] + ldr r0, [r4, #0xc] + bl MOD83_02234934 + cmp r0, #0 + beq _02233DDA + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r0, #0xfd + bne _02233DBA + add r0, r6, #0 + bl MOD83_02233C9C + b _02233DCC _02233DBA: - ldr r2, [r5, #0xc] - ldr r1, [r4, #0xc] - lsl r0, r2, #0x18 - lsr r0, r0, #0x18 - add r0, r1, r0 - ldr r1, [r4, #4] - lsr r2, r2, #8 - bl MI_CpuCopy8 + ldr r2, [r5, #0xc] + ldr r1, [r4, #0xc] + lsl r0, r2, #0x18 + lsr r0, r0, #0x18 + add r0, r1, r0 + ldr r1, [r4, #4] + lsr r2, r2, #8 + bl MI_CpuCopy8 _02233DCC: - ldr r1, [r5, #8] - ldr r0, _02233DEC ; =0xFFFF00FF - and r0, r1 - str r0, [r5, #8] - mov r0, #4 - strb r0, [r4, #0x1b] - pop {r4, r5, r6, pc} + ldr r1, [r5, #8] + ldr r0, _02233DEC ; =0xFFFF00FF + and r0, r1 + str r0, [r5, #8] + mov r0, #4 + strb r0, [r4, #0x1b] + pop {r4, r5, r6, pc} _02233DDA: - ldr r1, [r5, #8] - ldr r0, _02233DEC ; =0xFFFF00FF - and r1, r0 - mov r0, #1 - lsl r0, r0, #8 - orr r0, r1 - str r0, [r5, #8] + ldr r1, [r5, #8] + ldr r0, _02233DEC ; =0xFFFF00FF + and r1, r0 + mov r0, #1 + lsl r0, r0, #8 + orr r0, r1 + str r0, [r5, #8] _02233DE8: - pop {r4, r5, r6, pc} - nop + pop {r4, r5, r6, pc} + nop _02233DEC: .word 0xFFFF00FF - thumb_func_end MOD83_02233D28 + thumb_func_end MOD83_02233D28 - thumb_func_start MOD83_02233DF0 + thumb_func_start MOD83_02233DF0 MOD83_02233DF0: ; 0x02233DF0 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233E72 - ldrh r0, [r4, #4] - cmp r0, #7 - beq _02233E3A - cmp r0, #9 - beq _02233E48 - cmp r0, #0x15 - bne _02233E72 - bl MOD83_02234574 - cmp r0, #0xa - beq _02233E1A - cmp r0, #0xb - bne _02233E72 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233E72 + ldrh r0, [r4, #4] + cmp r0, #7 + beq _02233E3A + cmp r0, #9 + beq _02233E48 + cmp r0, #0x15 + bne _02233E72 + bl MOD83_02234574 + cmp r0, #0xa + beq _02233E1A + cmp r0, #0xb + bne _02233E72 _02233E1A: - bl MOD83_02234694 - ldrb r0, [r0, #0x18] - cmp r0, #1 - beq _02233E2A - cmp r0, #2 - beq _02233E32 - pop {r4, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x18] + cmp r0, #1 + beq _02233E2A + cmp r0, #2 + beq _02233E32 + pop {r4, pc} _02233E2A: - add r0, r4, #0 - bl MOD83_02233C24 - pop {r4, pc} + add r0, r4, #0 + bl MOD83_02233C24 + pop {r4, pc} _02233E32: - add r0, r4, #0 - bl MOD83_02233D28 - pop {r4, pc} + add r0, r4, #0 + bl MOD83_02233D28 + pop {r4, pc} _02233E3A: - mov r0, #1 - bl MOD83_02234634 - mov r0, #0 - bl MOD83_02234640 - pop {r4, pc} + mov r0, #1 + bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234640 + pop {r4, pc} _02233E48: - bl MOD83_02234628 - cmp r0, #0 - beq _02233E56 - mov r0, #1 - bl MOD83_02234640 + bl MOD83_02234628 + cmp r0, #0 + beq _02233E56 + mov r0, #1 + bl MOD83_02234640 _02233E56: - bl MOD83_02234574 - cmp r0, #0xa - beq _02233E64 - cmp r0, #0xb - beq _02233E6C - pop {r4, pc} + bl MOD83_02234574 + cmp r0, #0xa + beq _02233E64 + cmp r0, #0xb + beq _02233E6C + pop {r4, pc} _02233E64: - ldrh r0, [r4, #0x12] - bl MOD83_022333B0 - pop {r4, pc} + ldrh r0, [r4, #0x12] + bl MOD83_022333B0 + pop {r4, pc} _02233E6C: - mov r0, #0 - bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234634 _02233E72: - pop {r4, pc} - thumb_func_end MOD83_02233DF0 + pop {r4, pc} + thumb_func_end MOD83_02233DF0 - thumb_func_start MOD83_02233E74 + thumb_func_start MOD83_02233E74 MOD83_02233E74: ; 0x02233E74 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233E8A - bl MOD83_02233388 - cmp r0, #0 - bne _02233E94 - bl MOD83_02233B84 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233E8A + bl MOD83_02233388 + cmp r0, #0 + bne _02233E94 + bl MOD83_02233B84 + pop {r3, pc} _02233E8A: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 _02233E94: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233E74 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233E74 - thumb_func_start MOD83_02233E98 + thumb_func_start MOD83_02233E98 MOD83_02233E98: ; 0x02233E98 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233EB0 - bl MOD83_022349CC - cmp r0, #0 - beq _02233EB8 - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233EB0 + bl MOD83_022349CC + cmp r0, #0 + beq _02233EB8 + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233EB0: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233EB8: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233E98 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233E98 - thumb_func_start MOD83_02233EBC + thumb_func_start MOD83_02233EBC MOD83_02233EBC: ; 0x02233EBC - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233EF2 - mov r0, #0 - bl MOD83_0223461C - bl MOD83_0223458C - cmp r0, #0xc - bne _02233EE2 - bl MOD83_02234C54 - cmp r0, #0 - beq _02233EFC - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233EF2 + mov r0, #0 + bl MOD83_0223461C + bl MOD83_0223458C + cmp r0, #0xc + bne _02233EE2 + bl MOD83_02234C54 + cmp r0, #0 + beq _02233EFC + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233EE2: - bl MOD83_02234C14 - cmp r0, #0 - beq _02233EFC - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + bl MOD83_02234C14 + cmp r0, #0 + beq _02233EFC + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233EF2: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 _02233EFC: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233EBC + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233EBC - thumb_func_start MOD83_02233F00 + thumb_func_start MOD83_02233F00 MOD83_02233F00: ; 0x02233F00 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233F16 - mov r0, #0xc - bl MOD83_02234580 - mov r0, #1 - bl MOD83_0223464C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233F16 + mov r0, #0xc + bl MOD83_02234580 + mov r0, #1 + bl MOD83_0223464C + pop {r3, pc} _02233F16: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233F00 - - thumb_func_start MOD83_02233F24 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233F00 + + thumb_func_start MOD83_02233F24 MOD83_02233F24: ; 0x02233F24 - push {r3, lr} - ldr r0, _02233F40 ; =MOD83_0223350C - bl WM_SetIndCallback - cmp r0, #0 - beq _02233F3A - mov r0, #4 - bl MOD83_02234580 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02233F40 ; =MOD83_0223350C + bl WM_SetIndCallback + cmp r0, #0 + beq _02233F3A + mov r0, #4 + bl MOD83_02234580 + mov r0, #0 + pop {r3, pc} _02233F3A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02233F40: .word MOD83_0223350C - thumb_func_end MOD83_02233F24 + thumb_func_end MOD83_02233F24 - thumb_func_start MOD83_02233F44 + thumb_func_start MOD83_02233F44 MOD83_02233F44: ; 0x02233F44 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0 - beq _02233F56 - cmp r0, #1 - beq _02233F56 - cmp r0, #2 - bne _02233F5A + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0 + beq _02233F56 + cmp r0, #1 + beq _02233F56 + cmp r0, #2 + bne _02233F5A _02233F56: - bl MOD83_022349B0 + bl MOD83_022349B0 _02233F5A: - pop {r3, pc} - thumb_func_end MOD83_02233F44 + pop {r3, pc} + thumb_func_end MOD83_02233F44 - thumb_func_start MOD83_02233F5C + thumb_func_start MOD83_02233F5C MOD83_02233F5C: ; 0x02233F5C - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl MOD83_02234564 - ldrh r0, [r0, #0x34] - cmp r4, r0 - bhi _02233F80 - add r0, r5, #0 - add r1, r4, #0 - bl DC_FlushRange - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02234970 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl MOD83_02234564 + ldrh r0, [r0, #0x34] + cmp r4, r0 + bhi _02233F80 + add r0, r5, #0 + add r1, r4, #0 + bl DC_FlushRange + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02234970 _02233F80: - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02233F5C + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02233F5C - thumb_func_start MOD83_02233F84 + thumb_func_start MOD83_02233F84 MOD83_02233F84: ; 0x02233F84 - mov r0, #0x17 - lsl r0, r0, #6 - bx lr - .align 2, 0 - thumb_func_end MOD83_02233F84 + mov r0, #0x17 + lsl r0, r0, #6 + bx lr + .align 2, 0 + thumb_func_end MOD83_02233F84 - thumb_func_start MOD83_02233F8C + thumb_func_start MOD83_02233F8C MOD83_02233F8C: ; 0x02233F8C - mov r0, #0x17 - lsl r0, r0, #6 - bx lr - .align 2, 0 - thumb_func_end MOD83_02233F8C + mov r0, #0x17 + lsl r0, r0, #6 + bx lr + .align 2, 0 + thumb_func_end MOD83_02233F8C - thumb_func_start MOD83_02233F94 + thumb_func_start MOD83_02233F94 MOD83_02233F94: ; 0x02233F94 - push {r3, r4, r5, r6, r7, lr} - add r7, r1, #0 - add r5, r0, #0 - bl MOD83_02234564 - bl MOD83_0223456C - add r4, r0, #0 - mov r0, #0x1f - add r1, r7, #0 - and r1, r0 - beq _02233FB2 - mov r0, #0x20 - sub r0, r0, r1 - add r7, r7, r0 + push {r3, r4, r5, r6, r7, lr} + add r7, r1, #0 + add r5, r0, #0 + bl MOD83_02234564 + bl MOD83_0223456C + add r4, r0, #0 + mov r0, #0x1f + add r1, r7, #0 + and r1, r0 + beq _02233FB2 + mov r0, #0x20 + sub r0, r0, r1 + add r7, r7, r0 _02233FB2: - mov r1, #0 - strb r1, [r4] - strb r1, [r4, #1] - strb r1, [r4, #2] - mov r0, #4 - strb r0, [r4, #3] - ldr r0, _022340B8 ; =0x00400131 - str r0, [r4, #4] - mov r0, #0xf - strh r1, [r4, #0xc] - lsl r0, r0, #8 - str r7, [r4, #0x34] - add r7, r7, r0 - str r7, [r4, #0x38] - bl MOD83_02233F84 - str r0, [r4, #0x2c] - add r7, r7, r0 - str r7, [r4, #0x3c] - bl MOD83_02233F8C - add r7, r7, r0 - str r0, [r4, #0x30] - add r0, r7, #0 - str r7, [r4, #0x28] - add r0, #0xc0 - str r0, [r4, #0x24] - ldr r0, [r4, #0x34] - mov r1, #2 - add r7, #0xe0 - bl WM_Init - bl MOD83_02233F24 - str r0, [r4, #0x10] - mov r2, #0 - str r2, [r4, #0x14] - str r2, [r4, #0x18] - str r2, [r4, #0x1c] - str r2, [r4, #0x20] - ldr r0, [r4, #0x40] - mov r6, #0xff - bic r0, r6 - add r3, r0, #0 - mov r1, #0xf - orr r3, r1 - ldr r0, _022340BC ; =0xFFFFF0FF - add r1, #0xf1 - and r0, r3 - orr r1, r0 - ldr r0, _022340C0 ; =0xFFFF0FFF - and r1, r0 - mov r0, #1 - lsl r0, r0, #0xc - orr r0, r1 - str r0, [r4, #0x40] - ldr r3, [r5] - ldr r1, [r4, #0x44] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - lsl r3, r3, #0x18 - add r0, r4, #0 - bic r1, r6 - lsr r3, r3, #0x18 - orr r3, r1 - ldr r1, _022340BC ; =0xFFFFF0FF - str r3, [r4, #0x44] - and r1, r3 - ldr r3, [r5] - add r0, #0x44 - lsl r3, r3, #0x14 - lsr r3, r3, #0x1c - lsl r3, r3, #0x1c - lsr r3, r3, #0x14 - orr r3, r1 - ldr r1, _022340C0 ; =0xFFFF0FFF - str r3, [r4, #0x44] - and r1, r3 - ldr r3, [r5] - lsl r3, r3, #0x10 - lsr r3, r3, #0x1c - lsl r3, r3, #0x1c - lsr r3, r3, #0x10 - orr r1, r3 - str r1, [r4, #0x44] - ldr r1, [r0] - ldr r3, [r5] - lsl r1, r1, #0x10 - lsr r3, r3, #0x10 - lsr r1, r1, #0x10 - lsl r3, r3, #0x10 - orr r1, r3 - str r1, [r0] - ldr r0, [r5, #8] - ldr r1, [r5, #4] - add r3, r4, #0 - b _0223408C + mov r1, #0 + strb r1, [r4] + strb r1, [r4, #1] + strb r1, [r4, #2] + mov r0, #4 + strb r0, [r4, #3] + ldr r0, _022340B8 ; =0x00400131 + str r0, [r4, #4] + mov r0, #0xf + strh r1, [r4, #0xc] + lsl r0, r0, #8 + str r7, [r4, #0x34] + add r7, r7, r0 + str r7, [r4, #0x38] + bl MOD83_02233F84 + str r0, [r4, #0x2c] + add r7, r7, r0 + str r7, [r4, #0x3c] + bl MOD83_02233F8C + add r7, r7, r0 + str r0, [r4, #0x30] + add r0, r7, #0 + str r7, [r4, #0x28] + add r0, #0xc0 + str r0, [r4, #0x24] + ldr r0, [r4, #0x34] + mov r1, #2 + add r7, #0xe0 + bl WM_Init + bl MOD83_02233F24 + str r0, [r4, #0x10] + mov r2, #0 + str r2, [r4, #0x14] + str r2, [r4, #0x18] + str r2, [r4, #0x1c] + str r2, [r4, #0x20] + ldr r0, [r4, #0x40] + mov r6, #0xff + bic r0, r6 + add r3, r0, #0 + mov r1, #0xf + orr r3, r1 + ldr r0, _022340BC ; =0xFFFFF0FF + add r1, #0xf1 + and r0, r3 + orr r1, r0 + ldr r0, _022340C0 ; =0xFFFF0FFF + and r1, r0 + mov r0, #1 + lsl r0, r0, #0xc + orr r0, r1 + str r0, [r4, #0x40] + ldr r3, [r5] + ldr r1, [r4, #0x44] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + lsl r3, r3, #0x18 + add r0, r4, #0 + bic r1, r6 + lsr r3, r3, #0x18 + orr r3, r1 + ldr r1, _022340BC ; =0xFFFFF0FF + str r3, [r4, #0x44] + and r1, r3 + ldr r3, [r5] + add r0, #0x44 + lsl r3, r3, #0x14 + lsr r3, r3, #0x1c + lsl r3, r3, #0x1c + lsr r3, r3, #0x14 + orr r3, r1 + ldr r1, _022340C0 ; =0xFFFF0FFF + str r3, [r4, #0x44] + and r1, r3 + ldr r3, [r5] + lsl r3, r3, #0x10 + lsr r3, r3, #0x1c + lsl r3, r3, #0x1c + lsr r3, r3, #0x10 + orr r1, r3 + str r1, [r4, #0x44] + ldr r1, [r0] + ldr r3, [r5] + lsl r1, r1, #0x10 + lsr r3, r3, #0x10 + lsr r1, r1, #0x10 + lsl r3, r3, #0x10 + orr r1, r3 + str r1, [r0] + ldr r0, [r5, #8] + ldr r1, [r5, #4] + add r3, r4, #0 + b _0223408C _02234074: - ldrh r6, [r0] - add r5, r3, #0 - add r5, #0x48 - strh r6, [r5] - add r5, r3, #0 - ldrh r6, [r1] - add r5, #0x60 - add r3, r3, #2 - strh r6, [r5] - add r2, r2, #1 - add r0, r0, #2 - add r1, r1, #2 + ldrh r6, [r0] + add r5, r3, #0 + add r5, #0x48 + strh r6, [r5] + add r5, r3, #0 + ldrh r6, [r1] + add r5, #0x60 + add r3, r3, #2 + strh r6, [r5] + add r2, r2, #1 + add r0, r0, #2 + add r1, r1, #2 _0223408C: - cmp r0, #0 - beq _02234094 - cmp r2, #0xc - blo _02234074 + cmp r0, #0 + beq _02234094 + cmp r2, #0xc + blo _02234074 _02234094: - ldr r1, [r4, #0x40] - ldr r0, [r4, #0x44] - str r1, [r4, #0x78] - str r0, [r4, #0x7c] - bl MOD83_022346A4 - bl MOD83_02234694 - str r7, [r0, #8] - ldr r0, [r4, #0x2c] - add r7, r7, r0 - bl MOD83_02234694 - str r7, [r0, #0xc] - bl WM_GetNextTgid - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r1, [r4, #0x40] + ldr r0, [r4, #0x44] + str r1, [r4, #0x78] + str r0, [r4, #0x7c] + bl MOD83_022346A4 + bl MOD83_02234694 + str r7, [r0, #8] + ldr r0, [r4, #0x2c] + add r7, r7, r0 + bl MOD83_02234694 + str r7, [r0, #0xc] + bl WM_GetNextTgid + pop {r3, r4, r5, r6, r7, pc} + nop _022340B8: .word 0x00400131 _022340BC: .word 0xFFFFF0FF _022340C0: .word 0xFFFF0FFF - thumb_func_end MOD83_02233F94 + thumb_func_end MOD83_02233F94 - thumb_func_start MOD83_022340C4 + thumb_func_start MOD83_022340C4 MOD83_022340C4: ; 0x022340C4 - push {r3, r4, r5, lr} - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #1 - bne _022340E2 - ldrb r0, [r4, #0x1a] - sub r0, r0, #1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0x1a] - cmp r0, #0 - bne _02234118 - mov r0, #0 - strb r0, [r4, #0x19] + push {r3, r4, r5, lr} + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #1 + bne _022340E2 + ldrb r0, [r4, #0x1a] + sub r0, r0, #1 + strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x1a] + cmp r0, #0 + bne _02234118 + mov r0, #0 + strb r0, [r4, #0x19] _022340E2: - ldrb r0, [r4, #0x19] - cmp r0, #0 - bne _02234118 - bl MOD83_02234770 - mov r1, #0x40 - sub r5, r1, r0 - ldrb r0, [r4, #0x1c] - add r2, r5, #0 - mov r3, #3 - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - ldr r2, _0223411C ; =0x0000FFFF - add r1, r5, r1 - bl MOD83_02233F5C - mov r0, #1 - strb r0, [r4, #0x19] - mov r0, #0x3c - strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x19] + cmp r0, #0 + bne _02234118 + bl MOD83_02234770 + mov r1, #0x40 + sub r5, r1, r0 + ldrb r0, [r4, #0x1c] + add r2, r5, #0 + mov r3, #3 + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + ldr r2, _0223411C ; =0x0000FFFF + add r1, r5, r1 + bl MOD83_02233F5C + mov r0, #1 + strb r0, [r4, #0x19] + mov r0, #0x3c + strb r0, [r4, #0x1a] _02234118: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0223411C: .word 0x0000FFFF - thumb_func_end MOD83_022340C4 + thumb_func_end MOD83_022340C4 - thumb_func_start MOD83_02234120 + thumb_func_start MOD83_02234120 MOD83_02234120: ; 0x02234120 - push {r3, r4, r5, r6, r7, lr} - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #0 - bne _022341D6 - ldrb r0, [r4, #0x1c] - cmp r0, #0xfd - bne _02234198 - bl MOD83_0223466C - add r5, r0, #0 - mov r1, #0 - add r2, r5, #0 + push {r3, r4, r5, r6, r7, lr} + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #0 + bne _022341D6 + ldrb r0, [r4, #0x1c] + cmp r0, #0xfd + bne _02234198 + bl MOD83_0223466C + add r5, r0, #0 + mov r1, #0 + add r2, r5, #0 _0223413E: - ldrb r0, [r2, #9] - cmp r0, #0 - beq _0223417E - add r6, r1, #0 - mov r0, #0xc - mul r6, r0 - add r0, r5, r6 - ldrh r0, [r0, #6] - mov r1, #1 - mov r2, #0 - lsl r1, r0 - lsl r0, r1, #0x10 - lsr r7, r0, #0x10 - mov r0, #0xfd - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - add r3, r2, #0 - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - add r2, r7, #0 - bl MOD83_02233F5C - add r5, #9 - ldrb r0, [r5, r6] - sub r0, r0, #1 - strb r0, [r5, r6] - pop {r3, r4, r5, r6, r7, pc} + ldrb r0, [r2, #9] + cmp r0, #0 + beq _0223417E + add r6, r1, #0 + mov r0, #0xc + mul r6, r0 + add r0, r5, r6 + ldrh r0, [r0, #6] + mov r1, #1 + mov r2, #0 + lsl r1, r0 + lsl r0, r1, #0x10 + lsr r7, r0, #0x10 + mov r0, #0xfd + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + add r3, r2, #0 + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + add r2, r7, #0 + bl MOD83_02233F5C + add r5, #9 + ldrb r0, [r5, r6] + sub r0, r0, #1 + strb r0, [r5, r6] + pop {r3, r4, r5, r6, r7, pc} _0223417E: - add r1, r1, #1 - add r2, #0xc - cmp r1, #8 - blt _0223413E - ldrb r0, [r4, #0x1a] - sub r0, r0, #1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0x1a] - cmp r0, #0 - bne _022341D6 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r3, r4, r5, r6, r7, pc} + add r1, r1, #1 + add r2, #0xc + cmp r1, #8 + blt _0223413E + ldrb r0, [r4, #0x1a] + sub r0, r0, #1 + strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x1a] + cmp r0, #0 + bne _022341D6 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r3, r4, r5, r6, r7, pc} _02234198: - bl MOD83_02234770 - bl MOD83_02233F84 - ldr r0, [r4, #0xc] - ldr r0, [r0, #8] - lsl r0, r0, #0x10 - lsr r3, r0, #0x18 - bne _022341BA - ldrb r0, [r4, #0x1b] - cmp r0, #0 - bne _022341B6 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r3, r4, r5, r6, r7, pc} + bl MOD83_02234770 + bl MOD83_02233F84 + ldr r0, [r4, #0xc] + ldr r0, [r0, #8] + lsl r0, r0, #0x10 + lsr r3, r0, #0x18 + bne _022341BA + ldrb r0, [r4, #0x1b] + cmp r0, #0 + bne _022341B6 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r3, r4, r5, r6, r7, pc} _022341B6: - sub r0, r0, #1 - strb r0, [r4, #0x1b] + sub r0, r0, #1 + strb r0, [r4, #0x1b] _022341BA: - ldrb r0, [r4, #0x1c] - mov r2, #0 - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - ldr r2, _022341D8 ; =0x0000FFFF - bl MOD83_02233F5C + ldrb r0, [r4, #0x1c] + mov r2, #0 + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + ldr r2, _022341D8 ; =0x0000FFFF + bl MOD83_02233F5C _022341D6: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022341D8: .word 0x0000FFFF - thumb_func_end MOD83_02234120 + thumb_func_end MOD83_02234120 - thumb_func_start MOD83_022341DC + thumb_func_start MOD83_022341DC MOD83_022341DC: ; 0x022341DC - push {r3, lr} - bl MOD83_02234694 - ldrb r0, [r0, #0x18] - cmp r0, #1 - beq _022341EE - cmp r0, #2 - beq _022341F4 - pop {r3, pc} + push {r3, lr} + bl MOD83_02234694 + ldrb r0, [r0, #0x18] + cmp r0, #1 + beq _022341EE + cmp r0, #2 + beq _022341F4 + pop {r3, pc} _022341EE: - bl MOD83_022340C4 - pop {r3, pc} + bl MOD83_022340C4 + pop {r3, pc} _022341F4: - bl MOD83_02234120 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022341DC + bl MOD83_02234120 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022341DC - thumb_func_start MOD83_022341FC + thumb_func_start MOD83_022341FC MOD83_022341FC: ; 0x022341FC - push {r4, lr} - bl MOD83_02234664 - add r4, r0, #0 - bl MOD83_02234574 - cmp r0, #6 - beq _02234212 - cmp r0, #0xb - beq _02234222 - pop {r4, pc} + push {r4, lr} + bl MOD83_02234664 + add r4, r0, #0 + bl MOD83_02234574 + cmp r0, #6 + beq _02234212 + cmp r0, #0xb + beq _02234222 + pop {r4, pc} _02234212: - mov r0, #7 - lsl r0, r0, #6 - ldrh r1, [r4, r0] - cmp r1, #0 - beq _02234226 - sub r1, r1, #1 - strh r1, [r4, r0] - pop {r4, pc} + mov r0, #7 + lsl r0, r0, #6 + ldrh r1, [r4, r0] + cmp r1, #0 + beq _02234226 + sub r1, r1, #1 + strh r1, [r4, r0] + pop {r4, pc} _02234222: - bl MOD83_022341DC + bl MOD83_022341DC _02234226: - pop {r4, pc} - thumb_func_end MOD83_022341FC + pop {r4, pc} + thumb_func_end MOD83_022341FC - thumb_func_start MOD83_02234228 + thumb_func_start MOD83_02234228 MOD83_02234228: ; 0x02234228 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0xa - bne _02234236 - bl MOD83_022341DC + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0xa + bne _02234236 + bl MOD83_022341DC _02234236: - pop {r3, pc} - thumb_func_end MOD83_02234228 + pop {r3, pc} + thumb_func_end MOD83_02234228 - thumb_func_start MOD83_02234238 + thumb_func_start MOD83_02234238 MOD83_02234238: ; 0x02234238 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0xc - beq _0223427A - bl MOD83_0223458C - cmp r0, #0xc - bne _02234258 - bl MOD83_02234574 - cmp r0, #7 - bne _0223427A - bl MOD83_02234C34 - pop {r3, pc} + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0xc + beq _0223427A + bl MOD83_0223458C + cmp r0, #0xc + bne _02234258 + bl MOD83_02234574 + cmp r0, #7 + bne _0223427A + bl MOD83_02234C34 + pop {r3, pc} _02234258: - bl MOD83_022345A4 - cmp r0, #1 - beq _02234266 - cmp r0, #2 - beq _0223426C - b _02234272 + bl MOD83_022345A4 + cmp r0, #1 + beq _02234266 + cmp r0, #2 + beq _0223426C + b _02234272 _02234266: - bl MOD83_022341FC - pop {r3, pc} + bl MOD83_022341FC + pop {r3, pc} _0223426C: - bl MOD83_02234228 - pop {r3, pc} + bl MOD83_02234228 + pop {r3, pc} _02234272: - bl MOD83_0223456C - bl MOD83_02234574 + bl MOD83_0223456C + bl MOD83_02234574 _0223427A: - pop {r3, pc} - thumb_func_end MOD83_02234238 + pop {r3, pc} + thumb_func_end MOD83_02234238 - thumb_func_start MOD83_0223427C + thumb_func_start MOD83_0223427C MOD83_0223427C: ; 0x0223427C - push {r3, lr} - bl MOD83_02234674 - mov r0, #1 - bl MOD83_022345B0 - bl MOD83_02233F44 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223427C - - thumb_func_start MOD83_02234290 + push {r3, lr} + bl MOD83_02234674 + mov r0, #1 + bl MOD83_022345B0 + bl MOD83_02233F44 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223427C + + thumb_func_start MOD83_02234290 MOD83_02234290: ; 0x02234290 - push {r4, lr} - bl MOD83_022345A4 - mov r4, #0 - cmp r0, #1 - bne _022342BE - bl MOD83_02234664 - ldr r1, _022342C4 ; =0x000001C3 - ldrb r1, [r0, r1] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _022342BE - add r2, r4, #0 + push {r4, lr} + bl MOD83_022345A4 + mov r4, #0 + cmp r0, #1 + bne _022342BE + bl MOD83_02234664 + ldr r1, _022342C4 ; =0x000001C3 + ldrb r1, [r0, r1] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _022342BE + add r2, r4, #0 _022342AE: - ldr r1, [r0] - cmp r1, #0 - beq _022342B6 - add r4, r4, #1 + ldr r1, [r0] + cmp r1, #0 + beq _022342B6 + add r4, r4, #1 _022342B6: - add r2, r2, #1 - add r0, #0x38 - cmp r2, #8 - blo _022342AE + add r2, r2, #1 + add r0, #0x38 + cmp r2, #8 + blo _022342AE _022342BE: - add r0, r4, #0 - pop {r4, pc} - nop + add r0, r4, #0 + pop {r4, pc} + nop _022342C4: .word 0x000001C3 - thumb_func_end MOD83_02234290 + thumb_func_end MOD83_02234290 - thumb_func_start MOD83_022342C8 + thumb_func_start MOD83_022342C8 MOD83_022342C8: ; 0x022342C8 - push {r4, lr} - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _022342FA - bl MOD83_02234574 - cmp r0, #7 - bne _022342FA - bl MOD83_02234664 - ldr r1, _02234300 ; =0x000001C3 - ldrb r1, [r0, r1] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _022342FA - mov r1, #0x38 - mul r1, r4 - ldr r0, [r0, r1] - cmp r0, #0 - beq _022342FA - mov r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _022342FA + bl MOD83_02234574 + cmp r0, #7 + bne _022342FA + bl MOD83_02234664 + ldr r1, _02234300 ; =0x000001C3 + ldrb r1, [r0, r1] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _022342FA + mov r1, #0x38 + mul r1, r4 + ldr r0, [r0, r1] + cmp r0, #0 + beq _022342FA + mov r0, #1 + pop {r4, pc} _022342FA: - mov r0, #0 - pop {r4, pc} - nop + mov r0, #0 + pop {r4, pc} + nop _02234300: .word 0x000001C3 - thumb_func_end MOD83_022342C8 + thumb_func_end MOD83_022342C8 - thumb_func_start MOD83_02234304 + thumb_func_start MOD83_02234304 MOD83_02234304: ; 0x02234304 - push {r3, r4, r5, lr} - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _0223434E - bl MOD83_02234574 - cmp r0, #7 - bne _0223434E - bl MOD83_02234664 - ldr r2, _02234350 ; =0x000001C3 - ldrb r3, [r0, r2] - lsl r1, r3, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _0223434E - mov r1, #0x38 - add r5, r4, #0 - mul r5, r1 - ldr r5, [r0, r5] - cmp r5, #0 - beq _0223434E - mov r5, #0xf - lsl r4, r4, #0x18 - bic r3, r5 - lsr r5, r4, #0x18 - mov r4, #0xf - and r4, r5 - orr r3, r4 - strb r3, [r0, r2] - mov r2, #0x78 - lsl r1, r1, #3 - strh r2, [r0, r1] - bl MOD83_02234A94 + push {r3, r4, r5, lr} + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _0223434E + bl MOD83_02234574 + cmp r0, #7 + bne _0223434E + bl MOD83_02234664 + ldr r2, _02234350 ; =0x000001C3 + ldrb r3, [r0, r2] + lsl r1, r3, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _0223434E + mov r1, #0x38 + add r5, r4, #0 + mul r5, r1 + ldr r5, [r0, r5] + cmp r5, #0 + beq _0223434E + mov r5, #0xf + lsl r4, r4, #0x18 + bic r3, r5 + lsr r5, r4, #0x18 + mov r4, #0xf + and r4, r5 + orr r3, r4 + strb r3, [r0, r2] + mov r2, #0x78 + lsl r1, r1, #3 + strh r2, [r0, r1] + bl MOD83_02234A94 _0223434E: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _02234350: .word 0x000001C3 - thumb_func_end MOD83_02234304 + thumb_func_end MOD83_02234304 - thumb_func_start MOD83_02234354 + thumb_func_start MOD83_02234354 MOD83_02234354: ; 0x02234354 - push {r4, lr} - bl MOD83_022345A4 - mov r4, #0 - cmp r0, #2 - bne _02234386 - bl MOD83_0223466C - add r1, r0, #0 - add r1, #0x60 - ldrb r1, [r1] - cmp r1, #2 - bne _02234386 - add r2, r4, #0 + push {r4, lr} + bl MOD83_022345A4 + mov r4, #0 + cmp r0, #2 + bne _02234386 + bl MOD83_0223466C + add r1, r0, #0 + add r1, #0x60 + ldrb r1, [r1] + cmp r1, #2 + bne _02234386 + add r2, r4, #0 _02234370: - ldr r1, [r0] - cmp r1, #0 - beq _0223437E - ldrb r1, [r0, #0xa] - cmp r1, #0 - beq _0223437E - add r4, r4, #1 + ldr r1, [r0] + cmp r1, #0 + beq _0223437E + ldrb r1, [r0, #0xa] + cmp r1, #0 + beq _0223437E + add r4, r4, #1 _0223437E: - add r2, r2, #1 - add r0, #0xc - cmp r2, #8 - blo _02234370 + add r2, r2, #1 + add r0, #0xc + cmp r2, #8 + blo _02234370 _02234386: - add r0, r4, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234354 + add r0, r4, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234354 - thumb_func_start MOD83_0223438C + thumb_func_start MOD83_0223438C MOD83_0223438C: ; 0x0223438C - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x20] - cmp r0, #0 - beq _0223439C - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x20] + cmp r0, #0 + beq _0223439C + mov r0, #0 + pop {r3, pc} _0223439C: - bl WM_GetLinkLevel - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223438C + bl WM_GetLinkLevel + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223438C - thumb_func_start MOD83_022343A4 + thumb_func_start MOD83_022343A4 MOD83_022343A4: ; 0x022343A4 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _022343B4 - cmp r0, #2 - beq _022343BA - b _022343C0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _022343B4 + cmp r0, #2 + beq _022343BA + b _022343C0 _022343B4: - bl MOD83_02234290 - pop {r3, pc} + bl MOD83_02234290 + pop {r3, pc} _022343BA: - bl MOD83_02234354 - pop {r3, pc} + bl MOD83_02234354 + pop {r3, pc} _022343C0: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_022343A4 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_022343A4 - thumb_func_start MOD83_022343C4 + thumb_func_start MOD83_022343C4 MOD83_022343C4: ; 0x022343C4 - push {r3, r4, r5, lr} - bl MOD83_02234694 - add r5, r0, #0 - bl MOD83_022346EC - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _022343F6 - mov r0, #1 - strb r0, [r5, #0x18] - mov r1, #0 - strb r1, [r5, #0x19] - add r4, #8 - str r4, [r5] - str r4, [r5, #4] - str r1, [r5, #0x10] - str r1, [r5, #0x14] - mov r0, #0x78 - strb r0, [r5, #0x1a] - strb r1, [r5, #0x1b] - mov r0, #0xfd - strb r0, [r5, #0x1c] + push {r3, r4, r5, lr} + bl MOD83_02234694 + add r5, r0, #0 + bl MOD83_022346EC + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _022343F6 + mov r0, #1 + strb r0, [r5, #0x18] + mov r1, #0 + strb r1, [r5, #0x19] + add r4, #8 + str r4, [r5] + str r4, [r5, #4] + str r1, [r5, #0x10] + str r1, [r5, #0x14] + mov r0, #0x78 + strb r0, [r5, #0x1a] + strb r1, [r5, #0x1b] + mov r0, #0xfd + strb r0, [r5, #0x1c] _022343F6: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022343C4 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022343C4 - thumb_func_start MOD83_022343F8 + thumb_func_start MOD83_022343F8 MOD83_022343F8: ; 0x022343F8 - push {r4, lr} - bl MOD83_02234694 - add r4, r0, #0 - bl MOD83_022346EC - mov r1, #1 - strb r1, [r4, #0x18] - mov r1, #0 - strb r1, [r4, #0x19] - add r0, #8 - str r0, [r4] - str r0, [r4, #4] - mov r0, #0x30 - str r0, [r4, #0x10] - str r0, [r4, #0x14] - mov r0, #0x78 - strb r0, [r4, #0x1a] - strb r1, [r4, #0x1b] - mov r0, #0xfe - strb r0, [r4, #0x1c] - pop {r4, pc} - thumb_func_end MOD83_022343F8 - - thumb_func_start MOD83_02234424 + push {r4, lr} + bl MOD83_02234694 + add r4, r0, #0 + bl MOD83_022346EC + mov r1, #1 + strb r1, [r4, #0x18] + mov r1, #0 + strb r1, [r4, #0x19] + add r0, #8 + str r0, [r4] + str r0, [r4, #4] + mov r0, #0x30 + str r0, [r4, #0x10] + str r0, [r4, #0x14] + mov r0, #0x78 + strb r0, [r4, #0x1a] + strb r1, [r4, #0x1b] + mov r0, #0xfe + strb r0, [r4, #0x1c] + pop {r4, pc} + thumb_func_end MOD83_022343F8 + + thumb_func_start MOD83_02234424 MOD83_02234424: ; 0x02234424 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - add r4, r2, #0 - bl MOD83_02234694 - cmp r4, #0xf0 - bgt _0223444E - mov r1, #2 - strb r1, [r0, #0x18] - mov r1, #3 - strb r1, [r0, #0x19] - str r5, [r0] - str r5, [r0, #4] - str r6, [r0, #0x10] - mov r2, #0 - str r2, [r0, #0x14] - mov r1, #0x78 - strb r1, [r0, #0x1a] - strb r2, [r0, #0x1b] - strb r4, [r0, #0x1c] + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + add r4, r2, #0 + bl MOD83_02234694 + cmp r4, #0xf0 + bgt _0223444E + mov r1, #2 + strb r1, [r0, #0x18] + mov r1, #3 + strb r1, [r0, #0x19] + str r5, [r0] + str r5, [r0, #4] + str r6, [r0, #0x10] + mov r2, #0 + str r2, [r0, #0x14] + mov r1, #0x78 + strb r1, [r0, #0x1a] + strb r2, [r0, #0x1b] + strb r4, [r0, #0x1c] _0223444E: - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02234424 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02234424 - thumb_func_start MOD83_02234450 + thumb_func_start MOD83_02234450 MOD83_02234450: ; 0x02234450 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _0223445E - cmp r0, #2 - bne _02234478 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _0223445E + cmp r0, #2 + bne _02234478 _0223445E: - bl MOD83_02234574 - cmp r0, #0xa - beq _0223446A - cmp r0, #0xb - bne _02234478 + bl MOD83_02234574 + cmp r0, #0xa + beq _0223446A + cmp r0, #0xb + bne _02234478 _0223446A: - bl MOD83_02234694 - ldrb r0, [r0, #0x19] - cmp r0, #2 - bne _02234478 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x19] + cmp r0, #2 + bne _02234478 + mov r0, #1 + pop {r3, pc} _02234478: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_02234450 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_02234450 - thumb_func_start MOD83_0223447C + thumb_func_start MOD83_0223447C MOD83_0223447C: ; 0x0223447C - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _0223448A - cmp r0, #2 - bne _022344A4 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _0223448A + cmp r0, #2 + bne _022344A4 _0223448A: - bl MOD83_02234574 - cmp r0, #0xa - beq _02234496 - cmp r0, #0xb - bne _022344A4 + bl MOD83_02234574 + cmp r0, #0xa + beq _02234496 + cmp r0, #0xb + bne _022344A4 _02234496: - bl MOD83_02234694 - ldrb r0, [r0, #0x19] - cmp r0, #2 - bne _022344A4 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x19] + cmp r0, #2 + bne _022344A4 + mov r0, #1 + pop {r3, pc} _022344A4: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_0223447C + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_0223447C - thumb_func_start MOD83_022344A8 + thumb_func_start MOD83_022344A8 MOD83_022344A8: ; 0x022344A8 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _022344B6 - cmp r0, #2 - bne _022344E0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _022344B6 + cmp r0, #2 + bne _022344E0 _022344B6: - bl MOD83_02234574 - cmp r0, #0xa - beq _022344C2 - cmp r0, #0xb - bne _022344E0 + bl MOD83_02234574 + cmp r0, #0xa + beq _022344C2 + cmp r0, #0xb + bne _022344E0 _022344C2: - bl MOD83_02234694 - ldrb r1, [r0, #0x19] - cmp r1, #0 - bne _022344E0 - ldr r1, [r0, #0xc] - ldr r1, [r1, #8] - lsl r1, r1, #0x10 - lsr r1, r1, #0x18 - bne _022344E0 - ldrb r0, [r0, #0x1b] - cmp r0, #4 - bhs _022344E0 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r1, [r0, #0x19] + cmp r1, #0 + bne _022344E0 + ldr r1, [r0, #0xc] + ldr r1, [r1, #8] + lsl r1, r1, #0x10 + lsr r1, r1, #0x18 + bne _022344E0 + ldrb r0, [r0, #0x1b] + cmp r0, #4 + bhs _022344E0 + mov r0, #1 + pop {r3, pc} _022344E0: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_022344A8 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_022344A8 - thumb_func_start MOD83_022344E4 + thumb_func_start MOD83_022344E4 MOD83_022344E4: ; 0x022344E4 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #2 - bne _02234510 - bl MOD83_0223466C - mov r2, #0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #2 + bne _02234510 + bl MOD83_0223466C + mov r2, #0 _022344F4: - ldr r1, [r0] - cmp r1, #0 - beq _02234504 - ldrb r1, [r0, #0xa] - cmp r1, #0 - beq _02234504 - mov r0, #1 - pop {r3, pc} + ldr r1, [r0] + cmp r1, #0 + beq _02234504 + ldrb r1, [r0, #0xa] + cmp r1, #0 + beq _02234504 + mov r0, #1 + pop {r3, pc} _02234504: - add r2, r2, #1 - add r0, #0xc - cmp r2, #8 - blt _022344F4 - mov r0, #0 - pop {r3, pc} + add r2, r2, #1 + add r0, #0xc + cmp r2, #8 + blt _022344F4 + mov r0, #0 + pop {r3, pc} _02234510: - bl MOD83_02234628 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022344E4 + bl MOD83_02234628 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022344E4 - thumb_func_start MOD83_02234518 + thumb_func_start MOD83_02234518 MOD83_02234518: ; 0x02234518 - push {r4, lr} - mov r0, #0xc - bl MOD83_02234598 - bl MOD83_02234574 - cmp r0, #0 - beq _02234532 - cmp r0, #1 - beq _02234532 - cmp r0, #9 - beq _0223453E - pop {r4, pc} + push {r4, lr} + mov r0, #0xc + bl MOD83_02234598 + bl MOD83_02234574 + cmp r0, #0 + beq _02234532 + cmp r0, #1 + beq _02234532 + cmp r0, #9 + beq _0223453E + pop {r4, pc} _02234532: - bl WM_Finish - mov r0, #1 - bl MOD83_0223464C - pop {r4, pc} + bl WM_Finish + mov r0, #1 + bl MOD83_0223464C + pop {r4, pc} _0223453E: - bl MOD83_02234628 - cmp r0, #0 - bne _02234554 - bl MOD83_0223456C - add r4, r0, #0 - bl MOD83_02234C34 - mov r0, #1 - str r0, [r4, #0x1c] + bl MOD83_02234628 + cmp r0, #0 + bne _02234554 + bl MOD83_0223456C + add r4, r0, #0 + bl MOD83_02234C34 + mov r0, #1 + str r0, [r4, #0x1c] _02234554: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234518 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234518 - thumb_func_start MOD83_02234558 + thumb_func_start MOD83_02234558 MOD83_02234558: ; 0x02234558 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x20] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234558 - - thumb_func_start MOD83_02234564 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x20] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234558 + + thumb_func_start MOD83_02234564 MOD83_02234564: ; 0x02234564 - ldr r0, _02234568 ; =MOD83_0223B240 - bx lr - .align 2, 0 + ldr r0, _02234568 ; =MOD83_0223B240 + bx lr + .align 2, 0 _02234568: .word MOD83_0223B240 - thumb_func_end MOD83_02234564 + thumb_func_end MOD83_02234564 - thumb_func_start MOD83_0223456C + thumb_func_start MOD83_0223456C MOD83_0223456C: ; 0x0223456C - ldr r0, _02234570 ; =MOD83_0223B8A0 - bx lr - .align 2, 0 + ldr r0, _02234570 ; =MOD83_0223B8A0 + bx lr + .align 2, 0 _02234570: .word MOD83_0223B8A0 - thumb_func_end MOD83_0223456C + thumb_func_end MOD83_0223456C - thumb_func_start MOD83_02234574 + thumb_func_start MOD83_02234574 MOD83_02234574: ; 0x02234574 - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234574 - - thumb_func_start MOD83_02234580 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234574 + + thumb_func_start MOD83_02234580 MOD83_02234580: ; 0x02234580 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0] - pop {r4, pc} - thumb_func_end MOD83_02234580 - - thumb_func_start MOD83_0223458C + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0] + pop {r4, pc} + thumb_func_end MOD83_02234580 + + thumb_func_start MOD83_0223458C MOD83_0223458C: ; 0x0223458C - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #1] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223458C - - thumb_func_start MOD83_02234598 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #1] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223458C + + thumb_func_start MOD83_02234598 MOD83_02234598: ; 0x02234598 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0, #1] - pop {r4, pc} - thumb_func_end MOD83_02234598 - - thumb_func_start MOD83_022345A4 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0, #1] + pop {r4, pc} + thumb_func_end MOD83_02234598 + + thumb_func_start MOD83_022345A4 MOD83_022345A4: ; 0x022345A4 - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #2] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345A4 - - thumb_func_start MOD83_022345B0 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #2] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345A4 + + thumb_func_start MOD83_022345B0 MOD83_022345B0: ; 0x022345B0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0, #2] - pop {r4, pc} - thumb_func_end MOD83_022345B0 - - thumb_func_start MOD83_022345BC + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0, #2] + pop {r4, pc} + thumb_func_end MOD83_022345B0 + + thumb_func_start MOD83_022345BC MOD83_022345BC: ; 0x022345BC - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #3] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345BC - - thumb_func_start MOD83_022345C8 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #3] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345BC + + thumb_func_start MOD83_022345C8 MOD83_022345C8: ; 0x022345C8 - push {r4, lr} - add r4, r0, #0 - bl MOD83_02234564 - strh r4, [r0, #0x32] - pop {r4, pc} - thumb_func_end MOD83_022345C8 - - thumb_func_start MOD83_022345D4 + push {r4, lr} + add r4, r0, #0 + bl MOD83_02234564 + strh r4, [r0, #0x32] + pop {r4, pc} + thumb_func_end MOD83_022345C8 + + thumb_func_start MOD83_022345D4 MOD83_022345D4: ; 0x022345D4 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x24] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345D4 - - thumb_func_start MOD83_022345E0 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x24] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345D4 + + thumb_func_start MOD83_022345E0 MOD83_022345E0: ; 0x022345E0 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x2c] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345E0 - - thumb_func_start MOD83_022345EC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x2c] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345E0 + + thumb_func_start MOD83_022345EC MOD83_022345EC: ; 0x022345EC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x30] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345EC - - thumb_func_start MOD83_022345F8 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x30] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345EC + + thumb_func_start MOD83_022345F8 MOD83_022345F8: ; 0x022345F8 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x38] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345F8 - - thumb_func_start MOD83_02234604 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x38] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345F8 + + thumb_func_start MOD83_02234604 MOD83_02234604: ; 0x02234604 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x3c] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234604 - - thumb_func_start MOD83_02234610 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x3c] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234604 + + thumb_func_start MOD83_02234610 MOD83_02234610: ; 0x02234610 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x28] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234610 - - thumb_func_start MOD83_0223461C + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x28] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234610 + + thumb_func_start MOD83_0223461C MOD83_0223461C: ; 0x0223461C - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strh r4, [r0, #0xc] - pop {r4, pc} - thumb_func_end MOD83_0223461C - - thumb_func_start MOD83_02234628 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strh r4, [r0, #0xc] + pop {r4, pc} + thumb_func_end MOD83_0223461C + + thumb_func_start MOD83_02234628 MOD83_02234628: ; 0x02234628 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x14] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234628 - - thumb_func_start MOD83_02234634 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x14] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234628 + + thumb_func_start MOD83_02234634 MOD83_02234634: ; 0x02234634 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x14] - pop {r4, pc} - thumb_func_end MOD83_02234634 - - thumb_func_start MOD83_02234640 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x14] + pop {r4, pc} + thumb_func_end MOD83_02234634 + + thumb_func_start MOD83_02234640 MOD83_02234640: ; 0x02234640 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x18] - pop {r4, pc} - thumb_func_end MOD83_02234640 - - thumb_func_start MOD83_0223464C + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x18] + pop {r4, pc} + thumb_func_end MOD83_02234640 + + thumb_func_start MOD83_0223464C MOD83_0223464C: ; 0x0223464C - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x20] - pop {r4, pc} - thumb_func_end MOD83_0223464C - - thumb_func_start MOD83_02234658 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x20] + pop {r4, pc} + thumb_func_end MOD83_0223464C + + thumb_func_start MOD83_02234658 MOD83_02234658: ; 0x02234658 - push {r3, lr} - bl MOD83_0223456C - add r0, #0x90 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234658 - - thumb_func_start MOD83_02234664 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x90 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234658 + + thumb_func_start MOD83_02234664 MOD83_02234664: ; 0x02234664 - ldr r3, _02234668 ; =MOD83_02234658 - bx r3 - .align 2, 0 + ldr r3, _02234668 ; =MOD83_02234658 + bx r3 + .align 2, 0 _02234668: .word MOD83_02234658 - thumb_func_end MOD83_02234664 + thumb_func_end MOD83_02234664 - thumb_func_start MOD83_0223466C + thumb_func_start MOD83_0223466C MOD83_0223466C: ; 0x0223466C - ldr r3, _02234670 ; =MOD83_02234658 - bx r3 - .align 2, 0 + ldr r3, _02234670 ; =MOD83_02234658 + bx r3 + .align 2, 0 _02234670: .word MOD83_02234658 - thumb_func_end MOD83_0223466C + thumb_func_end MOD83_0223466C - thumb_func_start MOD83_02234674 + thumb_func_start MOD83_02234674 MOD83_02234674: ; 0x02234674 - push {r4, lr} - bl MOD83_02234664 - mov r2, #0x71 - mov r1, #0 - lsl r2, r2, #2 - add r4, r0, #0 - bl MI_CpuFill8 - mov r1, #0x46 - lsl r1, r1, #2 - add r0, r1, #0 - add r0, #0xa8 - strh r1, [r4, r0] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234674 - - thumb_func_start MOD83_02234694 + push {r4, lr} + bl MOD83_02234664 + mov r2, #0x71 + mov r1, #0 + lsl r2, r2, #2 + add r4, r0, #0 + bl MI_CpuFill8 + mov r1, #0x46 + lsl r1, r1, #2 + add r0, r1, #0 + add r0, #0xa8 + strh r1, [r4, r0] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234674 + + thumb_func_start MOD83_02234694 MOD83_02234694: ; 0x02234694 - push {r3, lr} - bl MOD83_0223456C - mov r1, #0x95 - lsl r1, r1, #2 - add r0, r0, r1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234694 - - thumb_func_start MOD83_022346A4 + push {r3, lr} + bl MOD83_0223456C + mov r1, #0x95 + lsl r1, r1, #2 + add r0, r0, r1 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234694 + + thumb_func_start MOD83_022346A4 MOD83_022346A4: ; 0x022346A4 - push {r3, lr} - bl MOD83_02234694 - mov r1, #0 - strb r1, [r0, #0x18] - pop {r3, pc} - thumb_func_end MOD83_022346A4 - - thumb_func_start MOD83_022346B0 + push {r3, lr} + bl MOD83_02234694 + mov r1, #0 + strb r1, [r0, #0x18] + pop {r3, pc} + thumb_func_end MOD83_022346A4 + + thumb_func_start MOD83_022346B0 MOD83_022346B0: ; 0x022346B0 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #4] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346B0 - - thumb_func_start MOD83_022346BC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #4] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346B0 + + thumb_func_start MOD83_022346BC MOD83_022346BC: ; 0x022346BC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x40] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346BC - - thumb_func_start MOD83_022346CC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x40] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346BC + + thumb_func_start MOD83_022346CC MOD83_022346CC: ; 0x022346CC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x40] - lsl r0, r0, #0x14 - lsr r0, r0, #0x1c - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346CC - - thumb_func_start MOD83_022346DC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x40] + lsl r0, r0, #0x14 + lsr r0, r0, #0x1c + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346CC + + thumb_func_start MOD83_022346DC MOD83_022346DC: ; 0x022346DC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x44] - lsr r0, r0, #0x10 - pop {r3, pc} - thumb_func_end MOD83_022346DC - - thumb_func_start MOD83_022346E8 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x44] + lsr r0, r0, #0x10 + pop {r3, pc} + thumb_func_end MOD83_022346DC + + thumb_func_start MOD83_022346E8 MOD83_022346E8: ; 0x022346E8 - mov r0, #0x38 - bx lr - thumb_func_end MOD83_022346E8 + mov r0, #0x38 + bx lr + thumb_func_end MOD83_022346E8 - thumb_func_start MOD83_022346EC + thumb_func_start MOD83_022346EC MOD83_022346EC: ; 0x022346EC - push {r3, lr} - bl MOD83_0223456C - add r0, #0x40 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346EC - - thumb_func_start MOD83_022346F8 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x40 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346EC + + thumb_func_start MOD83_022346F8 MOD83_022346F8: ; 0x022346F8 - push {r3, lr} - bl MOD83_0223456C - add r0, #0x78 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346F8 - - thumb_func_start MOD83_02234704 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x78 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346F8 + + thumb_func_start MOD83_02234704 MOD83_02234704: ; 0x02234704 - push {r3} - sub sp, #4 - mov r2, #0 - str r2, [sp] - add r3, sp, #0 + push {r3} + sub sp, #4 + mov r2, #0 + str r2, [sp] + add r3, sp, #0 _0223470E: - add r1, r0, r2 - ldrb r1, [r1, #2] - add r2, r2, #1 - strb r1, [r3] - add r3, r3, #1 - cmp r2, #4 - blo _0223470E - ldr r0, [sp] - add sp, #4 - pop {r3} - bx lr - thumb_func_end MOD83_02234704 - - thumb_func_start MOD83_02234724 + add r1, r0, r2 + ldrb r1, [r1, #2] + add r2, r2, #1 + strb r1, [r3] + add r3, r3, #1 + cmp r2, #4 + blo _0223470E + ldr r0, [sp] + add sp, #4 + pop {r3} + bx lr + thumb_func_end MOD83_02234704 + + thumb_func_start MOD83_02234724 MOD83_02234724: ; 0x02234724 - push {r3} - sub sp, #4 - mov r2, #0 - add r1, sp, #0 - strh r2, [r1] - add r3, sp, #0 + push {r3} + sub sp, #4 + mov r2, #0 + add r1, sp, #0 + strh r2, [r1] + add r3, sp, #0 _02234730: - ldrb r1, [r0, r2] - add r2, r2, #1 - strb r1, [r3] - add r3, r3, #1 - cmp r2, #2 - blo _02234730 - add r1, sp, #0 - mov r0, #0 - ldrsh r0, [r1, r0] - add sp, #4 - pop {r3} - bx lr - thumb_func_end MOD83_02234724 - - thumb_func_start MOD83_02234748 + ldrb r1, [r0, r2] + add r2, r2, #1 + strb r1, [r3] + add r3, r3, #1 + cmp r2, #2 + blo _02234730 + add r1, sp, #0 + mov r0, #0 + ldrsh r0, [r1, r0] + add sp, #4 + pop {r3} + bx lr + thumb_func_end MOD83_02234724 + + thumb_func_start MOD83_02234748 MOD83_02234748: ; 0x02234748 - push {r4, r5, r6, lr} - add r5, r1, #0 - ldr r1, _0223476C ; =0x00002710 - add r6, r0, #0 - add r4, r2, #0 - bl _u32_div_f - str r1, [r5] - ldr r1, _0223476C ; =0x00002710 - add r0, r6, #0 - bl _u32_div_f - ldr r1, _0223476C ; =0x00002710 - bl _u32_div_f - str r1, [r4] - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r1, #0 + ldr r1, _0223476C ; =0x00002710 + add r6, r0, #0 + add r4, r2, #0 + bl _u32_div_f + str r1, [r5] + ldr r1, _0223476C ; =0x00002710 + add r0, r6, #0 + bl _u32_div_f + ldr r1, _0223476C ; =0x00002710 + bl _u32_div_f + str r1, [r4] + pop {r4, r5, r6, pc} + nop _0223476C: .word 0x00002710 - thumb_func_end MOD83_02234748 + thumb_func_end MOD83_02234748 - thumb_func_start MOD83_02234770 + thumb_func_start MOD83_02234770 MOD83_02234770: ; 0x02234770 - mov r0, #0x10 - bx lr - thumb_func_end MOD83_02234770 + mov r0, #0x10 + bx lr + thumb_func_end MOD83_02234770 - thumb_func_start MOD83_02234774 + thumb_func_start MOD83_02234774 MOD83_02234774: ; 0x02234774 - push {r4, lr} - ldr r0, _02234788 ; =0x04000006 - ldrh r4, [r0] - bl OS_GetTick - add r1, r0, r4 - mov r0, #1 - bic r1, r0 - add r0, r1, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + ldr r0, _02234788 ; =0x04000006 + ldrh r4, [r0] + bl OS_GetTick + add r1, r0, r4 + mov r0, #1 + bic r1, r0 + add r0, r1, #1 + pop {r4, pc} + .align 2, 0 _02234788: .word 0x04000006 - thumb_func_end MOD83_02234774 + thumb_func_end MOD83_02234774 - thumb_func_start MOD83_0223478C + thumb_func_start MOD83_0223478C MOD83_0223478C: ; 0x0223478C - push {r4, r5, r6, r7} - add r3, r0, #0 - mov r0, #0 - lsr r1, r1, #2 - beq _022347C2 - ldr r4, _022347C8 ; =0x00269EC3 + push {r4, r5, r6, r7} + add r3, r0, #0 + mov r0, #0 + lsr r1, r1, #2 + beq _022347C2 + ldr r4, _022347C8 ; =0x00269EC3 _02234798: - ldr r5, _022347CC ; =0x5D588B65 - ldr r6, _022347CC ; =0x5D588B65 - mul r5, r3 - ldr r3, _022347C8 ; =0x00269EC3 - add r0, r0, #1 - add r3, r5, r3 - lsr r5, r3, #0x10 - mul r6, r3 - add r3, r6, r4 - lsl r5, r5, #0x10 - lsr r7, r3, #0x10 - lsr r5, r5, #0x10 - lsl r7, r7, #0x10 - ldr r6, [r2] - lsl r5, r5, #0x10 - lsr r7, r7, #0x10 - orr r5, r7 - eor r5, r6 - stmia r2!, {r5} - cmp r0, r1 - blo _02234798 + ldr r5, _022347CC ; =0x5D588B65 + ldr r6, _022347CC ; =0x5D588B65 + mul r5, r3 + ldr r3, _022347C8 ; =0x00269EC3 + add r0, r0, #1 + add r3, r5, r3 + lsr r5, r3, #0x10 + mul r6, r3 + add r3, r6, r4 + lsl r5, r5, #0x10 + lsr r7, r3, #0x10 + lsr r5, r5, #0x10 + lsl r7, r7, #0x10 + ldr r6, [r2] + lsl r5, r5, #0x10 + lsr r7, r7, #0x10 + orr r5, r7 + eor r5, r6 + stmia r2!, {r5} + cmp r0, r1 + blo _02234798 _022347C2: - add r0, r3, #0 - pop {r4, r5, r6, r7} - bx lr - .align 2, 0 + add r0, r3, #0 + pop {r4, r5, r6, r7} + bx lr + .align 2, 0 _022347C8: .word 0x00269EC3 _022347CC: .word 0x5D588B65 - thumb_func_end MOD83_0223478C + thumb_func_end MOD83_0223478C - thumb_func_start MOD83_022347D0 + thumb_func_start MOD83_022347D0 MOD83_022347D0: ; 0x022347D0 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r7, r1, #0 - add r6, r2, #0 - str r3, [sp] - bl MOD83_022346EC - add r4, r0, #0 - ldr r0, [r5] - mov r1, #0xff - bic r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - orr r1, r0 - ldr r0, _022348F4 ; =0xFFFFF0FF - str r1, [r5] - and r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - lsl r1, r1, #0x1c - lsr r1, r1, #0x14 - orr r1, r0 - ldr r0, _022348F8 ; =0xFFFF0FFF - str r1, [r5] - and r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x10 - lsr r1, r1, #0x1c - lsl r1, r1, #0x1c - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5] - bl MOD83_02234774 - ldr r1, [r5] - lsl r0, r0, #0x10 - lsl r1, r1, #0x10 - lsr r0, r0, #0x10 - lsr r1, r1, #0x10 - lsl r0, r0, #0x10 - orr r0, r1 - str r0, [r5] - ldr r2, [r4, #4] - ldr r1, [r5, #4] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - mov r0, #0xff - lsl r2, r2, #0x18 - bic r1, r0 - lsr r2, r2, #0x18 - orr r2, r1 - ldr r1, _022348F4 ; =0xFFFFF0FF - str r2, [r5, #4] - and r1, r2 - ldr r2, [r4, #4] - lsl r2, r2, #0x14 - lsr r2, r2, #0x1c - lsl r2, r2, #0x1c - lsr r2, r2, #0x14 - orr r2, r1 - ldr r1, _022348F8 ; =0xFFFF0FFF - str r2, [r5, #4] - and r1, r2 - ldr r2, [r4, #4] - lsl r2, r2, #0x10 - lsr r2, r2, #0x1c - lsl r2, r2, #0x1c - lsr r2, r2, #0x10 - orr r1, r2 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - str r1, [r5, #4] - ldr r1, [r5, #8] - bic r1, r0 - ldr r0, [sp, #0x18] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - orr r1, r0 - ldr r0, _022348FC ; =0xFFFF00FF - and r0, r1 - ldr r1, [sp] - lsl r1, r1, #0x18 - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5, #8] - mov r0, #0 - add r1, r7, #0 - add r2, r6, #0 - bl SVC_GetCRC16 - ldr r1, [r5, #8] - lsl r0, r0, #0x10 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5, #8] - bl MOD83_02234770 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - lsl r0, r0, #0x18 - ldr r1, [r5, #0xc] - mov r2, #0xff - bic r1, r2 - lsr r0, r0, #0x18 - orr r0, r1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - lsl r0, r6, #8 - orr r0, r1 - str r0, [r5, #0xc] - cmp r6, #0 - beq _022348CE - ldr r1, [r5, #0xc] - add r0, r7, #0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r1, r5, r1 - add r2, r6, #0 - bl MI_CpuCopy8 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r7, r1, #0 + add r6, r2, #0 + str r3, [sp] + bl MOD83_022346EC + add r4, r0, #0 + ldr r0, [r5] + mov r1, #0xff + bic r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + orr r1, r0 + ldr r0, _022348F4 ; =0xFFFFF0FF + str r1, [r5] + and r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + lsl r1, r1, #0x1c + lsr r1, r1, #0x14 + orr r1, r0 + ldr r0, _022348F8 ; =0xFFFF0FFF + str r1, [r5] + and r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x10 + lsr r1, r1, #0x1c + lsl r1, r1, #0x1c + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5] + bl MOD83_02234774 + ldr r1, [r5] + lsl r0, r0, #0x10 + lsl r1, r1, #0x10 + lsr r0, r0, #0x10 + lsr r1, r1, #0x10 + lsl r0, r0, #0x10 + orr r0, r1 + str r0, [r5] + ldr r2, [r4, #4] + ldr r1, [r5, #4] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + mov r0, #0xff + lsl r2, r2, #0x18 + bic r1, r0 + lsr r2, r2, #0x18 + orr r2, r1 + ldr r1, _022348F4 ; =0xFFFFF0FF + str r2, [r5, #4] + and r1, r2 + ldr r2, [r4, #4] + lsl r2, r2, #0x14 + lsr r2, r2, #0x1c + lsl r2, r2, #0x1c + lsr r2, r2, #0x14 + orr r2, r1 + ldr r1, _022348F8 ; =0xFFFF0FFF + str r2, [r5, #4] + and r1, r2 + ldr r2, [r4, #4] + lsl r2, r2, #0x10 + lsr r2, r2, #0x1c + lsl r2, r2, #0x1c + lsr r2, r2, #0x10 + orr r1, r2 + lsl r1, r1, #0x10 + lsr r1, r1, #0x10 + str r1, [r5, #4] + ldr r1, [r5, #8] + bic r1, r0 + ldr r0, [sp, #0x18] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + orr r1, r0 + ldr r0, _022348FC ; =0xFFFF00FF + and r0, r1 + ldr r1, [sp] + lsl r1, r1, #0x18 + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5, #8] + mov r0, #0 + add r1, r7, #0 + add r2, r6, #0 + bl SVC_GetCRC16 + ldr r1, [r5, #8] + lsl r0, r0, #0x10 + lsl r1, r1, #0x10 + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5, #8] + bl MOD83_02234770 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + lsl r0, r0, #0x18 + ldr r1, [r5, #0xc] + mov r2, #0xff + bic r1, r2 + lsr r0, r0, #0x18 + orr r0, r1 + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + lsl r0, r6, #8 + orr r0, r1 + str r0, [r5, #0xc] + cmp r6, #0 + beq _022348CE + ldr r1, [r5, #0xc] + add r0, r7, #0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r5, r1 + add r2, r6, #0 + bl MI_CpuCopy8 _022348CE: - add r0, r5, #0 - bl MOD83_0223496C - ldr r0, [r4] - lsl r0, r0, #0x10 - lsr r0, r0, #0x1c - cmp r0, #1 - bne _022348F2 - ldr r1, [r5, #0xc] - ldr r0, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r1, r6, r1 - lsr r0, r0, #0x10 - sub r1, r1, #4 - add r2, r5, #4 - bl MOD83_0223478C + add r0, r5, #0 + bl MOD83_0223496C + ldr r0, [r4] + lsl r0, r0, #0x10 + lsr r0, r0, #0x1c + cmp r0, #1 + bne _022348F2 + ldr r1, [r5, #0xc] + ldr r0, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r6, r1 + lsr r0, r0, #0x10 + sub r1, r1, #4 + add r2, r5, #4 + bl MOD83_0223478C _022348F2: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022348F4: .word 0xFFFFF0FF _022348F8: .word 0xFFFF0FFF _022348FC: .word 0xFFFF00FF - thumb_func_end MOD83_022347D0 + thumb_func_end MOD83_022347D0 - thumb_func_start MOD83_02234900 + thumb_func_start MOD83_02234900 MOD83_02234900: ; 0x02234900 - push {r4, lr} - add r4, r0, #0 - bl MOD83_022346EC - ldr r0, [r4] - lsl r1, r0, #0x10 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _02234930 - lsr r0, r0, #0x10 - mov r1, #0xc - add r2, r4, #4 - bl MOD83_0223478C - ldr r1, [r4, #0xc] - add r4, #0x10 - lsl r2, r1, #0x18 - lsr r2, r2, #0x18 - lsr r1, r1, #8 - add r1, r2, r1 - sub r1, #0x10 - add r2, r4, #0 - bl MOD83_0223478C + push {r4, lr} + add r4, r0, #0 + bl MOD83_022346EC + ldr r0, [r4] + lsl r1, r0, #0x10 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _02234930 + lsr r0, r0, #0x10 + mov r1, #0xc + add r2, r4, #4 + bl MOD83_0223478C + ldr r1, [r4, #0xc] + add r4, #0x10 + lsl r2, r1, #0x18 + lsr r2, r2, #0x18 + lsr r1, r1, #8 + add r1, r2, r1 + sub r1, #0x10 + add r2, r4, #0 + bl MOD83_0223478C _02234930: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234900 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234900 - thumb_func_start MOD83_02234934 + thumb_func_start MOD83_02234934 MOD83_02234934: ; 0x02234934 - push {r4, lr} - add r4, r0, #0 - ldr r2, [r4, #0xc] - mov r0, #0 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - add r1, r4, r1 - lsr r2, r2, #8 - bl SVC_GetCRC16 - ldr r1, [r4, #8] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02234954 - mov r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldr r2, [r4, #0xc] + mov r0, #0 + lsl r1, r2, #0x18 + lsr r1, r1, #0x18 + add r1, r4, r1 + lsr r2, r2, #8 + bl SVC_GetCRC16 + ldr r1, [r4, #8] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02234954 + mov r0, #1 + pop {r4, pc} _02234954: - mov r0, #0 - pop {r4, pc} - thumb_func_end MOD83_02234934 + mov r0, #0 + pop {r4, pc} + thumb_func_end MOD83_02234934 - thumb_func_start MOD83_02234958 + thumb_func_start MOD83_02234958 MOD83_02234958: ; 0x02234958 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234958 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234958 - thumb_func_start MOD83_0223495C + thumb_func_start MOD83_0223495C MOD83_0223495C: ; 0x0223495C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223495C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223495C - thumb_func_start MOD83_02234960 + thumb_func_start MOD83_02234960 MOD83_02234960: ; 0x02234960 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234960 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234960 - thumb_func_start MOD83_02234964 + thumb_func_start MOD83_02234964 MOD83_02234964: ; 0x02234964 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234964 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234964 - thumb_func_start MOD83_02234968 + thumb_func_start MOD83_02234968 MOD83_02234968: ; 0x02234968 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234968 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234968 - thumb_func_start MOD83_0223496C + thumb_func_start MOD83_0223496C MOD83_0223496C: ; 0x0223496C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223496C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223496C - thumb_func_start MOD83_02234970 + thumb_func_start MOD83_02234970 MOD83_02234970: ; 0x02234970 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r6, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - bl MOD83_022345BC - lsl r0, r0, #0x10 - lsl r3, r5, #0x10 - lsr r0, r0, #0x10 - str r4, [sp] - str r0, [sp, #4] - mov r0, #2 - str r0, [sp, #8] - ldr r0, _022349AC ; =MOD83_02233528 - mov r1, #0 - add r2, r6, #0 - lsr r3, r3, #0x10 - bl WM_SetMPDataToPortEx - cmp r0, #2 - beq _022349A6 - bl MOD83_02234958 - add sp, #0xc - mov r0, #0 - pop {r3, r4, r5, r6, pc} + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r6, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + bl MOD83_022345BC + lsl r0, r0, #0x10 + lsl r3, r5, #0x10 + lsr r0, r0, #0x10 + str r4, [sp] + str r0, [sp, #4] + mov r0, #2 + str r0, [sp, #8] + ldr r0, _022349AC ; =MOD83_02233528 + mov r1, #0 + add r2, r6, #0 + lsr r3, r3, #0x10 + bl WM_SetMPDataToPortEx + cmp r0, #2 + beq _022349A6 + bl MOD83_02234958 + add sp, #0xc + mov r0, #0 + pop {r3, r4, r5, r6, pc} _022349A6: - mov r0, #1 - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 _022349AC: .word MOD83_02233528 - thumb_func_end MOD83_02234970 + thumb_func_end MOD83_02234970 - thumb_func_start MOD83_022349B0 + thumb_func_start MOD83_022349B0 MOD83_022349B0: ; 0x022349B0 - push {r3, lr} - ldr r0, _022349C8 ; =MOD83_02233540 - bl WM_Enable - cmp r0, #2 - beq _022349C4 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022349C8 ; =MOD83_02233540 + bl WM_Enable + cmp r0, #2 + beq _022349C4 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _022349C4: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022349C8: .word MOD83_02233540 - thumb_func_end MOD83_022349B0 + thumb_func_end MOD83_022349B0 - thumb_func_start MOD83_022349CC + thumb_func_start MOD83_022349CC MOD83_022349CC: ; 0x022349CC - push {r3, lr} - ldr r0, _022349E8 ; =MOD83_02233580 - bl WM_Disable - cmp r0, #2 - beq _022349E4 - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022349E8 ; =MOD83_02233580 + bl WM_Disable + cmp r0, #2 + beq _022349E4 + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _022349E4: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022349E8: .word MOD83_02233580 - thumb_func_end MOD83_022349CC + thumb_func_end MOD83_022349CC - thumb_func_start MOD83_022349EC + thumb_func_start MOD83_022349EC MOD83_022349EC: ; 0x022349EC - push {r3, lr} - add r3, r0, #0 - mov r0, #0x1e - str r0, [sp] - lsl r3, r3, #0x10 - ldr r0, _02234A14 ; =MOD83_022335B8 - mov r1, #3 - mov r2, #0x11 - lsr r3, r3, #0x10 - bl WM_MeasureChannel - cmp r0, #2 - beq _02234A0E - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + add r3, r0, #0 + mov r0, #0x1e + str r0, [sp] + lsl r3, r3, #0x10 + ldr r0, _02234A14 ; =MOD83_022335B8 + mov r1, #3 + mov r2, #0x11 + lsr r3, r3, #0x10 + bl WM_MeasureChannel + cmp r0, #2 + beq _02234A0E + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A0E: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02234A14: .word MOD83_022335B8 - thumb_func_end MOD83_022349EC + thumb_func_end MOD83_022349EC - thumb_func_start MOD83_02234A18 + thumb_func_start MOD83_02234A18 MOD83_02234A18: ; 0x02234A18 - push {r3, r4, r5, lr} - bl MOD83_02234564 - add r5, r0, #0 - bl MOD83_022346EC - add r4, r0, #0 - bl MOD83_0223466C - add r0, #0x64 - ldrb r0, [r0] - strh r0, [r5, #0x32] - str r4, [r5] - bl MOD83_022346E8 - strh r0, [r5, #4] - ldr r0, _02234A50 ; =MOD83_02233620 - add r1, r5, #0 - bl WM_SetParentParameter - cmp r0, #2 - beq _02234A4C - bl MOD83_02234958 - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + bl MOD83_02234564 + add r5, r0, #0 + bl MOD83_022346EC + add r4, r0, #0 + bl MOD83_0223466C + add r0, #0x64 + ldrb r0, [r0] + strh r0, [r5, #0x32] + str r4, [r5] + bl MOD83_022346E8 + strh r0, [r5, #4] + ldr r0, _02234A50 ; =MOD83_02233620 + add r1, r5, #0 + bl WM_SetParentParameter + cmp r0, #2 + beq _02234A4C + bl MOD83_02234958 + mov r0, #0 + pop {r3, r4, r5, pc} _02234A4C: - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _02234A50: .word MOD83_02233620 - thumb_func_end MOD83_02234A18 + thumb_func_end MOD83_02234A18 - thumb_func_start MOD83_02234A54 + thumb_func_start MOD83_02234A54 MOD83_02234A54: ; 0x02234A54 - push {r3, lr} - ldr r0, _02234A6C ; =MOD83_02233648 - bl WM_StartParent - cmp r0, #2 - beq _02234A68 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234A6C ; =MOD83_02233648 + bl WM_StartParent + cmp r0, #2 + beq _02234A68 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A68: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234A6C: .word MOD83_02233648 - thumb_func_end MOD83_02234A54 + thumb_func_end MOD83_02234A54 - thumb_func_start MOD83_02234A70 + thumb_func_start MOD83_02234A70 MOD83_02234A70: ; 0x02234A70 - push {r3, lr} - bl MOD83_022345D4 - add r1, r0, #0 - ldr r0, _02234A90 ; =MOD83_02233914 - bl WM_StartScan - cmp r0, #2 - beq _02234A8A - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_022345D4 + add r1, r0, #0 + ldr r0, _02234A90 ; =MOD83_02233914 + bl WM_StartScan + cmp r0, #2 + beq _02234A8A + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A8A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02234A90: .word MOD83_02233914 - thumb_func_end MOD83_02234A70 + thumb_func_end MOD83_02234A70 - thumb_func_start MOD83_02234A94 + thumb_func_start MOD83_02234A94 MOD83_02234A94: ; 0x02234A94 - push {r3, r4, r5, lr} - bl MOD83_022345D4 - add r4, r0, #0 - bl MOD83_02234664 - ldr r2, _02234B24 ; =0x000001C3 - mov r3, #0x38 - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - add r1, #0x34 - ldrb r1, [r1] - strb r1, [r4, #8] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - add r1, #0x35 - ldrb r1, [r1] - strb r1, [r4, #9] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - ldrb r1, [r0, r5] - strb r1, [r4, #0xa] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - ldrb r1, [r1, #1] - strb r1, [r4, #0xb] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - ldrb r1, [r1, #2] - strb r1, [r4, #0xc] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r2, r1, #0 - mul r2, r3 - add r0, r0, r2 - ldrb r0, [r0, #3] - strb r0, [r4, #0xd] - bl MOD83_022345D4 - add r1, r0, #0 - ldr r0, _02234B28 ; =MOD83_02233A30 - bl WM_StartScan - cmp r0, #2 - beq _02234B1E - bl MOD83_02234958 - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + bl MOD83_022345D4 + add r4, r0, #0 + bl MOD83_02234664 + ldr r2, _02234B24 ; =0x000001C3 + mov r3, #0x38 + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + add r1, #0x34 + ldrb r1, [r1] + strb r1, [r4, #8] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + add r1, #0x35 + ldrb r1, [r1] + strb r1, [r4, #9] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + ldrb r1, [r0, r5] + strb r1, [r4, #0xa] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + ldrb r1, [r1, #1] + strb r1, [r4, #0xb] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + ldrb r1, [r1, #2] + strb r1, [r4, #0xc] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r2, r1, #0 + mul r2, r3 + add r0, r0, r2 + ldrb r0, [r0, #3] + strb r0, [r4, #0xd] + bl MOD83_022345D4 + add r1, r0, #0 + ldr r0, _02234B28 ; =MOD83_02233A30 + bl WM_StartScan + cmp r0, #2 + beq _02234B1E + bl MOD83_02234958 + mov r0, #0 + pop {r3, r4, r5, pc} _02234B1E: - mov r0, #1 - pop {r3, r4, r5, pc} - nop + mov r0, #1 + pop {r3, r4, r5, pc} + nop _02234B24: .word 0x000001C3 _02234B28: .word MOD83_02233A30 - thumb_func_end MOD83_02234A94 + thumb_func_end MOD83_02234A94 - thumb_func_start MOD83_02234B2C + thumb_func_start MOD83_02234B2C MOD83_02234B2C: ; 0x02234B2C - push {r3, lr} - ldr r0, _02234B44 ; =MOD83_02233AA0 - bl WM_EndScan - cmp r0, #2 - beq _02234B40 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234B44 ; =MOD83_02233AA0 + bl WM_EndScan + cmp r0, #2 + beq _02234B40 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234B40: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234B44: .word MOD83_02233AA0 - thumb_func_end MOD83_02234B2C + thumb_func_end MOD83_02234B2C - thumb_func_start MOD83_02234B48 + thumb_func_start MOD83_02234B48 MOD83_02234B48: ; 0x02234B48 - push {r3, r4, lr} - sub sp, #4 - bl MOD83_022346F8 - add r4, r0, #0 - bl MOD83_02234610 - add r1, r0, #0 - mov r0, #0 - str r0, [sp] - ldr r0, _02234B7C ; =MOD83_02233AF4 - add r2, r4, #0 - mov r3, #1 - bl WM_StartConnectEx - cmp r0, #2 - beq _02234B74 - bl MOD83_02234958 - add sp, #4 - mov r0, #0 - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #4 + bl MOD83_022346F8 + add r4, r0, #0 + bl MOD83_02234610 + add r1, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, _02234B7C ; =MOD83_02233AF4 + add r2, r4, #0 + mov r3, #1 + bl WM_StartConnectEx + cmp r0, #2 + beq _02234B74 + bl MOD83_02234958 + add sp, #4 + mov r0, #0 + pop {r3, r4, pc} _02234B74: - mov r0, #1 - add sp, #4 - pop {r3, r4, pc} - nop + mov r0, #1 + add sp, #4 + pop {r3, r4, pc} + nop _02234B7C: .word MOD83_02233AF4 - thumb_func_end MOD83_02234B48 + thumb_func_end MOD83_02234B48 - thumb_func_start MOD83_02234B80 + thumb_func_start MOD83_02234B80 MOD83_02234B80: ; 0x02234B80 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - ldr r1, _02234BF0 ; =MOD83_02233DF0 - mov r0, #4 - mov r2, #0 - bl WM_SetPortCallback - cmp r0, #0 - beq _02234B9C - bl MOD83_02234958 - add sp, #8 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + ldr r1, _02234BF0 ; =MOD83_02233DF0 + mov r0, #4 + mov r2, #0 + bl WM_SetPortCallback + cmp r0, #0 + beq _02234B9C + bl MOD83_02234958 + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02234B9C: - bl MOD83_02234564 - ldrh r0, [r0, #0x16] - cmp r0, #0 - bne _02234BAA - mov r5, #1 - b _02234BAC + bl MOD83_02234564 + ldrh r0, [r0, #0x16] + cmp r0, #0 + bne _02234BAA + mov r5, #1 + b _02234BAC _02234BAA: - mov r5, #0 + mov r5, #0 _02234BAC: - bl MOD83_02234604 - add r6, r0, #0 - bl MOD83_022345EC - add r4, r0, #0 - bl MOD83_022345F8 - add r7, r0, #0 - bl MOD83_022345E0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp] - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #4] - lsl r2, r4, #0x10 - ldr r0, _02234BF4 ; =MOD83_02233BD8 - add r1, r6, #0 - lsr r2, r2, #0x10 - add r3, r7, #0 - bl WM_StartMP - cmp r0, #2 - beq _02234BEA - bl MOD83_02234958 - add sp, #8 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + bl MOD83_02234604 + add r6, r0, #0 + bl MOD83_022345EC + add r4, r0, #0 + bl MOD83_022345F8 + add r7, r0, #0 + bl MOD83_022345E0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + lsl r0, r5, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #4] + lsl r2, r4, #0x10 + ldr r0, _02234BF4 ; =MOD83_02233BD8 + add r1, r6, #0 + lsr r2, r2, #0x10 + add r3, r7, #0 + bl WM_StartMP + cmp r0, #2 + beq _02234BEA + bl MOD83_02234958 + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02234BEA: - mov r0, #1 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #1 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02234BF0: .word MOD83_02233DF0 _02234BF4: .word MOD83_02233BD8 - thumb_func_end MOD83_02234B80 + thumb_func_end MOD83_02234B80 - thumb_func_start MOD83_02234BF8 + thumb_func_start MOD83_02234BF8 MOD83_02234BF8: ; 0x02234BF8 - push {r3, lr} - ldr r0, _02234C10 ; =MOD83_02233E74 - bl WM_PowerOn - cmp r0, #2 - beq _02234C0C - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C10 ; =MOD83_02233E74 + bl WM_PowerOn + cmp r0, #2 + beq _02234C0C + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234C0C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C10: .word MOD83_02233E74 - thumb_func_end MOD83_02234BF8 + thumb_func_end MOD83_02234BF8 - thumb_func_start MOD83_02234C14 + thumb_func_start MOD83_02234C14 MOD83_02234C14: ; 0x02234C14 - push {r3, lr} - ldr r0, _02234C30 ; =MOD83_02233E98 - bl WM_PowerOff - cmp r0, #2 - beq _02234C2C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C30 ; =MOD83_02233E98 + bl WM_PowerOff + cmp r0, #2 + beq _02234C2C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C2C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C30: .word MOD83_02233E98 - thumb_func_end MOD83_02234C14 + thumb_func_end MOD83_02234C14 - thumb_func_start MOD83_02234C34 + thumb_func_start MOD83_02234C34 MOD83_02234C34: ; 0x02234C34 - push {r3, lr} - ldr r0, _02234C50 ; =MOD83_02233EBC - bl WM_Reset - cmp r0, #2 - beq _02234C4C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C50 ; =MOD83_02233EBC + bl WM_Reset + cmp r0, #2 + beq _02234C4C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C4C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C50: .word MOD83_02233EBC - thumb_func_end MOD83_02234C34 + thumb_func_end MOD83_02234C34 - thumb_func_start MOD83_02234C54 + thumb_func_start MOD83_02234C54 MOD83_02234C54: ; 0x02234C54 - push {r3, lr} - ldr r0, _02234C70 ; =MOD83_02233F00 - bl WM_End - cmp r0, #2 - beq _02234C6C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C70 ; =MOD83_02233F00 + bl WM_End + cmp r0, #2 + beq _02234C6C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C6C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C70: .word MOD83_02233F00 - thumb_func_end MOD83_02234C54 + thumb_func_end MOD83_02234C54 - thumb_func_start MOD83_RS_SpeciesIsInvalid + thumb_func_start MOD83_RS_SpeciesIsInvalid MOD83_RS_SpeciesIsInvalid: ; 0x02234C74 - cmp r0, #0 ; RS_SPECIES_NONE - bgt _02234C7C - mov r0, #1 - bx lr + cmp r0, #0 ; RS_SPECIES_NONE + bgt _02234C7C + mov r0, #1 + bx lr _02234C7C: - cmp r0, #0xfb ; RS_SPECIES_CELEBI - bgt _02234C84 - mov r0, #0 - bx lr + cmp r0, #0xfb ; RS_SPECIES_CELEBI + bgt _02234C84 + mov r0, #0 + bx lr _02234C84: - ldr r1, _02234C9C ; =0x00000115 RS_SPECIES_TREECKO - cmp r0, r1 - bge _02234C8E - mov r0, #1 - bx lr + ldr r1, _02234C9C ; =0x00000115 RS_SPECIES_TREECKO + cmp r0, r1 + bge _02234C8E + mov r0, #1 + bx lr _02234C8E: - add r1, #0x86 ; RS_SPECIES_CHIMECHO - cmp r0, r1 - ble _02234C98 - mov r0, #1 - bx lr + add r1, #0x86 ; RS_SPECIES_CHIMECHO + cmp r0, r1 + ble _02234C98 + mov r0, #1 + bx lr _02234C98: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02234C9C: .word 0x00000115 - thumb_func_end MOD83_RS_SpeciesIsInvalid + thumb_func_end MOD83_RS_SpeciesIsInvalid - thumb_func_start MOD83_02234CA0 + thumb_func_start MOD83_02234CA0 MOD83_02234CA0: ; 0x02234CA0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_02236E9C - cmp r0, #4 - bhi _02234CE0 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + add r4, r0, #0 + bl MOD83_02236E9C + cmp r0, #4 + bhi _02234CE0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02234CB8: ; jump table - .short _02234CC2 - _02234CB8 - 2 ; case 0 - .short _02234CC8 - _02234CB8 - 2 ; case 1 - .short _02234CCE - _02234CB8 - 2 ; case 2 - .short _02234CD4 - _02234CB8 - 2 ; case 3 - .short _02234CDA - _02234CB8 - 2 ; case 4 + .short _02234CC2 - _02234CB8 - 2 ; case 0 + .short _02234CC8 - _02234CB8 - 2 ; case 1 + .short _02234CCE - _02234CB8 - 2 ; case 2 + .short _02234CD4 - _02234CB8 - 2 ; case 3 + .short _02234CDA - _02234CB8 - 2 ; case 4 _02234CC2: - mov r0, #2 - str r0, [r4] - pop {r4, pc} + mov r0, #2 + str r0, [r4] + pop {r4, pc} _02234CC8: - mov r0, #1 - str r0, [r4] - pop {r4, pc} + mov r0, #1 + str r0, [r4] + pop {r4, pc} _02234CCE: - mov r0, #5 - str r0, [r4] - pop {r4, pc} + mov r0, #5 + str r0, [r4] + pop {r4, pc} _02234CD4: - mov r0, #4 - str r0, [r4] - pop {r4, pc} + mov r0, #4 + str r0, [r4] + pop {r4, pc} _02234CDA: - mov r0, #3 - str r0, [r4] - pop {r4, pc} + mov r0, #3 + str r0, [r4] + pop {r4, pc} _02234CE0: - mov r0, #0 - mvn r0, r0 - str r0, [r4] - pop {r4, pc} - thumb_func_end MOD83_02234CA0 + mov r0, #0 + mvn r0, r0 + str r0, [r4] + pop {r4, pc} + thumb_func_end MOD83_02234CA0 - thumb_func_start MOD83_02234CE8 + thumb_func_start MOD83_02234CE8 MOD83_02234CE8: ; 0x02234CE8 - push {r3, r4, r5, lr} - sub sp, #0x10 - ldr r1, _02234E3C ; =0x0000E890 - add r5, r0, #0 - add r4, r5, r1 - ldr r1, [r4] - cmp r1, #9 - bls _02234CFA - b _02234E34 + push {r3, r4, r5, lr} + sub sp, #0x10 + ldr r1, _02234E3C ; =0x0000E890 + add r5, r0, #0 + add r4, r5, r1 + ldr r1, [r4] + cmp r1, #9 + bls _02234CFA + b _02234E34 _02234CFA: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _02234D06: ; jump table - .short _02234D1A - _02234D06 - 2 ; case 0 - .short _02234D3A - _02234D06 - 2 ; case 1 - .short _02234D52 - _02234D06 - 2 ; case 2 - .short _02234D62 - _02234D06 - 2 ; case 3 - .short _02234D72 - _02234D06 - 2 ; case 4 - .short _02234D8E - _02234D06 - 2 ; case 5 - .short _02234DA2 - _02234D06 - 2 ; case 6 - .short _02234DBE - _02234D06 - 2 ; case 7 - .short _02234DEA - _02234D06 - 2 ; case 8 - .short _02234E10 - _02234D06 - 2 ; case 9 + .short _02234D1A - _02234D06 - 2 ; case 0 + .short _02234D3A - _02234D06 - 2 ; case 1 + .short _02234D52 - _02234D06 - 2 ; case 2 + .short _02234D62 - _02234D06 - 2 ; case 3 + .short _02234D72 - _02234D06 - 2 ; case 4 + .short _02234D8E - _02234D06 - 2 ; case 5 + .short _02234DA2 - _02234D06 - 2 ; case 6 + .short _02234DBE - _02234D06 - 2 ; case 7 + .short _02234DEA - _02234D06 - 2 ; case 8 + .short _02234E10 - _02234D06 - 2 ; case 9 _02234D1A: - bl MOD83_02234E6C - ldr r0, [r5, #0x10] - bl FUN_02022528 - add r5, r0, #0 - bl MOD83_02237448 - add r1, r0, #0 - add r0, r5, #0 - bl FUN_0202BF90 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl MOD83_02234E6C + ldr r0, [r5, #0x10] + bl FUN_02022528 + add r5, r0, #0 + bl MOD83_02237448 + add r1, r0, #0 + add r0, r5, #0 + bl FUN_0202BF90 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D3A: - bl OS_GetTick - mov r2, #0x78 - mov r3, #0 - bl _ull_mod - add r0, r0, #1 - str r0, [r4, #4] - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl OS_GetTick + mov r2, #0x78 + mov r3, #0 + bl _ull_mod + add r0, r0, #1 + str r0, [r4, #4] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D52: - ldr r0, [r4, #4] - sub r0, r0, #1 - str r0, [r4, #4] - bne _02234E34 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] + bne _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D62: - ldr r0, [r5, #0x10] - mov r1, #2 - bl FUN_02022840 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r5, #0x10] + mov r1, #2 + bl FUN_02022840 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D72: - ldr r0, [r5, #0x10] - bl FUN_02022854 - cmp r0, #3 - bne _02234D82 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + ldr r0, [r5, #0x10] + bl FUN_02022854 + cmp r0, #3 + bne _02234D82 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234D82: - cmp r0, #1 - bne _02234E34 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + cmp r0, #1 + bne _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D8E: - mov r0, #0 - add r1, r0, #0 - add r2, sp, #0 - mov r3, #0x10 - bl CTRDG_ReadAgbFlash - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + mov r0, #0 + add r1, r0, #0 + add r2, sp, #0 + mov r3, #0x10 + bl CTRDG_ReadAgbFlash + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DA2: - bl MOD83_0223736C - cmp r0, #0 - bne _02234DB6 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_0223736C + cmp r0, #0 + bne _02234DB6 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DB6: - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DBE: - bl MOD83_022373F4 - cmp r0, #9 - beq _02234E34 - bl MOD83_022373F4 - cmp r0, #0xb - bne _02234DD6 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl MOD83_022373F4 + cmp r0, #9 + beq _02234E34 + bl MOD83_022373F4 + cmp r0, #0xb + bne _02234DD6 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DD6: - bl MOD83_022373B4 - cmp r0, #8 - bne _02234E34 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_022373B4 + cmp r0, #8 + bne _02234E34 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DEA: - ldr r0, [r5, #0x10] - bl FUN_02022854 - cmp r0, #3 - bne _02234DFA - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + ldr r0, [r5, #0x10] + bl FUN_02022854 + cmp r0, #3 + bne _02234DFA + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DFA: - cmp r0, #2 - bne _02234DEA - bl MOD83_022373B4 - mov r0, #1 - bl FUN_02016444 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + cmp r0, #2 + bne _02234DEA + bl MOD83_022373B4 + mov r0, #1 + bl FUN_02016444 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234E10: - bl MOD83_022373B4 - cmp r0, #8 - bne _02234E24 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_022373B4 + cmp r0, #8 + bne _02234E24 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234E24: - cmp r0, #0 - bne _02234E34 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xb - pop {r3, r4, r5, pc} + cmp r0, #0 + bne _02234E34 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xb + pop {r3, r4, r5, pc} _02234E34: - mov r0, #0xa - add sp, #0x10 - pop {r3, r4, r5, pc} - nop + mov r0, #0xa + add sp, #0x10 + pop {r3, r4, r5, pc} + nop _02234E3C: .word 0x0000E890 - thumb_func_end MOD83_02234CE8 + thumb_func_end MOD83_02234CE8 - thumb_func_start MOD83_02234E40 + thumb_func_start MOD83_02234E40 MOD83_02234E40: ; 0x02234E40 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #0x10] - bl FUN_02022528 - add r4, r0, #0 - bl MOD83_02237448 - add r1, r0, #0 - add r0, r4, #0 - bl FUN_0202BF90 - mov r0, #4 - bl SetSoftResetDisableMask - ldr r0, [r5, #0x10] - bl FUN_02022720 - mov r0, #4 - bl ClearSoftResetDisableMask - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02234E40 - - thumb_func_start MOD83_02234E6C + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, [r5, #0x10] + bl FUN_02022528 + add r4, r0, #0 + bl MOD83_02237448 + add r1, r0, #0 + add r0, r4, #0 + bl FUN_0202BF90 + mov r0, #4 + bl SetSoftResetDisableMask + ldr r0, [r5, #0x10] + bl FUN_02022720 + mov r0, #4 + bl ClearSoftResetDisableMask + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02234E40 + + thumb_func_start MOD83_02234E6C MOD83_02234E6C: ; 0x02234E6C - push {r4, r5, r6, r7, lr} - sub sp, #0xf4 - add r7, r0, #0 - ldr r0, [r7, #0x10] - bl FUN_02022528 - str r0, [sp] - add r0, sp, #8 - bl FUN_020690E4 - add r6, r0, #0 - mov r4, #0 - add r5, r7, #0 + push {r4, r5, r6, r7, lr} + sub sp, #0xf4 + add r7, r0, #0 + ldr r0, [r7, #0x10] + bl FUN_02022528 + str r0, [sp] + add r0, sp, #8 + bl FUN_020690E4 + add r6, r0, #0 + mov r4, #0 + add r5, r7, #0 _02234E86: - ldr r0, _02234F04 ; =0x0000E880 - mov r1, #0x3d - lsl r1, r1, #4 - ldr r0, [r7, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - add r0, r0, #4 - mul r1, r2 - add r0, r0, r1 - mov r1, #0xf3 - lsl r1, r1, #2 - ldr r2, [r5, r1] - mov r1, #0x50 - mul r1, r2 - add r0, r0, r1 - add r1, r6, #0 - bl MigrateBoxMon - ldr r0, [sp] - add r1, r6, #0 - add r2, r4, #0 - bl FUN_0202BF7C - add r4, r4, #1 - add r5, #0xc - cmp r4, #6 - blt _02234E86 - mov r5, #0 - add r0, sp, #4 - strh r5, [r0] - add r4, r7, #0 - sub r6, r5, #1 + ldr r0, _02234F04 ; =0x0000E880 + mov r1, #0x3d + lsl r1, r1, #4 + ldr r0, [r7, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + add r0, r0, #4 + mul r1, r2 + add r0, r0, r1 + mov r1, #0xf3 + lsl r1, r1, #2 + ldr r2, [r5, r1] + mov r1, #0x50 + mul r1, r2 + add r0, r0, r1 + add r1, r6, #0 + bl MigrateBoxMon + ldr r0, [sp] + add r1, r6, #0 + add r2, r4, #0 + bl FUN_0202BF7C + add r4, r4, #1 + add r5, #0xc + cmp r4, #6 + blt _02234E86 + mov r5, #0 + add r0, sp, #4 + strh r5, [r0] + add r4, r7, #0 + sub r6, r5, #1 _02234EC8: - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r2, [r4, r0] - add r0, r0, #4 - ldr r1, [r4, r0] - cmp r2, r6 - beq _02234EF6 - cmp r1, #0xe - beq _02234EF6 - ldr r0, _02234F04 ; =0x0000E880 - mov r3, #0x96 - ldr r0, [r7, r0] - lsl r3, r3, #4 - mul r3, r1 - add r0, r0, #4 - mov r1, #0x50 - mul r1, r2 - add r0, r0, r3 - add r0, r0, r1 - mov r1, #0xb - add r2, sp, #4 - bl MOD83_02237D90 + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r2, [r4, r0] + add r0, r0, #4 + ldr r1, [r4, r0] + cmp r2, r6 + beq _02234EF6 + cmp r1, #0xe + beq _02234EF6 + ldr r0, _02234F04 ; =0x0000E880 + mov r3, #0x96 + ldr r0, [r7, r0] + lsl r3, r3, #4 + mul r3, r1 + add r0, r0, #4 + mov r1, #0x50 + mul r1, r2 + add r0, r0, r3 + add r0, r0, r1 + mov r1, #0xb + add r2, sp, #4 + bl MOD83_02237D90 _02234EF6: - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _02234EC8 - add sp, #0xf4 - pop {r4, r5, r6, r7, pc} - nop + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _02234EC8 + add sp, #0xf4 + pop {r4, r5, r6, r7, pc} + nop _02234F04: .word 0x0000E880 - thumb_func_end MOD83_02234E6C + thumb_func_end MOD83_02234E6C - thumb_func_start MOD83_02234F08 + thumb_func_start MOD83_02234F08 MOD83_02234F08: ; 0x02234F08 - push {r4, lr} - add r4, r0, #0 - mov r0, #1 - tst r2, r0 - beq _02234F26 - mov r2, #0 - bl FUN_02002E14 - ldr r1, [r4, #0x10] - lsl r1, r1, #3 - sub r1, r1, r0 - lsr r0, r1, #0x1f - add r0, r1, r0 - asr r0, r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + mov r0, #1 + tst r2, r0 + beq _02234F26 + mov r2, #0 + bl FUN_02002E14 + ldr r1, [r4, #0x10] + lsl r1, r1, #3 + sub r1, r1, r0 + lsr r0, r1, #0x1f + add r0, r1, r0 + asr r0, r0, #1 + pop {r4, pc} _02234F26: - ldr r0, [r4, #0x18] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234F08 + ldr r0, [r4, #0x18] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234F08 - thumb_func_start MOD83_02234F2C + thumb_func_start MOD83_02234F2C MOD83_02234F2C: ; 0x02234F2C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - add r5, r1, #0 - ldr r6, [r5, #0x44] - add r4, r2, #0 - cmp r6, #0 - bne _02234F3C - mov r6, #0xff + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + add r5, r1, #0 + ldr r6, [r5, #0x44] + add r4, r2, #0 + cmp r6, #0 + bne _02234F3C + mov r6, #0xff _02234F3C: - ldr r1, [r5] - ldr r2, [r1] - cmp r2, #0 - bne _02234F7A - ldr r2, [r5, #0xc] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp] - ldr r2, [r5, #0x10] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #4] - ldr r2, [r5, #0x14] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #8] - mov r2, #0xf - str r2, [sp, #0xc] - ldr r2, [r5, #0x20] - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - str r2, [sp, #0x10] - ldr r2, [r5, #0x24] - ldr r3, [r5, #8] - lsl r2, r2, #0x18 - lsl r3, r3, #0x18 - ldr r0, [r0, #0x20] - lsr r2, r2, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + ldr r1, [r5] + ldr r2, [r1] + cmp r2, #0 + bne _02234F7A + ldr r2, [r5, #0xc] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp] + ldr r2, [r5, #0x10] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #4] + ldr r2, [r5, #0x14] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #8] + mov r2, #0xf + str r2, [sp, #0xc] + ldr r2, [r5, #0x20] + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + str r2, [sp, #0x10] + ldr r2, [r5, #0x24] + ldr r3, [r5, #8] + lsl r2, r2, #0x18 + lsl r3, r3, #0x18 + ldr r0, [r0, #0x20] + lsr r2, r2, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02234F7A: - mov r0, #2 - tst r0, r4 - bne _02234F8C - ldr r1, [r5, #0x30] - ldr r0, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FillWindowPixelBuffer + mov r0, #2 + tst r0, r4 + bne _02234F8C + ldr r1, [r5, #0x30] + ldr r0, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + bl FillWindowPixelBuffer _02234F8C: - mov r0, #0 - ldr r1, [r5, #0x34] - mvn r0, r0 - cmp r1, r0 - beq _02235004 - ldr r2, _022350B4 ; =0x00000193 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x4e - bl NewMsgDataFromNarc - ldr r7, [r5, #0x40] - str r0, [sp, #0x14] - cmp r7, #0 - bne _02234FB2 - mov r0, #0x4e - bl ScrStrBufs_new - add r7, r0, #0 + mov r0, #0 + ldr r1, [r5, #0x34] + mvn r0, r0 + cmp r1, r0 + beq _02235004 + ldr r2, _022350B4 ; =0x00000193 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x4e + bl NewMsgDataFromNarc + ldr r7, [r5, #0x40] + str r0, [sp, #0x14] + cmp r7, #0 + bne _02234FB2 + mov r0, #0x4e + bl ScrStrBufs_new + add r7, r0, #0 _02234FB2: - ldr r1, [sp, #0x14] - ldr r2, [r5, #0x34] - add r0, r7, #0 - mov r3, #0x4e - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x18] - ldr r1, [sp, #0x18] - add r0, r5, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - ldr r2, [sp, #0x18] - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - ldr r0, [sp, #0x18] - bl String_dtor - ldr r0, [r5, #0x40] - cmp r0, #0 - bne _02234FF8 - add r0, r7, #0 - bl ScrStrBufs_delete + ldr r1, [sp, #0x14] + ldr r2, [r5, #0x34] + add r0, r7, #0 + mov r3, #0x4e + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x18] + ldr r1, [sp, #0x18] + add r0, r5, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + ldr r2, [sp, #0x18] + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + ldr r0, [sp, #0x18] + bl String_dtor + ldr r0, [r5, #0x40] + cmp r0, #0 + bne _02234FF8 + add r0, r7, #0 + bl ScrStrBufs_delete _02234FF8: - ldr r0, [sp, #0x14] - bl DestroyMsgData - mov r0, #0 - mvn r0, r0 - str r0, [r5, #0x34] + ldr r0, [sp, #0x14] + bl DestroyMsgData + mov r0, #0 + mvn r0, r0 + str r0, [r5, #0x34] _02235004: - ldr r0, [r5, #0x38] - cmp r0, #0 - beq _0223504C - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - ldr r1, [r5, #0x38] - add r7, r0, #0 - mov r2, #0x40 - bl CopyU16ArrayToStringN - add r0, r5, #0 - add r1, r7, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - add r2, r7, #0 - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - add r0, r7, #0 - bl String_dtor - mov r0, #0 - str r0, [r5, #0x38] + ldr r0, [r5, #0x38] + cmp r0, #0 + beq _0223504C + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + ldr r1, [r5, #0x38] + add r7, r0, #0 + mov r2, #0x40 + bl CopyU16ArrayToStringN + add r0, r5, #0 + add r1, r7, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + add r2, r7, #0 + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + add r0, r7, #0 + bl String_dtor + mov r0, #0 + str r0, [r5, #0x38] _0223504C: - ldr r1, [r5, #0x3c] - cmp r1, #0 - beq _0223507A - add r0, r5, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - ldr r2, [r5, #0x3c] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - mov r0, #0 - str r0, [r5, #0x3c] + ldr r1, [r5, #0x3c] + cmp r1, #0 + beq _0223507A + add r0, r5, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + ldr r2, [r5, #0x3c] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + mov r0, #0 + str r0, [r5, #0x3c] _0223507A: - mov r0, #4 - tst r0, r4 - bne _02235086 - ldr r0, [r5] - bl CopyWindowToVram + mov r0, #4 + tst r0, r4 + bne _02235086 + ldr r0, [r5] + bl CopyWindowToVram _02235086: - mov r0, #8 - tst r0, r4 - beq _022350AE - mov r0, #0x10 - tst r0, r4 - ldr r0, [r5] - beq _022350A2 - ldr r2, _022350B8 ; =0x000003D2 - mov r1, #0 - mov r3, #0xd - bl FUN_0200D0BC - add sp, #0x1c - pop {r4, r5, r6, r7, pc} + mov r0, #8 + tst r0, r4 + beq _022350AE + mov r0, #0x10 + tst r0, r4 + ldr r0, [r5] + beq _022350A2 + ldr r2, _022350B8 ; =0x000003D2 + mov r1, #0 + mov r3, #0xd + bl FUN_0200D0BC + add sp, #0x1c + pop {r4, r5, r6, r7, pc} _022350A2: - mov r2, #0x3f - mov r1, #0 - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CCA4 + mov r2, #0x3f + mov r1, #0 + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CCA4 _022350AE: - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _022350B4: .word 0x00000193 _022350B8: .word 0x000003D2 - thumb_func_end MOD83_02234F2C + thumb_func_end MOD83_02234F2C - thumb_func_start MOD83_022350BC + thumb_func_start MOD83_022350BC MOD83_022350BC: ; 0x022350BC - push {r4, lr} - sub sp, #0x10 - ldr r4, _022350E8 ; =MOD83_0223A50C - add r3, sp, #0 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl FUN_0201D040 - mov r0, #0x14 - mov r1, #0x4e - bl FUN_0201E00C - bl FUN_0201D168 - bl FUN_0201E0BC - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + ldr r4, _022350E8 ; =MOD83_0223A50C + add r3, sp, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl FUN_0201D040 + mov r0, #0x14 + mov r1, #0x4e + bl FUN_0201E00C + bl FUN_0201D168 + bl FUN_0201E0BC + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _022350E8: .word MOD83_0223A50C - thumb_func_end MOD83_022350BC + thumb_func_end MOD83_022350BC - thumb_func_start MOD83_022350EC + thumb_func_start MOD83_022350EC MOD83_022350EC: ; 0x022350EC - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r6, r0, #0 - bl NNS_G2dInitOamManagerModule - mov r0, #0 - str r0, [sp] - mov r1, #0x7e - str r1, [sp, #4] - str r0, [sp, #8] - mov r3, #0x20 - str r3, [sp, #0xc] - mov r2, #0x4e - str r2, [sp, #0x10] - add r2, r0, #0 - bl FUN_02009EAC - add r1, r6, #0 - mov r0, #0x50 - add r1, #0x2c - mov r2, #0x4e - bl FUN_02008C9C - str r0, [r6, #0x28] - add r0, r6, #0 - mov r2, #1 - add r0, #0x2c - mov r1, #0 - lsl r2, r2, #0x14 - bl FUN_02008D24 - mov r7, #0x55 - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + bl NNS_G2dInitOamManagerModule + mov r0, #0 + str r0, [sp] + mov r1, #0x7e + str r1, [sp, #4] + str r0, [sp, #8] + mov r3, #0x20 + str r3, [sp, #0xc] + mov r2, #0x4e + str r2, [sp, #0x10] + add r2, r0, #0 + bl FUN_02009EAC + add r1, r6, #0 + mov r0, #0x50 + add r1, #0x2c + mov r2, #0x4e + bl FUN_02008C9C + str r0, [r6, #0x28] + add r0, r6, #0 + mov r2, #1 + add r0, #0x2c + mov r1, #0 + lsl r2, r2, #0x14 + bl FUN_02008D24 + mov r7, #0x55 + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02235132: - mov r0, #3 - add r1, r4, #0 - mov r2, #0x4e - bl FUN_02008DEC - str r0, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02235132 - mov r0, #0 - str r0, [sp] - mov r3, #1 - str r3, [sp, #4] - mov r0, #0x4e - str r0, [sp, #8] - mov r0, #0x55 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0x74 - mov r2, #0x1a - bl FUN_02008F34 - mov r1, #0x5b - lsl r1, r1, #2 - str r0, [r6, r1] - mov r3, #0 - str r3, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #0xc] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x17 - bl FUN_02008FEC - mov r1, #0x17 - lsl r1, r1, #4 - str r0, [r6, r1] - mov r0, #0 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #8] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x19 - mov r3, #1 - bl FUN_020090AC - mov r1, #0x5d - lsl r1, r1, #2 - str r0, [r6, r1] - mov r0, #0 - str r0, [sp] - mov r0, #3 - str r0, [sp, #4] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #8] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x18 - mov r3, #1 - bl FUN_020090AC - mov r1, #0x5e - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #0xc - ldr r0, [r6, r1] - bl FUN_02009A50 - mov r0, #0x17 - lsl r0, r0, #4 - ldr r0, [r6, r0] - bl FUN_02009CF0 - bl FUN_0206B888 - add r1, r0, #0 - mov r0, #0 - mov r2, #1 - str r0, [sp] - mov r0, #0x4e - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x13 - add r3, #0xff - bl GfGfxLoader_GXLoadPal - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - thumb_func_end MOD83_022350EC - - thumb_func_start MOD83_022351F8 + mov r0, #3 + add r1, r4, #0 + mov r2, #0x4e + bl FUN_02008DEC + str r0, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02235132 + mov r0, #0 + str r0, [sp] + mov r3, #1 + str r3, [sp, #4] + mov r0, #0x4e + str r0, [sp, #8] + mov r0, #0x55 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0x74 + mov r2, #0x1a + bl FUN_02008F34 + mov r1, #0x5b + lsl r1, r1, #2 + str r0, [r6, r1] + mov r3, #0 + str r3, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #0xc] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x17 + bl FUN_02008FEC + mov r1, #0x17 + lsl r1, r1, #4 + str r0, [r6, r1] + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #8] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x19 + mov r3, #1 + bl FUN_020090AC + mov r1, #0x5d + lsl r1, r1, #2 + str r0, [r6, r1] + mov r0, #0 + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #8] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x18 + mov r3, #1 + bl FUN_020090AC + mov r1, #0x5e + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #0xc + ldr r0, [r6, r1] + bl FUN_02009A50 + mov r0, #0x17 + lsl r0, r0, #4 + ldr r0, [r6, r0] + bl FUN_02009CF0 + bl FUN_0206B888 + add r1, r0, #0 + mov r0, #0 + mov r2, #1 + str r0, [sp] + mov r0, #0x4e + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x13 + add r3, #0xff + bl GfGfxLoader_GXLoadPal + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + thumb_func_end MOD83_022350EC + + thumb_func_start MOD83_022351F8 MOD83_022351F8: ; 0x022351F8 - push {lr} - sub sp, #0x2c - mov r1, #0 - str r1, [sp] - sub r2, r1, #1 - str r2, [sp, #4] - str r2, [sp, #8] - str r1, [sp, #0xc] - mov r3, #0x55 - str r1, [sp, #0x10] - lsl r3, r3, #2 - ldr r2, [r0, r3] - str r2, [sp, #0x14] - add r2, r3, #4 - ldr r2, [r0, r2] - str r2, [sp, #0x18] - add r2, r3, #0 - add r2, #8 - ldr r2, [r0, r2] - str r2, [sp, #0x1c] - add r2, r3, #0 - add r2, #0xc - ldr r2, [r0, r2] - add r3, #0x30 - str r2, [sp, #0x20] - str r1, [sp, #0x24] - add r0, r0, r3 - add r2, r1, #0 - add r3, r1, #0 - str r1, [sp, #0x28] - bl FUN_02008AA4 - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add sp, #0x2c - pop {pc} - thumb_func_end MOD83_022351F8 - - thumb_func_start MOD83_02235244 + push {lr} + sub sp, #0x2c + mov r1, #0 + str r1, [sp] + sub r2, r1, #1 + str r2, [sp, #4] + str r2, [sp, #8] + str r1, [sp, #0xc] + mov r3, #0x55 + str r1, [sp, #0x10] + lsl r3, r3, #2 + ldr r2, [r0, r3] + str r2, [sp, #0x14] + add r2, r3, #4 + ldr r2, [r0, r2] + str r2, [sp, #0x18] + add r2, r3, #0 + add r2, #8 + ldr r2, [r0, r2] + str r2, [sp, #0x1c] + add r2, r3, #0 + add r2, #0xc + ldr r2, [r0, r2] + add r3, #0x30 + str r2, [sp, #0x20] + str r1, [sp, #0x24] + add r0, r0, r3 + add r2, r1, #0 + add r3, r1, #0 + str r1, [sp, #0x28] + bl FUN_02008AA4 + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add sp, #0x2c + pop {pc} + thumb_func_end MOD83_022351F8 + + thumb_func_start MOD83_02235244 MOD83_02235244: ; 0x02235244 - ldr r2, [r1, #0x28] - str r2, [r0] - mov r2, #0x61 - lsl r2, r2, #2 - add r1, r1, r2 - str r1, [r0, #4] - mov r2, #0 - mov r1, #1 - str r2, [r0, #0x10] - lsl r1, r1, #0xc - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - strh r2, [r0, #0x20] - mov r1, #0x14 - str r1, [r0, #0x24] - str r3, [r0, #0x28] - mov r1, #0x4e - str r1, [r0, #0x2c] - bx lr - thumb_func_end MOD83_02235244 - - thumb_func_start MOD83_0223526C + ldr r2, [r1, #0x28] + str r2, [r0] + mov r2, #0x61 + lsl r2, r2, #2 + add r1, r1, r2 + str r1, [r0, #4] + mov r2, #0 + mov r1, #1 + str r2, [r0, #0x10] + lsl r1, r1, #0xc + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + strh r2, [r0, #0x20] + mov r1, #0x14 + str r1, [r0, #0x24] + str r3, [r0, #0x28] + mov r1, #0x4e + str r1, [r0, #0x2c] + bx lr + thumb_func_end MOD83_02235244 + + thumb_func_start MOD83_0223526C MOD83_0223526C: ; 0x0223526C - ldr r3, _02235288 ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - ldr r3, _0223528C ; =AGB_GetBoxMonData - mov r1, #0xb - mov r2, #0 - bx r3 - .align 2, 0 + ldr r3, _02235288 ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + ldr r3, _0223528C ; =AGB_GetBoxMonData + mov r1, #0xb + mov r2, #0 + bx r3 + .align 2, 0 _02235288: .word 0x0000E880 _0223528C: .word AGB_GetBoxMonData - thumb_func_end MOD83_0223526C + thumb_func_end MOD83_0223526C - thumb_func_start MOD83_02235290 + thumb_func_start MOD83_02235290 MOD83_02235290: ; 0x02235290 - ldr r3, _022352AC ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - ldr r3, _022352B0 ; =AGB_GetBoxMonData - mov r1, #0x2d - mov r2, #0 - bx r3 - .align 2, 0 + ldr r3, _022352AC ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + ldr r3, _022352B0 ; =AGB_GetBoxMonData + mov r1, #0x2d + mov r2, #0 + bx r3 + .align 2, 0 _022352AC: .word 0x0000E880 _022352B0: .word AGB_GetBoxMonData - thumb_func_end MOD83_02235290 + thumb_func_end MOD83_02235290 - thumb_func_start MOD83_022352B4 + thumb_func_start MOD83_022352B4 MOD83_022352B4: ; 0x022352B4 - ldr r3, _022352D0 ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - mov r1, #0 - ldr r3, _022352D4 ; =AGB_GetBoxMonData - add r2, r1, #0 - bx r3 - .align 2, 0 + ldr r3, _022352D0 ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + mov r1, #0 + ldr r3, _022352D4 ; =AGB_GetBoxMonData + add r2, r1, #0 + bx r3 + .align 2, 0 _022352D0: .word 0x0000E880 _022352D4: .word AGB_GetBoxMonData - thumb_func_end MOD83_022352B4 + thumb_func_end MOD83_022352B4 - thumb_func_start MOD83_022352D8 + thumb_func_start MOD83_022352D8 MOD83_022352D8: ; 0x022352D8 - push {r4, r5} - ldr r5, [sp, #8] - lsr r4, r5, #0x1f - add r4, r5, r4 - asr r4, r4, #1 - sub r5, r2, r4 - strb r5, [r0] - lsr r5, r3, #0x1f - add r5, r3, r5 - asr r5, r5, #1 - sub r3, r1, r5 - strb r3, [r0, #2] - add r2, r2, r4 - strb r2, [r0, #1] - add r1, r1, r5 - strb r1, [r0, #3] - pop {r4, r5} - bx lr - thumb_func_end MOD83_022352D8 - - thumb_func_start MOD83_022352FC + push {r4, r5} + ldr r5, [sp, #8] + lsr r4, r5, #0x1f + add r4, r5, r4 + asr r4, r4, #1 + sub r5, r2, r4 + strb r5, [r0] + lsr r5, r3, #0x1f + add r5, r3, r5 + asr r5, r5, #1 + sub r3, r1, r5 + strb r3, [r0, #2] + add r2, r2, r4 + strb r2, [r0, #1] + add r1, r1, r5 + strb r1, [r0, #3] + pop {r4, r5} + bx lr + thumb_func_end MOD83_022352D8 + + thumb_func_start MOD83_022352FC MOD83_022352FC: ; 0x022352FC - push {r3, r4, r5, r6, r7, lr} - add r6, r1, #0 - mov r1, #1 - add r5, r0, #0 - add r0, r3, #0 - lsl r1, r1, #0xc - add r7, r2, #0 - bl AllocFromHeapAtEnd - add r4, r0, #0 - beq _02235330 - add r1, r5, #0 - add r2, r6, #0 - bl ReadWholeNarcMemberByIdPair - add r0, r4, #0 - add r1, r7, #0 - bl NNS_G2dGetUnpackedBGCharacterData - cmp r0, #0 - bne _02235330 - add r0, r4, #0 - bl FreeToHeap - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + mov r1, #1 + add r5, r0, #0 + add r0, r3, #0 + lsl r1, r1, #0xc + add r7, r2, #0 + bl AllocFromHeapAtEnd + add r4, r0, #0 + beq _02235330 + add r1, r5, #0 + add r2, r6, #0 + bl ReadWholeNarcMemberByIdPair + add r0, r4, #0 + add r1, r7, #0 + bl NNS_G2dGetUnpackedBGCharacterData + cmp r0, #0 + bne _02235330 + add r0, r4, #0 + bl FreeToHeap + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02235330: - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022352FC + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022352FC - thumb_func_start MOD83_02235334 + thumb_func_start MOD83_02235334 MOD83_02235334: ; 0x02235334 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - add r0, r3, #0 - add r1, r6, #0 - bl NARC_ReadWholeMember - add r0, r4, #0 - add r1, r5, #0 - bl NNS_G2dGetUnpackedBGCharacterData - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235334 - - thumb_func_start MOD83_02235350 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + add r0, r3, #0 + add r1, r6, #0 + bl NARC_ReadWholeMember + add r0, r4, #0 + add r1, r5, #0 + bl NNS_G2dGetUnpackedBGCharacterData + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235334 + + thumb_func_start MOD83_02235350 MOD83_02235350: ; 0x02235350 - push {r4, lr} - add r3, r1, #0 - mov r4, #0 - cmp r0, #0xc9 - beq _02235362 - ldr r1, _022353BC ; =0x00000182 - cmp r0, r1 - beq _0223538C - b _022353B6 + push {r4, lr} + add r3, r1, #0 + mov r4, #0 + cmp r0, #0xc9 + beq _02235362 + ldr r1, _022353BC ; =0x00000182 + cmp r0, r1 + beq _0223538C + b _022353B6 _02235362: - mov r4, #3 - lsl r0, r4, #8 - add r2, r3, #0 - and r0, r3 - lsr r1, r0, #6 - lsl r0, r4, #0x18 - and r2, r4 - and r0, r3 - lsl r4, r4, #0x10 - and r3, r4 - lsr r0, r0, #0x12 - lsr r3, r3, #0xc - orr r0, r3 - orr r0, r1 - orr r0, r2 - mov r1, #0x1c - bl _u32_div_f - lsl r0, r1, #0x18 - lsr r4, r0, #0x18 - b _022353B6 + mov r4, #3 + lsl r0, r4, #8 + add r2, r3, #0 + and r0, r3 + lsr r1, r0, #6 + lsl r0, r4, #0x18 + and r2, r4 + and r0, r3 + lsl r4, r4, #0x10 + and r3, r4 + lsr r0, r0, #0x12 + lsr r3, r3, #0xc + orr r0, r3 + orr r0, r1 + orr r0, r2 + mov r1, #0x1c + bl _u32_div_f + lsl r0, r1, #0x18 + lsr r4, r0, #0x18 + b _022353B6 _0223538C: - cmp r2, #5 - bhi _022353A8 - add r0, r2, r2 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r2, #5 + bhi _022353A8 + add r0, r2, r2 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223539C: ; jump table - .short _022353A8 - _0223539C - 2 ; case 0 - .short _022353A8 - _0223539C - 2 ; case 1 - .short _022353A8 - _0223539C - 2 ; case 2 - .short _022353B4 - _0223539C - 2 ; case 3 - .short _022353AC - _0223539C - 2 ; case 4 - .short _022353B0 - _0223539C - 2 ; case 5 + .short _022353A8 - _0223539C - 2 ; case 0 + .short _022353A8 - _0223539C - 2 ; case 1 + .short _022353A8 - _0223539C - 2 ; case 2 + .short _022353B4 - _0223539C - 2 ; case 3 + .short _022353AC - _0223539C - 2 ; case 4 + .short _022353B0 - _0223539C - 2 ; case 5 _022353A8: - mov r4, #0 - b _022353B6 + mov r4, #0 + b _022353B6 _022353AC: - mov r4, #1 - b _022353B6 + mov r4, #1 + b _022353B6 _022353B0: - mov r4, #2 - b _022353B6 + mov r4, #2 + b _022353B6 _022353B4: - mov r4, #3 + mov r4, #3 _022353B6: - add r0, r4, #0 - pop {r4, pc} - nop + add r0, r4, #0 + pop {r4, pc} + nop _022353BC: .word 0x00000182 - thumb_func_end MOD83_02235350 + thumb_func_end MOD83_02235350 - thumb_func_start MOD83_022353C0 + thumb_func_start MOD83_022353C0 MOD83_022353C0: ; 0x022353C0 - push {r3, r4, r5, r6, r7, lr} - add r6, r2, #0 - add r7, r3, #0 - add r5, r1, #0 - bl MOD83_TranslateAgbSpecies - add r1, r6, #0 - add r2, r7, #0 - add r4, r0, #0 - bl MOD83_02235350 - add r7, r0, #0 - add r0, r4, #0 - add r1, r5, #0 - add r2, r7, #0 - bl FUN_0206B6D4 - add r1, r0, #0 - mov r0, #0x13 - add r2, sp, #0 - mov r3, #0x4e - bl MOD83_022352FC - add r6, r0, #0 - ldr r0, [sp] - mov r1, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #8 - bl DC_FlushRange - ldr r1, [sp, #0x18] - ldr r0, [sp] - lsl r1, r1, #4 - add r1, #0x64 - mov r2, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #5 - lsl r2, r2, #8 - bl GX_LoadOBJ - add r0, r4, #0 - add r1, r7, #0 - add r2, r5, #0 - bl FUN_0206B7BC - add r1, r0, #0 - ldr r0, [sp, #0x1c] - add r1, #8 - bl FUN_02020248 - add r0, r6, #0 - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022353C0 - - thumb_func_start MOD83_0223542C + push {r3, r4, r5, r6, r7, lr} + add r6, r2, #0 + add r7, r3, #0 + add r5, r1, #0 + bl MOD83_TranslateAgbSpecies + add r1, r6, #0 + add r2, r7, #0 + add r4, r0, #0 + bl MOD83_02235350 + add r7, r0, #0 + add r0, r4, #0 + add r1, r5, #0 + add r2, r7, #0 + bl FUN_0206B6D4 + add r1, r0, #0 + mov r0, #0x13 + add r2, sp, #0 + mov r3, #0x4e + bl MOD83_022352FC + add r6, r0, #0 + ldr r0, [sp] + mov r1, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #8 + bl DC_FlushRange + ldr r1, [sp, #0x18] + ldr r0, [sp] + lsl r1, r1, #4 + add r1, #0x64 + mov r2, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #5 + lsl r2, r2, #8 + bl GX_LoadOBJ + add r0, r4, #0 + add r1, r7, #0 + add r2, r5, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, [sp, #0x1c] + add r1, #8 + bl FUN_02020248 + add r0, r6, #0 + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022353C0 + + thumb_func_start MOD83_0223542C MOD83_0223542C: ; 0x0223542C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r7, r1, #0 - ldr r1, _022354A8 ; =MOD83_0223BB14 - str r2, [sp] - ldr r2, [r1] - mov r1, #0x83 - add r5, r3, #0 - lsl r1, r1, #2 - mul r1, r5 - add r4, r2, r1 - ldr r1, [sp, #0x20] - add r6, r0, #0 - cmp r1, #0 - beq _022354A0 - bl MOD83_RS_SpeciesIsInvalid - cmp r0, #0 - bne _0223545C - add r0, r6, #0 - bl MOD83_TranslateAgbSpecies - add r6, r0, #0 - b _0223545E + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r1, #0 + ldr r1, _022354A8 ; =MOD83_0223BB14 + str r2, [sp] + ldr r2, [r1] + mov r1, #0x83 + add r5, r3, #0 + lsl r1, r1, #2 + mul r1, r5 + add r4, r2, r1 + ldr r1, [sp, #0x20] + add r6, r0, #0 + cmp r1, #0 + beq _022354A0 + bl MOD83_RS_SpeciesIsInvalid + cmp r0, #0 + bne _0223545C + add r0, r6, #0 + bl MOD83_TranslateAgbSpecies + add r6, r0, #0 + b _0223545E _0223545C: - mov r6, #0 + mov r6, #0 _0223545E: - ldr r2, [sp] - add r0, r6, #0 - add r1, r7, #0 - bl FUN_0206B6D4 - ldr r2, [sp, #0x24] - ldr r3, [sp, #0x28] - add r1, sp, #4 - bl MOD83_02235334 - ldr r0, [sp, #4] - add r1, r4, #0 - mov r2, #2 - ldr r0, [r0, #0x14] - add r1, #0xc - lsl r2, r2, #8 - bl MIi_CpuCopyFast - lsl r0, r5, #4 - add r0, #0x64 - lsl r0, r0, #5 - str r0, [r4] - ldr r0, [sp, #0x20] - ldr r1, [sp] - str r0, [r4, #8] - add r0, r6, #0 - add r2, r7, #0 - bl FUN_0206B7BC - add r0, #8 - add sp, #8 - str r0, [r4, #4] - pop {r3, r4, r5, r6, r7, pc} + ldr r2, [sp] + add r0, r6, #0 + add r1, r7, #0 + bl FUN_0206B6D4 + ldr r2, [sp, #0x24] + ldr r3, [sp, #0x28] + add r1, sp, #4 + bl MOD83_02235334 + ldr r0, [sp, #4] + add r1, r4, #0 + mov r2, #2 + ldr r0, [r0, #0x14] + add r1, #0xc + lsl r2, r2, #8 + bl MIi_CpuCopyFast + lsl r0, r5, #4 + add r0, #0x64 + lsl r0, r0, #5 + str r0, [r4] + ldr r0, [sp, #0x20] + ldr r1, [sp] + str r0, [r4, #8] + add r0, r6, #0 + add r2, r7, #0 + bl FUN_0206B7BC + add r0, #8 + add sp, #8 + str r0, [r4, #4] + pop {r3, r4, r5, r6, r7, pc} _022354A0: - mov r0, #0 - str r0, [r4, #8] - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + str r0, [r4, #8] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022354A8: .word MOD83_0223BB14 - thumb_func_end MOD83_0223542C + thumb_func_end MOD83_0223542C - thumb_func_start MOD83_022354AC + thumb_func_start MOD83_022354AC MOD83_022354AC: ; 0x022354AC - push {r3, r4, r5, r6, r7, lr} - ldr r0, _022354EC ; =MOD83_0223BB14 - mov r6, #2 - lsl r6, r6, #8 - add r7, r6, #0 - ldr r5, [r0] - mov r4, #0 - add r7, #0xc + push {r3, r4, r5, r6, r7, lr} + ldr r0, _022354EC ; =MOD83_0223BB14 + mov r6, #2 + lsl r6, r6, #8 + add r7, r6, #0 + ldr r5, [r0] + mov r4, #0 + add r7, #0xc _022354BC: - ldr r0, [r5, #8] - cmp r0, #0 - beq _022354E0 - add r0, r5, #0 - add r0, #0xc - add r1, r6, #0 - bl DC_FlushRange - add r0, r5, #0 - ldr r1, [r5] - add r0, #0xc - add r2, r6, #0 - bl GX_LoadOBJ - ldr r0, [r5, #8] - ldr r1, [r5, #4] - bl FUN_02020248 + ldr r0, [r5, #8] + cmp r0, #0 + beq _022354E0 + add r0, r5, #0 + add r0, #0xc + add r1, r6, #0 + bl DC_FlushRange + add r0, r5, #0 + ldr r1, [r5] + add r0, #0xc + add r2, r6, #0 + bl GX_LoadOBJ + ldr r0, [r5, #8] + ldr r1, [r5, #4] + bl FUN_02020248 _022354E0: - add r4, r4, #1 - add r5, r5, r7 - cmp r4, #0x1e - blt _022354BC - pop {r3, r4, r5, r6, r7, pc} - nop + add r4, r4, #1 + add r5, r5, r7 + cmp r4, #0x1e + blt _022354BC + pop {r3, r4, r5, r6, r7, pc} + nop _022354EC: .word MOD83_0223BB14 - thumb_func_end MOD83_022354AC + thumb_func_end MOD83_022354AC - thumb_func_start MOD83_022354F0 + thumb_func_start MOD83_022354F0 MOD83_022354F0: ; 0x022354F0 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r0, #0 - mov r0, #0x13 - mov r1, #0x4e - bl NARC_ctor - mov r1, #1 - str r0, [sp, #0xc] - mov r0, #0x4e - lsl r1, r1, #0xc - bl AllocFromHeapAtEnd - mov r6, #0 - str r0, [sp, #0x10] - add r7, r6, #0 - add r4, r5, #0 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r0, #0 + mov r0, #0x13 + mov r1, #0x4e + bl NARC_ctor + mov r1, #1 + str r0, [sp, #0xc] + mov r0, #0x4e + lsl r1, r1, #0xc + bl AllocFromHeapAtEnd + mov r6, #0 + str r0, [sp, #0x10] + add r7, r6, #0 + add r4, r5, #0 _02235512: - ldr r0, _02235634 ; =0x0000E880 - ldr r1, _02235638 ; =0x0000E884 - ldr r0, [r5, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - mul r1, r2 - add r0, r0, #4 - add r0, r0, r1 - add r0, r0, r7 - mov r1, #5 - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022355D2 - ldr r1, _02235638 ; =0x0000E884 - add r0, r5, #0 - ldr r1, [r5, r1] - add r2, r6, #0 - bl MOD83_0223526C - ldr r1, _02235638 ; =0x0000E884 - str r0, [sp, #0x1c] - ldr r1, [r5, r1] - add r0, r5, #0 - add r2, r6, #0 - bl MOD83_02235290 - ldr r1, _02235638 ; =0x0000E884 - str r0, [sp, #0x18] - ldr r1, [r5, r1] - add r0, r5, #0 - add r2, r6, #0 - bl MOD83_022352B4 - str r0, [sp, #0x20] - ldr r0, [sp, #0x1c] - bl MOD83_TranslateAgbSpecies - ldr r2, _0223563C ; =gMain + 0x60 - ldr r1, [sp, #0x20] - ldrb r2, [r2, #6] - bl MOD83_02235350 - str r0, [sp, #0x14] - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - ldr r1, [sp, #0x18] - str r0, [sp] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x14] - str r0, [sp, #4] - ldr r0, [sp, #0xc] - add r3, r6, #0 - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - bl MOD83_0223542C - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 - ldr r0, _02235634 ; =0x0000E880 - ldr r1, _02235638 ; =0x0000E884 - ldr r0, [r5, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - mul r1, r2 - add r0, r0, #4 - add r0, r0, r1 - add r0, r0, r7 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022355C4 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 - b _02235602 + ldr r0, _02235634 ; =0x0000E880 + ldr r1, _02235638 ; =0x0000E884 + ldr r0, [r5, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + mul r1, r2 + add r0, r0, #4 + add r0, r0, r1 + add r0, r0, r7 + mov r1, #5 + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022355D2 + ldr r1, _02235638 ; =0x0000E884 + add r0, r5, #0 + ldr r1, [r5, r1] + add r2, r6, #0 + bl MOD83_0223526C + ldr r1, _02235638 ; =0x0000E884 + str r0, [sp, #0x1c] + ldr r1, [r5, r1] + add r0, r5, #0 + add r2, r6, #0 + bl MOD83_02235290 + ldr r1, _02235638 ; =0x0000E884 + str r0, [sp, #0x18] + ldr r1, [r5, r1] + add r0, r5, #0 + add r2, r6, #0 + bl MOD83_022352B4 + str r0, [sp, #0x20] + ldr r0, [sp, #0x1c] + bl MOD83_TranslateAgbSpecies + ldr r2, _0223563C ; =gMain + 0x60 + ldr r1, [sp, #0x20] + ldrb r2, [r2, #6] + bl MOD83_02235350 + str r0, [sp, #0x14] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + ldr r1, [sp, #0x18] + str r0, [sp] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x14] + str r0, [sp, #4] + ldr r0, [sp, #0xc] + add r3, r6, #0 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + bl MOD83_0223542C + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 + ldr r0, _02235634 ; =0x0000E880 + ldr r1, _02235638 ; =0x0000E884 + ldr r0, [r5, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + mul r1, r2 + add r0, r0, #4 + add r0, r0, r1 + add r0, r0, r7 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022355C4 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 + b _02235602 _022355C4: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - b _02235602 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + b _02235602 _022355D2: - mov r0, #0 - str r0, [sp] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x18] - str r0, [sp, #4] - ldr r0, [sp, #0xc] - ldr r2, [sp, #0x14] - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - add r3, r6, #0 - bl MOD83_0223542C - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 + mov r0, #0 + str r0, [sp] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x18] + str r0, [sp, #4] + ldr r0, [sp, #0xc] + ldr r2, [sp, #0x14] + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + add r3, r6, #0 + bl MOD83_0223542C + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 _02235602: - add r6, r6, #1 - add r7, #0x50 - add r4, #0xc - cmp r6, #0x1e - blt _02235512 - ldr r0, [sp, #0x10] - bl FreeToHeap - ldr r0, [sp, #0xc] - bl NARC_dtor - ldr r1, _02235640 ; =MOD83_022354AC - ldr r0, _02235644 ; =0x00012604 - str r1, [r5, r0] - ldr r1, _02235638 ; =0x0000E884 - add r0, r5, #0 - ldr r1, [r5, r1] - bl MOD83_02235B6C - add r0, r5, #0 - bl MOD83_02235B20 - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - nop + add r6, r6, #1 + add r7, #0x50 + add r4, #0xc + cmp r6, #0x1e + blt _02235512 + ldr r0, [sp, #0x10] + bl FreeToHeap + ldr r0, [sp, #0xc] + bl NARC_dtor + ldr r1, _02235640 ; =MOD83_022354AC + ldr r0, _02235644 ; =0x00012604 + str r1, [r5, r0] + ldr r1, _02235638 ; =0x0000E884 + add r0, r5, #0 + ldr r1, [r5, r1] + bl MOD83_02235B6C + add r0, r5, #0 + bl MOD83_02235B20 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop _02235634: .word 0x0000E880 _02235638: .word 0x0000E884 _0223563C: .word gMain + 0x60 _02235640: .word MOD83_022354AC _02235644: .word 0x00012604 - thumb_func_end MOD83_022354F0 + thumb_func_end MOD83_022354F0 - thumb_func_start MOD83_02235648 + thumb_func_start MOD83_02235648 MOD83_02235648: ; 0x02235648 - push {r4, r5, r6, r7, lr} - sub sp, #0x44 - mov r2, #0x61 - add r5, r0, #0 - lsl r2, r2, #2 - add r0, sp, #0x14 - add r1, r5, #0 - add r2, r5, r2 - mov r3, #1 - bl MOD83_02235244 - mov r0, #0x28 - str r0, [sp, #8] - mov r0, #0x31 - mov r4, #0 - lsl r0, r0, #4 - str r4, [sp, #0xc] - add r7, r5, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x44 + mov r2, #0x61 + add r5, r0, #0 + lsl r2, r2, #2 + add r0, sp, #0x14 + add r1, r5, #0 + add r2, r5, r2 + mov r3, #1 + bl MOD83_02235244 + mov r0, #0x28 + str r0, [sp, #8] + mov r0, #0x31 + mov r4, #0 + lsl r0, r0, #4 + str r4, [sp, #0xc] + add r7, r5, r0 _0223566C: - mov r0, #0 - str r0, [sp, #0x10] - ldr r0, [sp, #8] - mov r6, #0x1c - lsl r0, r0, #0xc - str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #0x10] + ldr r0, [sp, #8] + mov r6, #0x1c + lsl r0, r0, #0xc + str r0, [sp, #4] _02235678: - mov r0, #0x1c - str r0, [sp] - ldr r2, [sp, #8] - add r0, r7, #0 - add r1, r6, #0 - mov r3, #0x1c - bl MOD83_022352D8 - lsl r0, r6, #0xc - str r0, [sp, #0x1c] - ldr r0, [sp, #4] - str r0, [sp, #0x20] - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - bne _022356A6 - add r0, sp, #0x14 - bl FUN_0201FE94 - mov r1, #0x6a - lsl r1, r1, #2 - str r0, [r5, r1] + mov r0, #0x1c + str r0, [sp] + ldr r2, [sp, #8] + add r0, r7, #0 + add r1, r6, #0 + mov r3, #0x1c + bl MOD83_022352D8 + lsl r0, r6, #0xc + str r0, [sp, #0x1c] + ldr r0, [sp, #4] + str r0, [sp, #0x20] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + bne _022356A6 + add r0, sp, #0x14 + bl FUN_0201FE94 + mov r1, #0x6a + lsl r1, r1, #2 + str r0, [r5, r1] _022356A6: - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200BC - mov r0, #0x6a - lsl r0, r0, #2 - add r1, r4, #0 - ldr r0, [r5, r0] - add r1, #0xa - bl FUN_02020130 - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_02020238 - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0x6a - lsl r0, r0, #2 - add r1, r4, #0 - ldr r0, [r5, r0] - add r1, #0x64 - bl FUN_02020310 - mov r0, #6 - ldr r1, [sp, #0x1c] - lsl r0, r0, #0xc - add r0, r1, r0 - str r0, [sp, #0x1c] - mov r0, #3 - ldr r1, [sp, #0x20] - lsl r0, r0, #0xe - add r0, r1, r0 - str r0, [sp, #0x20] - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - bne _02235710 - add r0, sp, #0x14 - bl FUN_0201FE94 - mov r1, #0x6b - lsl r1, r1, #2 - str r0, [r5, r1] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200BC + mov r0, #0x6a + lsl r0, r0, #2 + add r1, r4, #0 + ldr r0, [r5, r0] + add r1, #0xa + bl FUN_02020130 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_02020238 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0x6a + lsl r0, r0, #2 + add r1, r4, #0 + ldr r0, [r5, r0] + add r1, #0x64 + bl FUN_02020310 + mov r0, #6 + ldr r1, [sp, #0x1c] + lsl r0, r0, #0xc + add r0, r1, r0 + str r0, [sp, #0x1c] + mov r0, #3 + ldr r1, [sp, #0x20] + lsl r0, r0, #0xe + add r0, r1, r0 + str r0, [sp, #0x20] + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + bne _02235710 + add r0, sp, #0x14 + bl FUN_0201FE94 + mov r1, #0x6b + lsl r1, r1, #2 + str r0, [r5, r1] _02235710: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200BC - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0x28 - bl FUN_02020130 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_02020238 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r4, #0 - bl FUN_02020310 - add r4, r4, #1 - add r7, r7, #4 - add r5, #0xc - cmp r4, #0x1e - beq _02235774 - ldr r0, [sp, #0x10] - add r6, #0x28 - add r0, r0, #1 - str r0, [sp, #0x10] - cmp r0, #6 - blt _02235678 - ldr r0, [sp, #8] - add r0, #0x18 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #5 - bge _02235774 - b _0223566C + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200BC + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0x28 + bl FUN_02020130 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_02020238 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r4, #0 + bl FUN_02020310 + add r4, r4, #1 + add r7, r7, #4 + add r5, #0xc + cmp r4, #0x1e + beq _02235774 + ldr r0, [sp, #0x10] + add r6, #0x28 + add r0, r0, #1 + str r0, [sp, #0x10] + cmp r0, #6 + blt _02235678 + ldr r0, [sp, #8] + add r0, #0x18 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #5 + bge _02235774 + b _0223566C _02235774: - add sp, #0x44 - pop {r4, r5, r6, r7, pc} - thumb_func_end MOD83_02235648 + add sp, #0x44 + pop {r4, r5, r6, r7, pc} + thumb_func_end MOD83_02235648 - thumb_func_start MOD83_02235778 + thumb_func_start MOD83_02235778 MOD83_02235778: ; 0x02235778 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x30 - add r4, r2, #0 - mov r2, #0x61 - add r6, r0, #0 - lsl r2, r2, #2 - add r5, r1, #0 - add r7, r3, #0 - add r0, sp, #0 - add r1, r6, #0 - add r2, r6, r2 - mov r3, #1 - bl MOD83_02235244 - lsl r0, r5, #0xc - str r0, [sp, #8] - lsl r0, r4, #0xc - str r0, [sp, #0xc] - mov r0, #0xa - str r0, [sp, #0x24] - add r0, sp, #0 - bl FUN_0201FE94 - add r4, r0, #0 - mov r1, #1 - bl FUN_020200BC - add r0, r4, #0 - add r1, r7, #0 - bl FUN_02020130 - add r0, r4, #0 - mov r1, #1 - bl FUN_02020238 - ldr r1, [sp, #0x48] - add r0, r4, #0 - bl FUN_020200A0 - add r0, r4, #0 - add sp, #0x30 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_02235778 - - thumb_func_start MOD83_022357CC + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x30 + add r4, r2, #0 + mov r2, #0x61 + add r6, r0, #0 + lsl r2, r2, #2 + add r5, r1, #0 + add r7, r3, #0 + add r0, sp, #0 + add r1, r6, #0 + add r2, r6, r2 + mov r3, #1 + bl MOD83_02235244 + lsl r0, r5, #0xc + str r0, [sp, #8] + lsl r0, r4, #0xc + str r0, [sp, #0xc] + mov r0, #0xa + str r0, [sp, #0x24] + add r0, sp, #0 + bl FUN_0201FE94 + add r4, r0, #0 + mov r1, #1 + bl FUN_020200BC + add r0, r4, #0 + add r1, r7, #0 + bl FUN_02020130 + add r0, r4, #0 + mov r1, #1 + bl FUN_02020238 + ldr r1, [sp, #0x48] + add r0, r4, #0 + bl FUN_020200A0 + add r0, r4, #0 + add sp, #0x30 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_02235778 + + thumb_func_start MOD83_022357CC MOD83_022357CC: ; 0x022357CC - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0xe2 - lsl r0, r0, #2 - add r0, r6, r0 - mov r1, #0xe4 - mov r2, #0xb0 - mov r3, #0x32 - bl MOD83_022352D8 - mov r0, #1 - str r0, [sp] - add r0, r6, #0 - mov r1, #0xe4 - mov r2, #0xb0 - mov r3, #6 - bl MOD83_02235778 - mov r1, #0xe6 - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #8 - add r0, r6, r1 - mov r1, #0xb0 - mov r3, #0x20 - add r2, r1, #0 - str r3, [sp] - bl MOD83_022352D8 - mov r0, #1 - mov r1, #0xb0 - str r0, [sp] - add r0, r6, #0 - add r2, r1, #0 - mov r3, #3 - bl MOD83_02235778 - mov r1, #0xea - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #0x1c - mov r3, #0x20 - add r0, r6, r1 - mov r1, #0x18 - mov r2, #0xb0 - str r3, [sp] - bl MOD83_022352D8 - mov r0, #1 - str r0, [sp] - add r0, r6, #0 - mov r1, #0x18 - mov r2, #0xb0 - mov r3, #0 - bl MOD83_02235778 - mov r1, #0xee - lsl r1, r1, #2 - str r0, [r6, r1] - mov r7, #0 - mov r0, #0xff - sub r1, #0x24 - strb r0, [r6, r1] - add r4, r7, #0 - add r5, r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0xe2 + lsl r0, r0, #2 + add r0, r6, r0 + mov r1, #0xe4 + mov r2, #0xb0 + mov r3, #0x32 + bl MOD83_022352D8 + mov r0, #1 + str r0, [sp] + add r0, r6, #0 + mov r1, #0xe4 + mov r2, #0xb0 + mov r3, #6 + bl MOD83_02235778 + mov r1, #0xe6 + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #8 + add r0, r6, r1 + mov r1, #0xb0 + mov r3, #0x20 + add r2, r1, #0 + str r3, [sp] + bl MOD83_022352D8 + mov r0, #1 + mov r1, #0xb0 + str r0, [sp] + add r0, r6, #0 + add r2, r1, #0 + mov r3, #3 + bl MOD83_02235778 + mov r1, #0xea + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #0x1c + mov r3, #0x20 + add r0, r6, r1 + mov r1, #0x18 + mov r2, #0xb0 + str r3, [sp] + bl MOD83_022352D8 + mov r0, #1 + str r0, [sp] + add r0, r6, #0 + mov r1, #0x18 + mov r2, #0xb0 + mov r3, #0 + bl MOD83_02235778 + mov r1, #0xee + lsl r1, r1, #2 + str r0, [r6, r1] + mov r7, #0 + mov r0, #0xff + sub r1, #0x24 + strb r0, [r6, r1] + add r4, r7, #0 + add r5, r6, #0 _02235852: - mov r0, #0 - str r0, [sp] - add r0, r6, #0 - add r1, r4, #0 - mov r2, #0x40 - mov r3, #9 - bl MOD83_02235778 - mov r1, #0xf2 - lsl r1, r1, #2 - str r0, [r5, r1] - mov r1, #0 - mov r0, #0xf3 - mvn r1, r1 - lsl r0, r0, #2 - str r1, [r5, r0] - mov r1, #0xe - add r0, r0, #4 - str r1, [r5, r0] - add r7, r7, #1 - add r4, #0x24 - add r5, #0xc - cmp r7, #6 - blt _02235852 - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #4 - str r1, [r6, r0] - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022357CC - - thumb_func_start MOD83_0223588C + mov r0, #0 + str r0, [sp] + add r0, r6, #0 + add r1, r4, #0 + mov r2, #0x40 + mov r3, #9 + bl MOD83_02235778 + mov r1, #0xf2 + lsl r1, r1, #2 + str r0, [r5, r1] + mov r1, #0 + mov r0, #0xf3 + mvn r1, r1 + lsl r0, r0, #2 + str r1, [r5, r0] + mov r1, #0xe + add r0, r0, #4 + str r1, [r5, r0] + add r7, r7, #1 + add r4, #0x24 + add r5, #0xc + cmp r7, #6 + blt _02235852 + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #4 + str r1, [r6, r0] + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022357CC + + thumb_func_start MOD83_0223588C MOD83_0223588C: ; 0x0223588C - push {r3, lr} - ldr r3, _022358C0 ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0x41 - mov r2, #0 - bl AGB_GetBoxMonData - mov r1, #0x67 - lsl r1, r1, #2 - cmp r0, r1 - bne _022358BA - mov r0, #1 - pop {r3, pc} + push {r3, lr} + ldr r3, _022358C0 ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0x41 + mov r2, #0 + bl AGB_GetBoxMonData + mov r1, #0x67 + lsl r1, r1, #2 + cmp r0, r1 + bne _022358BA + mov r0, #1 + pop {r3, pc} _022358BA: - mov r0, #0 - pop {r3, pc} - nop + mov r0, #0 + pop {r3, pc} + nop _022358C0: .word 0x0000E880 - thumb_func_end MOD83_0223588C + thumb_func_end MOD83_0223588C - thumb_func_start MOD83_022358C4 + thumb_func_start MOD83_022358C4 MOD83_022358C4: ; 0x022358C4 - push {r3, r4, r5, r6, r7, lr} - ldr r3, _02235910 ; =0x0000E880 - mov r5, #0 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r4, r2, r0 - mov r0, #0x50 - add r6, r1, #0 - mul r6, r0 - add r7, r5, #0 + push {r3, r4, r5, r6, r7, lr} + ldr r3, _02235910 ; =0x0000E880 + mov r5, #0 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r4, r2, r0 + mov r0, #0x50 + add r6, r1, #0 + mul r6, r0 + add r7, r5, #0 _022358E2: - add r1, r5, #0 - add r0, r4, r6 - add r1, #0xd - add r2, r7, #0 - bl AGB_GetBoxMonData - ldr r3, _02235914 ; =MOD83_0223B2B8 - add r2, r0, #0 - mov r1, #0 + add r1, r5, #0 + add r0, r4, r6 + add r1, #0xd + add r2, r7, #0 + bl AGB_GetBoxMonData + ldr r3, _02235914 ; =MOD83_0223B2B8 + add r2, r0, #0 + mov r1, #0 _022358F4: - ldr r0, [r3] - cmp r2, r0 - bne _022358FE - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r3] + cmp r2, r0 + bne _022358FE + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022358FE: - add r1, r1, #1 - add r3, r3, #4 - cmp r1, #8 - blo _022358F4 - add r5, r5, #1 - cmp r5, #4 - blt _022358E2 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add r1, r1, #1 + add r3, r3, #4 + cmp r1, #8 + blo _022358F4 + add r5, r5, #1 + cmp r5, #4 + blt _022358E2 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02235910: .word 0x0000E880 _02235914: .word MOD83_0223B2B8 - thumb_func_end MOD83_022358C4 + thumb_func_end MOD83_022358C4 - thumb_func_start MOD83_02235918 + thumb_func_start MOD83_02235918 MOD83_02235918: ; 0x02235918 - push {r3, lr} - ldr r3, _0223595C ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - ldr r1, _02235960 ; =MOD83_InvalidItemIds - 0x30 - ldrh r1, [r1, #0x30] - cmp r1, #0 - beq _02235956 - ldr r2, _02235964 ; =MOD83_InvalidItemIds + push {r3, lr} + ldr r3, _0223595C ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + ldr r1, _02235960 ; =MOD83_InvalidItemIds - 0x30 + ldrh r1, [r1, #0x30] + cmp r1, #0 + beq _02235956 + ldr r2, _02235964 ; =MOD83_InvalidItemIds _02235944: - ldrh r1, [r2] - cmp r0, r1 - bne _0223594E - mov r0, #1 - pop {r3, pc} + ldrh r1, [r2] + cmp r0, r1 + bne _0223594E + mov r0, #1 + pop {r3, pc} _0223594E: - add r2, r2, #2 - ldrh r1, [r2] - cmp r1, #0 - bne _02235944 + add r2, r2, #2 + ldrh r1, [r2] + cmp r1, #0 + bne _02235944 _02235956: - mov r0, #0 - pop {r3, pc} - nop + mov r0, #0 + pop {r3, pc} + nop _0223595C: .word 0x0000E880 _02235960: .word MOD83_InvalidItemIds - 0x30 _02235964: .word MOD83_InvalidItemIds - thumb_func_end MOD83_02235918 + thumb_func_end MOD83_02235918 - thumb_func_start MOD83_02235968 + thumb_func_start MOD83_02235968 MOD83_02235968: ; 0x02235968 - push {r3, lr} - ldr r3, _02235990 ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_RS_SpeciesIsInvalid - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r3, _02235990 ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_RS_SpeciesIsInvalid + pop {r3, pc} + .align 2, 0 _02235990: .word 0x0000E880 - thumb_func_end MOD83_02235968 + thumb_func_end MOD83_02235968 - thumb_func_start MOD83_02235994 + thumb_func_start MOD83_02235994 MOD83_02235994: ; 0x02235994 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r4, r0, #0 - mov r0, #0x6a - lsl r0, r0, #2 - add r0, r4, r0 - str r0, [sp] - add r6, r1, #0 - mov r0, #0xc - mul r0, r6 - ldr r1, [sp] - str r0, [sp, #4] - ldr r0, [r1, r0] - cmp r0, #0 - beq _022359C0 - bl FUN_02020128 - cmp r0, #0 - bne _022359C0 - add sp, #0x14 - mov r0, #3 - pop {r4, r5, r6, r7, pc} + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r4, r0, #0 + mov r0, #0x6a + lsl r0, r0, #2 + add r0, r4, r0 + str r0, [sp] + add r6, r1, #0 + mov r0, #0xc + mul r0, r6 + ldr r1, [sp] + str r0, [sp, #4] + ldr r0, [r1, r0] + cmp r0, #0 + beq _022359C0 + bl FUN_02020128 + cmp r0, #0 + bne _022359C0 + add sp, #0x14 + mov r0, #3 + pop {r4, r5, r6, r7, pc} _022359C0: - mov r5, #0 - mov r7, #0x3d - mvn r5, r5 - mov r2, #0 - add r3, r4, #0 - lsl r7, r7, #4 - b _022359E8 + mov r5, #0 + mov r7, #0x3d + mvn r5, r5 + mov r2, #0 + add r3, r4, #0 + lsl r7, r7, #4 + b _022359E8 _022359CE: - ldr r0, _02235B1C ; =0x0000E884 - ldr r1, [r4, r0] - ldr r0, [r3, r7] - cmp r1, r0 - bne _022359E4 - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r0, [r3, r0] - cmp r6, r0 - bne _022359E4 - add r5, r2, #0 + ldr r0, _02235B1C ; =0x0000E884 + ldr r1, [r4, r0] + ldr r0, [r3, r7] + cmp r1, r0 + bne _022359E4 + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r0, [r3, r0] + cmp r6, r0 + bne _022359E4 + add r5, r2, #0 _022359E4: - add r3, #0xc - add r2, r2, #1 + add r3, #0xc + add r2, r2, #1 _022359E8: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - bne _022359F4 - cmp r2, #6 - blt _022359CE + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + bne _022359F4 + cmp r2, #6 + blt _022359CE _022359F4: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_0223588C - cmp r0, #1 - bne _02235A06 - add sp, #0x14 - mov r0, #4 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_0223588C + cmp r0, #1 + bne _02235A06 + add sp, #0x14 + mov r0, #4 + pop {r4, r5, r6, r7, pc} _02235A06: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_022358C4 - cmp r0, #1 - bne _02235A18 - add sp, #0x14 - mov r0, #5 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_022358C4 + cmp r0, #1 + bne _02235A18 + add sp, #0x14 + mov r0, #5 + pop {r4, r5, r6, r7, pc} _02235A18: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235918 - cmp r0, #1 - bne _02235A2A - add sp, #0x14 - mov r0, #6 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235918 + cmp r0, #1 + bne _02235A2A + add sp, #0x14 + mov r0, #6 + pop {r4, r5, r6, r7, pc} _02235A2A: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235968 - cmp r0, #1 - bne _02235A3C - add sp, #0x14 - mov r0, #7 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235968 + cmp r0, #1 + bne _02235A3C + add sp, #0x14 + mov r0, #7 + pop {r4, r5, r6, r7, pc} _02235A3C: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - bne _02235AE4 - mov r0, #0x41 - lsl r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #6 - bne _02235A54 - add sp, #0x14 - mov r0, #0 - pop {r4, r5, r6, r7, pc} + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + bne _02235AE4 + mov r0, #0x41 + lsl r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #6 + bne _02235A54 + add sp, #0x14 + mov r0, #0 + pop {r4, r5, r6, r7, pc} _02235A54: - mov r5, #0 - mov r0, #0xf3 - add r3, r4, #0 - lsl r0, r0, #2 - sub r1, r5, #1 + mov r5, #0 + mov r0, #0xf3 + add r3, r4, #0 + lsl r0, r0, #2 + sub r1, r5, #1 _02235A5E: - ldr r2, [r3, r0] - cmp r2, r1 - bne _02235ADA - ldr r1, [sp] - ldr r0, [sp, #4] - ldr r0, [r1, r0] - bl FUN_0202011C - add r1, r0, #0 - mov r0, #0xc - add r7, r5, #0 - mul r7, r0 - mov r0, #0xf2 - lsl r0, r0, #2 - add r5, r4, r0 - ldr r0, [r5, r7] - bl FUN_02020044 - ldr r0, [r5, r7] - bl FUN_0202011C - add r3, r0, #0 - add r2, sp, #8 - ldmia r3!, {r0, r1} - mov ip, r2 - stmia r2!, {r0, r1} - ldr r0, [r3] - mov r1, #2 - str r0, [r2] - ldr r0, [sp, #8] - lsl r1, r1, #0xe - sub r0, r0, r1 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - lsr r1, r1, #1 - sub r0, r0, r1 - str r0, [sp, #0xc] - ldr r0, [r5, r7] - mov r1, ip - bl FUN_02020044 - ldr r0, [r5, r7] - mov r1, #1 - bl FUN_020200A0 - mov r1, #0xf3 - add r3, r4, r7 - lsl r1, r1, #2 - ldr r0, _02235B1C ; =0x0000E884 - str r6, [r3, r1] - ldr r2, [r4, r0] - add r0, r1, #4 - str r2, [r3, r0] - add r0, r1, #0 - add r0, #0x44 - ldr r0, [r4, r0] - add r1, #0x44 - add r0, r0, #1 - str r0, [r4, r1] - add sp, #0x14 - mov r0, #1 - pop {r4, r5, r6, r7, pc} + ldr r2, [r3, r0] + cmp r2, r1 + bne _02235ADA + ldr r1, [sp] + ldr r0, [sp, #4] + ldr r0, [r1, r0] + bl FUN_0202011C + add r1, r0, #0 + mov r0, #0xc + add r7, r5, #0 + mul r7, r0 + mov r0, #0xf2 + lsl r0, r0, #2 + add r5, r4, r0 + ldr r0, [r5, r7] + bl FUN_02020044 + ldr r0, [r5, r7] + bl FUN_0202011C + add r3, r0, #0 + add r2, sp, #8 + ldmia r3!, {r0, r1} + mov ip, r2 + stmia r2!, {r0, r1} + ldr r0, [r3] + mov r1, #2 + str r0, [r2] + ldr r0, [sp, #8] + lsl r1, r1, #0xe + sub r0, r0, r1 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + lsr r1, r1, #1 + sub r0, r0, r1 + str r0, [sp, #0xc] + ldr r0, [r5, r7] + mov r1, ip + bl FUN_02020044 + ldr r0, [r5, r7] + mov r1, #1 + bl FUN_020200A0 + mov r1, #0xf3 + add r3, r4, r7 + lsl r1, r1, #2 + ldr r0, _02235B1C ; =0x0000E884 + str r6, [r3, r1] + ldr r2, [r4, r0] + add r0, r1, #4 + str r2, [r3, r0] + add r0, r1, #0 + add r0, #0x44 + ldr r0, [r4, r0] + add r1, #0x44 + add r0, r0, #1 + str r0, [r4, r1] + add sp, #0x14 + mov r0, #1 + pop {r4, r5, r6, r7, pc} _02235ADA: - add r5, r5, #1 - add r3, #0xc - cmp r5, #6 - blt _02235A5E - b _02235B16 + add r5, r5, #1 + add r3, #0xc + cmp r5, #6 + blt _02235A5E + b _02235B16 _02235AE4: - mov r0, #0xc - add r6, r5, #0 - mul r6, r0 - mov r0, #0xf2 - add r1, r4, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - mov r1, #0 - bl FUN_020200A0 - mov r2, #0 - mov r1, #0xf3 - mvn r2, r2 - add r0, r4, r6 - lsl r1, r1, #2 - str r2, [r0, r1] - add r0, r1, #0 - add r0, #0x44 - ldr r0, [r4, r0] - add r1, #0x44 - sub r0, r0, #1 - str r0, [r4, r1] - add sp, #0x14 - mov r0, #2 - pop {r4, r5, r6, r7, pc} + mov r0, #0xc + add r6, r5, #0 + mul r6, r0 + mov r0, #0xf2 + add r1, r4, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_020200A0 + mov r2, #0 + mov r1, #0xf3 + mvn r2, r2 + add r0, r4, r6 + lsl r1, r1, #2 + str r2, [r0, r1] + add r0, r1, #0 + add r0, #0x44 + ldr r0, [r4, r0] + add r1, #0x44 + sub r0, r0, #1 + str r0, [r4, r1] + add sp, #0x14 + mov r0, #2 + pop {r4, r5, r6, r7, pc} _02235B16: - mov r0, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02235B1C: .word 0x0000E884 - thumb_func_end MOD83_02235994 + thumb_func_end MOD83_02235994 - thumb_func_start MOD83_02235B20 + thumb_func_start MOD83_02235B20 MOD83_02235B20: ; 0x02235B20 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r4, #0 - add r5, r6, #0 - sub r7, r4, #1 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 + sub r7, r4, #1 _02235B2A: - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, r7 - beq _02235B50 - ldr r0, _02235B68 ; =0x0000E884 - ldr r1, [r6, r0] - mov r0, #0x3d - lsl r0, r0, #4 - ldr r0, [r5, r0] - cmp r1, r0 - bne _02235B50 - mov r0, #0xf2 - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200A0 - b _02235B5C + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, r7 + beq _02235B50 + ldr r0, _02235B68 ; =0x0000E884 + ldr r1, [r6, r0] + mov r0, #0x3d + lsl r0, r0, #4 + ldr r0, [r5, r0] + cmp r1, r0 + bne _02235B50 + mov r0, #0xf2 + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200A0 + b _02235B5C _02235B50: - mov r0, #0xf2 - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0 - bl FUN_020200A0 + mov r0, #0xf2 + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0 + bl FUN_020200A0 _02235B5C: - add r4, r4, #1 - add r5, #0xc - cmp r4, #6 - blt _02235B2A - pop {r3, r4, r5, r6, r7, pc} - nop + add r4, r4, #1 + add r5, #0xc + cmp r4, #6 + blt _02235B2A + pop {r3, r4, r5, r6, r7, pc} + nop _02235B68: .word 0x0000E884 - thumb_func_end MOD83_02235B20 + thumb_func_end MOD83_02235B20 - thumb_func_start MOD83_02235B6C + thumb_func_start MOD83_02235B6C MOD83_02235B6C: ; 0x02235B6C - push {r3, r4, r5, lr} - sub sp, #0x60 - add r5, r0, #0 - mov r0, #0 - add r4, r1, #0 - add r3, sp, #0x14 - add r1, r0, #0 - mov r2, #4 + push {r3, r4, r5, lr} + sub sp, #0x60 + add r5, r0, #0 + mov r0, #0 + add r4, r1, #0 + add r3, sp, #0x14 + add r1, r0, #0 + mov r2, #4 _02235B7C: - stmia r3!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235B7C - stmia r3!, {r0, r1} - str r0, [r3] - ldr r0, _02235BE4 ; =0x00000478 - add r0, r5, r0 - str r0, [sp, #0x14] - mov r0, #6 - str r0, [sp, #0x1c] - mov r0, #0x15 - str r0, [sp, #0x20] - mov r0, #0xd - str r0, [sp, #0x24] - mov r0, #2 - str r0, [sp, #0x28] - sub r0, r0, #3 - str r0, [sp, #0x48] - mov r0, #0 - str r0, [sp, #0x2c] - str r0, [sp, #0x30] - mov r0, #1 - str r0, [sp, #0x38] - str r0, [sp, #0x3c] - ldr r0, _02235BE8 ; =0x00010200 - str r0, [sp, #0x40] - mov r0, #0xa0 - str r0, [sp, #0x34] - bl MOD83_02236EA8 - add r3, r0, #0 - ldr r0, _02235BEC ; =0x0000E880 - mov r2, #9 - ldr r1, [r5, r0] - ldr r0, _02235BF0 ; =0x00008344 - add r1, r1, r0 - lsl r0, r4, #3 - add r0, r4, r0 - add r0, r1, r0 - add r1, sp, #0 - bl FUN_02015D88 - add r0, sp, #0 - str r0, [sp, #0x4c] - add r0, r5, #0 - add r1, sp, #0x14 - mov r2, #1 - bl MOD83_02234F2C - add sp, #0x60 - pop {r3, r4, r5, pc} - .align 2, 0 + stmia r3!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235B7C + stmia r3!, {r0, r1} + str r0, [r3] + ldr r0, _02235BE4 ; =0x00000478 + add r0, r5, r0 + str r0, [sp, #0x14] + mov r0, #6 + str r0, [sp, #0x1c] + mov r0, #0x15 + str r0, [sp, #0x20] + mov r0, #0xd + str r0, [sp, #0x24] + mov r0, #2 + str r0, [sp, #0x28] + sub r0, r0, #3 + str r0, [sp, #0x48] + mov r0, #0 + str r0, [sp, #0x2c] + str r0, [sp, #0x30] + mov r0, #1 + str r0, [sp, #0x38] + str r0, [sp, #0x3c] + ldr r0, _02235BE8 ; =0x00010200 + str r0, [sp, #0x40] + mov r0, #0xa0 + str r0, [sp, #0x34] + bl MOD83_02236EA8 + add r3, r0, #0 + ldr r0, _02235BEC ; =0x0000E880 + mov r2, #9 + ldr r1, [r5, r0] + ldr r0, _02235BF0 ; =0x00008344 + add r1, r1, r0 + lsl r0, r4, #3 + add r0, r4, r0 + add r0, r1, r0 + add r1, sp, #0 + bl FUN_02015D88 + add r0, sp, #0 + str r0, [sp, #0x4c] + add r0, r5, #0 + add r1, sp, #0x14 + mov r2, #1 + bl MOD83_02234F2C + add sp, #0x60 + pop {r3, r4, r5, pc} + .align 2, 0 _02235BE4: .word 0x00000478 _02235BE8: .word 0x00010200 _02235BEC: .word 0x0000E880 _02235BF0: .word 0x00008344 - thumb_func_end MOD83_02235B6C + thumb_func_end MOD83_02235B6C - thumb_func_start MOD83_02235BF4 + thumb_func_start MOD83_02235BF4 MOD83_02235BF4: ; 0x02235BF4 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, [r5, #0x20] - add r6, r1, #0 - mov r1, #2 - bl GetBgTilemapBuffer - add r4, r0, #0 - cmp r6, #0 - beq _02235C18 - add r0, r6, #0 - mov r1, #8 - mov r2, #0 - bl AGB_GetBoxMonData - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - b _02235C1A + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, [r5, #0x20] + add r6, r1, #0 + mov r1, #2 + bl GetBgTilemapBuffer + add r4, r0, #0 + cmp r6, #0 + beq _02235C18 + add r0, r6, #0 + mov r1, #8 + mov r2, #0 + bl AGB_GetBoxMonData + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + b _02235C1A _02235C18: - mov r1, #0 + mov r1, #0 _02235C1A: - mov r2, #0 - mov r0, #1 + mov r2, #0 + mov r0, #1 _02235C1E: - add r3, r1, #0 - tst r3, r0 - beq _02235C2A - add r6, r2, #0 - add r6, #0x80 - b _02235C2E + add r3, r1, #0 + tst r3, r0 + beq _02235C2A + add r6, r2, #0 + add r6, #0x80 + b _02235C2E _02235C2A: - add r6, r2, #0 - add r6, #0x60 + add r6, r2, #0 + add r6, #0x60 _02235C2E: - add r3, r4, #0 - add r3, #0xd6 - lsl r1, r1, #0x17 - add r2, r2, #1 - strh r6, [r3] - lsr r1, r1, #0x18 - add r4, r4, #2 - cmp r2, #4 - blt _02235C1E - ldr r0, [r5, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235BF4 - - thumb_func_start MOD83_02235C4C + add r3, r4, #0 + add r3, #0xd6 + lsl r1, r1, #0x17 + add r2, r2, #1 + strh r6, [r3] + lsr r1, r1, #0x18 + add r4, r4, #2 + cmp r2, #4 + blt _02235C1E + ldr r0, [r5, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235BF4 + + thumb_func_start MOD83_02235C4C MOD83_02235C4C: ; 0x02235C4C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x78 - add r5, r0, #0 - mov r0, #0 - add r4, r1, #0 - add r3, sp, #0x2c - add r1, r0, #0 - mov r2, #4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x78 + add r5, r0, #0 + mov r0, #0 + add r4, r1, #0 + add r3, sp, #0x2c + add r1, r0, #0 + mov r2, #4 _02235C5C: - stmia r3!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235C5C - stmia r3!, {r0, r1} - str r0, [r3] - mov r1, #0x20 - str r1, [sp, #0x3c] - mov r1, #1 - ldr r0, _02235DF8 ; =0x00000488 - str r1, [sp, #0x50] - str r1, [sp, #0x54] - mov r1, #0xbc - str r1, [sp, #0x4c] - ldr r1, _02235DFC ; =0x000F0200 - add r0, r5, r0 - str r1, [sp, #0x58] - mov r1, #0x2c - str r0, [sp, #0x2c] - mov r0, #0 - str r1, [sp, #0x60] - mov r1, #0x90 - mov r2, #4 - str r1, [sp, #0x44] - str r0, [sp, #0x34] - str r0, [sp, #0x38] - str r0, [sp, #0x64] - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - str r2, [sp, #0x40] - bl MOD83_02234F2C - mov r0, #0x2b - str r0, [sp, #0x60] - mov r0, #0x50 - str r0, [sp, #0x44] - mov r0, #8 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - bl MOD83_02234F2C - add r0, r5, #0 - add r1, r4, #0 - bl MOD83_02235BF4 - cmp r4, #0 - bne _02235CCA - ldr r0, [sp, #0x2c] - bl CopyWindowToVram - add sp, #0x78 - pop {r3, r4, r5, r6, r7, pc} + stmia r3!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235C5C + stmia r3!, {r0, r1} + str r0, [r3] + mov r1, #0x20 + str r1, [sp, #0x3c] + mov r1, #1 + ldr r0, _02235DF8 ; =0x00000488 + str r1, [sp, #0x50] + str r1, [sp, #0x54] + mov r1, #0xbc + str r1, [sp, #0x4c] + ldr r1, _02235DFC ; =0x000F0200 + add r0, r5, r0 + str r1, [sp, #0x58] + mov r1, #0x2c + str r0, [sp, #0x2c] + mov r0, #0 + str r1, [sp, #0x60] + mov r1, #0x90 + mov r2, #4 + str r1, [sp, #0x44] + str r0, [sp, #0x34] + str r0, [sp, #0x38] + str r0, [sp, #0x64] + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + str r2, [sp, #0x40] + bl MOD83_02234F2C + mov r0, #0x2b + str r0, [sp, #0x60] + mov r0, #0x50 + str r0, [sp, #0x44] + mov r0, #8 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + bl MOD83_02234F2C + add r0, r5, #0 + add r1, r4, #0 + bl MOD83_02235BF4 + cmp r4, #0 + bne _02235CCA + ldr r0, [sp, #0x2c] + bl CopyWindowToVram + add sp, #0x78 + pop {r3, r4, r5, r6, r7, pc} _02235CCA: - add r2, sp, #0x1c - add r0, r4, #0 - mov r1, #2 - add r2, #2 - bl AGB_GetBoxMonData - add r0, r4, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - add r3, r0, #0 - add r0, sp, #0x1c - add r0, #2 - add r1, sp, #8 - mov r2, #0xb - bl FUN_02015D88 - add r0, sp, #8 - str r0, [sp, #0x64] - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #8 - str r0, [sp, #0x44] - mov r0, #0 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - bl MOD83_02234F2C - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - add r6, r0, #0 - ldr r2, _02235E00 ; =0x0000016A - mov r0, #1 - mov r1, #0x1a - mov r3, #0x4e - bl NewMsgDataFromNarc - add r7, r0, #0 - add r0, r4, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_TranslateAgbSpecies - str r0, [sp, #4] - ldr r1, [sp, #4] - add r0, r7, #0 - add r2, r6, #0 - bl ReadMsgDataIntoString - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x10 - str r0, [sp, #0x44] - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - str r6, [sp, #0x68] - bl MOD83_02234F2C - add r0, r7, #0 - bl DestroyMsgData - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _02235DAC - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl UpConvertItemId_Gen3to4 - add r7, r0, #0 - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - lsl r1, r7, #0x10 - lsr r1, r1, #0x10 - mov r2, #0x4e - add r6, r0, #0 - bl GetItemNameIntoString - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x98 - str r0, [sp, #0x44] - mov r0, #0x10 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - str r6, [sp, #0x68] - bl MOD83_02234F2C - add r0, r6, #0 - bl String_dtor + add r2, sp, #0x1c + add r0, r4, #0 + mov r1, #2 + add r2, #2 + bl AGB_GetBoxMonData + add r0, r4, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + add r3, r0, #0 + add r0, sp, #0x1c + add r0, #2 + add r1, sp, #8 + mov r2, #0xb + bl FUN_02015D88 + add r0, sp, #8 + str r0, [sp, #0x64] + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #8 + str r0, [sp, #0x44] + mov r0, #0 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + bl MOD83_02234F2C + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + add r6, r0, #0 + ldr r2, _02235E00 ; =0x0000016A + mov r0, #1 + mov r1, #0x1a + mov r3, #0x4e + bl NewMsgDataFromNarc + add r7, r0, #0 + add r0, r4, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_TranslateAgbSpecies + str r0, [sp, #4] + ldr r1, [sp, #4] + add r0, r7, #0 + add r2, r6, #0 + bl ReadMsgDataIntoString + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x10 + str r0, [sp, #0x44] + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + str r6, [sp, #0x68] + bl MOD83_02234F2C + add r0, r7, #0 + bl DestroyMsgData + add r0, r6, #0 + bl String_dtor + add r0, r4, #0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _02235DAC + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl UpConvertItemId_Gen3to4 + add r7, r0, #0 + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + lsl r1, r7, #0x10 + lsr r1, r1, #0x10 + mov r2, #0x4e + add r6, r0, #0 + bl GetItemNameIntoString + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x98 + str r0, [sp, #0x44] + mov r0, #0x10 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + str r6, [sp, #0x68] + bl MOD83_02234F2C + add r0, r6, #0 + bl String_dtor _02235DAC: - add r0, r4, #0 - bl MOD83_02237EDC - add r6, r0, #0 - mov r0, #0xa - mov r1, #0x4e - bl String_ctor - mov r3, #1 - add r1, r6, #0 - mov r2, #3 - add r4, r0, #0 - str r3, [sp] - bl String16_FormatInteger - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x64 - str r0, [sp, #0x44] - mov r0, #8 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #2 - str r4, [sp, #0x68] - bl MOD83_02234F2C - add r0, r4, #0 - bl String_dtor - ldr r0, [sp, #4] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02005578 - add sp, #0x78 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add r0, r4, #0 + bl MOD83_02237EDC + add r6, r0, #0 + mov r0, #0xa + mov r1, #0x4e + bl String_ctor + mov r3, #1 + add r1, r6, #0 + mov r2, #3 + add r4, r0, #0 + str r3, [sp] + bl String16_FormatInteger + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x64 + str r0, [sp, #0x44] + mov r0, #8 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #2 + str r4, [sp, #0x68] + bl MOD83_02234F2C + add r0, r4, #0 + bl String_dtor + ldr r0, [sp, #4] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02005578 + add sp, #0x78 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02235DF8: .word 0x00000488 _02235DFC: .word 0x000F0200 _02235E00: .word 0x0000016A - thumb_func_end MOD83_02235C4C + thumb_func_end MOD83_02235C4C - thumb_func_start MOD83_02235E04 + thumb_func_start MOD83_02235E04 MOD83_02235E04: ; 0x02235E04 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x4e - str r0, [sp, #8] - add r6, r2, #0 - mov r0, #0 - add r4, r3, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02235E2C - mov r0, #0x17 - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x4e + str r0, [sp, #8] + add r6, r2, #0 + mov r0, #0 + add r4, r3, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02235E2C + mov r0, #0x17 + str r0, [r4] _02235E2C: - str r6, [r5, #0x24] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235E04 + str r6, [r5, #0x24] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235E04 - thumb_func_start MOD83_02235E34 + thumb_func_start MOD83_02235E34 MOD83_02235E34: ; 0x02235E34 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - add r4, r3, #0 - str r0, [sp, #4] - mov r0, #0x4e - add r6, r2, #0 - str r0, [sp, #8] - ldr r3, _02235E64 ; =0x00007FFF - mov r0, #0 - add r2, r1, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02235E5C - mov r0, #0x17 - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + add r4, r3, #0 + str r0, [sp, #4] + mov r0, #0x4e + add r6, r2, #0 + str r0, [sp, #8] + ldr r3, _02235E64 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02235E5C + mov r0, #0x17 + str r0, [r4] _02235E5C: - str r6, [r5, #0x24] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - nop + str r6, [r5, #0x24] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + nop _02235E64: .word 0x00007FFF - thumb_func_end MOD83_02235E34 + thumb_func_end MOD83_02235E34 - thumb_func_start MOD83_02235E68 + thumb_func_start MOD83_02235E68 MOD83_02235E68: ; 0x02235E68 - push {r3, r4, r5, lr} - sub sp, #0x80 - ldr r5, _02235F28 ; =MOD83_0223A51C - add r3, sp, #0x70 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - ldr r5, _02235F2C ; =MOD83_0223A52C - add r3, sp, #0x54 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - add r0, r4, #0 - add r3, r1, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F30 ; =MOD83_0223A548 - add r3, sp, #0x38 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #1 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F34 ; =MOD83_0223A564 - add r3, sp, #0x1c - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #2 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #2 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F38 ; =MOD83_0223A580 - add r3, sp, #0 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #3 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #3 - bl BgClearTilemapBufferAndCommit - add sp, #0x80 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x80 + ldr r5, _02235F28 ; =MOD83_0223A51C + add r3, sp, #0x70 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + ldr r5, _02235F2C ; =MOD83_0223A52C + add r3, sp, #0x54 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #0 + str r0, [r3] + add r0, r4, #0 + add r3, r1, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F30 ; =MOD83_0223A548 + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F34 ; =MOD83_0223A564 + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #2 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F38 ; =MOD83_0223A580 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #3 + bl BgClearTilemapBufferAndCommit + add sp, #0x80 + pop {r3, r4, r5, pc} + nop _02235F28: .word MOD83_0223A51C _02235F2C: .word MOD83_0223A52C _02235F30: .word MOD83_0223A548 _02235F34: .word MOD83_0223A564 _02235F38: .word MOD83_0223A580 - thumb_func_end MOD83_02235E68 + thumb_func_end MOD83_02235E68 - thumb_func_start MOD83_02235F3C + thumb_func_start MOD83_02235F3C MOD83_02235F3C: ; 0x02235F3C - push {r3, r4, r5, lr} - sub sp, #0x38 - ldr r5, _02235FB4 ; =MOD83_0223A59C - add r4, r0, #0 - add r3, sp, #0x10 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x38 + ldr r5, _02235FB4 ; =MOD83_0223A59C + add r4, r0, #0 + add r3, sp, #0x10 + mov r2, #5 _02235F48: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235F48 - add r0, sp, #0x10 - bl GX_SetBanks - ldr r0, [r4, #0x20] - bl MOD83_02235E68 - ldr r0, _02235FB8 ; =gMain + 0x60 - mov r1, #1 - strb r1, [r0, #5] - bl GX_SwapDisplay - bl FUN_0201BD5C - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x4e - bl FUN_02002ED0 - mov r0, #0xc0 - str r0, [sp] - mov r0, #0x4e - mov r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x13 - add r3, r2, #0 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r4, #0x20] - mov r0, #0x74 - mov r1, #0x16 - mov r3, #2 - bl GfGfxLoader_LoadCharData - mov r0, #2 - mov r1, #0x4e - bl FUN_02002C50 - add sp, #0x38 - pop {r3, r4, r5, pc} - .align 2, 0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235F48 + add r0, sp, #0x10 + bl GX_SetBanks + ldr r0, [r4, #0x20] + bl MOD83_02235E68 + ldr r0, _02235FB8 ; =gMain + 0x60 + mov r1, #1 + strb r1, [r0, #5] + bl GX_SwapDisplay + bl FUN_0201BD5C + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x4e + bl FUN_02002ED0 + mov r0, #0xc0 + str r0, [sp] + mov r0, #0x4e + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x13 + add r3, r2, #0 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r4, #0x20] + mov r0, #0x74 + mov r1, #0x16 + mov r3, #2 + bl GfGfxLoader_LoadCharData + mov r0, #2 + mov r1, #0x4e + bl FUN_02002C50 + add sp, #0x38 + pop {r3, r4, r5, pc} + .align 2, 0 _02235FB4: .word MOD83_0223A59C _02235FB8: .word gMain + 0x60 - thumb_func_end MOD83_02235F3C + thumb_func_end MOD83_02235F3C - thumb_func_start MOD83_02235FBC + thumb_func_start MOD83_02235FBC MOD83_02235FBC: ; 0x02235FBC - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r4, #0x20] - mov r0, #0x74 - mov r1, #0x14 - mov r3, #2 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r2, #0 - ldr r1, [r4] - ldr r0, _02236008 ; =MOD83_0223B280 - add r3, r2, #0 - ldrb r0, [r0, r1] - mov r1, #2 - str r0, [sp, #8] - ldr r0, [r4, #0x20] - bl BgTilemapRectChangePalette - ldr r0, [r4, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r4, #0x20] + mov r0, #0x74 + mov r1, #0x14 + mov r3, #2 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r2, #0 + ldr r1, [r4] + ldr r0, _02236008 ; =MOD83_0223B280 + add r3, r2, #0 + ldrb r0, [r0, r1] + mov r1, #2 + str r0, [sp, #8] + ldr r0, [r4, #0x20] + bl BgTilemapRectChangePalette + ldr r0, [r4, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _02236008: .word MOD83_0223B280 - thumb_func_end MOD83_02235FBC + thumb_func_end MOD83_02235FBC - thumb_func_start MOD83_0223600C + thumb_func_start MOD83_0223600C MOD83_0223600C: ; 0x0223600C - push {r4, lr} - sub sp, #8 - mov r1, #7 - add r4, r0, #0 - mov r0, #0 - lsl r1, r1, #6 - mov r2, #0x4e - bl FUN_02002ED0 - mov r1, #0 - mov r2, #0x3f - str r1, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r4, #0x20] - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, [r4, #0x1c] - ldr r2, _022360B4 ; =0x000003D2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r4, #0x20] - mov r1, #0 - mov r3, #0xd - bl FUN_0200CD68 - ldr r0, _022360B8 ; =0x0000042C - mov r1, #0 - add r0, r4, r0 - mov r2, #0x4c - bl memset - ldr r0, _022360BC ; =0x00000498 - mov r3, #0x1b - add r1, r0, #0 - add r2, r4, r0 - sub r1, #0x6c - str r2, [r4, r1] - add r1, r0, #0 - mov r2, #2 - sub r1, #0x64 - str r2, [r4, r1] - add r1, r0, #0 - mov r2, #1 - sub r1, #0x60 - str r2, [r4, r1] - add r1, r0, #0 - sub r1, #0x5c - str r3, [r4, r1] - add r1, r0, #0 - mov r3, #4 - sub r1, #0x58 - str r3, [r4, r1] - add r3, r0, #0 - mov r1, #0 - sub r3, #0x48 - str r1, [r4, r3] - add r3, r0, #0 - sub r3, #0x44 - str r2, [r4, r3] - add r3, r0, #0 - sub r3, #0x4c - str r2, [r4, r3] - add r2, r0, #0 - ldr r3, _022360C0 ; =0x0001020F - sub r2, #0x40 - str r3, [r4, r2] - add r2, r0, #0 - ldr r3, _022360C4 ; =0x000F020F - sub r2, #0x3c - str r3, [r4, r2] - add r2, r0, #0 - sub r2, #0x34 - str r1, [r4, r2] - sub r0, #0x30 - str r1, [r4, r0] - add sp, #8 - pop {r4, pc} - nop + push {r4, lr} + sub sp, #8 + mov r1, #7 + add r4, r0, #0 + mov r0, #0 + lsl r1, r1, #6 + mov r2, #0x4e + bl FUN_02002ED0 + mov r1, #0 + mov r2, #0x3f + str r1, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r4, #0x20] + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, [r4, #0x1c] + ldr r2, _022360B4 ; =0x000003D2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r4, #0x20] + mov r1, #0 + mov r3, #0xd + bl FUN_0200CD68 + ldr r0, _022360B8 ; =0x0000042C + mov r1, #0 + add r0, r4, r0 + mov r2, #0x4c + bl memset + ldr r0, _022360BC ; =0x00000498 + mov r3, #0x1b + add r1, r0, #0 + add r2, r4, r0 + sub r1, #0x6c + str r2, [r4, r1] + add r1, r0, #0 + mov r2, #2 + sub r1, #0x64 + str r2, [r4, r1] + add r1, r0, #0 + mov r2, #1 + sub r1, #0x60 + str r2, [r4, r1] + add r1, r0, #0 + sub r1, #0x5c + str r3, [r4, r1] + add r1, r0, #0 + mov r3, #4 + sub r1, #0x58 + str r3, [r4, r1] + add r3, r0, #0 + mov r1, #0 + sub r3, #0x48 + str r1, [r4, r3] + add r3, r0, #0 + sub r3, #0x44 + str r2, [r4, r3] + add r3, r0, #0 + sub r3, #0x4c + str r2, [r4, r3] + add r2, r0, #0 + ldr r3, _022360C0 ; =0x0001020F + sub r2, #0x40 + str r3, [r4, r2] + add r2, r0, #0 + ldr r3, _022360C4 ; =0x000F020F + sub r2, #0x3c + str r3, [r4, r2] + add r2, r0, #0 + sub r2, #0x34 + str r1, [r4, r2] + sub r0, #0x30 + str r1, [r4, r0] + add sp, #8 + pop {r4, pc} + nop _022360B4: .word 0x000003D2 _022360B8: .word 0x0000042C _022360BC: .word 0x00000498 _022360C0: .word 0x0001020F _022360C4: .word 0x000F020F - thumb_func_end MOD83_0223600C + thumb_func_end MOD83_0223600C - thumb_func_start MOD83_022360C8 + thumb_func_start MOD83_022360C8 MOD83_022360C8: ; 0x022360C8 - push {r4, r5, r6, r7, lr} - sub sp, #0x4c - add r6, r0, #0 - mov r7, #0x6b - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x4c + add r6, r0, #0 + mov r7, #0x6b + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022360D6: - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - ldr r0, [r4, r7] - mov r1, #0 - bl FUN_020200A0 - add r5, r5, #1 - add r4, #0xc - cmp r5, #0x1e - blt _022360D6 - mov r7, #0xf2 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [r4, r7] + mov r1, #0 + bl FUN_020200A0 + add r5, r5, #1 + add r4, #0xc + cmp r5, #0x1e + blt _022360D6 + mov r7, #0xf2 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022360FA: - ldr r0, [r4, r7] - mov r1, #0 - bl FUN_020200A0 - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _022360FA - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r2, #0x61 - lsl r2, r2, #2 - add r0, sp, #0x1c - add r1, r6, #0 - add r2, r6, r2 - mov r3, #1 - bl MOD83_02235244 - mov r0, #0x1c - mov r7, #0 - str r0, [sp, #0x10] - add r4, r6, #0 - add r5, r6, #0 + ldr r0, [r4, r7] + mov r1, #0 + bl FUN_020200A0 + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _022360FA + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r2, #0x61 + lsl r2, r2, #2 + add r0, sp, #0x1c + add r1, r6, #0 + add r2, r6, r2 + mov r3, #1 + bl MOD83_02235244 + mov r0, #0x1c + mov r7, #0 + str r0, [sp, #0x10] + add r4, r6, #0 + add r5, r6, #0 _02236148: - ldr r0, [sp, #0x10] - lsl r0, r0, #0xc - str r0, [sp, #0x24] - mov r0, #0x8e - lsl r0, r0, #0xc - str r0, [sp, #0x28] - add r0, sp, #0x1c - bl FUN_0201FE94 - ldr r1, _02236288 ; =0x00000414 - str r0, [r4, r1] - add r0, r1, #0 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200BC - ldr r0, _02236288 ; =0x00000414 - add r1, r7, #0 - ldr r0, [r4, r0] - add r1, #0xa - bl FUN_02020130 - ldr r0, _02236288 ; =0x00000414 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_02020238 - ldr r0, _02236288 ; =0x00000414 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_020200A0 - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_0223526C - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - str r0, [sp, #0x14] - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_02235290 - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - str r0, [sp, #0x18] - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_022352B4 - add r2, r0, #0 - ldr r0, _02236288 ; =0x00000414 - str r7, [sp] - ldr r0, [r4, r0] - ldr r3, _0223628C ; =gMain + 0x60 - str r0, [sp, #4] - ldrb r3, [r3, #6] - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x18] - bl MOD83_022353C0 - ldr r0, [sp, #0x10] - add r7, r7, #1 - add r0, #0x28 - str r0, [sp, #0x10] - add r4, r4, #4 - add r5, #0xc - cmp r7, #6 - blt _02236148 - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r6, #0x20] - mov r0, #0x74 - mov r1, #0x15 - mov r3, #2 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r2, #0 - ldr r1, [r6] - ldr r0, _02236290 ; =MOD83_0223B280 - add r3, r2, #0 - ldrb r0, [r0, r1] - mov r1, #2 - str r0, [sp, #8] - ldr r0, [r6, #0x20] - bl BgTilemapRectChangePalette - ldr r0, [r6, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - mov r0, #2 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r1, #7 - mov r0, #0 - lsl r1, r1, #6 - mov r2, #0x4e - bl FUN_02002ED0 - mov r1, #0 - mov r2, #0x3f - str r1, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r6, #0x20] - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, [r6, #0x1c] - ldr r2, _02236294 ; =0x000003D2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r6, #0x20] - mov r1, #0 - mov r3, #0xd - bl FUN_0200CD68 - add r0, r6, #0 - bl MOD83_0223600C - mov r1, #0x46 - mov r0, #0xa - lsl r1, r1, #4 - str r0, [r6, r1] - sub r1, #0x34 - add r0, r6, #0 - add r1, r6, r1 - mov r2, #0x18 - bl MOD83_02234F2C - add sp, #0x4c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp, #0x10] + lsl r0, r0, #0xc + str r0, [sp, #0x24] + mov r0, #0x8e + lsl r0, r0, #0xc + str r0, [sp, #0x28] + add r0, sp, #0x1c + bl FUN_0201FE94 + ldr r1, _02236288 ; =0x00000414 + str r0, [r4, r1] + add r0, r1, #0 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200BC + ldr r0, _02236288 ; =0x00000414 + add r1, r7, #0 + ldr r0, [r4, r0] + add r1, #0xa + bl FUN_02020130 + ldr r0, _02236288 ; =0x00000414 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_02020238 + ldr r0, _02236288 ; =0x00000414 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_020200A0 + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_0223526C + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + str r0, [sp, #0x14] + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_02235290 + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + str r0, [sp, #0x18] + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_022352B4 + add r2, r0, #0 + ldr r0, _02236288 ; =0x00000414 + str r7, [sp] + ldr r0, [r4, r0] + ldr r3, _0223628C ; =gMain + 0x60 + str r0, [sp, #4] + ldrb r3, [r3, #6] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] + bl MOD83_022353C0 + ldr r0, [sp, #0x10] + add r7, r7, #1 + add r0, #0x28 + str r0, [sp, #0x10] + add r4, r4, #4 + add r5, #0xc + cmp r7, #6 + blt _02236148 + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r6, #0x20] + mov r0, #0x74 + mov r1, #0x15 + mov r3, #2 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r2, #0 + ldr r1, [r6] + ldr r0, _02236290 ; =MOD83_0223B280 + add r3, r2, #0 + ldrb r0, [r0, r1] + mov r1, #2 + str r0, [sp, #8] + ldr r0, [r6, #0x20] + bl BgTilemapRectChangePalette + ldr r0, [r6, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + mov r0, #2 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r1, #7 + mov r0, #0 + lsl r1, r1, #6 + mov r2, #0x4e + bl FUN_02002ED0 + mov r1, #0 + mov r2, #0x3f + str r1, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r6, #0x20] + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, [r6, #0x1c] + ldr r2, _02236294 ; =0x000003D2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r6, #0x20] + mov r1, #0 + mov r3, #0xd + bl FUN_0200CD68 + add r0, r6, #0 + bl MOD83_0223600C + mov r1, #0x46 + mov r0, #0xa + lsl r1, r1, #4 + str r0, [r6, r1] + sub r1, #0x34 + add r0, r6, #0 + add r1, r6, r1 + mov r2, #0x18 + bl MOD83_02234F2C + add sp, #0x4c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02236288: .word 0x00000414 _0223628C: .word gMain + 0x60 _02236290: .word MOD83_0223B280 _02236294: .word 0x000003D2 - thumb_func_end MOD83_022360C8 + thumb_func_end MOD83_022360C8 - thumb_func_start MOD83_02236298 + thumb_func_start MOD83_02236298 MOD83_02236298: ; 0x02236298 - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4] - cmp r1, #0 - beq _022362B4 - mov r1, #0 - bl FUN_0200D0E0 - add r0, r4, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - bl RemoveWindow + push {r4, lr} + add r4, r0, #0 + ldr r1, [r4] + cmp r1, #0 + beq _022362B4 + mov r1, #0 + bl FUN_0200D0E0 + add r0, r4, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + bl RemoveWindow _022362B4: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02236298 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02236298 - thumb_func_start MOD83_022362B8 + thumb_func_start MOD83_022362B8 MOD83_022362B8: ; 0x022362B8 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - ldr r7, _02236328 ; =0x00000414 - mov r4, #0 - add r5, r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + ldr r7, _02236328 ; =0x00000414 + mov r4, #0 + add r5, r6, #0 _022362C2: - ldr r0, [r5, r7] - bl FUN_0201FFC8 - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _022362C2 - mov r0, #2 - mov r1, #1 - bl GX_EngineAToggleLayers - ldr r0, _0223632C ; =0x00000498 - add r0, r6, r0 - bl MOD83_02236298 - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xf3 - mov r5, #0 - lsl r0, r0, #2 - add r4, r6, #0 - sub r3, r5, #1 - mov r2, #0xe - add r1, r0, #4 + ldr r0, [r5, r7] + bl FUN_0201FFC8 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _022362C2 + mov r0, #2 + mov r1, #1 + bl GX_EngineAToggleLayers + ldr r0, _0223632C ; =0x00000498 + add r0, r6, r0 + bl MOD83_02236298 + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xf3 + mov r5, #0 + lsl r0, r0, #2 + add r4, r6, #0 + sub r3, r5, #1 + mov r2, #0xe + add r1, r0, #4 _02236312: - str r3, [r4, r0] - str r2, [r4, r1] - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _02236312 - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #4 - str r1, [r6, r0] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r3, [r4, r0] + str r2, [r4, r1] + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _02236312 + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #4 + str r1, [r6, r0] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02236328: .word 0x00000414 _0223632C: .word 0x00000498 - thumb_func_end MOD83_022362B8 + thumb_func_end MOD83_022362B8 - thumb_func_start MOD83_02236330 + thumb_func_start MOD83_02236330 MOD83_02236330: ; 0x02236330 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - mov r7, #0x6a - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + mov r7, #0x6a + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02236344: - ldr r0, [r5, r7] - cmp r0, #0 - beq _0223634E - bl FUN_0201FFC8 + ldr r0, [r5, r7] + cmp r0, #0 + beq _0223634E + bl FUN_0201FFC8 _0223634E: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - beq _0223635C - bl FUN_0201FFC8 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + beq _0223635C + bl FUN_0201FFC8 _0223635C: - add r4, r4, #1 - add r5, #0xc - cmp r4, #0x1e - blt _02236344 - mov r7, #0xf2 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + add r4, r4, #1 + add r5, #0xc + cmp r4, #0x1e + blt _02236344 + mov r7, #0xf2 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _0223636C: - ldr r0, [r4, r7] - cmp r0, #0 - beq _02236376 - bl FUN_0201FFC8 + ldr r0, [r4, r7] + cmp r0, #0 + beq _02236376 + bl FUN_0201FFC8 _02236376: - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _0223636C - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _0223638C - bl FUN_0201FFC8 + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _0223636C + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _0223638C + bl FUN_0201FFC8 _0223638C: - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _0223639A - bl FUN_0201FFC8 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _0223639A + bl FUN_0201FFC8 _0223639A: - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _022363A8 - bl FUN_0201FFC8 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _022363A8 + bl FUN_0201FFC8 _022363A8: - ldr r0, _0223643C ; =0x00000478 - add r0, r6, r0 - bl MOD83_02236298 - ldr r0, _02236440 ; =0x00000488 - add r0, r6, r0 - bl MOD83_02236298 - ldr r0, _02236444 ; =0x00000498 - add r0, r6, r0 - bl MOD83_02236298 - mov r0, #2 - bl FUN_02002CF8 - mov r0, #0x5b - lsl r0, r0, #2 - ldr r0, [r6, r0] - bl FUN_02009C0C - mov r0, #0x17 - lsl r0, r0, #4 - ldr r0, [r6, r0] - bl FUN_02009E04 - mov r7, #0x55 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + ldr r0, _0223643C ; =0x00000478 + add r0, r6, r0 + bl MOD83_02236298 + ldr r0, _02236440 ; =0x00000488 + add r0, r6, r0 + bl MOD83_02236298 + ldr r0, _02236444 ; =0x00000498 + add r0, r6, r0 + bl MOD83_02236298 + mov r0, #2 + bl FUN_02002CF8 + mov r0, #0x5b + lsl r0, r0, #2 + ldr r0, [r6, r0] + bl FUN_02009C0C + mov r0, #0x17 + lsl r0, r0, #4 + ldr r0, [r6, r0] + bl FUN_02009E04 + mov r7, #0x55 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022363E2: - ldr r0, [r4, r7] - bl FUN_02008E2C - add r5, r5, #1 - add r4, r4, #4 - cmp r5, #6 - blt _022363E2 - ldr r0, [r6, #0x28] - bl FUN_0201FD58 - mov r0, #0 - str r0, [r6, #0x28] - bl FUN_02009FA0 - bl FUN_0201D12C - bl FUN_0201E08C - ldr r0, _02236448 ; =0x0000E88C - ldr r0, [r6, r0] - bl FUN_020145A8 - ldr r0, _0223644C ; =gMain + 0x60 - mov r1, #0 - strb r1, [r0, #5] - bl GX_SwapDisplay - ldr r0, [r6, #0x20] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #2 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #3 - bl FreeBgTilemapBuffer - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, [r4, r7] + bl FUN_02008E2C + add r5, r5, #1 + add r4, r4, #4 + cmp r5, #6 + blt _022363E2 + ldr r0, [r6, #0x28] + bl FUN_0201FD58 + mov r0, #0 + str r0, [r6, #0x28] + bl FUN_02009FA0 + bl FUN_0201D12C + bl FUN_0201E08C + ldr r0, _02236448 ; =0x0000E88C + ldr r0, [r6, r0] + bl FUN_020145A8 + ldr r0, _0223644C ; =gMain + 0x60 + mov r1, #0 + strb r1, [r0, #5] + bl GX_SwapDisplay + ldr r0, [r6, #0x20] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #2 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #3 + bl FreeBgTilemapBuffer + pop {r3, r4, r5, r6, r7, pc} + nop _0223643C: .word 0x00000478 _02236440: .word 0x00000488 _02236444: .word 0x00000498 _02236448: .word 0x0000E88C _0223644C: .word gMain + 0x60 - thumb_func_end MOD83_02236330 + thumb_func_end MOD83_02236330 - thumb_func_start MOD83_02236450 + thumb_func_start MOD83_02236450 MOD83_02236450: ; 0x02236450 - push {lr} - sub sp, #0x14 - ldr r1, [r0, #0x20] - mov r2, #0x19 - str r1, [sp] - mov r1, #0 - str r1, [sp, #4] - mov r1, #2 - lsl r1, r1, #8 - str r1, [sp, #8] - mov r1, #8 - str r1, [sp, #0xc] - add r1, sp, #0 - strb r2, [r1, #0x10] - mov r2, #7 - strb r2, [r1, #0x11] - ldr r1, _02236480 ; =0x0000E88C - ldr r0, [r0, r1] - add r1, sp, #0 - bl FUN_020145C8 - add sp, #0x14 - pop {pc} - nop + push {lr} + sub sp, #0x14 + ldr r1, [r0, #0x20] + mov r2, #0x19 + str r1, [sp] + mov r1, #0 + str r1, [sp, #4] + mov r1, #2 + lsl r1, r1, #8 + str r1, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + add r1, sp, #0 + strb r2, [r1, #0x10] + mov r2, #7 + strb r2, [r1, #0x11] + ldr r1, _02236480 ; =0x0000E88C + ldr r0, [r0, r1] + add r1, sp, #0 + bl FUN_020145C8 + add sp, #0x14 + pop {pc} + nop _02236480: .word 0x0000E88C - thumb_func_end MOD83_02236450 + thumb_func_end MOD83_02236450 - thumb_func_start MOD83_02236484 + thumb_func_start MOD83_02236484 MOD83_02236484: ; 0x02236484 - push {r4, r5, r6, lr} - sub sp, #0x18 - add r5, r0, #0 - bl MOD83_02237464 - add r4, r0, #0 - bl MOD83_02236EA8 - add r3, r0, #0 - add r0, r4, #0 - add r1, sp, #8 - mov r2, #8 - bl FUN_02015D88 - mov r0, #0x4e - bl ScrStrBufs_new - add r4, r0, #0 - mov r0, #8 - mov r1, #0x4e - bl String_ctor - add r1, sp, #8 - add r6, r0, #0 - bl CopyU16ArrayToString - mov r1, #1 - str r1, [sp] - mov r0, #2 - str r0, [sp, #4] - add r0, r4, #0 - add r2, r6, #0 - mov r3, #0 - bl BufferString - add r0, r5, #0 - bl MOD83_0223600C - ldr r0, [r5] - mov r2, #0x18 - lsl r1, r0, #2 - ldr r0, _02236508 ; =MOD83_0223B2A0 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - add r0, #0xc - sub r1, #0x34 - str r4, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - bl MOD83_02234F2C - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - bl ScrStrBufs_delete - add r0, r5, #0 - bl MOD83_02236450 - add sp, #0x18 - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + sub sp, #0x18 + add r5, r0, #0 + bl MOD83_02237464 + add r4, r0, #0 + bl MOD83_02236EA8 + add r3, r0, #0 + add r0, r4, #0 + add r1, sp, #8 + mov r2, #8 + bl FUN_02015D88 + mov r0, #0x4e + bl ScrStrBufs_new + add r4, r0, #0 + mov r0, #8 + mov r1, #0x4e + bl String_ctor + add r1, sp, #8 + add r6, r0, #0 + bl CopyU16ArrayToString + mov r1, #1 + str r1, [sp] + mov r0, #2 + str r0, [sp, #4] + add r0, r4, #0 + add r2, r6, #0 + mov r3, #0 + bl BufferString + add r0, r5, #0 + bl MOD83_0223600C + ldr r0, [r5] + mov r2, #0x18 + lsl r1, r0, #2 + ldr r0, _02236508 ; =MOD83_0223B2A0 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + add r0, #0xc + sub r1, #0x34 + str r4, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + bl MOD83_02234F2C + add r0, r6, #0 + bl String_dtor + add r0, r4, #0 + bl ScrStrBufs_delete + add r0, r5, #0 + bl MOD83_02236450 + add sp, #0x18 + pop {r4, r5, r6, pc} + nop _02236508: .word MOD83_0223B2A0 - thumb_func_end MOD83_02236484 + thumb_func_end MOD83_02236484 - thumb_func_start MOD83_0223650C + thumb_func_start MOD83_0223650C MOD83_0223650C: ; 0x0223650C - push {r4, lr} - add r4, r0, #0 - ldr r0, _0223653C ; =0x00012604 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02236520 - blx r0 - ldr r0, _0223653C ; =0x00012604 - mov r1, #0 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _0223653C ; =0x00012604 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02236520 + blx r0 + ldr r0, _0223653C ; =0x00012604 + mov r1, #0 + str r1, [r4, r0] _02236520: - bl FUN_0201C30C - bl FUN_02009F80 - ldr r0, [r4, #0x20] - bl DoScheduledBgGpuUpdates - ldr r3, _02236540 ; =MOD83_027E0000 - ldr r1, _02236544 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + bl FUN_0201C30C + bl FUN_02009F80 + ldr r0, [r4, #0x20] + bl DoScheduledBgGpuUpdates + ldr r3, _02236540 ; =MOD83_027E0000 + ldr r1, _02236544 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _0223653C: .word 0x00012604 _02236540: .word 0x027E0000 _02236544: .word 0x00003FF8 - thumb_func_end MOD83_0223650C + thumb_func_end MOD83_0223650C - thumb_func_start MOD83_02236548 + thumb_func_start MOD83_02236548 MOD83_02236548: ; 0x02236548 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - str r0, [sp] - ldr r0, [r0, #0x10] - bl FUN_02022528 - str r0, [sp, #8] - bl FUN_0202C0B8 - cmp r0, #0 - bne _0223659C - ldr r0, [sp, #8] - bl FUN_0202C060 - cmp r0, #0 - bne _0223656E - add sp, #0xc - mov r0, #3 - pop {r4, r5, r6, r7, pc} + push {r4, r5, r6, r7, lr} + sub sp, #0xc + str r0, [sp] + ldr r0, [r0, #0x10] + bl FUN_02022528 + str r0, [sp, #8] + bl FUN_0202C0B8 + cmp r0, #0 + bne _0223659C + ldr r0, [sp, #8] + bl FUN_0202C060 + cmp r0, #0 + bne _0223656E + add sp, #0xc + mov r0, #3 + pop {r4, r5, r6, r7, pc} _0223656E: - ldr r0, [sp, #8] - bl FUN_0202C094 - cmp r0, #0 - bne _0223657E - add sp, #0xc - mov r0, #4 - pop {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + bl FUN_0202C094 + cmp r0, #0 + bne _0223657E + add sp, #0xc + mov r0, #4 + pop {r4, r5, r6, r7, pc} _0223657E: - bl MOD83_02237448 - add r1, r0, #0 - ldr r0, [sp, #8] - bl FUN_0202C028 - cmp r0, #0 - bne _02236590 - ldr r0, _022365F8 ; =0x0002A300 + bl MOD83_02237448 + add r1, r0, #0 + ldr r0, [sp, #8] + bl FUN_0202C028 + cmp r0, #0 + bne _02236590 + ldr r0, _022365F8 ; =0x0002A300 _02236590: - ldr r1, _022365FC ; =0x00015180 - cmp r0, r1 - bge _0223659C - add sp, #0xc - mov r0, #2 - pop {r4, r5, r6, r7, pc} + ldr r1, _022365FC ; =0x00015180 + cmp r0, r1 + bge _0223659C + add sp, #0xc + mov r0, #2 + pop {r4, r5, r6, r7, pc} _0223659C: - mov r6, #0 - str r6, [sp, #4] - add r7, r6, #0 + mov r6, #0 + str r6, [sp, #4] + add r7, r6, #0 _022365A2: - mov r4, #0 - add r5, r4, #0 + mov r4, #0 + add r5, r4, #0 _022365A6: - ldr r1, [sp] - ldr r0, _02236600 ; =0x0000E880 - mov r2, #0 - ldr r0, [r1, r0] - mov r1, #5 - add r0, r0, #4 - add r0, r0, r7 - add r0, r0, r5 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022365C0 - add r6, r6, #1 + ldr r1, [sp] + ldr r0, _02236600 ; =0x0000E880 + mov r2, #0 + ldr r0, [r1, r0] + mov r1, #5 + add r0, r0, #4 + add r0, r0, r7 + add r0, r0, r5 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022365C0 + add r6, r6, #1 _022365C0: - add r4, r4, #1 - add r5, #0x50 - cmp r4, #0x1e - blt _022365A6 - mov r0, #0x96 - lsl r0, r0, #4 - add r7, r7, r0 - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] - cmp r0, #0xe - blt _022365A2 - cmp r6, #6 - bge _022365E2 - add sp, #0xc - mov r0, #5 - pop {r4, r5, r6, r7, pc} + add r4, r4, #1 + add r5, #0x50 + cmp r4, #0x1e + blt _022365A6 + mov r0, #0x96 + lsl r0, r0, #4 + add r7, r7, r0 + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] + cmp r0, #0xe + blt _022365A2 + cmp r6, #6 + bge _022365E2 + add sp, #0xc + mov r0, #5 + pop {r4, r5, r6, r7, pc} _022365E2: - ldr r0, [sp, #8] - bl FUN_0202C000 - cmp r0, #0 - beq _022365F2 - add sp, #0xc - mov r0, #6 - pop {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + bl FUN_0202C000 + cmp r0, #0 + beq _022365F2 + add sp, #0xc + mov r0, #6 + pop {r4, r5, r6, r7, pc} _022365F2: - mov r0, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _022365F8: .word 0x0002A300 _022365FC: .word 0x00015180 _02236600: .word 0x0000E880 - thumb_func_end MOD83_02236548 + thumb_func_end MOD83_02236548 - thumb_func_start MOD83_02236604 + thumb_func_start MOD83_02236604 MOD83_02236604: ; 0x02236604 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - ldr r1, [r5, #4] - cmp r1, #0 - beq _02236640 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - ldr r0, _02236660 ; =MOD83_0223B2D8 - lsl r1, r4, #2 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - sub r1, #0x34 - mov r2, #1 - add r0, #0x10 - str r2, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - str r0, [r5, #4] - b _0223665A + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + ldr r1, [r5, #4] + cmp r1, #0 + beq _02236640 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + ldr r0, _02236660 ; =MOD83_0223B2D8 + lsl r1, r4, #2 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + sub r1, #0x34 + mov r2, #1 + add r0, #0x10 + str r2, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + str r0, [r5, #4] + b _0223665A _02236640: - ldr r0, _02236664 ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _0223665A - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + ldr r0, _02236664 ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _0223665A + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _0223665A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _02236660: .word MOD83_0223B2D8 _02236664: .word 0x00000474 - thumb_func_end MOD83_02236604 + thumb_func_end MOD83_02236604 - thumb_func_start MOD83_02236668 + thumb_func_start MOD83_02236668 MOD83_02236668: ; 0x02236668 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - ldr r1, [r5, #4] - cmp r1, #0 - beq _022366A4 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - ldr r0, _022366C8 ; =MOD83_0223B2D8 - lsl r1, r4, #2 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - sub r1, #0x34 - mov r2, #1 - add r0, #0x10 - str r2, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - str r0, [r5, #4] - b _022366C4 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + ldr r1, [r5, #4] + cmp r1, #0 + beq _022366A4 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + ldr r0, _022366C8 ; =MOD83_0223B2D8 + lsl r1, r4, #2 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + sub r1, #0x34 + mov r2, #1 + add r0, #0x10 + str r2, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + str r0, [r5, #4] + b _022366C4 _022366A4: - ldr r0, _022366CC ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _022366C4 - add r0, r5, #0 - bl MOD83_02236450 - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + ldr r0, _022366CC ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _022366C4 + add r0, r5, #0 + bl MOD83_02236450 + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _022366C4: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _022366C8: .word MOD83_0223B2D8 _022366CC: .word 0x00000474 - thumb_func_end MOD83_02236668 + thumb_func_end MOD83_02236668 - thumb_func_start MOD83_022366D0 + thumb_func_start MOD83_022366D0 MOD83_022366D0: ; 0x022366D0 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - mov r1, #0 - ldr r2, [r5, #8] - mvn r1, r1 - cmp r2, r1 - beq _02236712 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - mov r1, #0x46 - ldr r0, [r5, #8] - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - add r0, #0x10 - sub r1, #0x34 - str r4, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - mvn r0, r0 - str r0, [r5, #8] - ldr r0, _02236754 ; =0x000005DC - bl PlaySE - b _02236750 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + mov r1, #0 + ldr r2, [r5, #8] + mvn r1, r1 + cmp r2, r1 + beq _02236712 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + mov r1, #0x46 + ldr r0, [r5, #8] + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + add r0, #0x10 + sub r1, #0x34 + str r4, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + mvn r0, r0 + str r0, [r5, #8] + ldr r0, _02236754 ; =0x000005DC + bl PlaySE + b _02236750 _02236712: - cmp r4, #0 - beq _02236730 - ldr r0, _02236758 ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _02236750 - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + cmp r4, #0 + beq _02236730 + ldr r0, _02236758 ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _02236750 + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _02236730: - ldr r0, _0223675C ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _02236740 - ldr r0, _02236760 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236750 + ldr r0, _0223675C ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _02236740 + ldr r0, _02236760 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236750 _02236740: - mov r0, #0 - bl FUN_02002BB8 - ldr r0, _02236754 ; =0x000005DC - bl PlaySE - mov r0, #1 - pop {r3, r4, r5, pc} + mov r0, #0 + bl FUN_02002BB8 + ldr r0, _02236754 ; =0x000005DC + bl PlaySE + mov r0, #1 + pop {r3, r4, r5, pc} _02236750: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02236754: .word 0x000005DC _02236758: .word 0x00000474 _0223675C: .word gMain + 0x40 _02236760: .word gMain - thumb_func_end MOD83_022366D0 + thumb_func_end MOD83_022366D0 - thumb_func_start MOD83_02236764 + thumb_func_start MOD83_02236764 MOD83_02236764: ; 0x02236764 - push {r3, r4, r5, lr} - mov r2, #0xa - add r5, r0, #0 - mov r0, #3 - mov r1, #0x4e - lsl r2, r2, #0xe - bl CreateHeap - ldr r1, _022367F0 ; =0x00012608 - add r0, r5, #0 - mov r2, #0x4e - bl OverlayManager_CreateAndGetData - ldr r2, _022367F0 ; =0x00012608 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x4e - bl BgConfig_Alloc - str r0, [r4, #0x20] - mov r0, #0x4e - bl FUN_02014590 - ldr r1, _022367F4 ; =0x0000E88C - str r0, [r4, r1] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #0x10] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0x14] - ldr r0, [r4, #0x10] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0x18] - bl Options_GetFrame - str r0, [r4, #0x1c] - ldr r1, _022367F8 ; =0x00000496 - mov r0, #9 - mov r2, #1 - bl FUN_0200433C - bl OS_IsTickAvailable - cmp r0, #0 - bne _022367DE - bl OS_InitTick + push {r3, r4, r5, lr} + mov r2, #0xa + add r5, r0, #0 + mov r0, #3 + mov r1, #0x4e + lsl r2, r2, #0xe + bl CreateHeap + ldr r1, _022367F0 ; =0x00012608 + add r0, r5, #0 + mov r2, #0x4e + bl OverlayManager_CreateAndGetData + ldr r2, _022367F0 ; =0x00012608 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x4e + bl BgConfig_Alloc + str r0, [r4, #0x20] + mov r0, #0x4e + bl FUN_02014590 + ldr r1, _022367F4 ; =0x0000E88C + str r0, [r4, r1] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #0x10] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0x14] + ldr r0, [r4, #0x10] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #0x18] + bl Options_GetFrame + str r0, [r4, #0x1c] + ldr r1, _022367F8 ; =0x00000496 + mov r0, #9 + mov r2, #1 + bl FUN_0200433C + bl OS_IsTickAvailable + cmp r0, #0 + bne _022367DE + bl OS_InitTick _022367DE: - bl MOD83_02239490 - ldr r0, _022367FC ; =0x0000E89C - add r1, r4, r0 - ldr r0, _02236800 ; =MOD83_0223BB14 - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, pc} - nop + bl MOD83_02239490 + ldr r0, _022367FC ; =0x0000E89C + add r1, r4, r0 + ldr r0, _02236800 ; =MOD83_0223BB14 + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, pc} + nop _022367F0: .word 0x00012608 _022367F4: .word 0x0000E88C _022367F8: .word 0x00000496 _022367FC: .word 0x0000E89C _02236800: .word MOD83_0223BB14 - thumb_func_end MOD83_02236764 + thumb_func_end MOD83_02236764 - thumb_func_start MOD83_02236804 + thumb_func_start MOD83_02236804 MOD83_02236804: ; 0x02236804 - push {r4, r5, r6, lr} - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - bl CTRDG_IsExisting - bl CTRDG_IsPulledOut - cmp r0, #1 - beq _02236822 - ldr r0, _02236B3C ; =UNK_02016FA4 - ldr r0, [r0] - cmp r0, #0 - beq _02236828 + push {r4, r5, r6, lr} + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + bl CTRDG_IsExisting + bl CTRDG_IsPulledOut + cmp r0, #1 + beq _02236822 + ldr r0, _02236B3C ; =UNK_02016FA4 + ldr r0, [r0] + cmp r0, #0 + beq _02236828 _02236822: - mov r0, #0x4e - bl FUN_02089F24 + mov r0, #0x4e + bl FUN_02089F24 _02236828: - ldr r0, [r4, #0xc] - add r0, r0, #1 - str r0, [r4, #0xc] - ldr r0, [r5] - cmp r0, #0x18 - bhi _02236924 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, [r4, #0xc] + add r0, r0, #1 + str r0, [r4, #0xc] + ldr r0, [r5] + cmp r0, #0x18 + bhi _02236924 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02236840: ; jump table - .short _02236872 - _02236840 - 2 ; case 0 - .short _022368BA - _02236840 - 2 ; case 1 - .short _02236900 - _02236840 - 2 ; case 2 - .short _02236914 - _02236840 - 2 ; case 3 - .short _0223694E - _02236840 - 2 ; case 4 - .short _02236966 - _02236840 - 2 ; case 5 - .short _022369BC - _02236840 - 2 ; case 6 - .short _022369CE - _02236840 - 2 ; case 7 - .short _022369EC - _02236840 - 2 ; case 8 - .short _022369FE - _02236840 - 2 ; case 9 - .short _02236A5C - _02236840 - 2 ; case 10 - .short _02236A74 - _02236840 - 2 ; case 11 - .short _02236A88 - _02236840 - 2 ; case 12 - .short _02236AC8 - _02236840 - 2 ; case 13 - .short _02236BF0 - _02236840 - 2 ; case 14 - .short _02236C0A - _02236840 - 2 ; case 15 - .short _02236C26 - _02236840 - 2 ; case 16 - .short _02236C40 - _02236840 - 2 ; case 17 - .short _02236C76 - _02236840 - 2 ; case 18 - .short _02236C9C - _02236840 - 2 ; case 19 - .short _02236D06 - _02236840 - 2 ; case 20 - .short _02236D12 - _02236840 - 2 ; case 21 - .short _02236D54 - _02236840 - 2 ; case 22 - .short _02236D78 - _02236840 - 2 ; case 23 - .short _02236D86 - _02236840 - 2 ; case 24 + .short _02236872 - _02236840 - 2 ; case 0 + .short _022368BA - _02236840 - 2 ; case 1 + .short _02236900 - _02236840 - 2 ; case 2 + .short _02236914 - _02236840 - 2 ; case 3 + .short _0223694E - _02236840 - 2 ; case 4 + .short _02236966 - _02236840 - 2 ; case 5 + .short _022369BC - _02236840 - 2 ; case 6 + .short _022369CE - _02236840 - 2 ; case 7 + .short _022369EC - _02236840 - 2 ; case 8 + .short _022369FE - _02236840 - 2 ; case 9 + .short _02236A5C - _02236840 - 2 ; case 10 + .short _02236A74 - _02236840 - 2 ; case 11 + .short _02236A88 - _02236840 - 2 ; case 12 + .short _02236AC8 - _02236840 - 2 ; case 13 + .short _02236BF0 - _02236840 - 2 ; case 14 + .short _02236C0A - _02236840 - 2 ; case 15 + .short _02236C26 - _02236840 - 2 ; case 16 + .short _02236C40 - _02236840 - 2 ; case 17 + .short _02236C76 - _02236840 - 2 ; case 18 + .short _02236C9C - _02236840 - 2 ; case 19 + .short _02236D06 - _02236840 - 2 ; case 20 + .short _02236D12 - _02236840 - 2 ; case 21 + .short _02236D54 - _02236840 - 2 ; case 22 + .short _02236D78 - _02236840 - 2 ; case 23 + .short _02236D86 - _02236840 - 2 ; case 24 _02236872: - bl MOD83_02236E90 - mov r0, #0x4b - lsl r0, r0, #4 - add r0, r4, r0 - bl MOD83_02236E18 - ldr r1, _02236B40 ; =0x000004A8 - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #0 - bne _022368AE - bl MOD83_022371C4 - ldr r1, _02236B44 ; =0x000004AC - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #0 - bne _022368AA - bl MOD83_0223742C - ldr r1, _02236B48 ; =0x0000E880 - str r0, [r4, r1] - ldr r0, [r4, r1] - ldrb r2, [r0] - add r0, r1, #4 - str r2, [r4, r0] - b _022368AE + bl MOD83_02236E90 + mov r0, #0x4b + lsl r0, r0, #4 + add r0, r4, r0 + bl MOD83_02236E18 + ldr r1, _02236B40 ; =0x000004A8 + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #0 + bne _022368AE + bl MOD83_022371C4 + ldr r1, _02236B44 ; =0x000004AC + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #0 + bne _022368AA + bl MOD83_0223742C + ldr r1, _02236B48 ; =0x0000E880 + str r0, [r4, r1] + ldr r0, [r4, r1] + ldrb r2, [r0] + add r0, r1, #4 + str r2, [r4, r0] + b _022368AE _022368AA: - mov r0, #1 - str r0, [r4, #4] + mov r0, #1 + str r0, [r4, #4] _022368AE: - add r0, r4, #0 - bl MOD83_02234CA0 - mov r0, #1 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_02234CA0 + mov r0, #1 + str r0, [r5] + b _02236D90 _022368BA: - add r0, r4, #0 - bl MOD83_02235F3C - bl MOD83_022350BC - add r0, r4, #0 - bl MOD83_022350EC - add r0, r4, #0 - bl MOD83_022351F8 - add r0, r4, #0 - bl MOD83_022357CC - ldr r0, _02236B4C ; =MOD83_0223650C - add r1, r4, #0 - bl Main_SetVBlankIntrCB - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, [r4, #4] - cmp r0, #1 - bne _022368FA - add r0, r4, #0 - mov r1, #1 - mov r2, #0xb - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + bl MOD83_02235F3C + bl MOD83_022350BC + add r0, r4, #0 + bl MOD83_022350EC + add r0, r4, #0 + bl MOD83_022351F8 + add r0, r4, #0 + bl MOD83_022357CC + ldr r0, _02236B4C ; =MOD83_0223650C + add r1, r4, #0 + bl Main_SetVBlankIntrCB + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, [r4, #4] + cmp r0, #1 + bne _022368FA + add r0, r4, #0 + mov r1, #1 + mov r2, #0xb + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _022368FA: - mov r0, #2 - str r0, [r5] - b _02236D90 + mov r0, #2 + str r0, [r5] + b _02236D90 _02236900: - add r0, r4, #0 - bl MOD83_02236484 - add r0, r4, #0 - mov r1, #1 - mov r2, #3 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + bl MOD83_02236484 + add r0, r4, #0 + mov r1, #1 + mov r2, #3 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236914: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236926 - cmp r0, #2 - beq _02236938 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236926 + cmp r0, #2 + beq _02236938 _02236924: - b _02236D90 + b _02236D90 _02236926: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - .ifdef DIAMOND - mov r0, #0x22 - .else - mov r0, #0x23 - .endif - str r0, [r4, #8] - mov r0, #4 - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + .ifdef DIAMOND + mov r0, #0x22 + .else + mov r0, #0x23 + .endif + str r0, [r4, #8] + mov r0, #4 + str r0, [r5] + b _02236D90 _02236938: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _0223694E: - add r0, r4, #0 - mov r1, #1 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236976 - add r0, r4, #0 - bl MOD83_02236450 - mov r0, #5 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #1 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236976 + add r0, r4, #0 + bl MOD83_02236450 + mov r0, #5 + str r0, [r5] + b _02236D90 _02236966: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236978 - cmp r0, #2 - beq _022369A6 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236978 + cmp r0, #2 + beq _022369A6 _02236976: - b _02236D90 + b _02236D90 _02236978: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - bl MOD83_02236548 - str r0, [r4, #4] - cmp r0, #0 - beq _0223699E - sub r0, r0, #3 - cmp r0, #1 - bhi _02236998 - mov r0, #8 - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + bl MOD83_02236548 + str r0, [r4, #4] + cmp r0, #0 + beq _0223699E + sub r0, r0, #3 + cmp r0, #1 + bhi _02236998 + mov r0, #8 + str r0, [r5] + b _02236D90 _02236998: - mov r0, #0xb - str r0, [r5] - b _02236D90 + mov r0, #0xb + str r0, [r5] + b _02236D90 _0223699E: - mov r0, #6 - str r0, [r4, #8] - str r0, [r5] - b _02236D90 + mov r0, #6 + str r0, [r4, #8] + str r0, [r5] + b _02236D90 _022369A6: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _022369BC: - add r0, r4, #0 - mov r1, #1 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236A0E - mov r0, #7 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #1 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236A0E + mov r0, #7 + str r0, [r5] + b _02236D90 _022369CE: - ldr r0, _02236B54 ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _022369DE - ldr r0, _02236B58 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236A0E + ldr r0, _02236B54 ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _022369DE + ldr r0, _02236B58 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236A0E _022369DE: - add r0, r4, #0 - mov r1, #0 - mov r2, #0xc - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0xc + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _022369EC: - ldr r1, [r4, #4] - add r0, r4, #0 - bl MOD83_02236668 - cmp r0, #0 - beq _02236A0E - mov r0, #9 - str r0, [r5] - b _02236D90 + ldr r1, [r4, #4] + add r0, r4, #0 + bl MOD83_02236668 + cmp r0, #0 + beq _02236A0E + mov r0, #9 + str r0, [r5] + b _02236D90 _022369FE: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236A10 - cmp r0, #2 - beq _02236A46 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236A10 + cmp r0, #2 + beq _02236A46 _02236A0E: - b _02236D90 + b _02236D90 _02236A10: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - mov r1, #0x47 - lsl r1, r1, #4 - mov r2, #0 - add r0, r1, #0 - str r2, [r4, r1] - sub r1, #0x44 - mov r3, #0x28 - sub r0, #0x10 - str r3, [r4, r0] - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02234F2C - ldr r1, _02236B5C ; =0x00000498 - add r0, r4, r1 - sub r1, #0xc6 - bl FUN_0200D858 - ldr r1, _02236B60 ; =0x0000E898 - str r0, [r4, r1] - mov r0, #0xa - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + mov r1, #0x47 + lsl r1, r1, #4 + mov r2, #0 + add r0, r1, #0 + str r2, [r4, r1] + sub r1, #0x44 + mov r3, #0x28 + sub r0, #0x10 + str r3, [r4, r0] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02234F2C + ldr r1, _02236B5C ; =0x00000498 + add r0, r4, r1 + sub r1, #0xc6 + bl FUN_0200D858 + ldr r1, _02236B60 ; =0x0000E898 + str r0, [r4, r1] + mov r0, #0xa + str r0, [r5] + b _02236D90 _02236A46: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _02236A5C: - add r0, r4, #0 - bl MOD83_02234E40 - ldr r0, _02236B60 ; =0x0000E898 - ldr r0, [r4, r0] - bl FUN_0200DBFC - mov r0, #7 - str r0, [r4, #4] - mov r0, #0xb - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_02234E40 + ldr r0, _02236B60 ; =0x0000E898 + ldr r0, [r4, r0] + bl FUN_0200DBFC + mov r0, #7 + str r0, [r4, #4] + mov r0, #0xb + str r0, [r5] + b _02236D90 _02236A74: - ldr r1, [r4, #4] - add r0, r4, #0 - bl MOD83_02236604 - cmp r0, #0 - bne _02236A82 - b _02236D90 + ldr r1, [r4, #4] + add r0, r4, #0 + bl MOD83_02236604 + cmp r0, #0 + bne _02236A82 + b _02236D90 _02236A82: - mov r0, #0x16 - str r0, [r5] - b _02236D90 + mov r0, #0x16 + str r0, [r5] + b _02236D90 _02236A88: - ldr r0, _02236B5C ; =0x00000498 - add r0, r4, r0 - bl MOD83_02236298 - add r0, r4, #0 - bl MOD83_02235FBC - add r0, r4, #0 - bl MOD83_02235648 - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236B4C ; =MOD83_0223650C - add r1, r4, #0 - bl Main_SetVBlankIntrCB - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add r0, r4, #0 - mov r1, #0 - bl MOD83_02235C4C - add r0, r4, #0 - mov r1, #1 - mov r2, #0xd - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236B5C ; =0x00000498 + add r0, r4, r0 + bl MOD83_02236298 + add r0, r4, #0 + bl MOD83_02235FBC + add r0, r4, #0 + bl MOD83_02235648 + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236B4C ; =MOD83_0223650C + add r1, r4, #0 + bl Main_SetVBlankIntrCB + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add r0, r4, #0 + mov r1, #0 + bl MOD83_02235C4C + add r0, r4, #0 + mov r1, #1 + mov r2, #0xd + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236AC8: - mov r0, #0x31 - lsl r0, r0, #4 - add r0, r4, r0 - bl FUN_02020988 - add r6, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r6, r0 - beq _02236B9C - cmp r6, #0x1e - bge _02236B92 - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235994 - cmp r0, #1 - bne _02236B20 - ldr r2, _02236B48 ; =0x0000E880 - add r0, r4, #0 - ldr r1, [r4, r2] - add r2, r2, #4 - ldr r3, [r4, r2] - mov r2, #0x96 - lsl r2, r2, #4 - add r1, r1, #4 - mul r2, r3 - add r2, r1, r2 - mov r1, #0x50 - mul r1, r6 - add r1, r2, r1 - bl MOD83_02235C4C - mov r0, #0x41 - lsl r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #6 - bne _02236B9C - ldr r0, _02236B64 ; =0x0000E888 - mov r1, #0x2d - str r1, [r4, r0] - mov r0, #0xf - str r0, [r5] - b _02236D90 + mov r0, #0x31 + lsl r0, r0, #4 + add r0, r4, r0 + bl FUN_02020988 + add r6, r0, #0 + mov r0, #0 + mvn r0, r0 + cmp r6, r0 + beq _02236B9C + cmp r6, #0x1e + bge _02236B92 + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235994 + cmp r0, #1 + bne _02236B20 + ldr r2, _02236B48 ; =0x0000E880 + add r0, r4, #0 + ldr r1, [r4, r2] + add r2, r2, #4 + ldr r3, [r4, r2] + mov r2, #0x96 + lsl r2, r2, #4 + add r1, r1, #4 + mul r2, r3 + add r2, r1, r2 + mov r1, #0x50 + mul r1, r6 + add r1, r2, r1 + bl MOD83_02235C4C + mov r0, #0x41 + lsl r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #6 + bne _02236B9C + ldr r0, _02236B64 ; =0x0000E888 + mov r1, #0x2d + str r1, [r4, r0] + mov r0, #0xf + str r0, [r5] + b _02236D90 _02236B20: - cmp r0, #2 - bne _02236B2E - add r0, r4, #0 - mov r1, #0 - bl MOD83_02235C4C - b _02236D90 + cmp r0, #2 + bne _02236B2E + add r0, r4, #0 + mov r1, #0 + bl MOD83_02235C4C + b _02236D90 _02236B2E: - cmp r0, #4 - bne _02236B68 - mov r0, #8 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 - .align 2, 0 + cmp r0, #4 + bne _02236B68 + mov r0, #8 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 + .align 2, 0 _02236B3C: .word UNK_02016FA4 _02236B40: .word 0x000004A8 _02236B44: .word 0x000004AC @@ -18978,288 +18978,288 @@ _02236B5C: .word 0x00000498 _02236B60: .word 0x0000E898 _02236B64: .word 0x0000E888 _02236B68: - cmp r0, #5 - bne _02236B76 - mov r0, #9 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #5 + bne _02236B76 + mov r0, #9 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B76: - cmp r0, #6 - bne _02236B84 - mov r0, #0x26 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #6 + bne _02236B84 + mov r0, #0x26 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B84: - cmp r0, #7 - bne _02236B9C - mov r0, #0x26 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #7 + bne _02236B9C + mov r0, #0x26 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B92: - beq _02236BDC - cmp r6, #0x1f - beq _02236B9E - cmp r6, #0x20 - beq _02236BBC + beq _02236BDC + cmp r6, #0x1f + beq _02236B9E + cmp r6, #0x20 + beq _02236BBC _02236B9C: - b _02236D90 + b _02236D90 _02236B9E: - ldr r0, _02236DA0 ; =0x0000E884 - ldr r1, [r4, r0] - cmp r1, #0 - bne _02236BAA - mov r1, #0xd - b _02236BAC + ldr r0, _02236DA0 ; =0x0000E884 + ldr r1, [r4, r0] + cmp r1, #0 + bne _02236BAA + mov r1, #0xd + b _02236BAC _02236BAA: - sub r1, r1, #1 + sub r1, r1, #1 _02236BAC: - str r1, [r4, r0] - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + str r1, [r4, r0] + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BBC: - ldr r0, _02236DA0 ; =0x0000E884 - ldr r1, [r4, r0] - add r1, r1, #1 - str r1, [r4, r0] - ldr r1, [r4, r0] - cmp r1, #0xe - bne _02236BCE - mov r1, #0 - str r1, [r4, r0] + ldr r0, _02236DA0 ; =0x0000E884 + ldr r1, [r4, r0] + add r1, r1, #1 + str r1, [r4, r0] + ldr r1, [r4, r0] + cmp r1, #0xe + bne _02236BCE + mov r1, #0 + str r1, [r4, r0] _02236BCE: - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BDC: - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BF0: - add r0, r4, #0 - mov r1, #0 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236C50 - ldr r0, _02236DA8 ; =0x00000498 - add r0, r4, r0 - bl MOD83_02236298 - mov r0, #0xd - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #0 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236C50 + ldr r0, _02236DA8 ; =0x00000498 + add r0, r4, r0 + bl MOD83_02236298 + mov r0, #0xd + str r0, [r5] + b _02236D90 _02236C0A: - ldr r0, _02236DAC ; =0x0000E888 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02236C50 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x10 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DAC ; =0x0000E888 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02236C50 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x10 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236C26: - add r0, r4, #0 - bl MOD83_022360C8 - add r0, r4, #0 - mov r1, #1 - mov r2, #0x11 - add r3, r5, #0 - bl MOD83_02235E04 - add r0, r4, #0 - bl MOD83_02236450 - b _02236D90 + add r0, r4, #0 + bl MOD83_022360C8 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x11 + add r3, r5, #0 + bl MOD83_02235E04 + add r0, r4, #0 + bl MOD83_02236450 + b _02236D90 _02236C40: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236C52 - cmp r0, #2 - beq _02236C60 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236C52 + cmp r0, #2 + beq _02236C60 _02236C50: - b _02236D90 + b _02236D90 _02236C52: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - mov r0, #0x12 - str r0, [r5] - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + mov r0, #0x12 + str r0, [r5] + b _02236D90 _02236C60: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236C76: - mov r1, #0x46 - mov r0, #0xb - lsl r1, r1, #4 - str r0, [r4, r1] - sub r1, #0x34 - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0 - bl MOD83_02234F2C - add r0, r4, #0 - bl MOD83_02236450 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - mov r0, #0x13 - str r0, [r5] - b _02236D90 + mov r1, #0x46 + mov r0, #0xb + lsl r1, r1, #4 + str r0, [r4, r1] + sub r1, #0x34 + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0 + bl MOD83_02234F2C + add r0, r4, #0 + bl MOD83_02236450 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + mov r0, #0x13 + str r0, [r5] + b _02236D90 _02236C9C: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236CAE - cmp r0, #2 - beq _02236CF0 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236CAE + cmp r0, #2 + beq _02236CF0 + b _02236D90 _02236CAE: - ldr r0, [r4] - mov r2, #0 - lsl r1, r0, #2 - ldr r0, _02236DB4 ; =MOD83_0223B288 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r4, r1] - sub r1, #0x34 - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02234F2C - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - ldr r0, _02236DB8 ; =0x0000E890 - mov r1, #0 - str r1, [r4, r0] - ldr r1, _02236DA8 ; =0x00000498 - add r0, r4, r1 - sub r1, #0xc6 - bl FUN_0200D858 - ldr r1, _02236DBC ; =0x0000E898 - str r0, [r4, r1] - mov r0, #0x15 - str r0, [r5] - mov r0, #4 - bl SetSoftResetDisableMask - b _02236D90 + ldr r0, [r4] + mov r2, #0 + lsl r1, r0, #2 + ldr r0, _02236DB4 ; =MOD83_0223B288 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r4, r1] + sub r1, #0x34 + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02234F2C + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + ldr r0, _02236DB8 ; =0x0000E890 + mov r1, #0 + str r1, [r4, r0] + ldr r1, _02236DA8 ; =0x00000498 + add r0, r4, r1 + sub r1, #0xc6 + bl FUN_0200D858 + ldr r1, _02236DBC ; =0x0000E898 + str r0, [r4, r1] + mov r0, #0x15 + str r0, [r5] + mov r0, #4 + bl SetSoftResetDisableMask + b _02236D90 _02236CF0: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236D06: - add r0, r4, #0 - bl MOD83_022362B8 - mov r0, #0xc - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_022362B8 + mov r0, #0xc + str r0, [r5] + b _02236D90 _02236D12: - add r0, r4, #0 - bl MOD83_02234CE8 - add r6, r0, #0 - cmp r6, #0xa - beq _02236D90 - ldr r0, _02236DBC ; =0x0000E898 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _02236DC0 ; =0x0000061B - bl PlaySE - cmp r6, #0xb - bne _02236D34 - .ifdef DIAMOND - mov r1, #0x1d - .else - mov r1, #0x1e - .endif - b _02236D36 + add r0, r4, #0 + bl MOD83_02234CE8 + add r6, r0, #0 + cmp r6, #0xa + beq _02236D90 + ldr r0, _02236DBC ; =0x0000E898 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _02236DC0 ; =0x0000061B + bl PlaySE + cmp r6, #0xb + bne _02236D34 + .ifdef DIAMOND + mov r1, #0x1d + .else + mov r1, #0x1e + .endif + b _02236D36 _02236D34: - mov r1, #0x24 + mov r1, #0x24 _02236D36: - mov r0, #0x46 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r1, _02236DC4 ; =0x0000042C - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0 - bl MOD83_02234F2C - mov r0, #0x16 - str r0, [r5] - mov r0, #4 - bl ClearSoftResetDisableMask - b _02236D90 + mov r0, #0x46 + lsl r0, r0, #4 + str r1, [r4, r0] + ldr r1, _02236DC4 ; =0x0000042C + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0 + bl MOD83_02234F2C + mov r0, #0x16 + str r0, [r5] + mov r0, #4 + bl ClearSoftResetDisableMask + b _02236D90 _02236D54: - ldr r0, _02236DC8 ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _02236D64 - ldr r0, _02236DCC ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236D90 + ldr r0, _02236DC8 ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _02236D64 + ldr r0, _02236DCC ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236D90 _02236D64: - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236D78: - bl FUN_0200E308 - cmp r0, #0 - beq _02236D90 - ldr r0, [r4, #0x24] - str r0, [r5] - b _02236D90 + bl FUN_0200E308 + cmp r0, #0 + beq _02236D90 + ldr r0, [r4, #0x24] + str r0, [r5] + b _02236D90 _02236D86: - add r0, r4, #0 - bl MOD83_02236330 - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r4, #0 + bl MOD83_02236330 + mov r0, #1 + pop {r4, r5, r6, pc} _02236D90: - ldr r0, [r4, #0x28] - cmp r0, #0 - beq _02236D9A - bl FUN_0201FDEC + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _02236D9A + bl FUN_0201FDEC _02236D9A: - mov r0, #0 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + pop {r4, r5, r6, pc} + nop _02236DA0: .word 0x0000E884 _02236DA4: .word 0x000005DC _02236DA8: .word 0x00000498 @@ -19272,96 +19272,96 @@ _02236DC0: .word 0x0000061B _02236DC4: .word 0x0000042C _02236DC8: .word gMain + 0x40 _02236DCC: .word gMain - thumb_func_end MOD83_02236804 + thumb_func_end MOD83_02236804 - thumb_func_start MOD83_02236DD0 + thumb_func_start MOD83_02236DD0 MOD83_02236DD0: ; 0x02236DD0 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - ldr r0, [r0, #0x20] - bl FreeToHeap - ldr r0, _02236DFC ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _02236E00 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x4e - bl DestroyHeap - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + ldr r0, [r0, #0x20] + bl FreeToHeap + ldr r0, _02236DFC ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _02236E00 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x4e + bl DestroyHeap + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r4, pc} + .align 2, 0 _02236DFC: .word SDK_OVERLAY_MODULE_63_ID _02236E00: .word MOD63_021DBAB8 - thumb_func_end MOD83_02236DD0 + thumb_func_end MOD83_02236DD0 - thumb_func_start MOD83_02236E04 + thumb_func_start MOD83_02236E04 MOD83_02236E04: ; 0x02236E04 - push {r3, lr} - mov r0, #1 - bl CTRDG_IdentifyAgbBackup - cmp r0, #0 - bne _02236E14 - mov r0, #1 - pop {r3, pc} + push {r3, lr} + mov r0, #1 + bl CTRDG_IdentifyAgbBackup + cmp r0, #0 + bne _02236E14 + mov r0, #1 + pop {r3, pc} _02236E14: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_02236E04 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_02236E04 - thumb_func_start MOD83_02236E18 + thumb_func_start MOD83_02236E18 MOD83_02236E18: ; 0x02236E18 - push {r3, lr} - ldr r1, _02236E74 ; =MOD83_0223BB18 - str r0, [r1, #8] - ldr r0, _02236E78 ; =MOD83_0223B41C - ldr r0, [r0] - cmp r0, #0 - beq _02236E2A - mov r0, #0xc - pop {r3, pc} + push {r3, lr} + ldr r1, _02236E74 ; =MOD83_0223BB18 + str r0, [r1, #8] + ldr r0, _02236E78 ; =MOD83_0223B41C + ldr r0, [r0] + cmp r0, #0 + beq _02236E2A + mov r0, #0xc + pop {r3, pc} _02236E2A: - ldr r0, _02236E7C ; =MOD83_0223A5C4 - mov r1, #0x1e - bl MOD83_02236EB4 - cmp r0, #0 - bne _02236E72 - ldr r0, _02236E78 ; =MOD83_0223B41C - ldr r0, [r0] - ldrb r0, [r0, #4] - cmp r0, #0 - bne _02236E5A - mov r0, #0x89 - ldr r1, _02236E80 ; =MOD83_0223BB98 - lsl r0, r0, #4 - str r0, [r1, #0x20] - mov r0, #0xeb - lsl r0, r0, #6 - str r0, [r1, #0x24] - ldr r2, _02236E84 ; =0x00001220 - ldr r0, _02236E74 ; =MOD83_0223BB18 - str r2, [r0, #0x68] - mov r0, #9 - str r0, [r1, #0x30] - b _02236E64 + ldr r0, _02236E7C ; =MOD83_0223A5C4 + mov r1, #0x1e + bl MOD83_02236EB4 + cmp r0, #0 + bne _02236E72 + ldr r0, _02236E78 ; =MOD83_0223B41C + ldr r0, [r0] + ldrb r0, [r0, #4] + cmp r0, #0 + bne _02236E5A + mov r0, #0x89 + ldr r1, _02236E80 ; =MOD83_0223BB98 + lsl r0, r0, #4 + str r0, [r1, #0x20] + mov r0, #0xeb + lsl r0, r0, #6 + str r0, [r1, #0x24] + ldr r2, _02236E84 ; =0x00001220 + ldr r0, _02236E74 ; =MOD83_0223BB18 + str r2, [r0, #0x68] + mov r0, #9 + str r0, [r1, #0x30] + b _02236E64 _02236E5A: - ldr r0, _02236E88 ; =0x08000100 - ldr r1, _02236E8C ; =MOD83_0223BB30 - mov r2, #0xfc - bl CTRDG_CpuCopy32 + ldr r0, _02236E88 ; =0x08000100 + ldr r1, _02236E8C ; =MOD83_0223BB30 + mov r2, #0xfc + bl CTRDG_CpuCopy32 _02236E64: - bl MOD83_02236E04 - cmp r0, #0 - bne _02236E70 - mov r0, #3 - pop {r3, pc} + bl MOD83_02236E04 + cmp r0, #0 + bne _02236E70 + mov r0, #3 + pop {r3, pc} _02236E70: - mov r0, #0 + mov r0, #0 _02236E72: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _02236E74: .word MOD83_0223BB18 _02236E78: .word MOD83_0223B41C _02236E7C: .word MOD83_0223A5C4 @@ -19369,337 +19369,337 @@ _02236E80: .word MOD83_0223BB98 _02236E84: .word 0x00001220 _02236E88: .word 0x08000100 _02236E8C: .word MOD83_0223BB30 - thumb_func_end MOD83_02236E18 + thumb_func_end MOD83_02236E18 - thumb_func_start MOD83_02236E90 + thumb_func_start MOD83_02236E90 MOD83_02236E90: ; 0x02236E90 - ldr r0, _02236E98 ; =MOD83_0223B41C - mov r1, #0 - str r1, [r0] - bx lr - .align 2, 0 + ldr r0, _02236E98 ; =MOD83_0223B41C + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 _02236E98: .word MOD83_0223B41C - thumb_func_end MOD83_02236E90 + thumb_func_end MOD83_02236E90 - thumb_func_start MOD83_02236E9C + thumb_func_start MOD83_02236E9C MOD83_02236E9C: ; 0x02236E9C - ldr r0, _02236EA4 ; =MOD83_0223B41C - ldr r0, [r0] - ldrb r0, [r0, #5] - bx lr - .align 2, 0 + ldr r0, _02236EA4 ; =MOD83_0223B41C + ldr r0, [r0] + ldrb r0, [r0, #5] + bx lr + .align 2, 0 _02236EA4: .word MOD83_0223B41C - thumb_func_end MOD83_02236E9C + thumb_func_end MOD83_02236E9C - thumb_func_start MOD83_02236EA8 + thumb_func_start MOD83_02236EA8 MOD83_02236EA8: ; 0x02236EA8 - ldr r0, _02236EB0 ; =MOD83_0223B41C - ldr r0, [r0] - ldrh r0, [r0, #6] - bx lr - .align 2, 0 + ldr r0, _02236EB0 ; =MOD83_0223B41C + ldr r0, [r0] + ldrh r0, [r0, #6] + bx lr + .align 2, 0 _02236EB0: .word MOD83_0223B41C - thumb_func_end MOD83_02236EA8 + thumb_func_end MOD83_02236EA8 - thumb_func_start MOD83_02236EB4 + thumb_func_start MOD83_02236EB4 MOD83_02236EB4: ; 0x02236EB4 - push {r3, r4, r5, lr} - sub sp, #0xc0 - add r5, r0, #0 - add r4, r1, #0 - ldr r0, _02236F60 ; =MOD83_0223B41C - mov r1, #0 - str r1, [r0] - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _02236ED0 - add sp, #0xc0 - mov r0, #1 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + sub sp, #0xc0 + add r5, r0, #0 + add r4, r1, #0 + ldr r0, _02236F60 ; =MOD83_0223B41C + mov r1, #0 + str r1, [r0] + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _02236ED0 + add sp, #0xc0 + mov r0, #1 + pop {r3, r4, r5, pc} _02236ED0: - bl CTRDG_GetAgbGameCode - mov r2, #0 - cmp r4, #0 - ble _02236EF4 - add r3, r5, #0 + bl CTRDG_GetAgbGameCode + mov r2, #0 + cmp r4, #0 + ble _02236EF4 + add r3, r5, #0 _02236EDC: - ldr r1, [r3] - cmp r0, r1 - bne _02236EEC - lsl r0, r2, #3 - add r1, r5, r0 - ldr r0, _02236F60 ; =MOD83_0223B41C - str r1, [r0] - b _02236EF4 + ldr r1, [r3] + cmp r0, r1 + bne _02236EEC + lsl r0, r2, #3 + add r1, r5, r0 + ldr r0, _02236F60 ; =MOD83_0223B41C + str r1, [r0] + b _02236EF4 _02236EEC: - add r2, r2, #1 - add r3, #8 - cmp r2, r4 - blt _02236EDC + add r2, r2, #1 + add r3, #8 + cmp r2, r4 + blt _02236EDC _02236EF4: - ldr r0, _02236F60 ; =MOD83_0223B41C - ldr r0, [r0] - cmp r0, #0 - bne _02236F02 - add sp, #0xc0 - mov r0, #2 - pop {r3, r4, r5, pc} + ldr r0, _02236F60 ; =MOD83_0223B41C + ldr r0, [r0] + cmp r0, #0 + bne _02236F02 + add sp, #0xc0 + mov r0, #2 + pop {r3, r4, r5, pc} _02236F02: - mov r0, #1 - bl CTRDG_Enable - add r4, sp, #0 - mov r0, #2 - lsl r0, r0, #0x1a - add r1, r4, #0 - mov r2, #0xc0 - bl CTRDG_CpuCopy32 - ldr r3, _02236F64 ; =MOD83_0223B424 - mov r2, #0 + mov r0, #1 + bl CTRDG_Enable + add r4, sp, #0 + mov r0, #2 + lsl r0, r0, #0x1a + add r1, r4, #0 + mov r2, #0xc0 + bl CTRDG_CpuCopy32 + ldr r3, _02236F64 ; =MOD83_0223B424 + mov r2, #0 _02236F1A: - add r0, r4, r2 - ldrb r1, [r3] - ldrb r0, [r0, #4] - cmp r1, r0 - beq _02236F2A - add sp, #0xc0 - mov r0, #4 - pop {r3, r4, r5, pc} + add r0, r4, r2 + ldrb r1, [r3] + ldrb r0, [r0, #4] + cmp r1, r0 + beq _02236F2A + add sp, #0xc0 + mov r0, #4 + pop {r3, r4, r5, pc} _02236F2A: - add r2, r2, #1 - add r3, r3, #1 - cmp r2, #0x9c - blo _02236F1A - mov r2, #0 - mov r1, #0xa0 + add r2, r2, #1 + add r3, r3, #1 + cmp r2, #0x9c + blo _02236F1A + mov r2, #0 + mov r1, #0xa0 _02236F36: - ldrb r0, [r4, r1] - add r1, r1, #1 - add r0, r2, r0 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 - cmp r1, #0xbc - ble _02236F36 - add r2, #0x19 - neg r0, r2 - lsl r0, r0, #0x18 - add r4, #0xbd - lsr r1, r0, #0x18 - ldrb r0, [r4] - cmp r0, r1 - beq _02236F5A - add sp, #0xc0 - mov r0, #4 - pop {r3, r4, r5, pc} + ldrb r0, [r4, r1] + add r1, r1, #1 + add r0, r2, r0 + lsl r0, r0, #0x18 + lsr r2, r0, #0x18 + cmp r1, #0xbc + ble _02236F36 + add r2, #0x19 + neg r0, r2 + lsl r0, r0, #0x18 + add r4, #0xbd + lsr r1, r0, #0x18 + ldrb r0, [r4] + cmp r0, r1 + beq _02236F5A + add sp, #0xc0 + mov r0, #4 + pop {r3, r4, r5, pc} _02236F5A: - mov r0, #0 - add sp, #0xc0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + add sp, #0xc0 + pop {r3, r4, r5, pc} + .align 2, 0 _02236F60: .word MOD83_0223B41C _02236F64: .word MOD83_0223B424 - thumb_func_end MOD83_02236EB4 + thumb_func_end MOD83_02236EB4 - thumb_func_start MOD83_02236F68 + thumb_func_start MOD83_02236F68 MOD83_02236F68: ; 0x02236F68 - push {r3, r4} - mov r2, #0 - lsr r4, r1, #2 - add r3, r2, #0 - cmp r4, #0 - ble _02236F84 + push {r3, r4} + mov r2, #0 + lsr r4, r1, #2 + add r3, r2, #0 + cmp r4, #0 + ble _02236F84 _02236F74: - ldr r1, [r0] - add r0, r0, #4 - add r2, r2, r1 - add r1, r3, #1 - lsl r1, r1, #0x10 - lsr r3, r1, #0x10 - cmp r3, r4 - blt _02236F74 + ldr r1, [r0] + add r0, r0, #4 + add r2, r2, r1 + add r1, r3, #1 + lsl r1, r1, #0x10 + lsr r3, r1, #0x10 + cmp r3, r4 + blt _02236F74 _02236F84: - lsr r0, r2, #0x10 - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - lsl r0, r2, #0x10 - lsr r0, r0, #0x10 - add r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02236F68 - - thumb_func_start MOD83_02236F98 + lsr r0, r2, #0x10 + lsl r0, r0, #0x10 + lsr r1, r0, #0x10 + lsl r0, r2, #0x10 + lsr r0, r0, #0x10 + add r0, r1, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02236F68 + + thumb_func_start MOD83_02236F98 MOD83_02236F98: ; 0x02236F98 - push {r3, lr} - lsl r0, r0, #0x10 - mov r3, #1 - add r2, r1, #0 - lsr r0, r0, #0x10 - mov r1, #0 - lsl r3, r3, #0xc - bl CTRDG_ReadAgbFlash - pop {r3, pc} - thumb_func_end MOD83_02236F98 - - thumb_func_start MOD83_02236FAC + push {r3, lr} + lsl r0, r0, #0x10 + mov r3, #1 + add r2, r1, #0 + lsr r0, r0, #0x10 + mov r1, #0 + lsl r3, r3, #0xc + bl CTRDG_ReadAgbFlash + pop {r3, pc} + thumb_func_end MOD83_02236F98 + + thumb_func_start MOD83_02236FAC MOD83_02236FAC: ; 0x02236FAC - cmp r0, #0 - bne _02236FBA - ldr r0, _02236FE0 ; =MOD83_0223BB98 - ldr r0, [r0, #0x20] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr + cmp r0, #0 + bne _02236FBA + ldr r0, _02236FE0 ; =MOD83_0223BB98 + ldr r0, [r0, #0x20] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bx lr _02236FBA: - cmp r0, #4 - bne _02236FCE - ldr r0, _02236FE0 ; =MOD83_0223BB98 - ldr r1, [r0, #0x24] - mov r0, #0xba - lsl r0, r0, #6 - sub r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr + cmp r0, #4 + bne _02236FCE + ldr r0, _02236FE0 ; =MOD83_0223BB98 + ldr r1, [r0, #0x24] + mov r0, #0xba + lsl r0, r0, #6 + sub r0, r1, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bx lr _02236FCE: - cmp r0, #0xd - bne _02236FD8 - mov r0, #0x7d - lsl r0, r0, #4 - bx lr + cmp r0, #0xd + bne _02236FD8 + mov r0, #0x7d + lsl r0, r0, #4 + bx lr _02236FD8: - mov r0, #0x3e - lsl r0, r0, #6 - bx lr - nop + mov r0, #0x3e + lsl r0, r0, #6 + bx lr + nop _02236FE0: .word MOD83_0223BB98 - thumb_func_end MOD83_02236FAC + thumb_func_end MOD83_02236FAC - thumb_func_start MOD83_02236FE4 + thumb_func_start MOD83_02236FE4 MOD83_02236FE4: ; 0x02236FE4 - cmp r0, #0 - bne _02236FF4 - ldr r0, _02237034 ; =MOD83_0223BB18 - ldr r1, [r0, #8] - mov r0, #1 - lsl r0, r0, #0xc - add r0, r1, r0 - bx lr + cmp r0, #0 + bne _02236FF4 + ldr r0, _02237034 ; =MOD83_0223BB18 + ldr r1, [r0, #8] + mov r0, #1 + lsl r0, r0, #0xc + add r0, r1, r0 + bx lr _02236FF4: - cmp r0, #1 - blt _02237012 - cmp r0, #4 - bgt _02237012 - ldr r1, _02237034 ; =MOD83_0223BB18 - ldr r2, [r1, #8] - mov r1, #2 - lsl r1, r1, #0xc - add r2, r2, r1 - sub r1, r0, #1 - mov r0, #0x3e - lsl r0, r0, #6 - mul r0, r1 - add r0, r2, r0 - bx lr + cmp r0, #1 + blt _02237012 + cmp r0, #4 + bgt _02237012 + ldr r1, _02237034 ; =MOD83_0223BB18 + ldr r2, [r1, #8] + mov r1, #2 + lsl r1, r1, #0xc + add r2, r2, r1 + sub r1, r0, #1 + mov r0, #0x3e + lsl r0, r0, #6 + mul r0, r1 + add r0, r2, r0 + bx lr _02237012: - cmp r0, #5 - blt _02237030 - cmp r0, #0xe - bge _02237030 - ldr r1, _02237034 ; =MOD83_0223BB18 - ldr r2, [r1, #8] - mov r1, #6 - lsl r1, r1, #0xc - add r2, r2, r1 - sub r1, r0, #5 - mov r0, #0x3e - lsl r0, r0, #6 - mul r0, r1 - add r0, r2, r0 - bx lr + cmp r0, #5 + blt _02237030 + cmp r0, #0xe + bge _02237030 + ldr r1, _02237034 ; =MOD83_0223BB18 + ldr r2, [r1, #8] + mov r1, #6 + lsl r1, r1, #0xc + add r2, r2, r1 + sub r1, r0, #5 + mov r0, #0x3e + lsl r0, r0, #6 + mul r0, r1 + add r0, r2, r0 + bx lr _02237030: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02237034: .word MOD83_0223BB18 - thumb_func_end MOD83_02236FE4 + thumb_func_end MOD83_02236FE4 - thumb_func_start MOD83_02237038 + thumb_func_start MOD83_02237038 MOD83_02237038: ; 0x02237038 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - mov r6, #0 - add r5, r1, #0 - str r6, [sp, #4] - add r1, r2, #0 - str r6, [r1] - ldr r1, _022370CC ; =MOD83_0223BB18 - add r7, r0, #0 - str r6, [r1, #4] - mov r1, #0xe - str r2, [sp] - add r4, r6, #0 - mul r7, r1 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + mov r6, #0 + add r5, r1, #0 + str r6, [sp, #4] + add r1, r2, #0 + str r6, [r1] + ldr r1, _022370CC ; =MOD83_0223BB18 + add r7, r0, #0 + str r6, [r1, #4] + mov r1, #0xe + str r2, [sp] + add r4, r6, #0 + mul r7, r1 _02237054: - add r0, r4, #0 - mov r1, #0xe - bl _s32_div_f - add r0, r1, r7 - add r1, r5, #0 - bl MOD83_02236F98 - mov r1, #1 - add r0, r5, #0 - lsl r1, r1, #0xc - bl DC_FlushRange - ldr r0, _022370D0 ; =0x00000FF8 - ldr r1, [r5, r0] - ldr r0, _022370D4 ; =0x08012025 - cmp r1, r0 - bne _022370A6 - mov r0, #1 - str r0, [sp, #4] - ldr r0, _022370D8 ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r5, #0 - bl MOD83_02236F68 - ldr r1, _022370DC ; =0x00000FF6 - ldrh r1, [r5, r1] - cmp r1, r0 - bne _022370A6 - ldr r0, _022370E0 ; =0x00000FFC - ldr r1, [r5, r0] - ldr r0, [sp] - str r1, [r0] - ldr r0, _022370D8 ; =0x00000FF4 - ldrh r1, [r5, r0] - mov r0, #1 - lsl r0, r1 - orr r6, r0 + add r0, r4, #0 + mov r1, #0xe + bl _s32_div_f + add r0, r1, r7 + add r1, r5, #0 + bl MOD83_02236F98 + mov r1, #1 + add r0, r5, #0 + lsl r1, r1, #0xc + bl DC_FlushRange + ldr r0, _022370D0 ; =0x00000FF8 + ldr r1, [r5, r0] + ldr r0, _022370D4 ; =0x08012025 + cmp r1, r0 + bne _022370A6 + mov r0, #1 + str r0, [sp, #4] + ldr r0, _022370D8 ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r5, #0 + bl MOD83_02236F68 + ldr r1, _022370DC ; =0x00000FF6 + ldrh r1, [r5, r1] + cmp r1, r0 + bne _022370A6 + ldr r0, _022370E0 ; =0x00000FFC + ldr r1, [r5, r0] + ldr r0, [sp] + str r1, [r0] + ldr r0, _022370D8 ; =0x00000FF4 + ldrh r1, [r5, r0] + mov r0, #1 + lsl r0, r1 + orr r6, r0 _022370A6: - add r4, r4, #1 - cmp r4, #0xe - blt _02237054 - ldr r0, [sp, #4] - cmp r0, #0 - beq _022370C4 - ldr r0, _022370E4 ; =0x00003FFF - cmp r6, r0 - bne _022370BE - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add r4, r4, #1 + cmp r4, #0xe + blt _02237054 + ldr r0, [sp, #4] + cmp r0, #0 + beq _022370C4 + ldr r0, _022370E4 ; =0x00003FFF + cmp r6, r0 + bne _022370BE + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022370BE: - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _022370C4: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _022370CC: .word MOD83_0223BB18 _022370D0: .word 0x00000FF8 _022370D4: .word 0x08012025 @@ -19707,224 +19707,224 @@ _022370D8: .word 0x00000FF4 _022370DC: .word 0x00000FF6 _022370E0: .word 0x00000FFC _022370E4: .word 0x00003FFF - thumb_func_end MOD83_02237038 + thumb_func_end MOD83_02237038 - thumb_func_start MOD83_022370E8 + thumb_func_start MOD83_022370E8 MOD83_022370E8: ; 0x022370E8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r7, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - mov r0, #0 - add r1, r7, #0 - add r2, sp, #4 - bl MOD83_02237038 - add r6, r0, #0 - mov r0, #1 - add r1, r7, #0 - add r2, sp, #0 - bl MOD83_02237038 - cmp r6, #1 - bne _02237160 - cmp r0, #1 - bne _02237160 - mov r1, #0 - ldr r0, [sp, #4] - mvn r1, r1 - cmp r0, r1 - bne _02237120 - ldr r3, [sp] - cmp r3, #0 - beq _0223712E + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + mov r0, #0 + add r1, r7, #0 + add r2, sp, #4 + bl MOD83_02237038 + add r6, r0, #0 + mov r0, #1 + add r1, r7, #0 + add r2, sp, #0 + bl MOD83_02237038 + cmp r6, #1 + bne _02237160 + cmp r0, #1 + bne _02237160 + mov r1, #0 + ldr r0, [sp, #4] + mvn r1, r1 + cmp r0, r1 + bne _02237120 + ldr r3, [sp] + cmp r3, #0 + beq _0223712E _02237120: - cmp r0, #0 - bne _02237146 - mov r1, #0 - ldr r3, [sp] - mvn r1, r1 - cmp r3, r1 - bne _02237146 + cmp r0, #0 + bne _02237146 + mov r1, #0 + ldr r3, [sp] + mvn r1, r1 + cmp r3, r1 + bne _02237146 _0223712E: - add r2, r0, #1 - add r1, r3, #1 - cmp r2, r1 - bhs _0223713E - str r3, [r4] - mov r0, #1 - str r0, [r5] - b _0223715A + add r2, r0, #1 + add r1, r3, #1 + cmp r2, r1 + bhs _0223713E + str r3, [r4] + mov r0, #1 + str r0, [r5] + b _0223715A _0223713E: - str r0, [r4] - mov r0, #0 - str r0, [r5] - b _0223715A + str r0, [r4] + mov r0, #0 + str r0, [r5] + b _0223715A _02237146: - ldr r1, [sp] - cmp r0, r1 - bhs _02237154 - str r1, [r4] - mov r0, #1 - str r0, [r5] - b _0223715A + ldr r1, [sp] + cmp r0, r1 + bhs _02237154 + str r1, [r4] + mov r0, #1 + str r0, [r5] + b _0223715A _02237154: - str r0, [r4] - mov r0, #0 - str r0, [r5] + str r0, [r4] + mov r0, #0 + str r0, [r5] _0223715A: - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _02237160: - cmp r6, #1 - bne _02237184 - cmp r0, #1 - beq _02237184 - ldr r1, [sp, #4] - cmp r0, #0xff - str r1, [r4] - bne _0223717A - mov r0, #0 - str r0, [r5] - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + cmp r6, #1 + bne _02237184 + cmp r0, #1 + beq _02237184 + ldr r1, [sp, #4] + cmp r0, #0xff + str r1, [r4] + bne _0223717A + mov r0, #0 + str r0, [r5] + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _0223717A: - mov r0, #0 - str r0, [r5] - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #0 + str r0, [r5] + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _02237184: - cmp r0, #1 - bne _022371A6 - cmp r6, #1 - beq _022371A6 - ldr r0, [sp] - cmp r6, #0xff - str r0, [r4] - bne _0223719E - mov r0, #1 - str r0, [r5] - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + cmp r0, #1 + bne _022371A6 + cmp r6, #1 + beq _022371A6 + ldr r0, [sp] + cmp r6, #0xff + str r0, [r4] + bne _0223719E + mov r0, #1 + str r0, [r5] + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _0223719E: - mov r0, #1 - add sp, #8 - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + mov r0, #1 + add sp, #8 + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _022371A6: - cmp r6, #0 - bne _022371B8 - cmp r0, #0 - bne _022371B8 - mov r0, #0 - str r0, [r4] - add sp, #8 - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + cmp r6, #0 + bne _022371B8 + cmp r0, #0 + bne _022371B8 + mov r0, #0 + str r0, [r4] + add sp, #8 + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _022371B8: - mov r0, #0 - str r0, [r4] - str r0, [r5] - mov r0, #2 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022370E8 - - thumb_func_start MOD83_022371C4 + mov r0, #0 + str r0, [r4] + str r0, [r5] + mov r0, #2 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022370E8 + + thumb_func_start MOD83_022371C4 MOD83_022371C4: ; 0x022371C4 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02237278 ; =MOD83_0223BB18 - ldr r1, _0223727C ; =MOD83_0223BB18 - ldr r0, [r0, #8] - ldr r2, _02237280 ; =MOD83_0223BB28 - bl MOD83_022370E8 - cmp r0, #1 - beq _022371EE - cmp r0, #0 - beq _022371E6 - cmp r0, #2 - beq _022371EA - cmp r0, #0xff - bne _022371EE - mov r0, #5 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02237278 ; =MOD83_0223BB18 + ldr r1, _0223727C ; =MOD83_0223BB18 + ldr r0, [r0, #8] + ldr r2, _02237280 ; =MOD83_0223BB28 + bl MOD83_022370E8 + cmp r0, #1 + beq _022371EE + cmp r0, #0 + beq _022371E6 + cmp r0, #2 + beq _022371EA + cmp r0, #0xff + bne _022371EE + mov r0, #5 + pop {r3, r4, r5, r6, r7, pc} _022371E6: - mov r0, #7 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #7 + pop {r3, r4, r5, r6, r7, pc} _022371EA: - mov r0, #6 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #6 + pop {r3, r4, r5, r6, r7, pc} _022371EE: - ldr r7, _02237278 ; =MOD83_0223BB18 - ldr r0, [r7] - cmp r0, #1 - bhi _02237272 - mov r6, #0 - ldr r5, [r7, #8] - add r4, r6, #0 + ldr r7, _02237278 ; =MOD83_0223BB18 + ldr r0, [r7] + cmp r0, #1 + bhi _02237272 + mov r6, #0 + ldr r5, [r7, #8] + add r4, r6, #0 _022371FC: - ldr r1, [r7] - mov r0, #0xe - mul r0, r1 - add r0, r4, r0 - add r1, r5, #0 - bl MOD83_02236F98 - ldr r0, _02237284 ; =0x00000FF8 - ldr r1, [r5, r0] - ldr r0, _02237288 ; =0x08012025 - cmp r1, r0 - bne _0223725E - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r5, #0 - bl MOD83_02236F68 - ldr r1, _02237290 ; =0x00000FF6 - ldrh r1, [r5, r1] - cmp r1, r0 - bne _0223725E - ldr r0, _02237294 ; =0x00000FFC - mov r1, #1 - ldr r0, [r5, r0] - str r0, [r7, #0x10] - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - lsl r1, r0 - orr r6, r1 - bl MOD83_02236FAC - str r0, [sp] - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FE4 - add r1, r0, #0 - ldr r2, [sp] - add r0, r5, #0 - bl MIi_CpuCopy32 - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - cmp r0, #0 - bne _0223725E - str r4, [r7, #0xc] + ldr r1, [r7] + mov r0, #0xe + mul r0, r1 + add r0, r4, r0 + add r1, r5, #0 + bl MOD83_02236F98 + ldr r0, _02237284 ; =0x00000FF8 + ldr r1, [r5, r0] + ldr r0, _02237288 ; =0x08012025 + cmp r1, r0 + bne _0223725E + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r5, #0 + bl MOD83_02236F68 + ldr r1, _02237290 ; =0x00000FF6 + ldrh r1, [r5, r1] + cmp r1, r0 + bne _0223725E + ldr r0, _02237294 ; =0x00000FFC + mov r1, #1 + ldr r0, [r5, r0] + str r0, [r7, #0x10] + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + lsl r1, r0 + orr r6, r1 + bl MOD83_02236FAC + str r0, [sp] + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FE4 + add r1, r0, #0 + ldr r2, [sp] + add r0, r5, #0 + bl MIi_CpuCopy32 + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + cmp r0, #0 + bne _0223725E + str r4, [r7, #0xc] _0223725E: - add r4, r4, #1 - cmp r4, #0xe - blt _022371FC - ldr r0, _02237298 ; =0x00003FFF - cmp r6, r0 - bne _0223726E - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + add r4, r4, #1 + cmp r4, #0xe + blt _022371FC + ldr r0, _02237298 ; =0x00003FFF + cmp r6, r0 + bne _0223726E + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0223726E: - mov r0, #4 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #4 + pop {r3, r4, r5, r6, r7, pc} _02237272: - mov r0, #6 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #6 + pop {r3, r4, r5, r6, r7, pc} + nop _02237278: .word MOD83_0223BB18 _0223727C: .word MOD83_0223BB18 _02237280: .word MOD83_0223BB28 @@ -19934,2768 +19934,2768 @@ _0223728C: .word 0x00000FF4 _02237290: .word 0x00000FF6 _02237294: .word 0x00000FFC _02237298: .word 0x00003FFF - thumb_func_end MOD83_022371C4 + thumb_func_end MOD83_022371C4 - thumb_func_start MOD83_0223729C + thumb_func_start MOD83_0223729C MOD83_0223729C: ; 0x0223729C - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, _02237318 ; =MOD83_0223BB18 - mov r2, #1 - ldr r4, [r0, #8] - str r2, [r0, #0x14] - mov r0, #0 - add r1, r4, #0 - lsl r2, r2, #0xc - bl MIi_CpuClear32 - add r0, r5, #0 - bl MOD83_02236FAC - add r6, r0, #0 - add r0, r5, #0 - bl MOD83_02236FE4 - add r1, r4, #0 - add r2, r6, #0 - bl MIi_CpuCopy32 - ldr r0, _02237318 ; =MOD83_0223BB18 - ldr r1, [r0, #0x10] - ldr r0, _0223731C ; =0x00000FFC - str r1, [r4, r0] - add r1, r0, #0 - sub r1, #8 - strh r5, [r4, r1] - ldr r1, _02237320 ; =0x08012025 - sub r0, r0, #4 - str r1, [r4, r0] - add r0, r5, #0 - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r4, #0 - bl MOD83_02236F68 - ldr r1, _02237324 ; =0x00000FF6 - strh r0, [r4, r1] - ldr r0, _02237318 ; =MOD83_0223BB18 - mov r1, #0xe - ldr r0, [r0, #0xc] - add r0, r5, r0 - add r0, r0, #1 - bl _s32_div_f - ldr r0, _02237328 ; =MOD83_0223B41C - ldr r3, _0223732C ; =MOD83_02237330 - ldr r2, [r0, #4] - mov r0, #0xe - mul r0, r2 - add r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - add r1, r4, #0 - mov r2, #4 - bl CTRDG_WriteAndVerifyAgbFlashAsync - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, _02237318 ; =MOD83_0223BB18 + mov r2, #1 + ldr r4, [r0, #8] + str r2, [r0, #0x14] + mov r0, #0 + add r1, r4, #0 + lsl r2, r2, #0xc + bl MIi_CpuClear32 + add r0, r5, #0 + bl MOD83_02236FAC + add r6, r0, #0 + add r0, r5, #0 + bl MOD83_02236FE4 + add r1, r4, #0 + add r2, r6, #0 + bl MIi_CpuCopy32 + ldr r0, _02237318 ; =MOD83_0223BB18 + ldr r1, [r0, #0x10] + ldr r0, _0223731C ; =0x00000FFC + str r1, [r4, r0] + add r1, r0, #0 + sub r1, #8 + strh r5, [r4, r1] + ldr r1, _02237320 ; =0x08012025 + sub r0, r0, #4 + str r1, [r4, r0] + add r0, r5, #0 + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r4, #0 + bl MOD83_02236F68 + ldr r1, _02237324 ; =0x00000FF6 + strh r0, [r4, r1] + ldr r0, _02237318 ; =MOD83_0223BB18 + mov r1, #0xe + ldr r0, [r0, #0xc] + add r0, r5, r0 + add r0, r0, #1 + bl _s32_div_f + ldr r0, _02237328 ; =MOD83_0223B41C + ldr r3, _0223732C ; =MOD83_02237330 + ldr r2, [r0, #4] + mov r0, #0xe + mul r0, r2 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + add r1, r4, #0 + mov r2, #4 + bl CTRDG_WriteAndVerifyAgbFlashAsync + pop {r4, r5, r6, pc} + nop _02237318: .word MOD83_0223BB18 _0223731C: .word 0x00000FFC _02237320: .word 0x08012025 _02237324: .word 0x00000FF6 _02237328: .word MOD83_0223B41C _0223732C: .word MOD83_02237330 - thumb_func_end MOD83_0223729C + thumb_func_end MOD83_0223729C - thumb_func_start MOD83_02237330 + thumb_func_start MOD83_02237330 MOD83_02237330: ; 0x02237330 - ldr r0, [r0, #8] - cmp r0, #0 - bne _0223735C - ldr r1, _02237368 ; =MOD83_0223BB18 - ldr r0, [r1, #4] - add r0, r0, #1 - str r0, [r1, #4] - cmp r0, #0xe - blt _0223734A - mov r0, #0 - str r0, [r1, #4] - str r0, [r1, #0x14] - bx lr + ldr r0, [r0, #8] + cmp r0, #0 + bne _0223735C + ldr r1, _02237368 ; =MOD83_0223BB18 + ldr r0, [r1, #4] + add r0, r0, #1 + str r0, [r1, #4] + cmp r0, #0xe + blt _0223734A + mov r0, #0 + str r0, [r1, #4] + str r0, [r1, #0x14] + bx lr _0223734A: - cmp r0, #0xd - bne _02237356 - mov r0, #2 - str r0, [r1, #0x14] - mov r0, #0 - bx lr + cmp r0, #0xd + bne _02237356 + mov r0, #2 + str r0, [r1, #0x14] + mov r0, #0 + bx lr _02237356: - mov r0, #3 - str r0, [r1, #0x14] - b _02237362 + mov r0, #3 + str r0, [r1, #0x14] + b _02237362 _0223735C: - ldr r0, _02237368 ; =MOD83_0223BB18 - mov r1, #4 - str r1, [r0, #0x14] + ldr r0, _02237368 ; =MOD83_0223BB18 + mov r1, #4 + str r1, [r0, #0x14] _02237362: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02237368: .word MOD83_0223BB18 - thumb_func_end MOD83_02237330 + thumb_func_end MOD83_02237330 - thumb_func_start MOD83_0223736C + thumb_func_start MOD83_0223736C MOD83_0223736C: ; 0x0223736C - push {r3, lr} - ldr r1, _022373AC ; =MOD83_0223BB18 - ldr r0, [r1, #4] - cmp r0, #0 - bne _02237392 - ldr r1, [r1] - cmp r1, #1 - bne _02237382 - mov r2, #0 - ldr r1, _022373B0 ; =MOD83_0223B41C - b _02237386 + push {r3, lr} + ldr r1, _022373AC ; =MOD83_0223BB18 + ldr r0, [r1, #4] + cmp r0, #0 + bne _02237392 + ldr r1, [r1] + cmp r1, #1 + bne _02237382 + mov r2, #0 + ldr r1, _022373B0 ; =MOD83_0223B41C + b _02237386 _02237382: - ldr r1, _022373B0 ; =MOD83_0223B41C - mov r2, #1 + ldr r1, _022373B0 ; =MOD83_0223B41C + mov r2, #1 _02237386: - str r2, [r1, #4] - ldr r1, _022373AC ; =MOD83_0223BB18 - ldr r2, [r1, #0x10] - add r2, r2, #1 - str r2, [r1, #0x10] - b _02237396 + str r2, [r1, #4] + ldr r1, _022373AC ; =MOD83_0223BB18 + ldr r2, [r1, #0x10] + add r2, r2, #1 + str r2, [r1, #0x10] + b _02237396 _02237392: - mov r0, #0 - pop {r3, pc} + mov r0, #0 + pop {r3, pc} _02237396: - ldr r1, _022373B0 ; =MOD83_0223B41C - ldr r1, [r1, #4] - cmp r1, #0 - bge _022373A2 - mov r0, #0 - pop {r3, pc} + ldr r1, _022373B0 ; =MOD83_0223B41C + ldr r1, [r1, #4] + cmp r1, #0 + bge _022373A2 + mov r0, #0 + pop {r3, pc} _022373A2: - bl MOD83_0223729C - mov r0, #1 - pop {r3, pc} - nop + bl MOD83_0223729C + mov r0, #1 + pop {r3, pc} + nop _022373AC: .word MOD83_0223BB18 _022373B0: .word MOD83_0223B41C - thumb_func_end MOD83_0223736C + thumb_func_end MOD83_0223736C - thumb_func_start MOD83_022373B4 + thumb_func_start MOD83_022373B4 MOD83_022373B4: ; 0x022373B4 - push {r3, lr} - ldr r1, _022373F0 ; =MOD83_0223BB18 - ldr r0, [r1, #0x14] - cmp r0, #4 - bhi _022373EC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r1, _022373F0 ; =MOD83_0223BB18 + ldr r0, [r1, #0x14] + cmp r0, #4 + bhi _022373EC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022373CA: ; jump table - .short _022373EC - _022373CA - 2 ; case 0 - .short _022373E4 - _022373CA - 2 ; case 1 - .short _022373D4 - _022373CA - 2 ; case 2 - .short _022373DE - _022373CA - 2 ; case 3 - .short _022373E8 - _022373CA - 2 ; case 4 + .short _022373EC - _022373CA - 2 ; case 0 + .short _022373E4 - _022373CA - 2 ; case 1 + .short _022373D4 - _022373CA - 2 ; case 2 + .short _022373DE - _022373CA - 2 ; case 3 + .short _022373E8 - _022373CA - 2 ; case 4 _022373D4: - ldr r0, [r1, #4] - bl MOD83_0223729C - mov r0, #0 - pop {r3, pc} + ldr r0, [r1, #4] + bl MOD83_0223729C + mov r0, #0 + pop {r3, pc} _022373DE: - ldr r0, [r1, #4] - bl MOD83_0223729C + ldr r0, [r1, #4] + bl MOD83_0223729C _022373E4: - mov r0, #0xa - pop {r3, pc} + mov r0, #0xa + pop {r3, pc} _022373E8: - mov r0, #8 - pop {r3, pc} + mov r0, #8 + pop {r3, pc} _022373EC: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _022373F0: .word MOD83_0223BB18 - thumb_func_end MOD83_022373B4 + thumb_func_end MOD83_022373B4 - thumb_func_start MOD83_022373F4 + thumb_func_start MOD83_022373F4 MOD83_022373F4: ; 0x022373F4 - ldr r0, _02237428 ; =MOD83_0223BB18 - ldr r0, [r0, #0x14] - cmp r0, #4 - bhi _02237422 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, _02237428 ; =MOD83_0223BB18 + ldr r0, [r0, #0x14] + cmp r0, #4 + bhi _02237422 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237408: ; jump table - .short _02237422 - _02237408 - 2 ; case 0 - .short _0223741A - _02237408 - 2 ; case 1 - .short _02237412 - _02237408 - 2 ; case 2 - .short _02237416 - _02237408 - 2 ; case 3 - .short _0223741E - _02237408 - 2 ; case 4 + .short _02237422 - _02237408 - 2 ; case 0 + .short _0223741A - _02237408 - 2 ; case 1 + .short _02237412 - _02237408 - 2 ; case 2 + .short _02237416 - _02237408 - 2 ; case 3 + .short _0223741E - _02237408 - 2 ; case 4 _02237412: - mov r0, #0xb - bx lr + mov r0, #0xb + bx lr _02237416: - mov r0, #0xa - bx lr + mov r0, #0xa + bx lr _0223741A: - mov r0, #9 - bx lr + mov r0, #9 + bx lr _0223741E: - mov r0, #8 - bx lr + mov r0, #8 + bx lr _02237422: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02237428: .word MOD83_0223BB18 - thumb_func_end MOD83_022373F4 + thumb_func_end MOD83_022373F4 - thumb_func_start MOD83_0223742C + thumb_func_start MOD83_0223742C MOD83_0223742C: ; 0x0223742C - ldr r0, _02237438 ; =MOD83_0223BB18 - ldr r1, [r0, #8] - mov r0, #6 - lsl r0, r0, #0xc - add r0, r1, r0 - bx lr - .align 2, 0 + ldr r0, _02237438 ; =MOD83_0223BB18 + ldr r1, [r0, #8] + mov r0, #6 + lsl r0, r0, #0xc + add r0, r1, r0 + bx lr + .align 2, 0 _02237438: .word MOD83_0223BB18 - thumb_func_end MOD83_0223742C + thumb_func_end MOD83_0223742C - thumb_func_start MOD83_0223743C + thumb_func_start MOD83_0223743C MOD83_0223743C: ; 0x0223743C - ldr r3, _02237444 ; =MOD83_02236FE4 - mov r0, #0 - bx r3 - nop + ldr r3, _02237444 ; =MOD83_02236FE4 + mov r0, #0 + bx r3 + nop _02237444: .word MOD83_02236FE4 - thumb_func_end MOD83_0223743C + thumb_func_end MOD83_0223743C - thumb_func_start MOD83_02237448 + thumb_func_start MOD83_02237448 MOD83_02237448: ; 0x02237448 - push {r3, lr} - bl MOD83_0223743C - ldrb r2, [r0, #0xb] - ldrb r1, [r0, #0xa] - lsl r3, r2, #8 - ldrb r2, [r0, #0xd] - ldrb r0, [r0, #0xc] - lsl r2, r2, #0x18 - lsl r0, r0, #0x10 - orr r0, r2 - orr r0, r3 - orr r0, r1 - pop {r3, pc} - thumb_func_end MOD83_02237448 - - thumb_func_start MOD83_02237464 + push {r3, lr} + bl MOD83_0223743C + ldrb r2, [r0, #0xb] + ldrb r1, [r0, #0xa] + lsl r3, r2, #8 + ldrb r2, [r0, #0xd] + ldrb r0, [r0, #0xc] + lsl r2, r2, #0x18 + lsl r0, r0, #0x10 + orr r0, r2 + orr r0, r3 + orr r0, r1 + pop {r3, pc} + thumb_func_end MOD83_02237448 + + thumb_func_start MOD83_02237464 MOD83_02237464: ; 0x02237464 - ldr r3, _02237468 ; =MOD83_0223743C - bx r3 - .align 2, 0 + ldr r3, _02237468 ; =MOD83_0223743C + bx r3 + .align 2, 0 _02237468: .word MOD83_0223743C - thumb_func_end MOD83_02237464 + thumb_func_end MOD83_02237464 - thumb_func_start MOD83_0223746C + thumb_func_start MOD83_0223746C MOD83_0223746C: ; 0x0223746C - push {r4, r5, r6, lr} - add r4, r0, #0 - add r0, r1, #0 - mov r1, #0x18 - add r5, r2, #0 - mov r6, #0 - bl _u32_div_f - cmp r1, #0x17 - bhi _022374C2 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, lr} + add r4, r0, #0 + add r0, r1, #0 + mov r1, #0x18 + add r5, r2, #0 + mov r6, #0 + bl _u32_div_f + cmp r1, #0x17 + bhi _022374C2 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223748C: ; jump table - .short _022374BC - _0223748C - 2 ; case 0 - .short _022374EE - _0223748C - 2 ; case 1 - .short _0223751E - _0223748C - 2 ; case 2 - .short _0223754E - _0223748C - 2 ; case 3 - .short _0223757E - _0223748C - 2 ; case 4 - .short _022375AE - _0223748C - 2 ; case 5 - .short _022375DE - _0223748C - 2 ; case 6 - .short _02237610 - _0223748C - 2 ; case 7 - .short _02237640 - _0223748C - 2 ; case 8 - .short _02237670 - _0223748C - 2 ; case 9 - .short _022376A0 - _0223748C - 2 ; case 10 - .short _022376D0 - _0223748C - 2 ; case 11 - .short _02237700 - _0223748C - 2 ; case 12 - .short _02237732 - _0223748C - 2 ; case 13 - .short _02237762 - _0223748C - 2 ; case 14 - .short _02237792 - _0223748C - 2 ; case 15 - .short _022377C2 - _0223748C - 2 ; case 16 - .short _022377F2 - _0223748C - 2 ; case 17 - .short _02237822 - _0223748C - 2 ; case 18 - .short _02237854 - _0223748C - 2 ; case 19 - .short _02237884 - _0223748C - 2 ; case 20 - .short _022378B4 - _0223748C - 2 ; case 21 - .short _022378E4 - _0223748C - 2 ; case 22 - .short _02237914 - _0223748C - 2 ; case 23 + .short _022374BC - _0223748C - 2 ; case 0 + .short _022374EE - _0223748C - 2 ; case 1 + .short _0223751E - _0223748C - 2 ; case 2 + .short _0223754E - _0223748C - 2 ; case 3 + .short _0223757E - _0223748C - 2 ; case 4 + .short _022375AE - _0223748C - 2 ; case 5 + .short _022375DE - _0223748C - 2 ; case 6 + .short _02237610 - _0223748C - 2 ; case 7 + .short _02237640 - _0223748C - 2 ; case 8 + .short _02237670 - _0223748C - 2 ; case 9 + .short _022376A0 - _0223748C - 2 ; case 10 + .short _022376D0 - _0223748C - 2 ; case 11 + .short _02237700 - _0223748C - 2 ; case 12 + .short _02237732 - _0223748C - 2 ; case 13 + .short _02237762 - _0223748C - 2 ; case 14 + .short _02237792 - _0223748C - 2 ; case 15 + .short _022377C2 - _0223748C - 2 ; case 16 + .short _022377F2 - _0223748C - 2 ; case 17 + .short _02237822 - _0223748C - 2 ; case 18 + .short _02237854 - _0223748C - 2 ; case 19 + .short _02237884 - _0223748C - 2 ; case 20 + .short _022378B4 - _0223748C - 2 ; case 21 + .short _022378E4 - _0223748C - 2 ; case 22 + .short _02237914 - _0223748C - 2 ; case 23 _022374BC: - add r4, #0x20 - cmp r5, #3 - bls _022374C4 + add r4, #0x20 + cmp r5, #3 + bls _022374C4 _022374C2: - b _02237942 + b _02237942 _022374C4: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022374D0: ; jump table - .short _022374D8 - _022374D0 - 2 ; case 0 - .short _022374DC - _022374D0 - 2 ; case 1 - .short _022374E2 - _022374D0 - 2 ; case 2 - .short _022374E8 - _022374D0 - 2 ; case 3 + .short _022374D8 - _022374D0 - 2 ; case 0 + .short _022374DC - _022374D0 - 2 ; case 1 + .short _022374E2 - _022374D0 - 2 ; case 2 + .short _022374E8 - _022374D0 - 2 ; case 3 _022374D8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022374DC: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022374E2: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022374E8: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022374EE: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237500: ; jump table - .short _02237508 - _02237500 - 2 ; case 0 - .short _0223750C - _02237500 - 2 ; case 1 - .short _02237512 - _02237500 - 2 ; case 2 - .short _02237518 - _02237500 - 2 ; case 3 + .short _02237508 - _02237500 - 2 ; case 0 + .short _0223750C - _02237500 - 2 ; case 1 + .short _02237512 - _02237500 - 2 ; case 2 + .short _02237518 - _02237500 - 2 ; case 3 _02237508: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223750C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237512: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237518: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223751E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237530: ; jump table - .short _02237538 - _02237530 - 2 ; case 0 - .short _0223753C - _02237530 - 2 ; case 1 - .short _02237542 - _02237530 - 2 ; case 2 - .short _02237548 - _02237530 - 2 ; case 3 + .short _02237538 - _02237530 - 2 ; case 0 + .short _0223753C - _02237530 - 2 ; case 1 + .short _02237542 - _02237530 - 2 ; case 2 + .short _02237548 - _02237530 - 2 ; case 3 _02237538: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223753C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237542: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237548: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223754E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237560: ; jump table - .short _02237568 - _02237560 - 2 ; case 0 - .short _0223756C - _02237560 - 2 ; case 1 - .short _02237572 - _02237560 - 2 ; case 2 - .short _02237578 - _02237560 - 2 ; case 3 + .short _02237568 - _02237560 - 2 ; case 0 + .short _0223756C - _02237560 - 2 ; case 1 + .short _02237572 - _02237560 - 2 ; case 2 + .short _02237578 - _02237560 - 2 ; case 3 _02237568: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223756C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237572: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237578: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223757E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237590: ; jump table - .short _02237598 - _02237590 - 2 ; case 0 - .short _0223759C - _02237590 - 2 ; case 1 - .short _022375A2 - _02237590 - 2 ; case 2 - .short _022375A8 - _02237590 - 2 ; case 3 + .short _02237598 - _02237590 - 2 ; case 0 + .short _0223759C - _02237590 - 2 ; case 1 + .short _022375A2 - _02237590 - 2 ; case 2 + .short _022375A8 - _02237590 - 2 ; case 3 _02237598: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223759C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022375A2: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022375A8: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022375AE: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022375C0: ; jump table - .short _022375C8 - _022375C0 - 2 ; case 0 - .short _022375CC - _022375C0 - 2 ; case 1 - .short _022375D2 - _022375C0 - 2 ; case 2 - .short _022375D8 - _022375C0 - 2 ; case 3 + .short _022375C8 - _022375C0 - 2 ; case 0 + .short _022375CC - _022375C0 - 2 ; case 1 + .short _022375D2 - _022375C0 - 2 ; case 2 + .short _022375D8 - _022375C0 - 2 ; case 3 _022375C8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022375CC: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022375D2: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022375D8: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022375DE: - add r4, #0x20 - cmp r5, #3 - bls _022375E6 + add r4, #0x20 + cmp r5, #3 + bls _022375E6 _022375E4: - b _02237942 + b _02237942 _022375E6: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022375F2: ; jump table - .short _022375FA - _022375F2 - 2 ; case 0 - .short _02237600 - _022375F2 - 2 ; case 1 - .short _02237604 - _022375F2 - 2 ; case 2 - .short _0223760A - _022375F2 - 2 ; case 3 + .short _022375FA - _022375F2 - 2 ; case 0 + .short _02237600 - _022375F2 - 2 ; case 1 + .short _02237604 - _022375F2 - 2 ; case 2 + .short _0223760A - _022375F2 - 2 ; case 3 _022375FA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237600: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237604: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223760A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237610: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237622: ; jump table - .short _0223762A - _02237622 - 2 ; case 0 - .short _02237630 - _02237622 - 2 ; case 1 - .short _02237634 - _02237622 - 2 ; case 2 - .short _0223763A - _02237622 - 2 ; case 3 + .short _0223762A - _02237622 - 2 ; case 0 + .short _02237630 - _02237622 - 2 ; case 1 + .short _02237634 - _02237622 - 2 ; case 2 + .short _0223763A - _02237622 - 2 ; case 3 _0223762A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237630: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237634: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223763A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237640: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237652: ; jump table - .short _0223765A - _02237652 - 2 ; case 0 - .short _02237660 - _02237652 - 2 ; case 1 - .short _02237664 - _02237652 - 2 ; case 2 - .short _0223766A - _02237652 - 2 ; case 3 + .short _0223765A - _02237652 - 2 ; case 0 + .short _02237660 - _02237652 - 2 ; case 1 + .short _02237664 - _02237652 - 2 ; case 2 + .short _0223766A - _02237652 - 2 ; case 3 _0223765A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237660: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237664: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _0223766A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237670: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237682: ; jump table - .short _0223768A - _02237682 - 2 ; case 0 - .short _02237690 - _02237682 - 2 ; case 1 - .short _02237694 - _02237682 - 2 ; case 2 - .short _0223769A - _02237682 - 2 ; case 3 + .short _0223768A - _02237682 - 2 ; case 0 + .short _02237690 - _02237682 - 2 ; case 1 + .short _02237694 - _02237682 - 2 ; case 2 + .short _0223769A - _02237682 - 2 ; case 3 _0223768A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237690: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237694: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _0223769A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376A0: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022376B2: ; jump table - .short _022376BA - _022376B2 - 2 ; case 0 - .short _022376C0 - _022376B2 - 2 ; case 1 - .short _022376C4 - _022376B2 - 2 ; case 2 - .short _022376CA - _022376B2 - 2 ; case 3 + .short _022376BA - _022376B2 - 2 ; case 0 + .short _022376C0 - _022376B2 - 2 ; case 1 + .short _022376C4 - _022376B2 - 2 ; case 2 + .short _022376CA - _022376B2 - 2 ; case 3 _022376BA: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376C0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022376C4: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022376CA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022376D0: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022376E2: ; jump table - .short _022376EA - _022376E2 - 2 ; case 0 - .short _022376F0 - _022376E2 - 2 ; case 1 - .short _022376F4 - _022376E2 - 2 ; case 2 - .short _022376FA - _022376E2 - 2 ; case 3 + .short _022376EA - _022376E2 - 2 ; case 0 + .short _022376F0 - _022376E2 - 2 ; case 1 + .short _022376F4 - _022376E2 - 2 ; case 2 + .short _022376FA - _022376E2 - 2 ; case 3 _022376EA: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022376F0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022376F4: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376FA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237700: - add r4, #0x20 - cmp r5, #3 - bls _02237708 + add r4, #0x20 + cmp r5, #3 + bls _02237708 _02237706: - b _02237942 + b _02237942 _02237708: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237714: ; jump table - .short _0223771C - _02237714 - 2 ; case 0 - .short _02237722 - _02237714 - 2 ; case 1 - .short _02237728 - _02237714 - 2 ; case 2 - .short _0223772C - _02237714 - 2 ; case 3 + .short _0223771C - _02237714 - 2 ; case 0 + .short _02237722 - _02237714 - 2 ; case 1 + .short _02237728 - _02237714 - 2 ; case 2 + .short _0223772C - _02237714 - 2 ; case 3 _0223771C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237722: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237728: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223772C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237732: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237744: ; jump table - .short _0223774C - _02237744 - 2 ; case 0 - .short _02237752 - _02237744 - 2 ; case 1 - .short _02237758 - _02237744 - 2 ; case 2 - .short _0223775C - _02237744 - 2 ; case 3 + .short _0223774C - _02237744 - 2 ; case 0 + .short _02237752 - _02237744 - 2 ; case 1 + .short _02237758 - _02237744 - 2 ; case 2 + .short _0223775C - _02237744 - 2 ; case 3 _0223774C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237752: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237758: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223775C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237762: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237774: ; jump table - .short _0223777C - _02237774 - 2 ; case 0 - .short _02237782 - _02237774 - 2 ; case 1 - .short _02237788 - _02237774 - 2 ; case 2 - .short _0223778C - _02237774 - 2 ; case 3 + .short _0223777C - _02237774 - 2 ; case 0 + .short _02237782 - _02237774 - 2 ; case 1 + .short _02237788 - _02237774 - 2 ; case 2 + .short _0223778C - _02237774 - 2 ; case 3 _0223777C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237782: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237788: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223778C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237792: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022377A4: ; jump table - .short _022377AC - _022377A4 - 2 ; case 0 - .short _022377B2 - _022377A4 - 2 ; case 1 - .short _022377B8 - _022377A4 - 2 ; case 2 - .short _022377BC - _022377A4 - 2 ; case 3 + .short _022377AC - _022377A4 - 2 ; case 0 + .short _022377B2 - _022377A4 - 2 ; case 1 + .short _022377B8 - _022377A4 - 2 ; case 2 + .short _022377BC - _022377A4 - 2 ; case 3 _022377AC: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022377B2: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022377B8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022377BC: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022377C2: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022377D4: ; jump table - .short _022377DC - _022377D4 - 2 ; case 0 - .short _022377E2 - _022377D4 - 2 ; case 1 - .short _022377E8 - _022377D4 - 2 ; case 2 - .short _022377EC - _022377D4 - 2 ; case 3 + .short _022377DC - _022377D4 - 2 ; case 0 + .short _022377E2 - _022377D4 - 2 ; case 1 + .short _022377E8 - _022377D4 - 2 ; case 2 + .short _022377EC - _022377D4 - 2 ; case 3 _022377DC: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022377E2: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022377E8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022377EC: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022377F2: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237804: ; jump table - .short _0223780C - _02237804 - 2 ; case 0 - .short _02237812 - _02237804 - 2 ; case 1 - .short _02237818 - _02237804 - 2 ; case 2 - .short _0223781C - _02237804 - 2 ; case 3 + .short _0223780C - _02237804 - 2 ; case 0 + .short _02237812 - _02237804 - 2 ; case 1 + .short _02237818 - _02237804 - 2 ; case 2 + .short _0223781C - _02237804 - 2 ; case 3 _0223780C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237812: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237818: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223781C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237822: - add r4, #0x20 - cmp r5, #3 - bls _0223782A + add r4, #0x20 + cmp r5, #3 + bls _0223782A _02237828: - b _02237942 + b _02237942 _0223782A: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237836: ; jump table - .short _0223783E - _02237836 - 2 ; case 0 - .short _02237844 - _02237836 - 2 ; case 1 - .short _0223784A - _02237836 - 2 ; case 2 - .short _02237850 - _02237836 - 2 ; case 3 + .short _0223783E - _02237836 - 2 ; case 0 + .short _02237844 - _02237836 - 2 ; case 1 + .short _0223784A - _02237836 - 2 ; case 2 + .short _02237850 - _02237836 - 2 ; case 3 _0223783E: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237844: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223784A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237850: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237854: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237866: ; jump table - .short _0223786E - _02237866 - 2 ; case 0 - .short _02237874 - _02237866 - 2 ; case 1 - .short _0223787A - _02237866 - 2 ; case 2 - .short _02237880 - _02237866 - 2 ; case 3 + .short _0223786E - _02237866 - 2 ; case 0 + .short _02237874 - _02237866 - 2 ; case 1 + .short _0223787A - _02237866 - 2 ; case 2 + .short _02237880 - _02237866 - 2 ; case 3 _0223786E: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237874: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223787A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237880: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237884: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237896: ; jump table - .short _0223789E - _02237896 - 2 ; case 0 - .short _022378A4 - _02237896 - 2 ; case 1 - .short _022378AA - _02237896 - 2 ; case 2 - .short _022378B0 - _02237896 - 2 ; case 3 + .short _0223789E - _02237896 - 2 ; case 0 + .short _022378A4 - _02237896 - 2 ; case 1 + .short _022378AA - _02237896 - 2 ; case 2 + .short _022378B0 - _02237896 - 2 ; case 3 _0223789E: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022378A4: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022378AA: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022378B0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022378B4: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022378C6: ; jump table - .short _022378CE - _022378C6 - 2 ; case 0 - .short _022378D4 - _022378C6 - 2 ; case 1 - .short _022378DA - _022378C6 - 2 ; case 2 - .short _022378E0 - _022378C6 - 2 ; case 3 + .short _022378CE - _022378C6 - 2 ; case 0 + .short _022378D4 - _022378C6 - 2 ; case 1 + .short _022378DA - _022378C6 - 2 ; case 2 + .short _022378E0 - _022378C6 - 2 ; case 3 _022378CE: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022378D4: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022378DA: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022378E0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022378E4: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022378F6: ; jump table - .short _022378FE - _022378F6 - 2 ; case 0 - .short _02237904 - _022378F6 - 2 ; case 1 - .short _0223790A - _022378F6 - 2 ; case 2 - .short _02237910 - _022378F6 - 2 ; case 3 + .short _022378FE - _022378F6 - 2 ; case 0 + .short _02237904 - _022378F6 - 2 ; case 1 + .short _0223790A - _022378F6 - 2 ; case 2 + .short _02237910 - _022378F6 - 2 ; case 3 _022378FE: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237904: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223790A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237910: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237914: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237926: ; jump table - .short _0223792E - _02237926 - 2 ; case 0 - .short _02237934 - _02237926 - 2 ; case 1 - .short _0223793A - _02237926 - 2 ; case 2 - .short _02237940 - _02237926 - 2 ; case 3 + .short _0223792E - _02237926 - 2 ; case 0 + .short _02237934 - _02237926 - 2 ; case 1 + .short _0223793A - _02237926 - 2 ; case 2 + .short _02237940 - _02237926 - 2 ; case 3 _0223792E: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237934: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223793A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237940: - add r6, r4, #0 + add r6, r4, #0 _02237942: - add r0, r6, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_0223746C + add r0, r6, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_0223746C - thumb_func_start MOD83_02237948 + thumb_func_start MOD83_02237948 MOD83_02237948: ; 0x02237948 - push {r3, r4} - add r4, r0, #0 - mov r3, #0 - add r4, #0x20 + push {r3, r4} + add r4, r0, #0 + mov r3, #0 + add r4, #0x20 _02237950: - ldr r2, [r4] - ldr r1, [r0, #4] - add r3, r3, #1 - eor r2, r1 - str r2, [r4] - ldr r1, [r0] - eor r1, r2 - stmia r4!, {r1} - cmp r3, #0xc - blo _02237950 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02237948 - - thumb_func_start MOD83_02237968 + ldr r2, [r4] + ldr r1, [r0, #4] + add r3, r3, #1 + eor r2, r1 + str r2, [r4] + ldr r1, [r0] + eor r1, r2 + stmia r4!, {r1} + cmp r3, #0xc + blo _02237950 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02237948 + + thumb_func_start MOD83_02237968 MOD83_02237968: ; 0x02237968 - push {r3, r4} - add r4, r0, #0 - mov r3, #0 - add r4, #0x20 + push {r3, r4} + add r4, r0, #0 + mov r3, #0 + add r4, #0x20 _02237970: - ldr r2, [r4] - ldr r1, [r0] - add r3, r3, #1 - eor r2, r1 - str r2, [r4] - ldr r1, [r0, #4] - eor r1, r2 - stmia r4!, {r1} - cmp r3, #0xc - blo _02237970 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02237968 - - thumb_func_start MOD83_02237988 + ldr r2, [r4] + ldr r1, [r0] + add r3, r3, #1 + eor r2, r1 + str r2, [r4] + ldr r1, [r0, #4] + eor r1, r2 + stmia r4!, {r1} + cmp r3, #0xc + blo _02237970 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02237968 + + thumb_func_start MOD83_02237988 MOD83_02237988: ; 0x02237988 - push {r3, r4, r5, r6, r7, lr} - add r1, r0, #0 - mov r4, #0 - ldr r1, [r1] - str r0, [sp] - add r2, r4, #0 - bl MOD83_0223746C - add r5, r0, #0 - ldr r0, [sp] - mov r2, #1 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r6, r0, #0 - ldr r0, [sp] - mov r2, #2 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r7, r0, #0 - ldr r0, [sp] - mov r2, #3 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r1, r4, #0 + push {r3, r4, r5, r6, r7, lr} + add r1, r0, #0 + mov r4, #0 + ldr r1, [r1] + str r0, [sp] + add r2, r4, #0 + bl MOD83_0223746C + add r5, r0, #0 + ldr r0, [sp] + mov r2, #1 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r6, r0, #0 + ldr r0, [sp] + mov r2, #2 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r7, r0, #0 + ldr r0, [sp] + mov r2, #3 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r1, r4, #0 _022379C4: - ldrh r2, [r5] - add r1, r1, #1 - add r5, r5, #2 - add r2, r4, r2 - lsl r2, r2, #0x10 - lsr r4, r2, #0x10 - cmp r1, #6 - blt _022379C4 - mov r2, #0 + ldrh r2, [r5] + add r1, r1, #1 + add r5, r5, #2 + add r2, r4, r2 + lsl r2, r2, #0x10 + lsr r4, r2, #0x10 + cmp r1, #6 + blt _022379C4 + mov r2, #0 _022379D6: - ldrh r1, [r6] - add r2, r2, #1 - add r6, r6, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379D6 - mov r2, #0 + ldrh r1, [r6] + add r2, r2, #1 + add r6, r6, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379D6 + mov r2, #0 _022379E8: - ldrh r1, [r7] - add r2, r2, #1 - add r7, r7, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379E8 - mov r2, #0 + ldrh r1, [r7] + add r2, r2, #1 + add r7, r7, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379E8 + mov r2, #0 _022379FA: - ldrh r1, [r0] - add r2, r2, #1 - add r0, r0, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379FA - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_02237988 - - thumb_func_start AGB_GetBoxMonData + ldrh r1, [r0] + add r2, r2, #1 + add r0, r0, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379FA + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_02237988 + + thumb_func_start AGB_GetBoxMonData AGB_GetBoxMonData: ; 0x02237A10 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - mov r4, #0 - add r5, r0, #0 - str r1, [sp] - add r7, r2, #0 - add r6, r4, #0 - str r4, [sp, #0xc] - str r4, [sp, #8] - str r4, [sp, #4] - cmp r1, #0xa - ble _02237A86 - ldr r1, [r5] - add r2, r4, #0 - bl MOD83_0223746C - str r0, [sp, #0xc] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #1 - bl MOD83_0223746C - str r0, [sp, #8] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #2 - bl MOD83_0223746C - str r0, [sp, #4] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #3 - bl MOD83_0223746C - add r6, r0, #0 - add r0, r5, #0 - bl MOD83_02237948 - add r0, r5, #0 - bl MOD83_02237988 - ldrh r1, [r5, #0x1c] - cmp r0, r1 - beq _02237A86 - ldrb r0, [r5, #0x13] - mov r1, #1 - bic r0, r1 - mov r1, #1 - orr r0, r1 - strb r0, [r5, #0x13] - ldrb r1, [r5, #0x13] - mov r0, #4 - orr r0, r1 - strb r0, [r5, #0x13] - mov r0, #1 - ldr r1, [r6, #4] - lsl r0, r0, #0x1e - orr r0, r1 - str r0, [r6, #4] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + mov r4, #0 + add r5, r0, #0 + str r1, [sp] + add r7, r2, #0 + add r6, r4, #0 + str r4, [sp, #0xc] + str r4, [sp, #8] + str r4, [sp, #4] + cmp r1, #0xa + ble _02237A86 + ldr r1, [r5] + add r2, r4, #0 + bl MOD83_0223746C + str r0, [sp, #0xc] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #1 + bl MOD83_0223746C + str r0, [sp, #8] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #2 + bl MOD83_0223746C + str r0, [sp, #4] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #3 + bl MOD83_0223746C + add r6, r0, #0 + add r0, r5, #0 + bl MOD83_02237948 + add r0, r5, #0 + bl MOD83_02237988 + ldrh r1, [r5, #0x1c] + cmp r0, r1 + beq _02237A86 + ldrb r0, [r5, #0x13] + mov r1, #1 + bic r0, r1 + mov r1, #1 + orr r0, r1 + strb r0, [r5, #0x13] + ldrb r1, [r5, #0x13] + mov r0, #4 + orr r0, r1 + strb r0, [r5, #0x13] + mov r0, #1 + ldr r1, [r6, #4] + lsl r0, r0, #0x1e + orr r0, r1 + str r0, [r6, #4] _02237A86: - ldr r0, [sp] - cmp r0, #0x50 - bls _02237A8E - b _02237D7C + ldr r0, [sp] + cmp r0, #0x50 + bls _02237A8E + b _02237D7C _02237A8E: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237A9A: ; jump table - .short _02237B3C - _02237A9A - 2 ; case 0 - .short _02237B40 - _02237A9A - 2 ; case 1 - .short _02237B44 - _02237A9A - 2 ; case 2 - .short _02237B64 - _02237A9A - 2 ; case 3 - .short _02237B68 - _02237A9A - 2 ; case 4 - .short _02237B70 - _02237A9A - 2 ; case 5 - .short _02237B78 - _02237A9A - 2 ; case 6 - .short _02237B80 - _02237A9A - 2 ; case 7 - .short _02237B94 - _02237A9A - 2 ; case 8 - .short _02237B98 - _02237A9A - 2 ; case 9 - .short _02237B9C - _02237A9A - 2 ; case 10 - .short _02237BA0 - _02237A9A - 2 ; case 11 - .short _02237BB4 - _02237A9A - 2 ; case 12 - .short _02237BCC - _02237A9A - 2 ; case 13 - .short _02237BCC - _02237A9A - 2 ; case 14 - .short _02237BCC - _02237A9A - 2 ; case 15 - .short _02237BCC - _02237A9A - 2 ; case 16 - .short _02237BD8 - _02237A9A - 2 ; case 17 - .short _02237BD8 - _02237A9A - 2 ; case 18 - .short _02237BD8 - _02237A9A - 2 ; case 19 - .short _02237BD8 - _02237A9A - 2 ; case 20 - .short _02237BC0 - _02237A9A - 2 ; case 21 - .short _02237C08 - _02237A9A - 2 ; case 22 - .short _02237C0E - _02237A9A - 2 ; case 23 - .short _02237C14 - _02237A9A - 2 ; case 24 - .short _02237BBA - _02237A9A - 2 ; case 25 - .short _02237BE4 - _02237A9A - 2 ; case 26 - .short _02237BEA - _02237A9A - 2 ; case 27 - .short _02237BF0 - _02237A9A - 2 ; case 28 - .short _02237BF6 - _02237A9A - 2 ; case 29 - .short _02237BFC - _02237A9A - 2 ; case 30 - .short _02237C02 - _02237A9A - 2 ; case 31 - .short _02237BC6 - _02237A9A - 2 ; case 32 - .short _02237C1A - _02237A9A - 2 ; case 33 - .short _02237C2C - _02237A9A - 2 ; case 34 - .short _02237C34 - _02237A9A - 2 ; case 35 - .short _02237C3C - _02237A9A - 2 ; case 36 - .short _02237C44 - _02237A9A - 2 ; case 37 - .short _02237C4C - _02237A9A - 2 ; case 38 - .short _02237C5A - _02237A9A - 2 ; case 39 - .short _02237C62 - _02237A9A - 2 ; case 40 - .short _02237C6A - _02237A9A - 2 ; case 41 - .short _02237C72 - _02237A9A - 2 ; case 42 - .short _02237C7A - _02237A9A - 2 ; case 43 - .short _02237C82 - _02237A9A - 2 ; case 44 - .short _02237C8A - _02237A9A - 2 ; case 45 - .short _02237C92 - _02237A9A - 2 ; case 46 - .short _02237C20 - _02237A9A - 2 ; case 47 - .short _02237C26 - _02237A9A - 2 ; case 48 - .short _02237C54 - _02237A9A - 2 ; case 49 - .short _02237C98 - _02237A9A - 2 ; case 50 - .short _02237CA0 - _02237A9A - 2 ; case 51 - .short _02237CA8 - _02237A9A - 2 ; case 52 - .short _02237CB0 - _02237A9A - 2 ; case 53 - .short _02237CB8 - _02237A9A - 2 ; case 54 - .short _02237D7C - _02237A9A - 2 ; case 55 - .short _02237D7C - _02237A9A - 2 ; case 56 - .short _02237D7C - _02237A9A - 2 ; case 57 - .short _02237D7C - _02237A9A - 2 ; case 58 - .short _02237D7C - _02237A9A - 2 ; case 59 - .short _02237D7C - _02237A9A - 2 ; case 60 - .short _02237D7C - _02237A9A - 2 ; case 61 - .short _02237D7C - _02237A9A - 2 ; case 62 - .short _02237D7C - _02237A9A - 2 ; case 63 - .short _02237D7C - _02237A9A - 2 ; case 64 - .short _02237D2E - _02237A9A - 2 ; case 65 - .short _02237D4C - _02237A9A - 2 ; case 66 - .short _02237CC0 - _02237A9A - 2 ; case 67 - .short _02237CC8 - _02237A9A - 2 ; case 68 - .short _02237CD0 - _02237A9A - 2 ; case 69 - .short _02237CD8 - _02237A9A - 2 ; case 70 - .short _02237CE0 - _02237A9A - 2 ; case 71 - .short _02237CE8 - _02237A9A - 2 ; case 72 - .short _02237CF0 - _02237A9A - 2 ; case 73 - .short _02237CF8 - _02237A9A - 2 ; case 74 - .short _02237D00 - _02237A9A - 2 ; case 75 - .short _02237D08 - _02237A9A - 2 ; case 76 - .short _02237D10 - _02237A9A - 2 ; case 77 - .short _02237D18 - _02237A9A - 2 ; case 78 - .short _02237D20 - _02237A9A - 2 ; case 79 - .short _02237D28 - _02237A9A - 2 ; case 80 + .short _02237B3C - _02237A9A - 2 ; case 0 + .short _02237B40 - _02237A9A - 2 ; case 1 + .short _02237B44 - _02237A9A - 2 ; case 2 + .short _02237B64 - _02237A9A - 2 ; case 3 + .short _02237B68 - _02237A9A - 2 ; case 4 + .short _02237B70 - _02237A9A - 2 ; case 5 + .short _02237B78 - _02237A9A - 2 ; case 6 + .short _02237B80 - _02237A9A - 2 ; case 7 + .short _02237B94 - _02237A9A - 2 ; case 8 + .short _02237B98 - _02237A9A - 2 ; case 9 + .short _02237B9C - _02237A9A - 2 ; case 10 + .short _02237BA0 - _02237A9A - 2 ; case 11 + .short _02237BB4 - _02237A9A - 2 ; case 12 + .short _02237BCC - _02237A9A - 2 ; case 13 + .short _02237BCC - _02237A9A - 2 ; case 14 + .short _02237BCC - _02237A9A - 2 ; case 15 + .short _02237BCC - _02237A9A - 2 ; case 16 + .short _02237BD8 - _02237A9A - 2 ; case 17 + .short _02237BD8 - _02237A9A - 2 ; case 18 + .short _02237BD8 - _02237A9A - 2 ; case 19 + .short _02237BD8 - _02237A9A - 2 ; case 20 + .short _02237BC0 - _02237A9A - 2 ; case 21 + .short _02237C08 - _02237A9A - 2 ; case 22 + .short _02237C0E - _02237A9A - 2 ; case 23 + .short _02237C14 - _02237A9A - 2 ; case 24 + .short _02237BBA - _02237A9A - 2 ; case 25 + .short _02237BE4 - _02237A9A - 2 ; case 26 + .short _02237BEA - _02237A9A - 2 ; case 27 + .short _02237BF0 - _02237A9A - 2 ; case 28 + .short _02237BF6 - _02237A9A - 2 ; case 29 + .short _02237BFC - _02237A9A - 2 ; case 30 + .short _02237C02 - _02237A9A - 2 ; case 31 + .short _02237BC6 - _02237A9A - 2 ; case 32 + .short _02237C1A - _02237A9A - 2 ; case 33 + .short _02237C2C - _02237A9A - 2 ; case 34 + .short _02237C34 - _02237A9A - 2 ; case 35 + .short _02237C3C - _02237A9A - 2 ; case 36 + .short _02237C44 - _02237A9A - 2 ; case 37 + .short _02237C4C - _02237A9A - 2 ; case 38 + .short _02237C5A - _02237A9A - 2 ; case 39 + .short _02237C62 - _02237A9A - 2 ; case 40 + .short _02237C6A - _02237A9A - 2 ; case 41 + .short _02237C72 - _02237A9A - 2 ; case 42 + .short _02237C7A - _02237A9A - 2 ; case 43 + .short _02237C82 - _02237A9A - 2 ; case 44 + .short _02237C8A - _02237A9A - 2 ; case 45 + .short _02237C92 - _02237A9A - 2 ; case 46 + .short _02237C20 - _02237A9A - 2 ; case 47 + .short _02237C26 - _02237A9A - 2 ; case 48 + .short _02237C54 - _02237A9A - 2 ; case 49 + .short _02237C98 - _02237A9A - 2 ; case 50 + .short _02237CA0 - _02237A9A - 2 ; case 51 + .short _02237CA8 - _02237A9A - 2 ; case 52 + .short _02237CB0 - _02237A9A - 2 ; case 53 + .short _02237CB8 - _02237A9A - 2 ; case 54 + .short _02237D7C - _02237A9A - 2 ; case 55 + .short _02237D7C - _02237A9A - 2 ; case 56 + .short _02237D7C - _02237A9A - 2 ; case 57 + .short _02237D7C - _02237A9A - 2 ; case 58 + .short _02237D7C - _02237A9A - 2 ; case 59 + .short _02237D7C - _02237A9A - 2 ; case 60 + .short _02237D7C - _02237A9A - 2 ; case 61 + .short _02237D7C - _02237A9A - 2 ; case 62 + .short _02237D7C - _02237A9A - 2 ; case 63 + .short _02237D7C - _02237A9A - 2 ; case 64 + .short _02237D2E - _02237A9A - 2 ; case 65 + .short _02237D4C - _02237A9A - 2 ; case 66 + .short _02237CC0 - _02237A9A - 2 ; case 67 + .short _02237CC8 - _02237A9A - 2 ; case 68 + .short _02237CD0 - _02237A9A - 2 ; case 69 + .short _02237CD8 - _02237A9A - 2 ; case 70 + .short _02237CE0 - _02237A9A - 2 ; case 71 + .short _02237CE8 - _02237A9A - 2 ; case 72 + .short _02237CF0 - _02237A9A - 2 ; case 73 + .short _02237CF8 - _02237A9A - 2 ; case 74 + .short _02237D00 - _02237A9A - 2 ; case 75 + .short _02237D08 - _02237A9A - 2 ; case 76 + .short _02237D10 - _02237A9A - 2 ; case 77 + .short _02237D18 - _02237A9A - 2 ; case 78 + .short _02237D20 - _02237A9A - 2 ; case 79 + .short _02237D28 - _02237A9A - 2 ; case 80 _02237B3C: - ldr r4, [r5] - b _02237D7C + ldr r4, [r5] + b _02237D7C _02237B40: - ldr r4, [r5, #4] - b _02237D7C + ldr r4, [r5, #4] + b _02237D7C _02237B44: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237B50 - mov r4, #0 - b _02237B5E + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237B50 + mov r4, #0 + b _02237B5E _02237B50: - mov r4, #0 + mov r4, #0 _02237B52: - add r0, r5, r4 - ldrb r0, [r0, #8] - strb r0, [r7, r4] - add r4, r4, #1 - cmp r4, #0xa - blo _02237B52 + add r0, r5, r4 + ldrb r0, [r0, #8] + strb r0, [r7, r4] + add r4, r4, #1 + cmp r4, #0xa + blo _02237B52 _02237B5E: - mov r0, #0xff - strb r0, [r7, r4] - b _02237D7C + mov r0, #0xff + strb r0, [r7, r4] + b _02237D7C _02237B64: - ldrb r4, [r5, #0x12] - b _02237D7C + ldrb r4, [r5, #0x12] + b _02237D7C _02237B68: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r4, r0, #0x1f + b _02237D7C _02237B70: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1e - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1e + lsr r4, r0, #0x1f + b _02237D7C _02237B78: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1d - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1d + lsr r4, r0, #0x1f + b _02237D7C _02237B80: - mov r4, #0 + mov r4, #0 _02237B82: - add r0, r5, r4 - ldrb r0, [r0, #0x14] - strb r0, [r7, r4] - add r4, r4, #1 - cmp r4, #7 - blo _02237B82 - mov r0, #0xff - strb r0, [r7, r4] - b _02237D7C + add r0, r5, r4 + ldrb r0, [r0, #0x14] + strb r0, [r7, r4] + add r4, r4, #1 + cmp r4, #7 + blo _02237B82 + mov r0, #0xff + strb r0, [r7, r4] + b _02237D7C _02237B94: - ldrb r4, [r5, #0x1b] - b _02237D7C + ldrb r4, [r5, #0x1b] + b _02237D7C _02237B98: - ldrh r4, [r5, #0x1c] - b _02237D7C + ldrh r4, [r5, #0x1c] + b _02237D7C _02237B9C: - ldrh r4, [r5, #0x1e] - b _02237D7C + ldrh r4, [r5, #0x1e] + b _02237D7C _02237BA0: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237BAE - mov r4, #0x67 - lsl r4, r4, #2 - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237BAE + mov r4, #0x67 + lsl r4, r4, #2 + b _02237D7C _02237BAE: - ldr r0, [sp, #0xc] - ldrh r4, [r0] - b _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0] + b _02237D7C _02237BB4: - ldr r0, [sp, #0xc] - ldrh r4, [r0, #2] - b _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0, #2] + b _02237D7C _02237BBA: - ldr r0, [sp, #0xc] - ldr r4, [r0, #4] - b _02237D7C + ldr r0, [sp, #0xc] + ldr r4, [r0, #4] + b _02237D7C _02237BC0: - ldr r0, [sp, #0xc] - ldrb r4, [r0, #8] - b _02237D7C + ldr r0, [sp, #0xc] + ldrb r4, [r0, #8] + b _02237D7C _02237BC6: - ldr r0, [sp, #0xc] - ldrb r4, [r0, #9] - b _02237D7C + ldr r0, [sp, #0xc] + ldrb r4, [r0, #9] + b _02237D7C _02237BCC: - ldr r0, [sp] - sub r0, #0xd - lsl r1, r0, #1 - ldr r0, [sp, #8] - ldrh r4, [r0, r1] - b _02237D7C + ldr r0, [sp] + sub r0, #0xd + lsl r1, r0, #1 + ldr r0, [sp, #8] + ldrh r4, [r0, r1] + b _02237D7C _02237BD8: - ldr r1, [sp] - ldr r0, [sp, #8] - sub r1, #0x11 - add r0, r0, r1 - ldrb r4, [r0, #8] - b _02237D7C + ldr r1, [sp] + ldr r0, [sp, #8] + sub r1, #0x11 + add r0, r0, r1 + ldrb r4, [r0, #8] + b _02237D7C _02237BE4: - ldr r0, [sp, #4] - ldrb r4, [r0] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0] + b _02237D7C _02237BEA: - ldr r0, [sp, #4] - ldrb r4, [r0, #1] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #1] + b _02237D7C _02237BF0: - ldr r0, [sp, #4] - ldrb r4, [r0, #2] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #2] + b _02237D7C _02237BF6: - ldr r0, [sp, #4] - ldrb r4, [r0, #3] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #3] + b _02237D7C _02237BFC: - ldr r0, [sp, #4] - ldrb r4, [r0, #4] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #4] + b _02237D7C _02237C02: - ldr r0, [sp, #4] - ldrb r4, [r0, #5] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #5] + b _02237D7C _02237C08: - ldr r0, [sp, #4] - ldrb r4, [r0, #6] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #6] + b _02237D7C _02237C0E: - ldr r0, [sp, #4] - ldrb r4, [r0, #7] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #7] + b _02237D7C _02237C14: - ldr r0, [sp, #4] - ldrb r4, [r0, #8] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #8] + b _02237D7C _02237C1A: - ldr r0, [sp, #4] - ldrb r4, [r0, #9] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #9] + b _02237D7C _02237C20: - ldr r0, [sp, #4] - ldrb r4, [r0, #0xa] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #0xa] + b _02237D7C _02237C26: - ldr r0, [sp, #4] - ldrb r4, [r0, #0xb] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #0xb] + b _02237D7C _02237C2C: - ldr r0, [r6] - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + b _02237D7C _02237C34: - ldr r0, [r6] - lsl r0, r0, #0x10 - lsr r4, r0, #0x18 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #0x10 + lsr r4, r0, #0x18 + b _02237D7C _02237C3C: - ldr r0, [r6] - lsl r0, r0, #9 - lsr r4, r0, #0x19 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #9 + lsr r4, r0, #0x19 + b _02237D7C _02237C44: - ldr r0, [r6] - lsl r0, r0, #5 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #5 + lsr r4, r0, #0x1c + b _02237D7C _02237C4C: - ldr r0, [r6] - lsl r0, r0, #1 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #1 + lsr r4, r0, #0x1c + b _02237D7C _02237C54: - ldr r0, [r6] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6] + lsr r4, r0, #0x1f + b _02237D7C _02237C5A: - ldr r0, [r6, #4] - lsl r0, r0, #0x1b - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x1b + lsr r4, r0, #0x1b + b _02237D7C _02237C62: - ldr r0, [r6, #4] - lsl r0, r0, #0x16 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x16 + lsr r4, r0, #0x1b + b _02237D7C _02237C6A: - ldr r0, [r6, #4] - lsl r0, r0, #0x11 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x11 + lsr r4, r0, #0x1b + b _02237D7C _02237C72: - ldr r0, [r6, #4] - lsl r0, r0, #0xc - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0xc + lsr r4, r0, #0x1b + b _02237D7C _02237C7A: - ldr r0, [r6, #4] - lsl r0, r0, #7 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #7 + lsr r4, r0, #0x1b + b _02237D7C _02237C82: - ldr r0, [r6, #4] - lsl r0, r0, #2 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #2 + lsr r4, r0, #0x1b + b _02237D7C _02237C8A: - ldr r0, [r6, #4] - lsl r0, r0, #1 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #1 + lsr r4, r0, #0x1f + b _02237D7C _02237C92: - ldr r0, [r6, #4] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #4] + lsr r4, r0, #0x1f + b _02237D7C _02237C98: - ldr r0, [r6, #8] - lsl r0, r0, #0x1d - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x1d + lsr r4, r0, #0x1d + b _02237D7C _02237CA0: - ldr r0, [r6, #8] - lsl r0, r0, #0x1a - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x1a + lsr r4, r0, #0x1d + b _02237D7C _02237CA8: - ldr r0, [r6, #8] - lsl r0, r0, #0x17 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x17 + lsr r4, r0, #0x1d + b _02237D7C _02237CB0: - ldr r0, [r6, #8] - lsl r0, r0, #0x14 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x14 + lsr r4, r0, #0x1d + b _02237D7C _02237CB8: - ldr r0, [r6, #8] - lsl r0, r0, #0x11 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x11 + lsr r4, r0, #0x1d + b _02237D7C _02237CC0: - ldr r0, [r6, #8] - lsl r0, r0, #0x10 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x10 + lsr r4, r0, #0x1f + b _02237D7C _02237CC8: - ldr r0, [r6, #8] - lsl r0, r0, #0xf - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xf + lsr r4, r0, #0x1f + b _02237D7C _02237CD0: - ldr r0, [r6, #8] - lsl r0, r0, #0xe - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xe + lsr r4, r0, #0x1f + b _02237D7C _02237CD8: - ldr r0, [r6, #8] - lsl r0, r0, #0xd - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xd + lsr r4, r0, #0x1f + b _02237D7C _02237CE0: - ldr r0, [r6, #8] - lsl r0, r0, #0xc - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xc + lsr r4, r0, #0x1f + b _02237D7C _02237CE8: - ldr r0, [r6, #8] - lsl r0, r0, #0xb - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xb + lsr r4, r0, #0x1f + b _02237D7C _02237CF0: - ldr r0, [r6, #8] - lsl r0, r0, #0xa - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xa + lsr r4, r0, #0x1f + b _02237D7C _02237CF8: - ldr r0, [r6, #8] - lsl r0, r0, #9 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #9 + lsr r4, r0, #0x1f + b _02237D7C _02237D00: - ldr r0, [r6, #8] - lsl r0, r0, #8 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #8 + lsr r4, r0, #0x1f + b _02237D7C _02237D08: - ldr r0, [r6, #8] - lsl r0, r0, #7 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #7 + lsr r4, r0, #0x1f + b _02237D7C _02237D10: - ldr r0, [r6, #8] - lsl r0, r0, #6 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #6 + lsr r4, r0, #0x1f + b _02237D7C _02237D18: - ldr r0, [r6, #8] - lsl r0, r0, #5 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #5 + lsr r4, r0, #0x1f + b _02237D7C _02237D20: - ldr r0, [r6, #8] - lsl r0, r0, #1 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #1 + lsr r4, r0, #0x1c + b _02237D7C _02237D28: - ldr r0, [r6, #8] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsr r4, r0, #0x1f + b _02237D7C _02237D2E: - ldr r0, [sp, #0xc] - ldrh r4, [r0] - cmp r4, #0 - beq _02237D7C - ldr r0, [r6, #4] - lsl r0, r0, #1 - lsr r0, r0, #0x1f - bne _02237D46 - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0] + cmp r4, #0 + beq _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #1 + lsr r0, r0, #0x1f + bne _02237D46 + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237D7C _02237D46: - mov r4, #0x67 - lsl r4, r4, #2 - b _02237D7C + mov r4, #0x67 + lsl r4, r4, #2 + b _02237D7C _02237D4C: - ldr r4, [r6, #4] - lsl r0, r4, #2 - lsr r0, r0, #0x1b - lsl r6, r0, #0x19 - lsl r0, r4, #7 - lsr r0, r0, #0x1b - lsl r3, r0, #0x14 - lsl r0, r4, #0xc - lsr r0, r0, #0x1b - lsl r2, r0, #0xf - lsl r0, r4, #0x11 - lsr r0, r0, #0x1b - lsl r1, r0, #0xa - lsl r0, r4, #0x1b - lsl r4, r4, #0x16 - lsr r4, r4, #0x1b - lsr r0, r0, #0x1b - lsl r4, r4, #5 - orr r0, r4 - orr r0, r1 - orr r0, r2 - orr r0, r3 - add r4, r6, #0 - orr r4, r0 + ldr r4, [r6, #4] + lsl r0, r4, #2 + lsr r0, r0, #0x1b + lsl r6, r0, #0x19 + lsl r0, r4, #7 + lsr r0, r0, #0x1b + lsl r3, r0, #0x14 + lsl r0, r4, #0xc + lsr r0, r0, #0x1b + lsl r2, r0, #0xf + lsl r0, r4, #0x11 + lsr r0, r0, #0x1b + lsl r1, r0, #0xa + lsl r0, r4, #0x1b + lsl r4, r4, #0x16 + lsr r4, r4, #0x1b + lsr r0, r0, #0x1b + lsl r4, r4, #5 + orr r0, r4 + orr r0, r1 + orr r0, r2 + orr r0, r3 + add r4, r6, #0 + orr r4, r0 _02237D7C: - ldr r0, [sp] - cmp r0, #0xa - ble _02237D88 - add r0, r5, #0 - bl MOD83_02237968 + ldr r0, [sp] + cmp r0, #0xa + ble _02237D88 + add r0, r5, #0 + bl MOD83_02237968 _02237D88: - add r0, r4, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end AGB_GetBoxMonData + add r0, r4, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end AGB_GetBoxMonData - thumb_func_start MOD83_02237D90 + thumb_func_start MOD83_02237D90 MOD83_02237D90: ; 0x02237D90 - push {r3, r4, r5, r6, r7, lr} - add r6, r1, #0 - add r4, r0, #0 - add r5, r2, #0 - mov r7, #0 - cmp r6, #0xa - ble _02237E04 - ldr r1, [r4] - add r2, r7, #0 - bl MOD83_0223746C - add r7, r0, #0 - ldr r1, [r4] - add r0, r4, #0 - mov r2, #1 - bl MOD83_0223746C - ldr r1, [r4] - add r0, r4, #0 - mov r2, #2 - bl MOD83_0223746C - ldr r1, [r4] - add r0, r4, #0 - mov r2, #3 - bl MOD83_0223746C - str r0, [sp] - add r0, r4, #0 - bl MOD83_02237948 - add r0, r4, #0 - bl MOD83_02237988 - ldrh r1, [r4, #0x1c] - cmp r0, r1 - beq _02237E04 - ldrb r1, [r4, #0x13] - mov r0, #1 - bic r1, r0 - mov r0, #1 - orr r0, r1 - strb r0, [r4, #0x13] - ldrb r1, [r4, #0x13] - mov r0, #4 - orr r0, r1 - strb r0, [r4, #0x13] - ldr r0, [sp] - ldr r1, [r0, #4] - mov r0, #1 - lsl r0, r0, #0x1e - orr r1, r0 - ldr r0, [sp] - str r1, [r0, #4] - add r0, r4, #0 - bl MOD83_02237968 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + add r4, r0, #0 + add r5, r2, #0 + mov r7, #0 + cmp r6, #0xa + ble _02237E04 + ldr r1, [r4] + add r2, r7, #0 + bl MOD83_0223746C + add r7, r0, #0 + ldr r1, [r4] + add r0, r4, #0 + mov r2, #1 + bl MOD83_0223746C + ldr r1, [r4] + add r0, r4, #0 + mov r2, #2 + bl MOD83_0223746C + ldr r1, [r4] + add r0, r4, #0 + mov r2, #3 + bl MOD83_0223746C + str r0, [sp] + add r0, r4, #0 + bl MOD83_02237948 + add r0, r4, #0 + bl MOD83_02237988 + ldrh r1, [r4, #0x1c] + cmp r0, r1 + beq _02237E04 + ldrb r1, [r4, #0x13] + mov r0, #1 + bic r1, r0 + mov r0, #1 + orr r0, r1 + strb r0, [r4, #0x13] + ldrb r1, [r4, #0x13] + mov r0, #4 + orr r0, r1 + strb r0, [r4, #0x13] + ldr r0, [sp] + ldr r1, [r0, #4] + mov r0, #1 + lsl r0, r0, #0x1e + orr r1, r0 + ldr r0, [sp] + str r1, [r0, #4] + add r0, r4, #0 + bl MOD83_02237968 + pop {r3, r4, r5, r6, r7, pc} _02237E04: - cmp r6, #0xb - bhi _02237EA8 - add r0, r6, r6 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r6, #0xb + bhi _02237EA8 + add r0, r6, r6 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237E14: ; jump table - .short _02237EA8 - _02237E14 - 2 ; case 0 - .short _02237EA8 - _02237E14 - 2 ; case 1 - .short _02237E2C - _02237E14 - 2 ; case 2 - .short _02237E3C - _02237E14 - 2 ; case 3 - .short _02237E42 - _02237E14 - 2 ; case 4 - .short _02237E54 - _02237E14 - 2 ; case 5 - .short _02237E66 - _02237E14 - 2 ; case 6 - .short _02237E78 - _02237E14 - 2 ; case 7 - .short _02237EA8 - _02237E14 - 2 ; case 8 - .short _02237EA8 - _02237E14 - 2 ; case 9 - .short _02237EA8 - _02237E14 - 2 ; case 10 - .short _02237E88 - _02237E14 - 2 ; case 11 + .short _02237EA8 - _02237E14 - 2 ; case 0 + .short _02237EA8 - _02237E14 - 2 ; case 1 + .short _02237E2C - _02237E14 - 2 ; case 2 + .short _02237E3C - _02237E14 - 2 ; case 3 + .short _02237E42 - _02237E14 - 2 ; case 4 + .short _02237E54 - _02237E14 - 2 ; case 5 + .short _02237E66 - _02237E14 - 2 ; case 6 + .short _02237E78 - _02237E14 - 2 ; case 7 + .short _02237EA8 - _02237E14 - 2 ; case 8 + .short _02237EA8 - _02237E14 - 2 ; case 9 + .short _02237EA8 - _02237E14 - 2 ; case 10 + .short _02237E88 - _02237E14 - 2 ; case 11 _02237E2C: - mov r2, #0 + mov r2, #0 _02237E2E: - ldrb r1, [r5, r2] - add r0, r4, r2 - add r2, r2, #1 - strb r1, [r0, #8] - cmp r2, #0xa - blt _02237E2E - b _02237EA8 + ldrb r1, [r5, r2] + add r0, r4, r2 + add r2, r2, #1 + strb r1, [r0, #8] + cmp r2, #0xa + blt _02237E2E + b _02237EA8 _02237E3C: - ldrb r0, [r5] - strb r0, [r4, #0x12] - b _02237EA8 + ldrb r0, [r5] + strb r0, [r4, #0x12] + b _02237EA8 _02237E42: - ldrb r0, [r4, #0x13] - ldrb r2, [r5] - mov r1, #1 - bic r0, r1 - mov r1, #1 - and r1, r2 - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + ldrb r2, [r5] + mov r1, #1 + bic r0, r1 + mov r1, #1 + and r1, r2 + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E54: - ldrb r0, [r4, #0x13] - mov r1, #2 - bic r0, r1 - ldrb r1, [r5] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1e - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + mov r1, #2 + bic r0, r1 + ldrb r1, [r5] + lsl r1, r1, #0x1f + lsr r1, r1, #0x1e + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E66: - ldrb r0, [r4, #0x13] - mov r1, #4 - bic r0, r1 - ldrb r1, [r5] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1d - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + mov r1, #4 + bic r0, r1 + ldrb r1, [r5] + lsl r1, r1, #0x1f + lsr r1, r1, #0x1d + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E78: - mov r2, #0 + mov r2, #0 _02237E7A: - ldrb r1, [r5, r2] - add r0, r4, r2 - add r2, r2, #1 - strb r1, [r0, #0x14] - cmp r2, #7 - blt _02237E7A - b _02237EA8 + ldrb r1, [r5, r2] + add r0, r4, r2 + add r2, r2, #1 + strb r1, [r0, #0x14] + cmp r2, #7 + blt _02237E7A + b _02237EA8 _02237E88: - ldrb r0, [r5, #1] - ldrb r1, [r5] - lsl r0, r0, #8 - add r0, r1, r0 - strh r0, [r7] - ldrh r0, [r7] - ldrb r1, [r4, #0x13] - cmp r0, #0 - beq _02237EA2 - mov r0, #2 - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r5, #1] + ldrb r1, [r5] + lsl r0, r0, #8 + add r0, r1, r0 + strh r0, [r7] + ldrh r0, [r7] + ldrb r1, [r4, #0x13] + cmp r0, #0 + beq _02237EA2 + mov r0, #2 + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237EA2: - mov r0, #2 - bic r1, r0 - strb r1, [r4, #0x13] + mov r0, #2 + bic r1, r0 + strb r1, [r4, #0x13] _02237EA8: - cmp r6, #0xa - ble _02237EBA - add r0, r4, #0 - bl MOD83_02237988 - strh r0, [r4, #0x1c] - add r0, r4, #0 - bl MOD83_02237968 + cmp r6, #0xa + ble _02237EBA + add r0, r4, #0 + bl MOD83_02237988 + strh r0, [r4, #0x1c] + add r0, r4, #0 + bl MOD83_02237968 _02237EBA: - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_02237D90 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_02237D90 - thumb_func_start MOD83_TranslateAgbSpecies + thumb_func_start MOD83_TranslateAgbSpecies MOD83_TranslateAgbSpecies: ; 0x02237EBC - ldr r2, _02237ED4 ; =0x00000115 - cmp r0, r2 - blt _02237ED2 - add r1, r2, #0 - add r1, #0x86 - cmp r0, r1 - bgt _02237ED2 - sub r0, r0, r2 - lsl r1, r0, #1 - ldr r0, _02237ED8 ; =MOD83_UpConvertSpeciesLUT - ldrh r0, [r0, r1] + ldr r2, _02237ED4 ; =0x00000115 + cmp r0, r2 + blt _02237ED2 + add r1, r2, #0 + add r1, #0x86 + cmp r0, r1 + bgt _02237ED2 + sub r0, r0, r2 + lsl r1, r0, #1 + ldr r0, _02237ED8 ; =MOD83_UpConvertSpeciesLUT + ldrh r0, [r0, r1] _02237ED2: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _02237ED4: .word 0x00000115 _02237ED8: .word MOD83_UpConvertSpeciesLUT - thumb_func_end MOD83_TranslateAgbSpecies + thumb_func_end MOD83_TranslateAgbSpecies - thumb_func_start MOD83_02237EDC + thumb_func_start MOD83_02237EDC MOD83_02237EDC: ; 0x02237EDC - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_TranslateAgbSpecies - add r4, r0, #0 - add r0, r5, #0 - mov r1, #0x19 - mov r2, #0 - bl AGB_GetBoxMonData - add r1, r0, #0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl CalcLevelBySpeciesAndExp - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02237EDC - - thumb_func_start MOD83_02237F04 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_TranslateAgbSpecies + add r4, r0, #0 + add r0, r5, #0 + mov r1, #0x19 + mov r2, #0 + bl AGB_GetBoxMonData + add r1, r0, #0 + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + bl CalcLevelBySpeciesAndExp + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02237EDC + + thumb_func_start MOD83_02237F04 MOD83_02237F04: ; 0x02237F04 - push {r4, r5, r6, lr} - add r4, r0, #0 - add r0, r1, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - add r0, r4, #0 - mov r1, #0x2e - mov r2, #0 - bl AGB_GetBoxMonData - add r6, r0, #0 - add r0, r5, #0 - mov r1, #0x19 ; BASE_ABILITY_2 - bl GetMonBaseStat - cmp r0, #0 - beq _02237F5E - ldr r2, _02237F68 ; =MOD83_SpeciesWithAbilityOverridesList - mov r4, #0 + push {r4, r5, r6, lr} + add r4, r0, #0 + add r0, r1, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + lsl r0, r0, #0x10 + lsr r5, r0, #0x10 + add r0, r4, #0 + mov r1, #0x2e + mov r2, #0 + bl AGB_GetBoxMonData + add r6, r0, #0 + add r0, r5, #0 + mov r1, #0x19 ; BASE_ABILITY_2 + bl GetMonBaseStat + cmp r0, #0 + beq _02237F5E + ldr r2, _02237F68 ; =MOD83_SpeciesWithAbilityOverridesList + mov r4, #0 _02237F32: - ldrh r1, [r2] - cmp r5, r1 - bne _02237F42 - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat - b _02237F4A + ldrh r1, [r2] + cmp r5, r1 + bne _02237F42 + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat + b _02237F4A _02237F42: - add r4, r4, #1 - add r2, r2, #2 - cmp r4, #0x5e - blo _02237F32 + add r4, r4, #1 + add r2, r2, #2 + cmp r4, #0x5e + blo _02237F32 _02237F4A: - cmp r4, #0x5e - bne _02237F66 - mov r1, #1 - tst r1, r6 - bne _02237F66 - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat - pop {r4, r5, r6, pc} + cmp r4, #0x5e + bne _02237F66 + mov r1, #1 + tst r1, r6 + bne _02237F66 + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat + pop {r4, r5, r6, pc} _02237F5E: - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat _02237F66: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _02237F68: .word MOD83_SpeciesWithAbilityOverridesList - thumb_func_end MOD83_02237F04 + thumb_func_end MOD83_02237F04 - thumb_func_start MigrateBoxMon + thumb_func_start MigrateBoxMon MigrateBoxMon: ; 0x02237F6C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x30 - add r4, r1, #0 - add r6, r0, #0 - add r0, r4, #0 - bl ZeroBoxMonData - add r0, r4, #0 - bl AcquireBoxMonLock - mov r1, #0 - str r0, [sp] - add r0, r6, #0 - add r2, r1, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - bl MOD83_TranslateAgbSpecies - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #5 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - cmp r0, #0 - beq _02237FCE - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl UpConvertItemId_Gen3to4 - str r0, [sp, #8] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x30 + add r4, r1, #0 + add r6, r0, #0 + add r0, r4, #0 + bl ZeroBoxMonData + add r0, r4, #0 + bl AcquireBoxMonLock + mov r1, #0 + str r0, [sp] + add r0, r6, #0 + add r2, r1, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + bl MOD83_TranslateAgbSpecies + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #5 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + cmp r0, #0 + beq _02237FCE + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl UpConvertItemId_Gen3to4 + str r0, [sp, #8] _02237FCE: - add r0, r4, #0 - mov r1, #6 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #1 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #7 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x19 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #8 - add r2, sp, #8 - bl SetBoxMonData - mov r0, #0x46 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #9 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_02237F04 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xa - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #8 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xb - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #4] - add r0, r4, #0 - mov r1, #0xc - add r2, sp, #4 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xd - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xe - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xf - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x10 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1e - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x11 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1f - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x12 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x16 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x13 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x17 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x14 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x18 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x15 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x21 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x16 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2f - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x17 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x30 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x18 - add r2, sp, #8 - bl SetBoxMonData - mov r5, #0 - add r7, r5, #0 + add r0, r4, #0 + mov r1, #6 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #1 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #7 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x19 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #8 + add r2, sp, #8 + bl SetBoxMonData + mov r0, #0x46 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #9 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_02237F04 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xa + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #8 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xb + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0xc + add r2, sp, #4 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xd + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xe + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xf + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x10 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1e + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x11 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1f + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x12 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x16 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x13 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x17 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x14 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x18 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x15 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x21 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x16 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2f + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x17 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x30 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x18 + add r2, sp, #8 + bl SetBoxMonData + mov r5, #0 + add r7, r5, #0 _0223815E: - add r1, r5, #0 - add r0, r6, #0 - add r1, #0xd - mov r2, #0 - bl AGB_GetBoxMonData - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x36 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x15 - mov r2, #0 - bl AGB_GetBoxMonData - mov r1, #3 - lsl r1, r7 - str r0, [sp, #8] - and r0, r1 - lsr r0, r7 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x3e - add r2, sp, #8 - bl SetBoxMonData - add r1, r5, #0 - add r0, r4, #0 - add r1, #0x42 - mov r2, #0 - bl GetBoxMonData - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x3a - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - add r7, r7, #2 - cmp r5, #4 - blt _0223815E - add r0, r6, #0 - mov r1, #0x27 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x46 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x28 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x47 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x29 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x48 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x49 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4c - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x32 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238282 - mov r5, #0 - cmp r7, #0 - ble _02238282 + add r1, r5, #0 + add r0, r6, #0 + add r1, #0xd + mov r2, #0 + bl AGB_GetBoxMonData + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x36 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x15 + mov r2, #0 + bl AGB_GetBoxMonData + mov r1, #3 + lsl r1, r7 + str r0, [sp, #8] + and r0, r1 + lsr r0, r7 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x3e + add r2, sp, #8 + bl SetBoxMonData + add r1, r5, #0 + add r0, r4, #0 + add r1, #0x42 + mov r2, #0 + bl GetBoxMonData + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x3a + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + add r7, r7, #2 + cmp r5, #4 + blt _0223815E + add r0, r6, #0 + mov r1, #0x27 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x46 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x28 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x47 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x29 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x48 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x49 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4c + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x32 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238282 + mov r5, #0 + cmp r7, #0 + ble _02238282 _0223826C: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x4e - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _0223826C + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x4e + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _0223826C _02238282: - add r0, r6, #0 - mov r1, #0x33 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _022382AE - mov r5, #0 - cmp r7, #0 - ble _022382AE + add r0, r6, #0 + mov r1, #0x33 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _022382AE + mov r5, #0 + cmp r7, #0 + ble _022382AE _02238298: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x52 - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _02238298 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x52 + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _02238298 _022382AE: - add r0, r6, #0 - mov r1, #0x34 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _022382DA - mov r5, #0 - cmp r7, #0 - ble _022382DA + add r0, r6, #0 + mov r1, #0x34 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _022382DA + mov r5, #0 + cmp r7, #0 + ble _022382DA _022382C4: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x56 - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _022382C4 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x56 + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _022382C4 _022382DA: - add r0, r6, #0 - mov r1, #0x35 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238306 - mov r5, #0 - cmp r7, #0 - ble _02238306 + add r0, r6, #0 + mov r1, #0x35 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238306 + mov r5, #0 + cmp r7, #0 + ble _02238306 _022382F0: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x5a - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _022382F0 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x5a + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _022382F0 _02238306: - add r0, r6, #0 - mov r1, #0x36 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238332 - mov r5, #0 - cmp r7, #0 - ble _02238332 + add r0, r6, #0 + mov r1, #0x36 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238332 + mov r5, #0 + cmp r7, #0 + ble _02238332 _0223831C: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x5e - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _0223831C + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x5e + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _0223831C _02238332: - add r0, r6, #0 - mov r1, #0x43 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x62 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x44 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x63 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x45 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x64 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x46 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x65 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x47 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x66 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x48 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x67 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x49 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x68 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x69 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6c - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4e - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6d - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x50 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6e - add r2, sp, #8 - bl SetBoxMonData - add r0, r4, #0 - bl GetBoxMonGender - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6f - add r2, sp, #8 - bl SetBoxMonData - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - cmp r0, #0xc9 - bne _022384AE - mov r1, #0 - add r0, r6, #0 - add r2, r1, #0 - bl AGB_GetBoxMonData - add r3, r0, #0 - mov r7, #3 - lsl r0, r7, #8 - and r0, r3 - lsr r1, r0, #6 - lsl r0, r7, #0x18 - and r0, r3 - lsr r5, r0, #0x12 - lsl r0, r7, #0x10 - and r0, r3 - lsr r0, r0, #0xc - add r2, r3, #0 - orr r0, r5 - orr r0, r1 - and r2, r7 - str r3, [sp, #8] - orr r0, r2 - mov r1, #0x1c - bl _u32_div_f - str r1, [sp, #8] - add r0, r4, #0 - mov r1, #0x70 - add r2, sp, #8 - bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x43 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x62 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x44 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x63 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x45 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x64 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x46 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x65 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x47 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x66 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x48 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x67 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x49 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x68 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x69 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6c + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4e + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6d + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x50 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6e + add r2, sp, #8 + bl SetBoxMonData + add r0, r4, #0 + bl GetBoxMonGender + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6f + add r2, sp, #8 + bl SetBoxMonData + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + cmp r0, #0xc9 + bne _022384AE + mov r1, #0 + add r0, r6, #0 + add r2, r1, #0 + bl AGB_GetBoxMonData + add r3, r0, #0 + mov r7, #3 + lsl r0, r7, #8 + and r0, r3 + lsr r1, r0, #6 + lsl r0, r7, #0x18 + and r0, r3 + lsr r5, r0, #0x12 + lsl r0, r7, #0x10 + and r0, r3 + lsr r0, r0, #0xc + add r2, r3, #0 + orr r0, r5 + orr r0, r1 + and r2, r7 + str r3, [sp, #8] + orr r0, r2 + mov r1, #0x1c + bl _u32_div_f + str r1, [sp, #8] + add r0, r4, #0 + mov r1, #0x70 + add r2, sp, #8 + bl SetBoxMonData _022384AE: - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - ldr r1, _022385F0 ; =0x00000182 - cmp r0, r1 - bne _022384FE - ldr r0, _022385F4 ; =gMain + 0x60 - ldrb r0, [r0, #6] - cmp r0, #5 - bhi _022384DE - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + ldr r1, _022385F0 ; =0x00000182 + cmp r0, r1 + bne _022384FE + ldr r0, _022385F4 ; =gMain + 0x60 + ldrb r0, [r0, #6] + cmp r0, #5 + bhi _022384DE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022384D2: ; jump table - .short _022384DE - _022384D2 - 2 ; case 0 - .short _022384DE - _022384D2 - 2 ; case 1 - .short _022384DE - _022384D2 - 2 ; case 2 - .short _022384F0 - _022384D2 - 2 ; case 3 - .short _022384E4 - _022384D2 - 2 ; case 4 - .short _022384EA - _022384D2 - 2 ; case 5 + .short _022384DE - _022384D2 - 2 ; case 0 + .short _022384DE - _022384D2 - 2 ; case 1 + .short _022384DE - _022384D2 - 2 ; case 2 + .short _022384F0 - _022384D2 - 2 ; case 3 + .short _022384E4 - _022384D2 - 2 ; case 4 + .short _022384EA - _022384D2 - 2 ; case 5 _022384DE: - mov r0, #0 - str r0, [sp, #8] - b _022384F4 + mov r0, #0 + str r0, [sp, #8] + b _022384F4 _022384E4: - mov r0, #1 - str r0, [sp, #8] - b _022384F4 + mov r0, #1 + str r0, [sp, #8] + b _022384F4 _022384EA: - mov r0, #2 - str r0, [sp, #8] - b _022384F4 + mov r0, #2 + str r0, [sp, #8] + b _022384F4 _022384F0: - mov r0, #3 - str r0, [sp, #8] + mov r0, #3 + str r0, [sp, #8] _022384F4: - add r0, r4, #0 - mov r1, #0x70 - add r2, sp, #8 - bl SetBoxMonData + add r0, r4, #0 + mov r1, #0x70 + add r2, sp, #8 + bl SetBoxMonData _022384FE: - add r0, r6, #0 - mov r1, #2 - add r2, sp, #0x24 - bl AGB_GetBoxMonData - ldr r3, [sp, #4] - add r0, sp, #0x24 - add r1, sp, #0xc - mov r2, #0xc - bl FUN_02015D88 - add r0, r4, #0 - mov r1, #0x75 - add r2, sp, #0xc - bl SetBoxMonData - add r0, r6, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - ldr r1, _022385F8 ; =gGameLanguage - ldrb r1, [r1] - cmp r1, r0 - beq _0223853E - mov r0, #1 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4d - add r2, sp, #8 - bl SetBoxMonData + add r0, r6, #0 + mov r1, #2 + add r2, sp, #0x24 + bl AGB_GetBoxMonData + ldr r3, [sp, #4] + add r0, sp, #0x24 + add r1, sp, #0xc + mov r2, #0xc + bl FUN_02015D88 + add r0, r4, #0 + mov r1, #0x75 + add r2, sp, #0xc + bl SetBoxMonData + add r0, r6, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + ldr r1, _022385F8 ; =gGameLanguage + ldrb r1, [r1] + cmp r1, r0 + beq _0223853E + mov r0, #1 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4d + add r2, sp, #8 + bl SetBoxMonData _0223853E: - add r0, r6, #0 - mov r1, #0x25 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x79 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #7 - add r2, sp, #0x24 - bl AGB_GetBoxMonData - ldr r3, [sp, #4] - add r0, sp, #0x24 - add r1, sp, #0xc - mov r2, #8 - bl FUN_02015D88 - add r0, r4, #0 - mov r1, #0x8f - add r2, sp, #0xc - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x23 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x98 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x22 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x99 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x26 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x24 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x31 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9c - add r2, sp, #8 - bl SetBoxMonData - ldr r1, [sp] - add r0, r4, #0 - bl ReleaseBoxMonLock - add sp, #0x30 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r6, #0 + mov r1, #0x25 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x79 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #7 + add r2, sp, #0x24 + bl AGB_GetBoxMonData + ldr r3, [sp, #4] + add r0, sp, #0x24 + add r1, sp, #0xc + mov r2, #8 + bl FUN_02015D88 + add r0, r4, #0 + mov r1, #0x8f + add r2, sp, #0xc + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x23 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x98 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x22 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x99 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x26 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x24 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x31 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9c + add r2, sp, #8 + bl SetBoxMonData + ldr r1, [sp] + add r0, r4, #0 + bl ReleaseBoxMonLock + add sp, #0x30 + pop {r3, r4, r5, r6, r7, pc} + nop _022385F0: .word 0x00000182 _022385F4: .word gMain + 0x60 _022385F8: .word gGameLanguage - thumb_func_end MigrateBoxMon + thumb_func_end MigrateBoxMon - thumb_func_start MOD83_SetHeapId + thumb_func_start MOD83_SetHeapId MOD83_SetHeapId: ; 0x022385FC - ldr r1, _02238604 ; =heap_id - str r0, [r1] - bx lr - nop + ldr r1, _02238604 ; =heap_id + str r0, [r1] + bx lr + nop _02238604: .word heap_id - thumb_func_end MOD83_SetHeapId + thumb_func_end MOD83_SetHeapId - thumb_func_start MOD83_Alloc + thumb_func_start MOD83_Alloc MOD83_Alloc: ; 0x02238608 - add r1, r0, #0 - ldr r0, _02238614 ; =heap_id - ldr r3, _02238618 ; =AllocFromHeap - ldr r0, [r0] - bx r3 - nop + add r1, r0, #0 + ldr r0, _02238614 ; =heap_id + ldr r3, _02238618 ; =AllocFromHeap + ldr r0, [r0] + bx r3 + nop _02238614: .word heap_id _02238618: .word AllocFromHeap - thumb_func_end MOD83_Alloc + thumb_func_end MOD83_Alloc - thumb_func_start MOD83_0223861C + thumb_func_start MOD83_0223861C MOD83_0223861C: ; 0x0223861C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x130 - bl CTRDG_GetAgbGameCode - lsr r1, r0, #0x18 - lsl r1, r1, #0x18 - lsr r2, r1, #0x18 - lsr r1, r0, #0x10 - lsl r3, r0, #0x18 - lsr r0, r0, #8 - lsl r0, r0, #0x18 - lsl r1, r1, #0x18 - lsr r0, r0, #8 - lsr r1, r1, #0x10 - orr r0, r3 - orr r0, r1 - add r6, r2, #0 - orr r6, r0 - ldr r0, _022386B0 ; =MOD83_0223B69C - mov r4, #0 - ldr r0, [r0] - cmp r0, #0 - bls _022386A6 - ldr r5, _022386B4 ; =MOD83_0223B69C - add r7, sp, #0x80 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x1fc + sub sp, #0x1fc + sub sp, #0x130 + bl CTRDG_GetAgbGameCode + lsr r1, r0, #0x18 + lsl r1, r1, #0x18 + lsr r2, r1, #0x18 + lsr r1, r0, #0x10 + lsl r3, r0, #0x18 + lsr r0, r0, #8 + lsl r0, r0, #0x18 + lsl r1, r1, #0x18 + lsr r0, r0, #8 + lsr r1, r1, #0x10 + orr r0, r3 + orr r0, r1 + add r6, r2, #0 + orr r6, r0 + ldr r0, _022386B0 ; =MOD83_0223B69C + mov r4, #0 + ldr r0, [r0] + cmp r0, #0 + bls _022386A6 + ldr r5, _022386B4 ; =MOD83_0223B69C + add r7, sp, #0x80 _02238652: - ldr r0, [r5] - cmp r6, r0 - bne _0223869C - mov r0, #1 - bl CTRDG_Enable - mov r0, #0x81 - ldr r2, _022386B8 ; =0x000004A8 - lsl r0, r0, #0x14 - add r1, r7, #0 - bl CTRDG_CpuCopy8 - ldr r0, _022386BC ; =0x08020000 - add r1, sp, #0 - mov r2, #0x80 - bl CTRDG_CpuCopy8 - mov r0, #0 - bl CTRDG_Enable - ldr r0, _022386C0 ; =MOD83_Alloc - ldr r1, _022386C4 ; =FreeToHeap - bl SetCustomAllocatorAndDestructor - ldr r1, _022386B8 ; =0x000004A8 - ldr r3, _022386C8 ; =MOD83_0223A6B4 - add r0, r7, #0 - add r2, sp, #0 - bl FUN_020910EC - cmp r0, #0 - beq _0223869C - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x130 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r5] + cmp r6, r0 + bne _0223869C + mov r0, #1 + bl CTRDG_Enable + mov r0, #0x81 + ldr r2, _022386B8 ; =0x000004A8 + lsl r0, r0, #0x14 + add r1, r7, #0 + bl CTRDG_CpuCopy8 + ldr r0, _022386BC ; =0x08020000 + add r1, sp, #0 + mov r2, #0x80 + bl CTRDG_CpuCopy8 + mov r0, #0 + bl CTRDG_Enable + ldr r0, _022386C0 ; =MOD83_Alloc + ldr r1, _022386C4 ; =FreeToHeap + bl SetCustomAllocatorAndDestructor + ldr r1, _022386B8 ; =0x000004A8 + ldr r3, _022386C8 ; =MOD83_0223A6B4 + add r0, r7, #0 + add r2, sp, #0 + bl FUN_020910EC + cmp r0, #0 + beq _0223869C + add sp, #0x1fc + add sp, #0x1fc + add sp, #0x130 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0223869C: - add r5, r5, #4 - ldr r0, [r5] - add r4, r4, #1 - cmp r4, r0 - blo _02238652 + add r5, r5, #4 + ldr r0, [r5] + add r4, r4, #1 + cmp r4, r0 + blo _02238652 _022386A6: - mov r0, #0 - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x130 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0x1fc + add sp, #0x1fc + add sp, #0x130 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022386B0: .word MOD83_0223B69C _022386B4: .word MOD83_0223B69C _022386B8: .word 0x000004A8 @@ -22703,2202 +22703,2202 @@ _022386BC: .word 0x08020000 _022386C0: .word MOD83_Alloc _022386C4: .word FreeToHeap _022386C8: .word MOD83_0223A6B4 - thumb_func_end MOD83_0223861C + thumb_func_end MOD83_0223861C - thumb_func_start MOD83_022386CC + thumb_func_start MOD83_022386CC MOD83_022386CC: ; 0x022386CC - push {r3, lr} - bl CTRDG_Init - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _022386DE - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl CTRDG_Init + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _022386DE + mov r0, #0 + pop {r3, pc} _022386DE: - bl CTRDG_GetAgbMakerCode - ldr r1, _022386FC ; =0x00003130 "01" - cmp r0, r1 - beq _022386EC - mov r0, #0 - pop {r3, pc} + bl CTRDG_GetAgbMakerCode + ldr r1, _022386FC ; =0x00003130 "01" + cmp r0, r1 + beq _022386EC + mov r0, #0 + pop {r3, pc} _022386EC: - bl MOD83_0223861C - cmp r0, #0 - beq _022386F8 - mov r0, #1 - pop {r3, pc} + bl MOD83_0223861C + cmp r0, #0 + beq _022386F8 + mov r0, #1 + pop {r3, pc} _022386F8: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _022386FC: .word 0x00003130 - thumb_func_end MOD83_022386CC + thumb_func_end MOD83_022386CC - thumb_func_start MOD83_02238700 + thumb_func_start MOD83_02238700 MOD83_02238700: ; 0x02238700 - push {r3, lr} - bl MOD83_022386CC - cmp r0, #0 - bne _0223870E - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_022386CC + cmp r0, #0 + bne _0223870E + mov r0, #0 + pop {r3, pc} _0223870E: - mov r0, #1 - bl CTRDG_Enable - mov r0, #0x81 - lsl r0, r0, #0x14 - add r1, sp, #0 - bl CTRDG_Read32 - mov r0, #0 - bl CTRDG_Enable - ldr r0, [sp] - pop {r3, pc} - thumb_func_end MOD83_02238700 - - thumb_func_start MOD83_02238728 + mov r0, #1 + bl CTRDG_Enable + mov r0, #0x81 + lsl r0, r0, #0x14 + add r1, sp, #0 + bl CTRDG_Read32 + mov r0, #0 + bl CTRDG_Enable + ldr r0, [sp] + pop {r3, pc} + thumb_func_end MOD83_02238700 + + thumb_func_start MOD83_02238728 MOD83_02238728: ; 0x02238728 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl MOD83_022386CC - cmp r0, #0 - bne _0223873A - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl MOD83_022386CC + cmp r0, #0 + bne _0223873A + mov r0, #0 + pop {r3, r4, r5, pc} _0223873A: - cmp r4, #0 - bne _02238744 - bl MOD83_02238700 - add r4, r0, #0 + cmp r4, #0 + bne _02238744 + bl MOD83_02238700 + add r4, r0, #0 _02238744: - mov r0, #1 - bl CTRDG_Enable - ldr r0, _0223876C ; =0x08100100 - add r1, r5, #0 - add r2, r4, #0 - bl CTRDG_CpuCopy16 - add r4, r0, #0 - mov r0, #0 - bl CTRDG_Enable - bl CTRDG_IsExisting - cmp r0, #0 - bne _02238768 - mov r0, #0 - pop {r3, r4, r5, pc} + mov r0, #1 + bl CTRDG_Enable + ldr r0, _0223876C ; =0x08100100 + add r1, r5, #0 + add r2, r4, #0 + bl CTRDG_CpuCopy16 + add r4, r0, #0 + mov r0, #0 + bl CTRDG_Enable + bl CTRDG_IsExisting + cmp r0, #0 + bne _02238768 + mov r0, #0 + pop {r3, r4, r5, pc} _02238768: - add r0, r4, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _0223876C: .word 0x08100100 - thumb_func_end MOD83_02238728 + thumb_func_end MOD83_02238728 - thumb_func_start MOD83_02238770 + thumb_func_start MOD83_02238770 MOD83_02238770: ; 0x02238770 - push {r3, r4, r5, r6} - add r4, r0, #0 - mov r0, #0 - ldr r6, _02238798 ; =MOD83_0223BC30 - add r1, r0, #0 - add r2, r0, #0 - add r3, r0, #0 - mov r5, #0x75 + push {r3, r4, r5, r6} + add r4, r0, #0 + mov r0, #0 + ldr r6, _02238798 ; =MOD83_0223BC30 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + mov r5, #0x75 _02238780: - stmia r6!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - sub r5, r5, #1 - bne _02238780 - str r0, [r6] - ldr r0, _0223879C ; =MOD83_0223BC30 - mov r1, #1 - str r1, [r0] - str r4, [r0, #4] - pop {r3, r4, r5, r6} - bx lr - nop + stmia r6!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + sub r5, r5, #1 + bne _02238780 + str r0, [r6] + ldr r0, _0223879C ; =MOD83_0223BC30 + mov r1, #1 + str r1, [r0] + str r4, [r0, #4] + pop {r3, r4, r5, r6} + bx lr + nop _02238798: .word MOD83_0223BC30 _0223879C: .word MOD83_0223BC30 - thumb_func_end MOD83_02238770 + thumb_func_end MOD83_02238770 - thumb_func_start MOD83_022387A0 + thumb_func_start MOD83_022387A0 MOD83_022387A0: ; 0x022387A0 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r2, #0 - add r6, r1, #0 - mov r0, #3 - add r2, r3, #0 - bl CreateHeap - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl OverlayManager_CreateAndGetData - mov r1, #0 - add r2, r4, #0 - add r5, r0, #0 - bl memset - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - pop {r4, r5, r6, pc} - thumb_func_end MOD83_022387A0 - - thumb_func_start MOD83_022387D8 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r2, #0 + add r6, r1, #0 + mov r0, #3 + add r2, r3, #0 + bl CreateHeap + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl OverlayManager_CreateAndGetData + mov r1, #0 + add r2, r4, #0 + add r5, r0, #0 + bl memset + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_022387A0 + + thumb_func_start MOD83_022387D8 MOD83_022387D8: ; 0x022387D8 - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - ldr r5, _0223885C ; =MOD83_0223A760 - add r6, r3, #0 - add r7, r0, #0 - add r4, r1, #0 - ldmia r5!, {r0, r1} - add r3, sp, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - cmp r2, #4 - str r0, [r3] - add r0, sp, #0 - strb r2, [r0, #0x10] - bhi _02238832 - add r0, r2, r2 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + ldr r5, _0223885C ; =MOD83_0223A760 + add r6, r3, #0 + add r7, r0, #0 + add r4, r1, #0 + ldmia r5!, {r0, r1} + add r3, sp, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + cmp r2, #4 + str r0, [r3] + add r0, sp, #0 + strb r2, [r0, #0x10] + bhi _02238832 + add r0, r2, r2 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223880A: ; jump table - .short _02238832 - _0223880A - 2 ; case 0 - .short _02238814 - _0223880A - 2 ; case 1 - .short _0223881C - _0223880A - 2 ; case 2 - .short _02238824 - _0223880A - 2 ; case 3 - .short _0223882C - _0223880A - 2 ; case 4 + .short _02238832 - _0223880A - 2 ; case 0 + .short _02238814 - _0223880A - 2 ; case 1 + .short _0223881C - _0223880A - 2 ; case 2 + .short _02238824 - _0223880A - 2 ; case 3 + .short _0223882C - _0223880A - 2 ; case 4 _02238814: - mov r0, #2 - lsl r0, r0, #0xa - str r0, [sp, #8] - b _02238832 + mov r0, #2 + lsl r0, r0, #0xa + str r0, [sp, #8] + b _02238832 _0223881C: - mov r0, #1 - lsl r0, r0, #0xc - str r0, [sp, #8] - b _02238832 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [sp, #8] + b _02238832 _02238824: - mov r0, #1 - lsl r0, r0, #0xc - str r0, [sp, #8] - b _02238832 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [sp, #8] + b _02238832 _0223882C: - mov r0, #2 - lsl r0, r0, #0xc - str r0, [sp, #8] + mov r0, #2 + lsl r0, r0, #0xc + str r0, [sp, #8] _02238832: - lsr r1, r6, #0xb - add r0, sp, #0 - strb r1, [r0, #0x12] - ldr r1, [sp, #0x30] - add r2, sp, #0 - lsr r1, r1, #0xe - strb r1, [r0, #0x13] - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - mov r3, #0 - bl InitBgFromTemplate - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - bl BgClearTilemapBufferAndCommit - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + lsr r1, r6, #0xb + add r0, sp, #0 + strb r1, [r0, #0x12] + ldr r1, [sp, #0x30] + add r2, sp, #0 + lsr r1, r1, #0xe + strb r1, [r0, #0x13] + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + mov r3, #0 + bl InitBgFromTemplate + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + bl BgClearTilemapBufferAndCommit + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _0223885C: .word MOD83_0223A760 - thumb_func_end MOD83_022387D8 + thumb_func_end MOD83_022387D8 - thumb_func_start MOD83_02238860 + thumb_func_start MOD83_02238860 MOD83_02238860: ; 0x02238860 - ldr r1, _02238868 ; =MOD83_0223BC30 - str r0, [r1, #0xc] - bx lr - nop + ldr r1, _02238868 ; =MOD83_0223BC30 + str r0, [r1, #0xc] + bx lr + nop _02238868: .word MOD83_0223BC30 - thumb_func_end MOD83_02238860 + thumb_func_end MOD83_02238860 - thumb_func_start MOD83_0223886C + thumb_func_start MOD83_0223886C MOD83_0223886C: ; 0x0223886C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - str r0, [sp, #0xc] - ldr r0, _022388C0 ; =MOD83_0223BC30 - add r5, r1, #0 - ldr r0, [r0, #0xc] - add r4, r2, #0 - add r6, r3, #0 - ldr r7, _022388C4 ; =MOD83_0223BC30 - cmp r0, #0 - bne _0223889C - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, [r7, #4] - ldr r1, [sp, #0xc] - str r0, [sp, #8] - mov r0, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - b _022388B4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp, #0xc] + ldr r0, _022388C0 ; =MOD83_0223BC30 + add r5, r1, #0 + ldr r0, [r0, #0xc] + add r4, r2, #0 + add r6, r3, #0 + ldr r7, _022388C4 ; =MOD83_0223BC30 + cmp r0, #0 + bne _0223889C + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r7, #4] + ldr r1, [sp, #0xc] + str r0, [sp, #8] + mov r0, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + b _022388B4 _0223889C: - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, [r7, #4] - ldr r1, [sp, #0xc] - str r0, [sp, #8] - ldr r3, _022388C8 ; =0x00007FFF - mov r0, #0 - add r2, r1, #0 - bl FUN_0200E1D0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r7, #4] + ldr r1, [sp, #0xc] + str r0, [sp, #8] + ldr r3, _022388C8 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 _022388B4: - cmp r4, #0 - beq _022388BA - str r6, [r4] + cmp r4, #0 + beq _022388BA + str r6, [r4] _022388BA: - str r5, [r7, #8] - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r5, [r7, #8] + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022388C0: .word MOD83_0223BC30 _022388C4: .word MOD83_0223BC30 _022388C8: .word 0x00007FFF - thumb_func_end MOD83_0223886C + thumb_func_end MOD83_0223886C - thumb_func_start MOD83_022388CC + thumb_func_start MOD83_022388CC MOD83_022388CC: ; 0x022388CC - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r5, _022388E0 ; =MOD83_0223BC30 - bl FUN_0200E308 - cmp r0, #0 - beq _022388DE - ldr r0, [r5, #8] - str r0, [r4] + push {r3, r4, r5, lr} + add r4, r0, #0 + ldr r5, _022388E0 ; =MOD83_0223BC30 + bl FUN_0200E308 + cmp r0, #0 + beq _022388DE + ldr r0, [r5, #8] + str r0, [r4] _022388DE: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _022388E0: .word MOD83_0223BC30 - thumb_func_end MOD83_022388CC + thumb_func_end MOD83_022388CC - thumb_func_start MOD83_022388E4 + thumb_func_start MOD83_022388E4 MOD83_022388E4: ; 0x022388E4 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r6, r2, #0 - mov r1, #0 - mov r2, #0x54 - add r5, r0, #0 - add r7, r3, #0 - bl memset - mov r0, #1 - str r0, [r5, #4] - str r0, [r5, #8] - sub r0, r0, #2 - str r0, [r5, #0x4c] - str r4, [r5, #0x10] - str r6, [r5, #0x30] - ldr r0, [sp, #0x18] - str r7, [r5, #0x34] - str r0, [r5, #0x38] - ldr r0, [sp, #0x1c] - mov r2, #0 - str r0, [r5, #0x3c] - str r2, [r5, #0x2c] - ldr r0, _02238930 ; =0x0001020F - str r2, [r5, #0x40] - str r0, [r5, #0x44] - add r0, r5, #0 - mov r1, #0xf - add r0, #0x48 - strb r1, [r0] - str r2, [r5] - str r2, [r5, #0x24] - str r2, [r5, #0x20] - str r2, [r5, #0x14] - mov r0, #0xff - str r0, [r5, #0x50] - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r6, r2, #0 + mov r1, #0 + mov r2, #0x54 + add r5, r0, #0 + add r7, r3, #0 + bl memset + mov r0, #1 + str r0, [r5, #4] + str r0, [r5, #8] + sub r0, r0, #2 + str r0, [r5, #0x4c] + str r4, [r5, #0x10] + str r6, [r5, #0x30] + ldr r0, [sp, #0x18] + str r7, [r5, #0x34] + str r0, [r5, #0x38] + ldr r0, [sp, #0x1c] + mov r2, #0 + str r0, [r5, #0x3c] + str r2, [r5, #0x2c] + ldr r0, _02238930 ; =0x0001020F + str r2, [r5, #0x40] + str r0, [r5, #0x44] + add r0, r5, #0 + mov r1, #0xf + add r0, #0x48 + strb r1, [r0] + str r2, [r5] + str r2, [r5, #0x24] + str r2, [r5, #0x20] + str r2, [r5, #0x14] + mov r0, #0xff + str r0, [r5, #0x50] + pop {r3, r4, r5, r6, r7, pc} + nop _02238930: .word 0x0001020F - thumb_func_end MOD83_022388E4 + thumb_func_end MOD83_022388E4 - thumb_func_start MOD83_02238934 + thumb_func_start MOD83_02238934 MOD83_02238934: ; 0x02238934 - str r1, [r0, #0x18] - str r2, [r0, #0x1c] - str r3, [r0, #0x28] - bx lr - thumb_func_end MOD83_02238934 + str r1, [r0, #0x18] + str r2, [r0, #0x1c] + str r3, [r0, #0x28] + bx lr + thumb_func_end MOD83_02238934 - thumb_func_start MOD83_0223893C + thumb_func_start MOD83_0223893C MOD83_0223893C: ; 0x0223893C - str r1, [r0] - str r2, [r0, #0x40] - bx lr - .align 2, 0 - thumb_func_end MOD83_0223893C + str r1, [r0] + str r2, [r0, #0x40] + bx lr + .align 2, 0 + thumb_func_end MOD83_0223893C - thumb_func_start MOD83_02238944 + thumb_func_start MOD83_02238944 MOD83_02238944: ; 0x02238944 - str r1, [r0, #0x20] - str r2, [r0, #0x24] - bx lr - .align 2, 0 - thumb_func_end MOD83_02238944 + str r1, [r0, #0x20] + str r2, [r0, #0x24] + bx lr + .align 2, 0 + thumb_func_end MOD83_02238944 - thumb_func_start MOD83_0223894C + thumb_func_start MOD83_0223894C MOD83_0223894C: ; 0x0223894C - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r5, r0, #0 - mov r0, #0 - mvn r0, r0 - ldr r4, _02238A34 ; =MOD83_0223BC30 - cmp r1, r0 - beq _02238A2A - ldr r0, [r5, #0x4c] - cmp r0, r1 - beq _02238A2A - str r1, [r5, #0x4c] - ldr r0, [r5, #8] - cmp r0, #1 - bne _02238976 - add r1, r5, #0 - add r1, #0x48 - ldrb r1, [r1] - ldr r0, [r5, #0x10] - bl FillWindowPixelBuffer + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r5, r0, #0 + mov r0, #0 + mvn r0, r0 + ldr r4, _02238A34 ; =MOD83_0223BC30 + cmp r1, r0 + beq _02238A2A + ldr r0, [r5, #0x4c] + cmp r0, r1 + beq _02238A2A + str r1, [r5, #0x4c] + ldr r0, [r5, #8] + cmp r0, #1 + bne _02238976 + add r1, r5, #0 + add r1, #0x48 + ldrb r1, [r1] + ldr r0, [r5, #0x10] + bl FillWindowPixelBuffer _02238976: - mov r0, #0 - ldr r1, [r5, #0x4c] - mvn r0, r0 - cmp r1, r0 - beq _02238A2A - ldr r2, [r5, #0x34] - ldr r3, [r4, #4] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - ldr r6, [r5, #0x14] - str r0, [sp, #0x10] - cmp r6, #0 - bne _0223899C - ldr r0, [r4, #4] - bl ScrStrBufs_new - add r6, r0, #0 + mov r0, #0 + ldr r1, [r5, #0x4c] + mvn r0, r0 + cmp r1, r0 + beq _02238A2A + ldr r2, [r5, #0x34] + ldr r3, [r4, #4] + mov r0, #1 + mov r1, #0x1a + bl NewMsgDataFromNarc + ldr r6, [r5, #0x14] + str r0, [sp, #0x10] + cmp r6, #0 + bne _0223899C + ldr r0, [r4, #4] + bl ScrStrBufs_new + add r6, r0, #0 _0223899C: - ldr r1, [sp, #0x10] - ldr r2, [r5, #0x4c] - ldr r3, [r4, #4] - add r0, r6, #0 - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - ldr r0, [r5, #0xc] - cmp r0, #0 - bne _022389D0 - ldr r0, [r5, #0x24] - add r2, r4, #0 - str r0, [sp] - ldr r0, [r5, #0x50] - str r0, [sp, #4] - ldr r0, [r5, #0x44] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5, #0x10] - ldr r1, [r5, #0x40] - ldr r3, [r5, #0x20] - bl AddTextPrinterParameterized2 - add r7, r0, #0 - b _02238A12 + ldr r1, [sp, #0x10] + ldr r2, [r5, #0x4c] + ldr r3, [r4, #4] + add r0, r6, #0 + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + ldr r0, [r5, #0xc] + cmp r0, #0 + bne _022389D0 + ldr r0, [r5, #0x24] + add r2, r4, #0 + str r0, [sp] + ldr r0, [r5, #0x50] + str r0, [sp, #4] + ldr r0, [r5, #0x44] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x40] + ldr r3, [r5, #0x20] + bl AddTextPrinterParameterized2 + add r7, r0, #0 + b _02238A12 _022389D0: - ldr r0, [r5, #0x40] - mov r1, #2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl GetFontAttribute - add r2, r0, #0 - ldr r0, [r5, #0x40] - add r1, r4, #0 - bl FUN_02002E14 - add r7, r0, #0 - ldr r0, [r5, #0x10] - bl GetWindowWidth - lsl r0, r0, #3 - sub r3, r0, r7 - ldr r0, [r5, #0x24] - add r2, r4, #0 - str r0, [sp] - ldr r0, [r5, #0x50] - str r0, [sp, #4] - ldr r0, [r5, #0x44] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5, #0x10] - ldr r1, [r5, #0x40] - bl AddTextPrinterParameterized2 - add r7, r0, #0 - mov r0, #0 - str r0, [r5, #0xc] + ldr r0, [r5, #0x40] + mov r1, #2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl GetFontAttribute + add r2, r0, #0 + ldr r0, [r5, #0x40] + add r1, r4, #0 + bl FUN_02002E14 + add r7, r0, #0 + ldr r0, [r5, #0x10] + bl GetWindowWidth + lsl r0, r0, #3 + sub r3, r0, r7 + ldr r0, [r5, #0x24] + add r2, r4, #0 + str r0, [sp] + ldr r0, [r5, #0x50] + str r0, [sp, #4] + ldr r0, [r5, #0x44] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x40] + bl AddTextPrinterParameterized2 + add r7, r0, #0 + mov r0, #0 + str r0, [r5, #0xc] _02238A12: - add r0, r4, #0 - bl String_dtor - ldr r0, [r5, #0x14] - cmp r0, #0 - bne _02238A24 - add r0, r6, #0 - bl ScrStrBufs_delete + add r0, r4, #0 + bl String_dtor + ldr r0, [r5, #0x14] + cmp r0, #0 + bne _02238A24 + add r0, r6, #0 + bl ScrStrBufs_delete _02238A24: - ldr r0, [sp, #0x10] - bl DestroyMsgData + ldr r0, [sp, #0x10] + bl DestroyMsgData _02238A2A: - mov r0, #0xff - str r0, [r5, #0x50] - add r0, r7, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0xff + str r0, [r5, #0x50] + add r0, r7, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02238A34: .word MOD83_0223BC30 - thumb_func_end MOD83_0223894C + thumb_func_end MOD83_0223894C - thumb_func_start MOD83_02238A38 + thumb_func_start MOD83_02238A38 MOD83_02238A38: ; 0x02238A38 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r4, r1, #0 - ldr r1, [r4, #0x10] - add r6, r2, #0 - ldr r2, [r1] - add r5, r3, #0 - cmp r2, #0 - bne _02238A8A - lsl r2, r5, #0x18 - lsr r2, r2, #0x18 - str r2, [sp] - ldr r2, [r4, #0x18] - lsl r3, r6, #0x18 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #4] - ldr r2, [r4, #0x1c] - lsr r3, r3, #0x18 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #8] - ldr r2, [r4, #0x30] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #0xc] - ldr r2, [r4, #0x28] - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - str r2, [sp, #0x10] - ldr r2, [r4, #0x2c] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - bl AddWindowParameterized - ldr r1, [sp, #0x28] - add r0, r4, #0 - bl MOD83_0223894C - add r5, r0, #0 - b _02238AB8 + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r4, r1, #0 + ldr r1, [r4, #0x10] + add r6, r2, #0 + ldr r2, [r1] + add r5, r3, #0 + cmp r2, #0 + bne _02238A8A + lsl r2, r5, #0x18 + lsr r2, r2, #0x18 + str r2, [sp] + ldr r2, [r4, #0x18] + lsl r3, r6, #0x18 + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #4] + ldr r2, [r4, #0x1c] + lsr r3, r3, #0x18 + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #8] + ldr r2, [r4, #0x30] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #0xc] + ldr r2, [r4, #0x28] + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + str r2, [sp, #0x10] + ldr r2, [r4, #0x2c] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + bl AddWindowParameterized + ldr r1, [sp, #0x28] + add r0, r4, #0 + bl MOD83_0223894C + add r5, r0, #0 + b _02238AB8 _02238A8A: - mov r0, #0 - mvn r0, r0 - cmp r6, r0 - beq _02238A9C - add r0, r1, #0 - lsl r1, r6, #0x18 - lsr r1, r1, #0x18 - bl MoveWindowX + mov r0, #0 + mvn r0, r0 + cmp r6, r0 + beq _02238A9C + add r0, r1, #0 + lsl r1, r6, #0x18 + lsr r1, r1, #0x18 + bl MoveWindowX _02238A9C: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - beq _02238AAE - lsl r1, r5, #0x18 - ldr r0, [r4, #0x10] - lsr r1, r1, #0x18 - bl MoveWindowY + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + beq _02238AAE + lsl r1, r5, #0x18 + ldr r0, [r4, #0x10] + lsr r1, r1, #0x18 + bl MoveWindowY _02238AAE: - ldr r1, [sp, #0x28] - add r0, r4, #0 - bl MOD83_0223894C - add r5, r0, #0 + ldr r1, [sp, #0x28] + add r0, r4, #0 + bl MOD83_0223894C + add r5, r0, #0 _02238AB8: - ldr r0, [r4, #4] - cmp r0, #1 - bne _02238AEC - ldr r0, [r4] - cmp r0, #0 - ldr r0, [r4, #0x10] - bne _02238ADA - ldr r2, [r4, #0x38] - ldr r3, [r4, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - b _02238AEC + ldr r0, [r4, #4] + cmp r0, #1 + bne _02238AEC + ldr r0, [r4] + cmp r0, #0 + ldr r0, [r4, #0x10] + bne _02238ADA + ldr r2, [r4, #0x38] + ldr r3, [r4, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + b _02238AEC _02238ADA: - ldr r2, [r4, #0x38] - ldr r3, [r4, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200D0BC + ldr r2, [r4, #0x38] + ldr r3, [r4, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200D0BC _02238AEC: - add r0, r5, #0 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02238A38 + add r0, r5, #0 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02238A38 - thumb_func_start MOD83_02238AF4 + thumb_func_start MOD83_02238AF4 MOD83_02238AF4: ; 0x02238AF4 - ldr r1, [r0, #0x18] - ldr r0, [r0, #0x1c] - mul r0, r1 - bx lr - thumb_func_end MOD83_02238AF4 + ldr r1, [r0, #0x18] + ldr r0, [r0, #0x1c] + mul r0, r1 + bx lr + thumb_func_end MOD83_02238AF4 - thumb_func_start MOD83_02238AFC + thumb_func_start MOD83_02238AFC MOD83_02238AFC: ; 0x02238AFC - push {r4, lr} - sub sp, #0x10 - ldr r4, _02238B30 ; =MOD83_0223A734 - add r3, sp, #0 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, _02238B34 ; =MOD83_0223BC30 - ldr r0, [r0, #4] - str r0, [sp, #0xc] - add r0, r2, #0 - bl FUN_0201D040 - ldr r1, _02238B34 ; =MOD83_0223BC30 - mov r0, #0x14 - ldr r1, [r1, #4] - bl FUN_0201E00C - bl FUN_0201D168 - bl FUN_0201E0BC - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + ldr r4, _02238B30 ; =MOD83_0223A734 + add r3, sp, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, _02238B34 ; =MOD83_0223BC30 + ldr r0, [r0, #4] + str r0, [sp, #0xc] + add r0, r2, #0 + bl FUN_0201D040 + ldr r1, _02238B34 ; =MOD83_0223BC30 + mov r0, #0x14 + ldr r1, [r1, #4] + bl FUN_0201E00C + bl FUN_0201D168 + bl FUN_0201E0BC + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _02238B30: .word MOD83_0223A734 _02238B34: .word MOD83_0223BC30 - thumb_func_end MOD83_02238AFC + thumb_func_end MOD83_02238AFC - thumb_func_start MOD83_02238B38 + thumb_func_start MOD83_02238B38 MOD83_02238B38: ; 0x02238B38 - ldr r0, _02238B48 ; =MOD83_0223BC30 - ldr r0, [r0, #0x30] - cmp r0, #0 - beq _02238B44 - mov r0, #1 - bx lr + ldr r0, _02238B48 ; =MOD83_0223BC30 + ldr r0, [r0, #0x30] + cmp r0, #0 + beq _02238B44 + mov r0, #1 + bx lr _02238B44: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02238B48: .word MOD83_0223BC30 - thumb_func_end MOD83_02238B38 + thumb_func_end MOD83_02238B38 - thumb_func_start MOD83_02238B4C + thumb_func_start MOD83_02238B4C MOD83_02238B4C: ; 0x02238B4C - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - ldr r6, _02238BB4 ; =MOD83_0223BC30 - bl NNS_G2dInitOamManagerModule - mov r0, #0 - str r0, [sp] - mov r1, #0x7e - str r1, [sp, #4] - str r0, [sp, #8] - mov r3, #0x20 - ldr r2, _02238BB8 ; =MOD83_0223BC30 - str r3, [sp, #0xc] - ldr r2, [r2, #4] - str r2, [sp, #0x10] - add r2, r0, #0 - bl FUN_02009EAC - ldr r2, _02238BB8 ; =MOD83_0223BC30 - ldr r1, _02238BBC ; =MOD83_0223BC64 - ldr r2, [r2, #4] - mov r0, #0x46 - bl FUN_02008C9C - ldr r1, _02238BB8 ; =MOD83_0223BC30 - mov r2, #1 - str r0, [r1, #0x30] - ldr r0, _02238BBC ; =MOD83_0223BC64 - mov r1, #0 - lsl r2, r2, #0x14 - bl FUN_02008D24 - mov r1, #3 - mov r7, #0x57 - ldr r0, _02238BC0 ; =MOD83_0223BE30 - lsl r1, r1, #0x12 - str r1, [r0, #0xc] - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + ldr r6, _02238BB4 ; =MOD83_0223BC30 + bl NNS_G2dInitOamManagerModule + mov r0, #0 + str r0, [sp] + mov r1, #0x7e + str r1, [sp, #4] + str r0, [sp, #8] + mov r3, #0x20 + ldr r2, _02238BB8 ; =MOD83_0223BC30 + str r3, [sp, #0xc] + ldr r2, [r2, #4] + str r2, [sp, #0x10] + add r2, r0, #0 + bl FUN_02009EAC + ldr r2, _02238BB8 ; =MOD83_0223BC30 + ldr r1, _02238BBC ; =MOD83_0223BC64 + ldr r2, [r2, #4] + mov r0, #0x46 + bl FUN_02008C9C + ldr r1, _02238BB8 ; =MOD83_0223BC30 + mov r2, #1 + str r0, [r1, #0x30] + ldr r0, _02238BBC ; =MOD83_0223BC64 + mov r1, #0 + lsl r2, r2, #0x14 + bl FUN_02008D24 + mov r1, #3 + mov r7, #0x57 + ldr r0, _02238BC0 ; =MOD83_0223BE30 + lsl r1, r1, #0x12 + str r1, [r0, #0xc] + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02238B9C: - ldr r2, [r6, #4] - mov r0, #3 - add r1, r4, #0 - bl FUN_02008DEC - str r0, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02238B9C - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, [r6, #4] + mov r0, #3 + add r1, r4, #0 + bl FUN_02008DEC + str r0, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02238B9C + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02238BB4: .word MOD83_0223BC30 _02238BB8: .word MOD83_0223BC30 _02238BBC: .word MOD83_0223BC64 _02238BC0: .word MOD83_0223BE30 - thumb_func_end MOD83_02238B4C + thumb_func_end MOD83_02238B4C - thumb_func_start MOD83_02238BC4 + thumb_func_start MOD83_02238BC4 MOD83_02238BC4: ; 0x02238BC4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x38 - ldr r4, [sp, #0x54] - add r6, r0, #0 - mov ip, r1 - str r2, [sp, #0x2c] - str r3, [sp, #0x30] - ldr r5, _02238D30 ; =MOD83_0223BC30 - cmp r4, #0 - bne _02238BDC - mov r7, #1 - b _02238BDE + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x38 + ldr r4, [sp, #0x54] + add r6, r0, #0 + mov ip, r1 + str r2, [sp, #0x2c] + str r3, [sp, #0x30] + ldr r5, _02238D30 ; =MOD83_0223BC30 + cmp r4, #0 + bne _02238BDC + mov r7, #1 + b _02238BDE _02238BDC: - mov r7, #2 + mov r7, #2 _02238BDE: - mov r0, #1 - str r0, [sp, #0x34] - cmp r6, #0x10 - bne _02238BEA - mov r0, #0 - str r0, [sp, #0x34] + mov r0, #1 + str r0, [sp, #0x34] + cmp r6, #0x10 + bne _02238BEA + mov r0, #0 + str r0, [sp, #0x34] _02238BEA: - mov r1, #0 - mvn r1, r1 - mov r0, ip - cmp r0, r1 - beq _02238C18 - str r4, [sp] - str r7, [sp, #4] - ldr r0, [r5, #4] - ldr r3, [sp, #0x34] - str r0, [sp, #8] - mov r0, #0x57 - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r6, #0 - mov r2, ip - bl FUN_02008F34 - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5d - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + mvn r1, r1 + mov r0, ip + cmp r0, r1 + beq _02238C18 + str r4, [sp] + str r7, [sp, #4] + ldr r0, [r5, #4] + ldr r3, [sp, #0x34] + str r0, [sp, #8] + mov r0, #0x57 + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r6, #0 + mov r2, ip + bl FUN_02008F34 + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5d + lsl r1, r1, #2 + str r0, [r2, r1] _02238C18: - mov r1, #0 - ldr r0, [sp, #0x2c] - mvn r1, r1 - cmp r0, r1 - beq _02238C4A - str r4, [sp] - str r7, [sp, #4] - mov r0, #3 - str r0, [sp, #8] - ldr r0, [r5, #4] - ldr r2, [sp, #0x2c] - str r0, [sp, #0xc] - mov r0, #0x16 - lsl r0, r0, #4 - ldr r0, [r5, r0] - add r1, r6, #0 - mov r3, #0 - bl FUN_02008FEC - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5e - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + ldr r0, [sp, #0x2c] + mvn r1, r1 + cmp r0, r1 + beq _02238C4A + str r4, [sp] + str r7, [sp, #4] + mov r0, #3 + str r0, [sp, #8] + ldr r0, [r5, #4] + ldr r2, [sp, #0x2c] + str r0, [sp, #0xc] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r5, r0] + add r1, r6, #0 + mov r3, #0 + bl FUN_02008FEC + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5e + lsl r1, r1, #2 + str r0, [r2, r1] _02238C4A: - mov r1, #0 - ldr r0, [sp, #0x30] - mvn r1, r1 - cmp r0, r1 - beq _02238C7A - str r4, [sp] - mov r0, #2 - str r0, [sp, #4] - ldr r0, [r5, #4] - ldr r2, [sp, #0x30] - str r0, [sp, #8] - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r5, r0] - ldr r3, [sp, #0x34] - add r1, r6, #0 - bl FUN_020090AC - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5f - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + ldr r0, [sp, #0x30] + mvn r1, r1 + cmp r0, r1 + beq _02238C7A + str r4, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r0, [r5, #4] + ldr r2, [sp, #0x30] + str r0, [sp, #8] + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r5, r0] + ldr r3, [sp, #0x34] + add r1, r6, #0 + bl FUN_020090AC + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5f + lsl r1, r1, #2 + str r0, [r2, r1] _02238C7A: - mov r0, #0 - ldr r2, [sp, #0x50] - mvn r0, r0 - cmp r2, r0 - beq _02238CA8 - str r4, [sp] - mov r0, #3 - str r0, [sp, #4] - ldr r0, [r5, #4] - ldr r3, [sp, #0x34] - str r0, [sp, #8] - mov r0, #0x5a - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r6, #0 - bl FUN_020090AC - mov r1, #0x18 - add r2, r4, #0 - mul r2, r1 - add r2, r5, r2 - lsl r1, r1, #4 - str r0, [r2, r1] + mov r0, #0 + ldr r2, [sp, #0x50] + mvn r0, r0 + cmp r2, r0 + beq _02238CA8 + str r4, [sp] + mov r0, #3 + str r0, [sp, #4] + ldr r0, [r5, #4] + ldr r3, [sp, #0x34] + str r0, [sp, #8] + mov r0, #0x5a + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r6, #0 + bl FUN_020090AC + mov r1, #0x18 + add r2, r4, #0 + mul r2, r1 + add r2, r5, r2 + lsl r1, r1, #4 + str r0, [r2, r1] _02238CA8: - mov r0, #0x18 - add r6, r4, #0 - mul r6, r0 - mov r0, #0x5d - add r1, r5, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - bl FUN_02009A50 - mov r0, #0x5e - add r1, r5, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - bl FUN_02009CF0 - mov r0, #0 - mov r2, #0x57 - str r4, [sp] - mvn r0, r0 - str r0, [sp, #4] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - str r0, [sp, #0x10] - lsl r2, r2, #2 - ldr r1, [r5, r2] - add r3, r4, #0 - str r1, [sp, #0x14] - add r1, r2, #4 - ldr r1, [r5, r1] - str r1, [sp, #0x18] - add r1, r2, #0 - add r1, #8 - ldr r1, [r5, r1] - str r1, [sp, #0x1c] - add r1, r2, #0 - add r1, #0xc - ldr r1, [r5, r1] - add r2, #0x48 - str r1, [sp, #0x20] - str r0, [sp, #0x24] - str r0, [sp, #0x28] - mov r0, #0x24 - add r1, r5, r2 - mul r0, r4 - add r0, r1, r0 - add r1, r4, #0 - add r2, r4, #0 - bl FUN_02008AA4 - cmp r4, #0 - bne _02238D1A - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - b _02238D22 + mov r0, #0x18 + add r6, r4, #0 + mul r6, r0 + mov r0, #0x5d + add r1, r5, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + bl FUN_02009A50 + mov r0, #0x5e + add r1, r5, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + bl FUN_02009CF0 + mov r0, #0 + mov r2, #0x57 + str r4, [sp] + mvn r0, r0 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + str r0, [sp, #0x10] + lsl r2, r2, #2 + ldr r1, [r5, r2] + add r3, r4, #0 + str r1, [sp, #0x14] + add r1, r2, #4 + ldr r1, [r5, r1] + str r1, [sp, #0x18] + add r1, r2, #0 + add r1, #8 + ldr r1, [r5, r1] + str r1, [sp, #0x1c] + add r1, r2, #0 + add r1, #0xc + ldr r1, [r5, r1] + add r2, #0x48 + str r1, [sp, #0x20] + str r0, [sp, #0x24] + str r0, [sp, #0x28] + mov r0, #0x24 + add r1, r5, r2 + mul r0, r4 + add r0, r1, r0 + add r1, r4, #0 + add r2, r4, #0 + bl FUN_02008AA4 + cmp r4, #0 + bne _02238D1A + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + b _02238D22 _02238D1A: - mov r0, #0x10 - mov r1, #1 - bl GX_EngineBToggleLayers + mov r0, #0x10 + mov r1, #1 + bl GX_EngineBToggleLayers _02238D22: - ldr r0, _02238D34 ; =MOD83_02238F00 - mov r1, #0 - bl Main_SetVBlankIntrCB - add sp, #0x38 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, _02238D34 ; =MOD83_02238F00 + mov r1, #0 + bl Main_SetVBlankIntrCB + add sp, #0x38 + pop {r3, r4, r5, r6, r7, pc} + nop _02238D30: .word MOD83_0223BC30 _02238D34: .word MOD83_02238F00 - thumb_func_end MOD83_02238BC4 + thumb_func_end MOD83_02238BC4 - thumb_func_start MOD83_02238D38 + thumb_func_start MOD83_02238D38 MOD83_02238D38: ; 0x02238D38 - push {r4, lr} - add r2, r0, #0 - add r4, r1, #0 - add r1, r2, #0 - ldr r0, _02238D50 ; =MOD83_0223BC64 - add r2, r4, #0 - bl FUN_02008D24 - ldr r0, _02238D54 ; =MOD83_0223BE30 - str r4, [r0, #0xc] - pop {r4, pc} - nop + push {r4, lr} + add r2, r0, #0 + add r4, r1, #0 + add r1, r2, #0 + ldr r0, _02238D50 ; =MOD83_0223BC64 + add r2, r4, #0 + bl FUN_02008D24 + ldr r0, _02238D54 ; =MOD83_0223BE30 + str r4, [r0, #0xc] + pop {r4, pc} + nop _02238D50: .word MOD83_0223BC64 _02238D54: .word MOD83_0223BE30 - thumb_func_end MOD83_02238D38 + thumb_func_end MOD83_02238D38 - thumb_func_start MOD83_02238D58 + thumb_func_start MOD83_02238D58 MOD83_02238D58: ; 0x02238D58 - push {r4, lr} - ldr r0, _02238DB4 ; =MOD83_0223BE30 - ldr r4, _02238DB8 ; =MOD83_0223BC30 - ldr r0, [r0, #4] - cmp r0, #0 - beq _02238DA6 - mov r0, #0x82 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0 - bne _02238DA2 - sub r0, r0, #4 - ldr r0, [r4, r0] - bl FUN_02020128 - cmp r0, #0 - bne _02238D86 - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 + push {r4, lr} + ldr r0, _02238DB4 ; =MOD83_0223BE30 + ldr r4, _02238DB8 ; =MOD83_0223BC30 + ldr r0, [r0, #4] + cmp r0, #0 + beq _02238DA6 + mov r0, #0x82 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0 + bne _02238DA2 + sub r0, r0, #4 + ldr r0, [r4, r0] + bl FUN_02020128 + cmp r0, #0 + bne _02238D86 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 _02238D86: - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl FUN_0202011C - mov r1, #6 - ldr r2, [r0, #4] - lsl r1, r1, #0x12 - cmp r2, r1 - bge _02238DA6 - lsr r1, r1, #7 - add r1, r2, r1 - str r1, [r0, #4] - b _02238DA6 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0202011C + mov r1, #6 + ldr r2, [r0, #4] + lsl r1, r1, #0x12 + cmp r2, r1 + bge _02238DA6 + lsr r1, r1, #7 + add r1, r2, r1 + str r1, [r0, #4] + b _02238DA6 _02238DA2: - sub r1, r1, #1 - str r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] _02238DA6: - ldr r0, [r4, #0x30] - cmp r0, #0 - beq _02238DB0 - bl FUN_0201FDEC + ldr r0, [r4, #0x30] + cmp r0, #0 + beq _02238DB0 + bl FUN_0201FDEC _02238DB0: - pop {r4, pc} - nop + pop {r4, pc} + nop _02238DB4: .word MOD83_0223BE30 _02238DB8: .word MOD83_0223BC30 - thumb_func_end MOD83_02238D58 + thumb_func_end MOD83_02238D58 - thumb_func_start MOD83_02238DBC + thumb_func_start MOD83_02238DBC MOD83_02238DBC: ; 0x02238DBC - push {r3, r4, r5, lr} - sub sp, #0x30 - add r4, r1, #0 - ldr r1, _02238E44 ; =MOD83_0223BC30 - bne _02238E1E - ldr r4, [r1, #0x30] - lsl r2, r2, #0xc - str r4, [sp] - mov r4, #0x69 - lsl r4, r4, #2 - add r5, r1, r4 - mov r4, #0x24 - mul r4, r0 - add r4, r5, r4 - str r4, [sp, #4] - mov r4, #1 - lsl r4, r4, #0xc - mov r5, #0 - str r5, [sp, #0x10] - str r4, [sp, #0x14] - str r4, [sp, #0x18] - str r4, [sp, #0x1c] - add r4, sp, #0 - strh r5, [r4, #0x20] - str r2, [sp, #8] - lsl r2, r3, #0xc - str r2, [sp, #0xc] - mov r2, #0xa - str r2, [sp, #0x24] - cmp r0, #0 - bne _02238DFE - mov r2, #1 - b _02238E00 + push {r3, r4, r5, lr} + sub sp, #0x30 + add r4, r1, #0 + ldr r1, _02238E44 ; =MOD83_0223BC30 + bne _02238E1E + ldr r4, [r1, #0x30] + lsl r2, r2, #0xc + str r4, [sp] + mov r4, #0x69 + lsl r4, r4, #2 + add r5, r1, r4 + mov r4, #0x24 + mul r4, r0 + add r4, r5, r4 + str r4, [sp, #4] + mov r4, #1 + lsl r4, r4, #0xc + mov r5, #0 + str r5, [sp, #0x10] + str r4, [sp, #0x14] + str r4, [sp, #0x18] + str r4, [sp, #0x1c] + add r4, sp, #0 + strh r5, [r4, #0x20] + str r2, [sp, #8] + lsl r2, r3, #0xc + str r2, [sp, #0xc] + mov r2, #0xa + str r2, [sp, #0x24] + cmp r0, #0 + bne _02238DFE + mov r2, #1 + b _02238E00 _02238DFE: - mov r2, #2 + mov r2, #2 _02238E00: - ldr r0, [r1, #4] - str r2, [sp, #0x28] - str r0, [sp, #0x2c] - cmp r2, #2 - bne _02238E16 - mov r0, #0x83 - lsl r0, r0, #2 - ldr r2, [sp, #0xc] - ldr r0, [r1, r0] - add r0, r2, r0 - str r0, [sp, #0xc] + ldr r0, [r1, #4] + str r2, [sp, #0x28] + str r0, [sp, #0x2c] + cmp r2, #2 + bne _02238E16 + mov r0, #0x83 + lsl r0, r0, #2 + ldr r2, [sp, #0xc] + ldr r0, [r1, r0] + add r0, r2, r0 + str r0, [sp, #0xc] _02238E16: - add r0, sp, #0 - bl FUN_0201FE94 - add r4, r0, #0 + add r0, sp, #0 + bl FUN_0201FE94 + add r4, r0, #0 _02238E1E: - add r0, r4, #0 - mov r1, #1 - bl FUN_020200BC - add r0, r4, #0 - mov r1, #0 - bl FUN_02020238 - ldr r1, [sp, #0x40] - add r0, r4, #0 - bl FUN_02020130 - add r0, r4, #0 - mov r1, #1 - bl FUN_020200A0 - add r0, r4, #0 - add sp, #0x30 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + bl FUN_020200BC + add r0, r4, #0 + mov r1, #0 + bl FUN_02020238 + ldr r1, [sp, #0x40] + add r0, r4, #0 + bl FUN_02020130 + add r0, r4, #0 + mov r1, #1 + bl FUN_020200A0 + add r0, r4, #0 + add sp, #0x30 + pop {r3, r4, r5, pc} + .align 2, 0 _02238E44: .word MOD83_0223BC30 - thumb_func_end MOD83_02238DBC + thumb_func_end MOD83_02238DBC - thumb_func_start MOD83_02238E48 + thumb_func_start MOD83_02238E48 MOD83_02238E48: ; 0x02238E48 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02238EE8 ; =MOD83_0223BE30 - ldr r4, _02238EEC ; =MOD83_0223BC30 - ldr r0, [r0, #4] - cmp r0, #0 - beq _02238E66 - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl FUN_0201FFC8 - mov r0, #0x81 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02238EE8 ; =MOD83_0223BE30 + ldr r4, _02238EEC ; =MOD83_0223BC30 + ldr r0, [r0, #4] + cmp r0, #0 + beq _02238E66 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0201FFC8 + mov r0, #0x81 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _02238E66: - mov r1, #0x51 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E76 - bl FUN_02009C0C + mov r1, #0x51 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E76 + bl FUN_02009C0C _02238E76: - mov r1, #0x57 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E86 - bl FUN_02009C0C + mov r1, #0x57 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E86 + bl FUN_02009C0C _02238E86: - mov r1, #0x52 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E96 - bl FUN_02009E04 + mov r1, #0x52 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E96 + bl FUN_02009E04 _02238E96: - mov r1, #0x16 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #4 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238EA6 - bl FUN_02009E04 + mov r1, #0x16 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #4 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238EA6 + bl FUN_02009E04 _02238EA6: - mov r4, #0 - mov r7, #0x4b - ldr r5, _02238EF0 ; =MOD83_0223BC60 - add r6, r4, #0 - lsl r7, r7, #2 + mov r4, #0 + mov r7, #0x4b + ldr r5, _02238EF0 ; =MOD83_0223BC60 + add r6, r4, #0 + lsl r7, r7, #2 _02238EB0: - mov r0, #0x4b - lsl r0, r0, #2 - ldr r0, [r5, r0] - bl FUN_02008E2C - str r6, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02238EB0 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - ldr r0, [r0] - bl FUN_0201FD58 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - mov r1, #0 - str r1, [r0] - bl FUN_02009FA0 - bl FUN_0201D12C - bl FUN_0201E08C - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0x4b + lsl r0, r0, #2 + ldr r0, [r5, r0] + bl FUN_02008E2C + str r6, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02238EB0 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + ldr r0, [r0] + bl FUN_0201FD58 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + mov r1, #0 + str r1, [r0] + bl FUN_02009FA0 + bl FUN_0201D12C + bl FUN_0201E08C + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02238EE8: .word MOD83_0223BE30 _02238EEC: .word MOD83_0223BC30 _02238EF0: .word MOD83_0223BC60 - thumb_func_end MOD83_02238E48 + thumb_func_end MOD83_02238E48 - thumb_func_start MOD83_02238EF4 + thumb_func_start MOD83_02238EF4 MOD83_02238EF4: ; 0x02238EF4 - mov r1, #1 - sub r0, #0xa - lsl r1, r0 - add r0, r1, #0 - bx lr - .align 2, 0 - thumb_func_end MOD83_02238EF4 - - thumb_func_start MOD83_02238F00 + mov r1, #1 + sub r0, #0xa + lsl r1, r0 + add r0, r1, #0 + bx lr + .align 2, 0 + thumb_func_end MOD83_02238EF4 + + thumb_func_start MOD83_02238F00 MOD83_02238F00: ; 0x02238F00 - push {r4, lr} - ldr r0, _02238F34 ; =MOD83_0223CAB0 - ldr r4, _02238F38 ; =MOD83_0223BC30 - ldr r0, [r0, #0x20] - cmp r0, #0 - beq _02238F1E - mov r1, #0xea - lsl r1, r1, #4 - ldr r1, [r4, r1] - add r0, r4, #0 - blx r1 - mov r0, #0xea - mov r1, #0 - lsl r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + ldr r0, _02238F34 ; =MOD83_0223CAB0 + ldr r4, _02238F38 ; =MOD83_0223BC30 + ldr r0, [r0, #0x20] + cmp r0, #0 + beq _02238F1E + mov r1, #0xea + lsl r1, r1, #4 + ldr r1, [r4, r1] + add r0, r4, #0 + blx r1 + mov r0, #0xea + mov r1, #0 + lsl r0, r0, #4 + str r1, [r4, r0] _02238F1E: - bl FUN_0201C30C - bl FUN_02009F80 - ldr r3, _02238F3C ; =MOD83_027E0000 - ldr r1, _02238F40 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + bl FUN_0201C30C + bl FUN_02009F80 + ldr r3, _02238F3C ; =MOD83_027E0000 + ldr r1, _02238F40 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _02238F34: .word MOD83_0223CAB0 _02238F38: .word MOD83_0223BC30 _02238F3C: .word 0x027E0000 _02238F40: .word 0x00003FF8 - thumb_func_end MOD83_02238F00 + thumb_func_end MOD83_02238F00 - thumb_func_start MOD83_02238F44 + thumb_func_start MOD83_02238F44 MOD83_02238F44: ; 0x02238F44 - push {r4} - sub sp, #0x1c - ldr r4, _02238F90 ; =MOD83_0223A744 - add r3, sp, #0 - mov r2, #0x1a + push {r4} + sub sp, #0x1c + ldr r4, _02238F90 ; =MOD83_0223A744 + add r3, sp, #0 + mov r2, #0x1a _02238F4E: - ldrb r1, [r4] - add r4, r4, #1 - strb r1, [r3] - add r3, r3, #1 - sub r2, r2, #1 - bne _02238F4E - add r1, sp, #0 - ldrb r2, [r1] - mov r3, #0 - sub r1, r3, #1 - cmp r2, r1 - beq _02238F88 - add r4, sp, #0 - sub r1, r3, #1 + ldrb r1, [r4] + add r4, r4, #1 + strb r1, [r3] + add r3, r3, #1 + sub r2, r2, #1 + bne _02238F4E + add r1, sp, #0 + ldrb r2, [r1] + mov r3, #0 + sub r1, r3, #1 + cmp r2, r1 + beq _02238F88 + add r4, sp, #0 + sub r1, r3, #1 _02238F6A: - ldrb r2, [r4] - cmp r0, r2 - bne _02238F7E - add r0, sp, #0 - lsl r1, r3, #1 - add r0, #1 - add sp, #0x1c - ldrb r0, [r0, r1] - pop {r4} - bx lr + ldrb r2, [r4] + cmp r0, r2 + bne _02238F7E + add r0, sp, #0 + lsl r1, r3, #1 + add r0, #1 + add sp, #0x1c + ldrb r0, [r0, r1] + pop {r4} + bx lr _02238F7E: - add r4, r4, #2 - ldrb r2, [r4] - add r3, r3, #1 - cmp r2, r1 - bne _02238F6A + add r4, r4, #2 + ldrb r2, [r4] + add r3, r3, #1 + cmp r2, r1 + bne _02238F6A _02238F88: - mov r0, #0 - add sp, #0x1c - pop {r4} - bx lr - .align 2, 0 + mov r0, #0 + add sp, #0x1c + pop {r4} + bx lr + .align 2, 0 _02238F90: .word MOD83_0223A744 - thumb_func_end MOD83_02238F44 + thumb_func_end MOD83_02238F44 - thumb_func_start MOD83_02238F94 + thumb_func_start MOD83_02238F94 MOD83_02238F94: ; 0x02238F94 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x28 - str r0, [sp, #0x20] - add r5, r1, #0 - add r7, r2, #0 - add r6, r3, #0 - ldr r4, [sp, #0x40] - bl GetMonGender - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - bl MonIsShiny - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - lsl r0, r7, #0x18 - ldr r2, [sp, #0x24] - lsr r0, r0, #0x18 - str r0, [sp, #4] - mov r0, #0 - lsl r1, r5, #0x10 - lsl r2, r2, #0x18 - str r0, [sp, #8] - add r0, r4, #0 - lsr r1, r1, #0x10 - lsr r2, r2, #0x18 - mov r3, #2 - bl FUN_02068C00 - mov r1, #0 - ldr r0, [sp, #0x20] - add r2, r1, #0 - bl GetMonData - mov r3, #0 - str r3, [sp] - mov r1, #0xa - str r1, [sp, #4] - str r1, [sp, #8] - str r6, [sp, #0xc] - str r0, [sp, #0x10] - str r3, [sp, #0x14] - mov r0, #2 - str r0, [sp, #0x18] - str r5, [sp, #0x1c] - ldr r2, _0223902C ; =MOD83_0223BC30 - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldr r2, [r2, #4] - bl FUN_020124B4 - mov r1, #0x32 - add r0, r6, #0 - lsl r1, r1, #6 - bl DC_FlushRange - mov r1, #0x32 - lsl r1, r1, #6 - add r0, r6, #0 - add r2, r1, #0 - bl GXS_LoadOBJ - mov r0, #0x20 - str r0, [sp] - ldr r0, _0223902C ; =MOD83_0223BC30 - mov r2, #5 - ldr r0, [r0, #4] - mov r3, #0x60 - str r0, [sp, #4] - ldrh r0, [r4] - ldrh r1, [r4, #4] - bl GfGfxLoader_GXLoadPal - add sp, #0x28 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x28 + str r0, [sp, #0x20] + add r5, r1, #0 + add r7, r2, #0 + add r6, r3, #0 + ldr r4, [sp, #0x40] + bl GetMonGender + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + bl MonIsShiny + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + lsl r0, r7, #0x18 + ldr r2, [sp, #0x24] + lsr r0, r0, #0x18 + str r0, [sp, #4] + mov r0, #0 + lsl r1, r5, #0x10 + lsl r2, r2, #0x18 + str r0, [sp, #8] + add r0, r4, #0 + lsr r1, r1, #0x10 + lsr r2, r2, #0x18 + mov r3, #2 + bl FUN_02068C00 + mov r1, #0 + ldr r0, [sp, #0x20] + add r2, r1, #0 + bl GetMonData + mov r3, #0 + str r3, [sp] + mov r1, #0xa + str r1, [sp, #4] + str r1, [sp, #8] + str r6, [sp, #0xc] + str r0, [sp, #0x10] + str r3, [sp, #0x14] + mov r0, #2 + str r0, [sp, #0x18] + str r5, [sp, #0x1c] + ldr r2, _0223902C ; =MOD83_0223BC30 + ldrh r0, [r4] + ldrh r1, [r4, #2] + ldr r2, [r2, #4] + bl FUN_020124B4 + mov r1, #0x32 + add r0, r6, #0 + lsl r1, r1, #6 + bl DC_FlushRange + mov r1, #0x32 + lsl r1, r1, #6 + add r0, r6, #0 + add r2, r1, #0 + bl GXS_LoadOBJ + mov r0, #0x20 + str r0, [sp] + ldr r0, _0223902C ; =MOD83_0223BC30 + mov r2, #5 + ldr r0, [r0, #4] + mov r3, #0x60 + str r0, [sp, #4] + ldrh r0, [r4] + ldrh r1, [r4, #4] + bl GfGfxLoader_GXLoadPal + add sp, #0x28 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0223902C: .word MOD83_0223BC30 - thumb_func_end MOD83_02238F94 + thumb_func_end MOD83_02238F94 - thumb_func_start MOD83_02239030 + thumb_func_start MOD83_02239030 MOD83_02239030: ; 0x02239030 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - mov r0, #0x21 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x23 - mov r2, #0x20 - mov r3, #0x22 - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r3, #0 - mov r1, #0x81 - str r3, [sp] - lsl r1, r1, #2 - ldr r1, [r4, r1] - mov r0, #1 - mov r2, #0x80 - bl MOD83_02238DBC - mov r1, #0x81 - lsl r1, r1, #2 - str r0, [r4, r1] - add sp, #8 - pop {r4, pc} - thumb_func_end MOD83_02239030 - - thumb_func_start MOD83_02239070 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + mov r0, #0x21 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x23 + mov r2, #0x20 + mov r3, #0x22 + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r3, #0 + mov r1, #0x81 + str r3, [sp] + lsl r1, r1, #2 + ldr r1, [r4, r1] + mov r0, #1 + mov r2, #0x80 + bl MOD83_02238DBC + mov r1, #0x81 + lsl r1, r1, #2 + str r0, [r4, r1] + add sp, #8 + pop {r4, pc} + thumb_func_end MOD83_02239030 + + thumb_func_start MOD83_02239070 MOD83_02239070: ; 0x02239070 - push {r4, r5, r6, lr} - sub sp, #8 - add r5, r0, #0 - mov r0, #0xc - str r0, [sp] - mov r0, #1 - add r6, r1, #0 - add r4, r2, #0 - str r0, [sp, #4] - mov r0, #0x36 - mov r1, #0xa - mov r2, #0 - mov r3, #0xb - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r0, #1 - mov r1, #0x81 - str r0, [sp] - lsl r1, r1, #2 - ldr r1, [r5, r1] - mov r2, #0x80 - mov r3, #0 - bl MOD83_02238DBC - mov r3, #0x81 - lsl r3, r3, #2 - add r4, #8 - str r0, [r5, r3] - cmp r6, #1 - beq _022390C2 - cmp r6, #2 - beq _022390F4 - cmp r6, #7 - beq _02239110 - add sp, #8 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #8 + add r5, r0, #0 + mov r0, #0xc + str r0, [sp] + mov r0, #1 + add r6, r1, #0 + add r4, r2, #0 + str r0, [sp, #4] + mov r0, #0x36 + mov r1, #0xa + mov r2, #0 + mov r3, #0xb + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r0, #1 + mov r1, #0x81 + str r0, [sp] + lsl r1, r1, #2 + ldr r1, [r5, r1] + mov r2, #0x80 + mov r3, #0 + bl MOD83_02238DBC + mov r3, #0x81 + lsl r3, r3, #2 + add r4, #8 + str r0, [r5, r3] + cmp r6, #1 + beq _022390C2 + cmp r6, #2 + beq _022390F4 + cmp r6, #7 + beq _02239110 + add sp, #8 + pop {r4, r5, r6, pc} _022390C2: - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetMonData - add r6, r0, #0 - add r0, r4, #0 - mov r1, #0x70 - mov r2, #0 - bl GetMonData - add r2, r0, #0 - mov r0, #0xe9 - lsl r0, r0, #4 - mov r3, #0x21 - add r0, r5, r0 - lsl r3, r3, #4 - str r0, [sp] - add r0, r4, #0 - add r1, r6, #0 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetMonData + add r6, r0, #0 + add r0, r4, #0 + mov r1, #0x70 + mov r2, #0 + bl GetMonData + add r2, r0, #0 + mov r0, #0xe9 + lsl r0, r0, #4 + mov r3, #0x21 + add r0, r5, r0 + lsl r3, r3, #4 + str r0, [sp] + add r0, r4, #0 + add r1, r6, #0 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} _022390F4: - mov r0, #0xe9 - lsl r0, r0, #4 - add r1, r3, #0 - add r0, r5, r0 - add r3, #0xc - str r0, [sp] - add r0, r4, #0 - sub r1, #0x16 - mov r2, #0 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} + mov r0, #0xe9 + lsl r0, r0, #4 + add r1, r3, #0 + add r0, r5, r0 + add r3, #0xc + str r0, [sp] + add r0, r4, #0 + sub r1, #0x16 + mov r2, #0 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} _02239110: - mov r0, #0xe9 - lsl r0, r0, #4 - add r1, r3, #0 - add r0, r5, r0 - add r3, #0xc - str r0, [sp] - add r0, r4, #0 - sub r1, #0x16 - mov r2, #1 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02239070 - - thumb_func_start MOD83_0223912C + mov r0, #0xe9 + lsl r0, r0, #4 + add r1, r3, #0 + add r0, r5, r0 + add r3, #0xc + str r0, [sp] + add r0, r4, #0 + sub r1, #0x16 + mov r2, #1 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02239070 + + thumb_func_start MOD83_0223912C MOD83_0223912C: ; 0x0223912C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - cmp r1, #0xa - bhi _02239168 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r5, r0, #0 + cmp r1, #0xa + bhi _02239168 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239142: ; jump table - .short _02239168 - _02239142 - 2 ; case 0 - .short _02239168 - _02239142 - 2 ; case 1 - .short _02239168 - _02239142 - 2 ; case 2 - .short _02239158 - _02239142 - 2 ; case 3 - .short _02239168 - _02239142 - 2 ; case 4 - .short _02239168 - _02239142 - 2 ; case 5 - .short _02239168 - _02239142 - 2 ; case 6 - .short _02239168 - _02239142 - 2 ; case 7 - .short _0223915C - _02239142 - 2 ; case 8 - .short _02239160 - _02239142 - 2 ; case 9 - .short _02239166 - _02239142 - 2 ; case 10 + .short _02239168 - _02239142 - 2 ; case 0 + .short _02239168 - _02239142 - 2 ; case 1 + .short _02239168 - _02239142 - 2 ; case 2 + .short _02239158 - _02239142 - 2 ; case 3 + .short _02239168 - _02239142 - 2 ; case 4 + .short _02239168 - _02239142 - 2 ; case 5 + .short _02239168 - _02239142 - 2 ; case 6 + .short _02239168 - _02239142 - 2 ; case 7 + .short _0223915C - _02239142 - 2 ; case 8 + .short _02239160 - _02239142 - 2 ; case 9 + .short _02239166 - _02239142 - 2 ; case 10 _02239158: - ldr r4, [r2, #4] - b _02239168 + ldr r4, [r2, #4] + b _02239168 _0223915C: - ldr r4, _022391C4 ; =0x000001C6 - b _02239168 + ldr r4, _022391C4 ; =0x000001C6 + b _02239168 _02239160: - mov r4, #0x71 - lsl r4, r4, #2 - b _02239168 + mov r4, #0x71 + lsl r4, r4, #2 + b _02239168 _02239166: - ldr r4, _022391C8 ; =0x000001C7 + ldr r4, _022391C8 ; =0x000001C7 _02239168: - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - mov r1, #1 - bl GetItemIndexMapping - add r7, r0, #0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - mov r1, #2 - bl GetItemIndexMapping - add r4, r0, #0 - bl FUN_0206E708 - add r6, r0, #0 - bl FUN_0206E70C - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x10 - add r1, r7, #0 - add r2, r4, #0 - add r3, r6, #0 - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r3, #0 - mov r1, #0x81 - str r3, [sp] - lsl r1, r1, #2 - ldr r1, [r5, r1] - mov r0, #1 - mov r2, #0x80 - bl MOD83_02238DBC - mov r1, #0x81 - lsl r1, r1, #2 - str r0, [r5, r1] - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + mov r1, #1 + bl GetItemIndexMapping + add r7, r0, #0 + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + mov r1, #2 + bl GetItemIndexMapping + add r4, r0, #0 + bl FUN_0206E708 + add r6, r0, #0 + bl FUN_0206E70C + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x10 + add r1, r7, #0 + add r2, r4, #0 + add r3, r6, #0 + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r3, #0 + mov r1, #0x81 + str r3, [sp] + lsl r1, r1, #2 + ldr r1, [r5, r1] + mov r0, #1 + mov r2, #0x80 + bl MOD83_02238DBC + mov r1, #0x81 + lsl r1, r1, #2 + str r0, [r5, r1] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _022391C4: .word 0x000001C6 _022391C8: .word 0x000001C7 - thumb_func_end MOD83_0223912C + thumb_func_end MOD83_0223912C - thumb_func_start MOD83_022391CC + thumb_func_start MOD83_022391CC MOD83_022391CC: ; 0x022391CC - push {r3, lr} - sub sp, #8 - mov r1, #0xc0 - str r1, [sp] - ldr r0, [r0, #4] - mov r2, #4 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x1d - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - add sp, #8 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022391CC - - thumb_func_start MOD83_022391EC + push {r3, lr} + sub sp, #8 + mov r1, #0xc0 + str r1, [sp] + ldr r0, [r0, #4] + mov r2, #4 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x1d + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + add sp, #8 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022391CC + + thumb_func_start MOD83_022391EC MOD83_022391EC: ; 0x022391EC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r6, r1, #0 - ldrh r4, [r6] - add r5, r0, #0 - add r0, r4, #0 - bl MOD83_02238F44 - add r7, r0, #0 - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, _022392DC ; =MOD83_0223BC30 - mov r1, #0x1e - ldr r0, [r0, #4] - add r2, r5, #0 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r3, #5 - bl GfGfxLoader_LoadCharData - mov r2, #1 - ldr r3, _022392DC ; =MOD83_0223BC30 - str r2, [sp] - ldr r3, [r3, #4] - mov r0, #0x74 - mov r1, #0x1f - bl GfGfxLoader_LoadFromNarc - add r1, sp, #0x14 - str r0, [sp, #0x10] - bl NNS_G2dGetUnpackedScreenData - ldr r2, [sp, #0x14] - mov r3, #6 - add r0, r5, #0 - mov r1, #5 - add r2, #0xc - lsl r3, r3, #8 - bl BG_LoadScreenTilemapData - ldr r0, [sp, #0x10] - bl FreeToHeap - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - mov r2, #0 - add r7, #8 - str r0, [sp, #4] - lsl r0, r7, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - add r0, r5, #0 - mov r1, #5 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r5, #0 - mov r1, #5 - bl BgCommitTilemapBufferToVram - ldr r1, _022392E0 ; =MOD83_022391CC - ldr r0, _022392E4 ; =MOD83_0223CAB0 - cmp r4, #0xb - str r1, [r0, #0x20] - bhi _022392CA - add r0, r4, r4 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r6, r1, #0 + ldrh r4, [r6] + add r5, r0, #0 + add r0, r4, #0 + bl MOD83_02238F44 + add r7, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, _022392DC ; =MOD83_0223BC30 + mov r1, #0x1e + ldr r0, [r0, #4] + add r2, r5, #0 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r3, #5 + bl GfGfxLoader_LoadCharData + mov r2, #1 + ldr r3, _022392DC ; =MOD83_0223BC30 + str r2, [sp] + ldr r3, [r3, #4] + mov r0, #0x74 + mov r1, #0x1f + bl GfGfxLoader_LoadFromNarc + add r1, sp, #0x14 + str r0, [sp, #0x10] + bl NNS_G2dGetUnpackedScreenData + ldr r2, [sp, #0x14] + mov r3, #6 + add r0, r5, #0 + mov r1, #5 + add r2, #0xc + lsl r3, r3, #8 + bl BG_LoadScreenTilemapData + ldr r0, [sp, #0x10] + bl FreeToHeap + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + mov r2, #0 + add r7, #8 + str r0, [sp, #4] + lsl r0, r7, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + add r0, r5, #0 + mov r1, #5 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r5, #0 + mov r1, #5 + bl BgCommitTilemapBufferToVram + ldr r1, _022392E0 ; =MOD83_022391CC + ldr r0, _022392E4 ; =MOD83_0223CAB0 + cmp r4, #0xb + str r1, [r0, #0x20] + bhi _022392CA + add r0, r4, r4 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239286: ; jump table - .short _022392CA - _02239286 - 2 ; case 0 - .short _022392B4 - _02239286 - 2 ; case 1 - .short _022392B4 - _02239286 - 2 ; case 2 - .short _022392C0 - _02239286 - 2 ; case 3 - .short _0223929E - _02239286 - 2 ; case 4 - .short _0223929E - _02239286 - 2 ; case 5 - .short _0223929E - _02239286 - 2 ; case 6 - .short _022392AA - _02239286 - 2 ; case 7 - .short _022392C0 - _02239286 - 2 ; case 8 - .short _022392C0 - _02239286 - 2 ; case 9 - .short _022392C0 - _02239286 - 2 ; case 10 - .short _0223929E - _02239286 - 2 ; case 11 + .short _022392CA - _02239286 - 2 ; case 0 + .short _022392B4 - _02239286 - 2 ; case 1 + .short _022392B4 - _02239286 - 2 ; case 2 + .short _022392C0 - _02239286 - 2 ; case 3 + .short _0223929E - _02239286 - 2 ; case 4 + .short _0223929E - _02239286 - 2 ; case 5 + .short _0223929E - _02239286 - 2 ; case 6 + .short _022392AA - _02239286 - 2 ; case 7 + .short _022392C0 - _02239286 - 2 ; case 8 + .short _022392C0 - _02239286 - 2 ; case 9 + .short _022392C0 - _02239286 - 2 ; case 10 + .short _0223929E - _02239286 - 2 ; case 11 _0223929E: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02239030 - b _022392CA + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02239030 + b _022392CA _022392AA: - mov r1, #0x82 - ldr r0, _022392E8 ; =MOD83_0223BC30 - mov r2, #0x78 - lsl r1, r1, #2 - str r2, [r0, r1] + mov r1, #0x82 + ldr r0, _022392E8 ; =MOD83_0223BC30 + mov r2, #0x78 + lsl r1, r1, #2 + str r2, [r0, r1] _022392B4: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02239070 - b _022392CA + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02239070 + b _022392CA _022392C0: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_0223912C + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_0223912C _022392CA: - mov r1, #0x81 - ldr r0, _022392E8 ; =MOD83_0223BC30 - lsl r1, r1, #2 - ldr r0, [r0, r1] - mov r1, #0 - bl FUN_020200A0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r1, #0x81 + ldr r0, _022392E8 ; =MOD83_0223BC30 + lsl r1, r1, #2 + ldr r0, [r0, r1] + mov r1, #0 + bl FUN_020200A0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022392DC: .word MOD83_0223BC30 _022392E0: .word MOD83_022391CC _022392E4: .word MOD83_0223CAB0 _022392E8: .word MOD83_0223BC30 - thumb_func_end MOD83_022391EC + thumb_func_end MOD83_022391EC - thumb_func_start MOD83_022392EC + thumb_func_start MOD83_022392EC MOD83_022392EC: ; 0x022392EC - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r7, r1, #0 - mov r1, #2 - add r5, r0, #0 - add r0, r2, #0 - lsl r1, r1, #8 - str r2, [sp] - bl AllocFromHeap - ldr r1, _0223936C ; =0x0000A001 - add r4, r0, #0 - bl MATHi_CRC16InitTableRev - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x50 - bl MATH_CalcCRC16 - add r6, r0, #0 - add r0, r4, #0 - bl FreeToHeap - add r0, sp, #4 - bl OS_GetMacAddress - add r0, sp, #4 - ldrh r1, [r0, #2] - mov r2, #0 - add r3, sp, #4 - strh r1, [r0, #6] - ldr r1, _02239370 ; =0x0000D679 - strh r6, [r0, #2] + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r7, r1, #0 + mov r1, #2 + add r5, r0, #0 + add r0, r2, #0 + lsl r1, r1, #8 + str r2, [sp] + bl AllocFromHeap + ldr r1, _0223936C ; =0x0000A001 + add r4, r0, #0 + bl MATHi_CRC16InitTableRev + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x50 + bl MATH_CalcCRC16 + add r6, r0, #0 + add r0, r4, #0 + bl FreeToHeap + add r0, sp, #4 + bl OS_GetMacAddress + add r0, sp, #4 + ldrh r1, [r0, #2] + mov r2, #0 + add r3, sp, #4 + strh r1, [r0, #6] + ldr r1, _02239370 ; =0x0000D679 + strh r6, [r0, #2] _0223932E: - ldrh r0, [r3] - add r2, r2, #1 - eor r0, r1 - strh r0, [r3] - ldrh r1, [r3] - add r3, r3, #2 - cmp r2, #4 - blt _0223932E - mov r1, #0x41 - ldr r0, [sp] - lsl r1, r1, #2 - bl AllocFromHeap - add r1, sp, #4 - mov r2, #8 - add r4, r0, #0 - bl FUN_0209521C - add r5, #0x50 - mov r2, #0xd6 - add r0, r4, #0 - add r1, r5, #0 - lsl r2, r2, #2 - add r3, r7, #0 - bl FUN_020952AC - add r0, r4, #0 - bl FreeToHeap - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r3] + add r2, r2, #1 + eor r0, r1 + strh r0, [r3] + ldrh r1, [r3] + add r3, r3, #2 + cmp r2, #4 + blt _0223932E + mov r1, #0x41 + ldr r0, [sp] + lsl r1, r1, #2 + bl AllocFromHeap + add r1, sp, #4 + mov r2, #8 + add r4, r0, #0 + bl FUN_0209521C + add r5, #0x50 + mov r2, #0xd6 + add r0, r4, #0 + add r1, r5, #0 + lsl r2, r2, #2 + add r3, r7, #0 + bl FUN_020952AC + add r0, r4, #0 + bl FreeToHeap + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0223936C: .word 0x0000A001 _02239370: .word 0x0000D679 - thumb_func_end MOD83_022392EC + thumb_func_end MOD83_022392EC - thumb_func_start MOD83_02239374 + thumb_func_start MOD83_02239374 MOD83_02239374: ; 0x02239374 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r7, r1, #0 - mov r1, #2 - add r5, r0, #0 - add r0, r2, #0 - lsl r1, r1, #8 - str r2, [sp] - bl AllocFromHeap - ldr r1, _0223940C ; =0x0000A001 - add r4, r0, #0 - bl MATHi_CRC16InitTableRev - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x50 - bl MATH_CalcCRC16 - add r6, r0, #0 - add r0, r4, #0 - bl FreeToHeap - mov r0, #0 - bl FUN_0202EF18 - ldrb r2, [r0, #4] - add r1, sp, #4 - mov r3, #0 - strb r2, [r1] - ldrb r2, [r0, #5] - strb r2, [r1, #1] - ldrb r2, [r0, #6] - strb r2, [r1, #2] - ldrb r2, [r0, #7] - strb r2, [r1, #3] - ldrb r2, [r0, #8] - strb r2, [r1, #4] - ldrb r0, [r0, #9] - strb r0, [r1, #5] - add r0, sp, #4 - ldrh r2, [r0, #2] - strh r2, [r0, #6] - ldr r2, _02239410 ; =0x0000D679 - strh r6, [r0, #2] + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r7, r1, #0 + mov r1, #2 + add r5, r0, #0 + add r0, r2, #0 + lsl r1, r1, #8 + str r2, [sp] + bl AllocFromHeap + ldr r1, _0223940C ; =0x0000A001 + add r4, r0, #0 + bl MATHi_CRC16InitTableRev + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x50 + bl MATH_CalcCRC16 + add r6, r0, #0 + add r0, r4, #0 + bl FreeToHeap + mov r0, #0 + bl FUN_0202EF18 + ldrb r2, [r0, #4] + add r1, sp, #4 + mov r3, #0 + strb r2, [r1] + ldrb r2, [r0, #5] + strb r2, [r1, #1] + ldrb r2, [r0, #6] + strb r2, [r1, #2] + ldrb r2, [r0, #7] + strb r2, [r1, #3] + ldrb r2, [r0, #8] + strb r2, [r1, #4] + ldrb r0, [r0, #9] + strb r0, [r1, #5] + add r0, sp, #4 + ldrh r2, [r0, #2] + strh r2, [r0, #6] + ldr r2, _02239410 ; =0x0000D679 + strh r6, [r0, #2] _022393CE: - ldrh r0, [r1] - add r3, r3, #1 - eor r0, r2 - strh r0, [r1] - ldrh r2, [r1] - add r1, r1, #2 - cmp r3, #4 - blt _022393CE - mov r1, #0x41 - ldr r0, [sp] - lsl r1, r1, #2 - bl AllocFromHeap - add r1, sp, #4 - mov r2, #8 - add r4, r0, #0 - bl FUN_0209521C - add r5, #0x50 - mov r2, #0xd6 - add r0, r4, #0 - add r1, r5, #0 - lsl r2, r2, #2 - add r3, r7, #0 - bl FUN_020952AC - add r0, r4, #0 - bl FreeToHeap - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r1] + add r3, r3, #1 + eor r0, r2 + strh r0, [r1] + ldrh r2, [r1] + add r1, r1, #2 + cmp r3, #4 + blt _022393CE + mov r1, #0x41 + ldr r0, [sp] + lsl r1, r1, #2 + bl AllocFromHeap + add r1, sp, #4 + mov r2, #8 + add r4, r0, #0 + bl FUN_0209521C + add r5, #0x50 + mov r2, #0xd6 + add r0, r4, #0 + add r1, r5, #0 + lsl r2, r2, #2 + add r3, r7, #0 + bl FUN_020952AC + add r0, r4, #0 + bl FreeToHeap + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0223940C: .word 0x0000A001 _02239410: .word 0x0000D679 - thumb_func_end MOD83_02239374 + thumb_func_end MOD83_02239374 - thumb_func_start MOD83_02239414 + thumb_func_start MOD83_02239414 MOD83_02239414: ; 0x02239414 - push {r3, lr} - cmp r2, #0 - beq _0223941E - cmp r2, #1 - pop {r3, pc} + push {r3, lr} + cmp r2, #0 + beq _0223941E + cmp r2, #1 + pop {r3, pc} _0223941E: - ldr r0, _02239428 ; =0x000005DC - bl PlaySE - pop {r3, pc} - nop + ldr r0, _02239428 ; =0x000005DC + bl PlaySE + pop {r3, pc} + nop _02239428: .word 0x000005DC - thumb_func_end MOD83_02239414 + thumb_func_end MOD83_02239414 - thumb_func_start MOD83_0223942C + thumb_func_start MOD83_0223942C MOD83_0223942C: ; 0x0223942C - push {r3, lr} - ldr r0, _0223944C ; =MOD83_027FFFA8 - ldrh r1, [r0] - mov r0, #2 - lsl r0, r0, #0xe - and r0, r1 - asr r0, r0, #0xf - bne _02239448 - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _02239448 - bl CTRDG_TerminateForPulledOut + push {r3, lr} + ldr r0, _0223944C ; =MOD83_027FFFA8 + ldrh r1, [r0] + mov r0, #2 + lsl r0, r0, #0xe + and r0, r1 + asr r0, r0, #0xf + bne _02239448 + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _02239448 + bl CTRDG_TerminateForPulledOut _02239448: - pop {r3, pc} - nop + pop {r3, pc} + nop _0223944C: .word 0x027FFFA8 - thumb_func_end MOD83_0223942C + thumb_func_end MOD83_0223942C - thumb_func_start MOD83_02239450 + thumb_func_start MOD83_02239450 MOD83_02239450: ; 0x02239450 - push {r3, lr} - cmp r0, #1 - bne _02239478 - ldr r1, _02239484 ; =0x04000208 - ldrh r0, [r1] - mov r0, #0 - strh r0, [r1] - lsr r0, r1, #0xd - ldr r1, _02239488 ; =MOD83_0223942C - bl OS_SetIrqFunction - mov r0, #2 - lsl r0, r0, #0xc - bl OS_EnableIrqMask - ldr r1, _02239484 ; =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - pop {r3, pc} + push {r3, lr} + cmp r0, #1 + bne _02239478 + ldr r1, _02239484 ; =0x04000208 + ldrh r0, [r1] + mov r0, #0 + strh r0, [r1] + lsr r0, r1, #0xd + ldr r1, _02239488 ; =MOD83_0223942C + bl OS_SetIrqFunction + mov r0, #2 + lsl r0, r0, #0xc + bl OS_EnableIrqMask + ldr r1, _02239484 ; =0x04000208 + ldrh r0, [r1] + mov r0, #1 + strh r0, [r1] + pop {r3, pc} _02239478: - mov r0, #2 - lsl r0, r0, #0xc - bl OS_DisableIrqMask - pop {r3, pc} - nop + mov r0, #2 + lsl r0, r0, #0xc + bl OS_DisableIrqMask + pop {r3, pc} + nop _02239484: .word 0x04000208 _02239488: .word MOD83_0223942C - thumb_func_end MOD83_02239450 + thumb_func_end MOD83_02239450 - thumb_func_start MOD83_0223948C + thumb_func_start MOD83_0223948C MOD83_0223948C: ; 0x0223948C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223948C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223948C - thumb_func_start MOD83_02239490 + thumb_func_start MOD83_02239490 MOD83_02239490: ; 0x02239490 - push {r3, lr} - ldr r1, _022394B4 ; =0x04000208 - ldrh r0, [r1] - mov r0, #0 - strh r0, [r1] - lsr r0, r1, #0xd - ldr r1, _022394B8 ; =MOD83_0223948C - bl OS_SetIrqFunction - mov r0, #2 - lsl r0, r0, #0xc - bl OS_EnableIrqMask - ldr r1, _022394B4 ; =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r1, _022394B4 ; =0x04000208 + ldrh r0, [r1] + mov r0, #0 + strh r0, [r1] + lsr r0, r1, #0xd + ldr r1, _022394B8 ; =MOD83_0223948C + bl OS_SetIrqFunction + mov r0, #2 + lsl r0, r0, #0xc + bl OS_EnableIrqMask + ldr r1, _022394B4 ; =0x04000208 + ldrh r0, [r1] + mov r0, #1 + strh r0, [r1] + pop {r3, pc} + .align 2, 0 _022394B4: .word 0x04000208 _022394B8: .word MOD83_0223948C - thumb_func_end MOD83_02239490 + thumb_func_end MOD83_02239490 - thumb_func_start MOD83_022394BC + thumb_func_start MOD83_022394BC MOD83_022394BC: ; 0x022394BC - ldr r1, _022394C8 ; =MOD83_0223BC30 - str r0, [r1, #0x14] - mov r0, #0 - str r0, [r1, #0x10] - bx lr - nop + ldr r1, _022394C8 ; =MOD83_0223BC30 + str r0, [r1, #0x14] + mov r0, #0 + str r0, [r1, #0x10] + bx lr + nop _022394C8: .word MOD83_0223BC30 - thumb_func_end MOD83_022394BC + thumb_func_end MOD83_022394BC - thumb_func_start MOD83_022394CC + thumb_func_start MOD83_022394CC MOD83_022394CC: ; 0x022394CC - push {r3, r4, r5, lr} - ldr r0, _0223953C ; =MOD83_0223BC30 - ldr r4, _02239540 ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - cmp r0, #4 - bhi _02239538 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, lr} + ldr r0, _0223953C ; =MOD83_0223BC30 + ldr r4, _02239540 ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + cmp r0, #4 + bhi _02239538 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022394E4: ; jump table - .short _022394EE - _022394E4 - 2 ; case 0 - .short _02239504 - _022394E4 - 2 ; case 1 - .short _02239538 - _022394E4 - 2 ; case 2 - .short _02239538 - _022394E4 - 2 ; case 3 - .short _02239538 - _022394E4 - 2 ; case 4 + .short _022394EE - _022394E4 - 2 ; case 0 + .short _02239504 - _022394E4 - 2 ; case 1 + .short _02239538 - _022394E4 - 2 ; case 2 + .short _02239538 - _022394E4 - 2 ; case 3 + .short _02239538 - _022394E4 - 2 ; case 4 _022394EE: - mov r0, #4 - bl SetSoftResetDisableMask - ldr r0, [r4, #0x14] - mov r1, #2 - bl FUN_02022840 - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02239538 + mov r0, #4 + bl SetSoftResetDisableMask + ldr r0, [r4, #0x14] + mov r1, #2 + bl FUN_02022840 + ldr r0, [r4, #0x10] + add r0, r0, #1 + str r0, [r4, #0x10] + b _02239538 _02239504: - ldr r0, [r4, #0x14] - bl FUN_02022854 - add r5, r0, #0 - cmp r5, #3 - bne _02239516 - mov r0, #3 - str r0, [r4, #0x10] - b _02239528 + ldr r0, [r4, #0x14] + bl FUN_02022854 + add r5, r0, #0 + cmp r5, #3 + bne _02239516 + mov r0, #3 + str r0, [r4, #0x10] + b _02239528 _02239516: - cmp r5, #2 - bne _02239520 - mov r0, #2 - str r0, [r4, #0x10] - b _02239528 + cmp r5, #2 + bne _02239520 + mov r0, #2 + str r0, [r4, #0x10] + b _02239528 _02239520: - cmp r5, #1 - bne _02239528 - mov r0, #4 - str r0, [r4, #0x10] + cmp r5, #1 + bne _02239528 + mov r0, #4 + str r0, [r4, #0x10] _02239528: - sub r0, r5, #2 - cmp r0, #1 - bhi _02239534 - mov r0, #4 - bl ClearSoftResetDisableMask + sub r0, r5, #2 + cmp r0, #1 + bhi _02239534 + mov r0, #4 + bl ClearSoftResetDisableMask _02239534: - add r0, r5, #0 - pop {r3, r4, r5, pc} + add r0, r5, #0 + pop {r3, r4, r5, pc} _02239538: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _0223953C: .word MOD83_0223BC30 _02239540: .word MOD83_0223BC30 - thumb_func_end MOD83_022394CC + thumb_func_end MOD83_022394CC - thumb_func_start MOD83_02239544 + thumb_func_start MOD83_02239544 MOD83_02239544: ; 0x02239544 - ldr r0, _02239554 ; =MOD83_0223BC30 - ldr r1, _02239558 ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - cmp r0, #4 - bne _02239552 - mov r0, #1 - str r0, [r1, #0x10] + ldr r0, _02239554 ; =MOD83_0223BC30 + ldr r1, _02239558 ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + cmp r0, #4 + bne _02239552 + mov r0, #1 + str r0, [r1, #0x10] _02239552: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _02239554: .word MOD83_0223BC30 _02239558: .word MOD83_0223BC30 - thumb_func_end MOD83_02239544 + thumb_func_end MOD83_02239544 - thumb_func_start MOD83_0223955C + thumb_func_start MOD83_0223955C MOD83_0223955C: ; 0x0223955C - push {r3, lr} - ldr r0, _02239570 ; =MOD83_0223BC30 - ldr r0, [r0, #0x14] - bl FUN_0202287C - mov r0, #4 - bl ClearSoftResetDisableMask - pop {r3, pc} - nop + push {r3, lr} + ldr r0, _02239570 ; =MOD83_0223BC30 + ldr r0, [r0, #0x14] + bl FUN_0202287C + mov r0, #4 + bl ClearSoftResetDisableMask + pop {r3, pc} + nop _02239570: .word MOD83_0223BC30 - thumb_func_end MOD83_0223955C + thumb_func_end MOD83_0223955C - thumb_func_start MOD83_02239574 + thumb_func_start MOD83_02239574 MOD83_02239574: ; 0x02239574 - ldr r0, _0223957C ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - bx lr - nop + ldr r0, _0223957C ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + bx lr + nop _0223957C: .word MOD83_0223BC30 - thumb_func_end MOD83_02239574 + thumb_func_end MOD83_02239574 - thumb_func_start MOD83_02239580 + thumb_func_start MOD83_02239580 MOD83_02239580: ; 0x02239580 - push {r4, lr} - ldr r1, _022395BC ; =MOD83_0223CAD4 - add r4, r0, #0 - ldr r2, [r1, #4] - cmp r2, #0 - beq _0223959C - ldr r3, [r1] - ldr r1, _022395C0 ; =0x00001150 - ldr r0, _022395C4 ; =MOD83_0223B80C - ldr r1, [r3, r1] - lsl r3, r1, #2 - ldr r1, _022395C8 ; =MOD83_0223B7E4 - ldr r1, [r1, r3] - blx r2 + push {r4, lr} + ldr r1, _022395BC ; =MOD83_0223CAD4 + add r4, r0, #0 + ldr r2, [r1, #4] + cmp r2, #0 + beq _0223959C + ldr r3, [r1] + ldr r1, _022395C0 ; =0x00001150 + ldr r0, _022395C4 ; =MOD83_0223B80C + ldr r1, [r3, r1] + lsl r3, r1, #2 + ldr r1, _022395C8 ; =MOD83_0223B7E4 + ldr r1, [r1, r3] + blx r2 _0223959C: - ldr r3, _022395BC ; =MOD83_0223CAD4 - ldr r1, _022395C0 ; =0x00001150 - ldr r0, [r3] - str r4, [r0, r1] - ldr r2, [r3, #4] - cmp r2, #0 - beq _022395B8 - ldr r3, [r3] - ldr r0, _022395CC ; =MOD83_0223B814 - ldr r1, [r3, r1] - lsl r3, r1, #2 - ldr r1, _022395C8 ; =MOD83_0223B7E4 - ldr r1, [r1, r3] - blx r2 + ldr r3, _022395BC ; =MOD83_0223CAD4 + ldr r1, _022395C0 ; =0x00001150 + ldr r0, [r3] + str r4, [r0, r1] + ldr r2, [r3, #4] + cmp r2, #0 + beq _022395B8 + ldr r3, [r3] + ldr r0, _022395CC ; =MOD83_0223B814 + ldr r1, [r3, r1] + lsl r3, r1, #2 + ldr r1, _022395C8 ; =MOD83_0223B7E4 + ldr r1, [r1, r3] + blx r2 _022395B8: - pop {r4, pc} - nop + pop {r4, pc} + nop _022395BC: .word MOD83_0223CAD4 _022395C0: .word 0x00001150 _022395C4: .word MOD83_0223B80C _022395C8: .word MOD83_0223B7E4 _022395CC: .word MOD83_0223B814 - thumb_func_end MOD83_02239580 + thumb_func_end MOD83_02239580 - thumb_func_start MOD83_022395D0 + thumb_func_start MOD83_022395D0 MOD83_022395D0: ; 0x022395D0 - ldr r1, _022395E4 ; =MOD83_0223CAD4 - ldr r3, [r1] - ldr r1, _022395E8 ; =0x00001150 - ldr r2, [r3, r1] - sub r2, #9 - cmp r2, #1 - bls _022395E2 - add r1, r1, #4 - str r0, [r3, r1] + ldr r1, _022395E4 ; =MOD83_0223CAD4 + ldr r3, [r1] + ldr r1, _022395E8 ; =0x00001150 + ldr r2, [r3, r1] + sub r2, #9 + cmp r2, #1 + bls _022395E2 + add r1, r1, #4 + str r0, [r3, r1] _022395E2: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _022395E4: .word MOD83_0223CAD4 _022395E8: .word 0x00001150 - thumb_func_end MOD83_022395D0 + thumb_func_end MOD83_022395D0 - thumb_func_start MOD83_022395EC + thumb_func_start MOD83_022395EC MOD83_022395EC: ; 0x022395EC - push {r4, lr} - ldr r0, _02239658 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _0223965C ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #4 - bne _022395FE - bl OS_Terminate + push {r4, lr} + ldr r0, _02239658 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _0223965C ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #4 + bne _022395FE + bl OS_Terminate _022395FE: - mov r0, #2 - bl MOD83_02239580 - ldr r3, _02239658 ; =MOD83_0223CAD4 - ldr r0, _02239660 ; =0x0000FFFF - ldr r2, [r3] - ldr r1, _02239664 ; =0x00000FCC - strh r0, [r2, r1] - sub r2, r1, #2 - ldr r4, [r3] - sub r1, r1, #4 - strh r0, [r4, r2] - ldr r2, [r3] - strh r0, [r2, r1] - bl MOD83_02239670 - cmp r0, #0 - bne _0223963C - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239658 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239668 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239638 - mov r0, #4 - blx r1 + mov r0, #2 + bl MOD83_02239580 + ldr r3, _02239658 ; =MOD83_0223CAD4 + ldr r0, _02239660 ; =0x0000FFFF + ldr r2, [r3] + ldr r1, _02239664 ; =0x00000FCC + strh r0, [r2, r1] + sub r2, r1, #2 + ldr r4, [r3] + sub r1, r1, #4 + strh r0, [r4, r2] + ldr r2, [r3] + strh r0, [r2, r1] + bl MOD83_02239670 + cmp r0, #0 + bne _0223963C + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239658 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239668 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239638 + mov r0, #4 + blx r1 _02239638: - mov r0, #0 - pop {r4, pc} + mov r0, #0 + pop {r4, pc} _0223963C: - ldr r1, _02239658 ; =MOD83_0223CAD4 - ldr r0, _0223966C ; =0x00001158 - ldr r2, [r1] - mov r3, #2 - strh r3, [r2, r0] - ldr r1, [r1] - add r0, #0x24 - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239654 - mov r0, #0 - blx r1 + ldr r1, _02239658 ; =MOD83_0223CAD4 + ldr r0, _0223966C ; =0x00001158 + ldr r2, [r1] + mov r3, #2 + strh r3, [r2, r0] + ldr r1, [r1] + add r0, #0x24 + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239654 + mov r0, #0 + blx r1 _02239654: - mov r0, #1 - pop {r4, pc} - .align 2, 0 + mov r0, #1 + pop {r4, pc} + .align 2, 0 _02239658: .word MOD83_0223CAD4 _0223965C: .word 0x00001150 _02239660: .word 0x0000FFFF _02239664: .word 0x00000FCC _02239668: .word 0x0000117C _0223966C: .word 0x00001158 - thumb_func_end MOD83_022395EC + thumb_func_end MOD83_022395EC - thumb_func_start MOD83_02239670 + thumb_func_start MOD83_02239670 MOD83_02239670: ; 0x02239670 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02239748 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _0223974C ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #2 - beq _02239684 - bl OS_Terminate - mov r0, #0 + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02239748 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _0223974C ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #2 + beq _02239684 + bl OS_Terminate + mov r0, #0 _02239684: - bl WM_GetAllowedChannel - add r4, r0, #0 - mov r0, #2 - lsl r0, r0, #0xe - cmp r4, r0 - bne _0223969C - mov r0, #3 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + bl WM_GetAllowedChannel + add r4, r0, #0 + mov r0, #2 + lsl r0, r0, #0xe + cmp r4, r0 + bne _0223969C + mov r0, #3 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0223969C: - cmp r4, #0 - bne _022396AA - mov r0, #0x16 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + cmp r4, #0 + bne _022396AA + mov r0, #0x16 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _022396AA: - ldr r0, _02239748 ; =MOD83_0223CAD4 - ldr r2, [r0] - ldr r0, _02239750 ; =0x00001176 - ldrh r1, [r2, r0] - cmp r1, #0x10 - blo _022396EC - sub r1, #0x10 - mov r5, #0 - mov r7, #0xd - mov r6, #1 - b _022396D2 + ldr r0, _02239748 ; =MOD83_0223CAD4 + ldr r2, [r0] + ldr r0, _02239750 ; =0x00001176 + ldrh r1, [r2, r0] + cmp r1, #0x10 + blo _022396EC + sub r1, #0x10 + mov r5, #0 + mov r7, #0xd + mov r6, #1 + b _022396D2 _022396C0: - add r0, r1, #1 - add r1, r7, #0 - bl _s32_div_f - add r0, r6, #0 - lsl r0, r1 - tst r0, r4 - bne _022396D6 - add r5, r5, #1 + add r0, r1, #1 + add r1, r7, #0 + bl _s32_div_f + add r0, r6, #0 + lsl r0, r1 + tst r0, r4 + bne _022396D6 + add r5, r5, #1 _022396D2: - cmp r5, #0xd - blt _022396C0 + cmp r5, #0xd + blt _022396C0 _022396D6: - ldr r2, _02239748 ; =MOD83_0223CAD4 - add r4, r1, #0 - ldr r3, [r2] - ldr r0, _02239750 ; =0x00001176 - add r4, #0x10 - strh r4, [r3, r0] - add r3, r1, #1 - ldr r1, [r2] - ldr r0, _02239754 ; =0x00000FC4 - strh r3, [r1, r0] - b _022396F0 + ldr r2, _02239748 ; =MOD83_0223CAD4 + add r4, r1, #0 + ldr r3, [r2] + ldr r0, _02239750 ; =0x00001176 + add r4, #0x10 + strh r4, [r3, r0] + add r3, r1, #1 + ldr r1, [r2] + ldr r0, _02239754 ; =0x00000FC4 + strh r3, [r1, r0] + b _022396F0 _022396EC: - ldr r0, _02239754 ; =0x00000FC4 - strh r1, [r2, r0] + ldr r0, _02239754 ; =0x00000FC4 + strh r1, [r2, r0] _022396F0: - ldr r2, _02239748 ; =MOD83_0223CAD4 - ldr r0, _02239758 ; =0x00000FC6 - ldr r1, [r2] - mov r3, #0xdc - strh r3, [r1, r0] - add r1, r0, #0 - ldr r3, [r2] - sub r1, #0xc6 - add r1, r3, r1 - sub r0, r0, #6 - str r1, [r3, r0] - ldr r1, [r2] - ldr r0, _0223975C ; =0x00001158 - ldrh r0, [r1, r0] - cmp r0, #3 - bne _02239726 - mov r5, #0 - ldr r0, _02239760 ; =0x00001170 - ldr r1, _02239764 ; =0x00000FC8 - b _02239722 + ldr r2, _02239748 ; =MOD83_0223CAD4 + ldr r0, _02239758 ; =0x00000FC6 + ldr r1, [r2] + mov r3, #0xdc + strh r3, [r1, r0] + add r1, r0, #0 + ldr r3, [r2] + sub r1, #0xc6 + add r1, r3, r1 + sub r0, r0, #6 + str r1, [r3, r0] + ldr r1, [r2] + ldr r0, _0223975C ; =0x00001158 + ldrh r0, [r1, r0] + cmp r0, #3 + bne _02239726 + mov r5, #0 + ldr r0, _02239760 ; =0x00001170 + ldr r1, _02239764 ; =0x00000FC8 + b _02239722 _02239718: - ldr r3, [r2] - add r4, r3, r5 - ldrb r3, [r4, r0] - add r5, r5, #1 - strb r3, [r4, r1] + ldr r3, [r2] + add r4, r3, r5 + ldrb r3, [r4, r0] + add r5, r5, #1 + strb r3, [r4, r1] _02239722: - cmp r5, #6 - blt _02239718 + cmp r5, #6 + blt _02239718 _02239726: - ldr r1, _02239748 ; =MOD83_0223CAD4 - ldr r0, _02239768 ; =MOD83_0223976C - ldr r2, [r1] - mov r1, #0x3f - lsl r1, r1, #6 - add r1, r2, r1 - bl WM_StartScan - cmp r0, #2 - beq _02239742 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + ldr r1, _02239748 ; =MOD83_0223CAD4 + ldr r0, _02239768 ; =MOD83_0223976C + ldr r2, [r1] + mov r1, #0x3f + lsl r1, r1, #6 + add r1, r2, r1 + bl WM_StartScan + cmp r0, #2 + beq _02239742 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02239742: - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + nop _02239748: .word MOD83_0223CAD4 _0223974C: .word 0x00001150 _02239750: .word 0x00001176 @@ -24908,147 +24908,147 @@ _0223975C: .word 0x00001158 _02239760: .word 0x00001170 _02239764: .word 0x00000FC8 _02239768: .word MOD83_0223976C - thumb_func_end MOD83_02239670 + thumb_func_end MOD83_02239670 - thumb_func_start MOD83_0223976C + thumb_func_start MOD83_0223976C MOD83_0223976C: ; 0x0223976C - push {r3, r4, r5, lr} - add r4, r0, #0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _02239792 - bl MOD83_022395D0 - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r4, r0, #0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _02239792 + bl MOD83_022395D0 + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 + pop {r3, r4, r5, pc} _02239792: - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239888 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #2 - beq _022397BE - bl MOD83_022398A4 - cmp r0, #0 - bne _0223987E - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 - pop {r3, r4, r5, pc} + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239888 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #2 + beq _022397BE + bl MOD83_022398A4 + cmp r0, #0 + bne _0223987E + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 + pop {r3, r4, r5, pc} _022397BE: - ldrh r0, [r4, #8] - cmp r0, #3 - beq _0223987E - cmp r0, #4 - beq _02239860 - cmp r0, #5 - bne _02239860 - mov r0, #0xf - lsl r0, r0, #8 - add r0, r1, r0 - mov r1, #0xc0 - bl DC_InvalidateRange - ldrh r0, [r4, #0x36] - cmp r0, #8 - blo _022397E6 - ldr r1, [r4, #0x3c] - ldr r0, _0223988C ; =0x00400318 - cmp r1, r0 - beq _022397F8 + ldrh r0, [r4, #8] + cmp r0, #3 + beq _0223987E + cmp r0, #4 + beq _02239860 + cmp r0, #5 + bne _02239860 + mov r0, #0xf + lsl r0, r0, #8 + add r0, r1, r0 + mov r1, #0xc0 + bl DC_InvalidateRange + ldrh r0, [r4, #0x36] + cmp r0, #8 + blo _022397E6 + ldr r1, [r4, #0x3c] + ldr r0, _0223988C ; =0x00400318 + cmp r1, r0 + beq _022397F8 _022397E6: - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r3, [r0, #4] - cmp r3, #0 - beq _02239860 - ldr r0, _02239890 ; =MOD83_0223B818 - ldr r1, [r4, #0x3c] - ldr r2, _0223988C ; =0x00400318 - blx r3 - b _02239860 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r3, [r0, #4] + cmp r3, #0 + beq _02239860 + ldr r0, _02239890 ; =MOD83_0223B818 + ldr r1, [r4, #0x3c] + ldr r2, _0223988C ; =0x00400318 + blx r3 + b _02239860 _022397F8: - ldr r1, _02239880 ; =MOD83_0223CAD4 - ldrh r3, [r4, #0x12] - ldr r2, [r1] - ldr r0, _02239894 ; =0x0000116C - str r3, [r2, r0] - ldr r1, [r1] - sub r0, #0x14 - ldrh r0, [r1, r0] - cmp r0, #2 - bne _02239844 - add r0, r4, #0 - add r0, #0x48 - bl MOD83_02239B00 - ldr r2, _02239880 ; =MOD83_0223CAD4 - ldr r1, _02239898 ; =0x00001170 - mov r0, #0 + ldr r1, _02239880 ; =MOD83_0223CAD4 + ldrh r3, [r4, #0x12] + ldr r2, [r1] + ldr r0, _02239894 ; =0x0000116C + str r3, [r2, r0] + ldr r1, [r1] + sub r0, #0x14 + ldrh r0, [r1, r0] + cmp r0, #2 + bne _02239844 + add r0, r4, #0 + add r0, #0x48 + bl MOD83_02239B00 + ldr r2, _02239880 ; =MOD83_0223CAD4 + ldr r1, _02239898 ; =0x00001170 + mov r0, #0 _0223981A: - add r3, r4, r0 - ldrb r5, [r3, #0xa] - ldr r3, [r2] - add r3, r3, r0 - add r0, r0, #1 - strb r5, [r3, r1] - cmp r0, #6 - blt _0223981A - ldr r1, _02239880 ; =MOD83_0223CAD4 - ldr r0, _0223989C ; =0x00001176 - ldr r3, [r1] - ldrh r2, [r3, r0] - sub r2, #0xf - strh r2, [r3, r0] - ldr r1, [r1] - add r0, r0, #6 - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239844 - mov r0, #1 - blx r1 + add r3, r4, r0 + ldrb r5, [r3, #0xa] + ldr r3, [r2] + add r3, r3, r0 + add r0, r0, #1 + strb r5, [r3, r1] + cmp r0, #6 + blt _0223981A + ldr r1, _02239880 ; =MOD83_0223CAD4 + ldr r0, _0223989C ; =0x00001176 + ldr r3, [r1] + ldrh r2, [r3, r0] + sub r2, #0xf + strh r2, [r3, r0] + ldr r1, [r1] + add r0, r0, #6 + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239844 + mov r0, #1 + blx r1 _02239844: - add r4, #0x48 - add r0, r4, #0 - bl MOD83_02239B80 - cmp r0, #0 - beq _02239860 - ldr r0, _02239880 ; =MOD83_0223CAD4 - mov r2, #4 - ldr r1, [r0] - ldr r0, _022398A0 ; =0x00001158 - strh r2, [r1, r0] - bl MOD83_02239A14 - pop {r3, r4, r5, pc} + add r4, #0x48 + add r0, r4, #0 + bl MOD83_02239B80 + cmp r0, #0 + beq _02239860 + ldr r0, _02239880 ; =MOD83_0223CAD4 + mov r2, #4 + ldr r1, [r0] + ldr r0, _022398A0 ; =0x00001158 + strh r2, [r1, r0] + bl MOD83_02239A14 + pop {r3, r4, r5, pc} _02239860: - bl MOD83_02239670 - cmp r0, #0 - bne _0223987E - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 + bl MOD83_02239670 + cmp r0, #0 + bne _0223987E + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 _0223987E: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _02239880: .word MOD83_0223CAD4 _02239884: .word 0x0000117C _02239888: .word 0x00001150 @@ -25058,541 +25058,541 @@ _02239894: .word 0x0000116C _02239898: .word 0x00001170 _0223989C: .word 0x00001176 _022398A0: .word 0x00001158 - thumb_func_end MOD83_0223976C + thumb_func_end MOD83_0223976C - thumb_func_start MOD83_022398A4 + thumb_func_start MOD83_022398A4 MOD83_022398A4: ; 0x022398A4 - push {r3, lr} - ldr r0, _022398BC ; =MOD83_022398C0 - bl WM_EndScan - cmp r0, #2 - beq _022398B8 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022398BC ; =MOD83_022398C0 + bl WM_EndScan + cmp r0, #2 + beq _022398B8 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, pc} _022398B8: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022398BC: .word MOD83_022398C0 - thumb_func_end MOD83_022398A4 + thumb_func_end MOD83_022398A4 - thumb_func_start MOD83_022398C0 + thumb_func_start MOD83_022398C0 MOD83_022398C0: ; 0x022398C0 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _022398CE - bl MOD83_022395D0 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _022398CE + bl MOD83_022395D0 + pop {r3, pc} _022398CE: - mov r0, #1 - bl MOD83_02239580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022398C0 + mov r0, #1 + bl MOD83_02239580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022398C0 - thumb_func_start MOD83_022398D8 + thumb_func_start MOD83_022398D8 MOD83_022398D8: ; 0x022398D8 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _022398E8 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _022398E8 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _022398E8: - mov r0, #0 - bl MOD83_02239580 - ldr r0, _02239900 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239904 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _022398FE - mov r0, #3 - blx r1 + mov r0, #0 + bl MOD83_02239580 + ldr r0, _02239900 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239904 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _022398FE + mov r0, #3 + blx r1 _022398FE: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _02239900: .word MOD83_0223CAD4 _02239904: .word 0x0000117C - thumb_func_end MOD83_022398D8 + thumb_func_end MOD83_022398D8 - thumb_func_start MOD83_02239908 + thumb_func_start MOD83_02239908 MOD83_02239908: ; 0x02239908 - push {r3, lr} - ldr r0, _02239924 ; =MOD83_0223CAD4 - mov r2, #0 - ldr r1, [r0] - ldr r0, _02239928 ; =0x00001154 - str r2, [r1, r0] - bl MOD83_02239954 - cmp r0, #0 - beq _02239920 - mov r0, #1 - pop {r3, pc} + push {r3, lr} + ldr r0, _02239924 ; =MOD83_0223CAD4 + mov r2, #0 + ldr r1, [r0] + ldr r0, _02239928 ; =0x00001154 + str r2, [r1, r0] + bl MOD83_02239954 + cmp r0, #0 + beq _02239920 + mov r0, #1 + pop {r3, pc} _02239920: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _02239924: .word MOD83_0223CAD4 _02239928: .word 0x00001154 - thumb_func_end MOD83_02239908 + thumb_func_end MOD83_02239908 - thumb_func_start MOD83_0223992C + thumb_func_start MOD83_0223992C MOD83_0223992C: ; 0x0223992C - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #8 - bne _0223994A - mov r0, #9 - bl MOD83_02239580 - ldr r0, _0223994C ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239950 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223994A - mov r0, #4 - blx r1 + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #8 + bne _0223994A + mov r0, #9 + bl MOD83_02239580 + ldr r0, _0223994C ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239950 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223994A + mov r0, #4 + blx r1 _0223994A: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0223994C: .word MOD83_0223CAD4 _02239950: .word 0x0000117C - thumb_func_end MOD83_0223992C + thumb_func_end MOD83_0223992C - thumb_func_start MOD83_02239954 + thumb_func_start MOD83_02239954 MOD83_02239954: ; 0x02239954 - push {r3, lr} - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239980 ; =MOD83_0223CAD4 - ldr r1, _02239984 ; =MOD83_02239988 - ldr r0, [r0] - mov r2, #2 - bl WM_Initialize - cmp r0, #2 - beq _0223997A - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239980 ; =MOD83_0223CAD4 + ldr r1, _02239984 ; =MOD83_02239988 + ldr r0, [r0] + mov r2, #2 + bl WM_Initialize + cmp r0, #2 + beq _0223997A + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + mov r0, #0 + pop {r3, pc} _0223997A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02239980: .word MOD83_0223CAD4 _02239984: .word MOD83_02239988 - thumb_func_end MOD83_02239954 + thumb_func_end MOD83_02239954 - thumb_func_start MOD83_02239988 + thumb_func_start MOD83_02239988 MOD83_02239988: ; 0x02239988 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _0223999C - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _0223999C + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _0223999C: - ldr r0, _022399C0 ; =MOD83_0223992C - bl WM_SetIndCallback - cmp r0, #0 - beq _022399B2 - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + ldr r0, _022399C0 ; =MOD83_0223992C + bl WM_SetIndCallback + cmp r0, #0 + beq _022399B2 + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _022399B2: - mov r0, #1 - bl MOD83_02239580 - bl MOD83_022395EC - pop {r3, pc} - nop + mov r0, #1 + bl MOD83_02239580 + bl MOD83_022395EC + pop {r3, pc} + nop _022399C0: .word MOD83_0223992C - thumb_func_end MOD83_02239988 + thumb_func_end MOD83_02239988 - thumb_func_start MOD83_022399C4 + thumb_func_start MOD83_022399C4 MOD83_022399C4: ; 0x022399C4 - push {r3, lr} - ldr r0, _02239A04 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A08 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #1 - beq _022399D6 - bl OS_Terminate + push {r3, lr} + ldr r0, _02239A04 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A08 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #1 + beq _022399D6 + bl OS_Terminate _022399D6: - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239A0C ; =MOD83_022398D8 - bl WM_End - cmp r0, #2 - beq _02239A00 - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239A04 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A10 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _022399FC - mov r0, #4 - blx r1 + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239A0C ; =MOD83_022398D8 + bl WM_End + cmp r0, #2 + beq _02239A00 + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239A04 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A10 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _022399FC + mov r0, #4 + blx r1 _022399FC: - mov r0, #0 - pop {r3, pc} + mov r0, #0 + pop {r3, pc} _02239A00: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02239A04: .word MOD83_0223CAD4 _02239A08: .word 0x00001150 _02239A0C: .word MOD83_022398D8 _02239A10: .word 0x0000117C - thumb_func_end MOD83_022399C4 + thumb_func_end MOD83_022399C4 - thumb_func_start MOD83_02239A14 + thumb_func_start MOD83_02239A14 MOD83_02239A14: ; 0x02239A14 - push {r3, lr} - ldr r0, _02239A30 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A34 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #1 - bne _02239A28 - bl MOD83_022399C4 - pop {r3, pc} + push {r3, lr} + ldr r0, _02239A30 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A34 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #1 + bne _02239A28 + bl MOD83_022399C4 + pop {r3, pc} _02239A28: - bl MOD83_02239A38 - pop {r3, pc} - nop + bl MOD83_02239A38 + pop {r3, pc} + nop _02239A30: .word MOD83_0223CAD4 _02239A34: .word 0x00001150 - thumb_func_end MOD83_02239A14 + thumb_func_end MOD83_02239A14 - thumb_func_start MOD83_02239A38 + thumb_func_start MOD83_02239A38 MOD83_02239A38: ; 0x02239A38 - push {r3, lr} - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239A58 ; =MOD83_02239A5C - bl WM_Reset - cmp r0, #2 - beq _02239A52 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239A58 ; =MOD83_02239A5C + bl WM_Reset + cmp r0, #2 + beq _02239A52 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, pc} _02239A52: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02239A58: .word MOD83_02239A5C - thumb_func_end MOD83_02239A38 + thumb_func_end MOD83_02239A38 - thumb_func_start MOD83_02239A5C + thumb_func_start MOD83_02239A5C MOD83_02239A5C: ; 0x02239A5C - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _02239A84 - mov r0, #9 - bl MOD83_02239580 - ldrh r0, [r4, #2] - bl MOD83_022395D0 - ldr r0, _02239A90 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A94 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239A8E - mov r0, #4 - blx r1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _02239A84 + mov r0, #9 + bl MOD83_02239580 + ldrh r0, [r4, #2] + bl MOD83_022395D0 + ldr r0, _02239A90 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A94 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239A8E + mov r0, #4 + blx r1 + pop {r4, pc} _02239A84: - mov r0, #1 - bl MOD83_02239580 - bl MOD83_022399C4 + mov r0, #1 + bl MOD83_02239580 + bl MOD83_022399C4 _02239A8E: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02239A90: .word MOD83_0223CAD4 _02239A94: .word 0x0000117C - thumb_func_end MOD83_02239A5C + thumb_func_end MOD83_02239A5C - thumb_func_start MOD83_02239A98 + thumb_func_start MOD83_02239A98 MOD83_02239A98: ; 0x02239A98 - push {r3, r4, r5, r6, r7, lr} - add r3, r0, #0 - add r2, #0x1f - mov r0, #0x1f - bic r2, r0 - ldr r5, _02239AF4 ; =MOD83_0223CAD4 - ldr r4, _02239AF8 ; =0x00001150 - str r2, [r5] - mov r0, #0 - str r0, [r2, r4] - add r2, r4, #0 - ldr r6, [r5] - mov r7, #1 - add r2, #8 - strh r7, [r6, r2] - add r2, r4, #0 - ldr r6, [r5] - add r2, #0x28 - str r3, [r6, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0xc - strh r0, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0xe - strh r0, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0x2c - str r1, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - mov r1, #0x10 - add r2, #0x26 - strh r1, [r3, r2] - ldr r3, [r5] - ldr r2, _02239AFC ; =0x00001048 - sub r1, #0x11 - str r0, [r3, r2] - ldr r0, [r5] - add r4, #0x1c - str r1, [r0, r4] - bl MOD83_02239908 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + add r3, r0, #0 + add r2, #0x1f + mov r0, #0x1f + bic r2, r0 + ldr r5, _02239AF4 ; =MOD83_0223CAD4 + ldr r4, _02239AF8 ; =0x00001150 + str r2, [r5] + mov r0, #0 + str r0, [r2, r4] + add r2, r4, #0 + ldr r6, [r5] + mov r7, #1 + add r2, #8 + strh r7, [r6, r2] + add r2, r4, #0 + ldr r6, [r5] + add r2, #0x28 + str r3, [r6, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0xc + strh r0, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0xe + strh r0, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0x2c + str r1, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + mov r1, #0x10 + add r2, #0x26 + strh r1, [r3, r2] + ldr r3, [r5] + ldr r2, _02239AFC ; =0x00001048 + sub r1, #0x11 + str r0, [r3, r2] + ldr r0, [r5] + add r4, #0x1c + str r1, [r0, r4] + bl MOD83_02239908 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02239AF4: .word MOD83_0223CAD4 _02239AF8: .word 0x00001150 _02239AFC: .word 0x00001048 - thumb_func_end MOD83_02239A98 + thumb_func_end MOD83_02239A98 - thumb_func_start MOD83_02239B00 + thumb_func_start MOD83_02239B00 MOD83_02239B00: ; 0x02239B00 - push {r4, r5, r6, lr} - ldr r3, _02239B70 ; =MOD83_0223CAD4 - ldr r1, _02239B74 ; =0x00001048 - ldr r2, [r3] - mov r4, #0 - str r4, [r2, r1] - ldr r1, [r3] - ldr r2, _02239B78 ; =0x00001158 - mov r4, #3 - strh r4, [r1, r2] - ldrh r5, [r0] - ldr r4, [r3] - add r1, r2, #2 - strh r5, [r4, r1] - ldr r4, [r0, #4] - add r0, r2, #0 - ldr r1, [r3] - add r0, #8 - str r4, [r1, r0] - ldr r4, [r3] - add r2, #8 - ldr r0, [r4, r2] - mov r1, #0x68 - sub r0, r0, #1 - bl _u32_div_f - ldr r2, _02239B7C ; =0x0000115C - add r0, r0, #1 - strh r0, [r4, r2] - ldr r4, _02239B70 ; =MOD83_0223CAD4 - mov r0, #0 - ldr r3, [r4] - add r1, r2, #2 - strh r0, [r3, r1] - add r1, r2, #0 - ldr r3, [r4] - add r1, #8 - str r0, [r3, r1] - ldr r1, [r4] - ldrh r2, [r1, r2] - cmp r2, #0 - ble _02239B6C - mov r2, #0x46 - lsl r2, r2, #6 - add r3, r2, #0 - add r6, r0, #0 - sub r3, #0x24 + push {r4, r5, r6, lr} + ldr r3, _02239B70 ; =MOD83_0223CAD4 + ldr r1, _02239B74 ; =0x00001048 + ldr r2, [r3] + mov r4, #0 + str r4, [r2, r1] + ldr r1, [r3] + ldr r2, _02239B78 ; =0x00001158 + mov r4, #3 + strh r4, [r1, r2] + ldrh r5, [r0] + ldr r4, [r3] + add r1, r2, #2 + strh r5, [r4, r1] + ldr r4, [r0, #4] + add r0, r2, #0 + ldr r1, [r3] + add r0, #8 + str r4, [r1, r0] + ldr r4, [r3] + add r2, #8 + ldr r0, [r4, r2] + mov r1, #0x68 + sub r0, r0, #1 + bl _u32_div_f + ldr r2, _02239B7C ; =0x0000115C + add r0, r0, #1 + strh r0, [r4, r2] + ldr r4, _02239B70 ; =MOD83_0223CAD4 + mov r0, #0 + ldr r3, [r4] + add r1, r2, #2 + strh r0, [r3, r1] + add r1, r2, #0 + ldr r3, [r4] + add r1, #8 + str r0, [r3, r1] + ldr r1, [r4] + ldrh r2, [r1, r2] + cmp r2, #0 + ble _02239B6C + mov r2, #0x46 + lsl r2, r2, #6 + add r3, r2, #0 + add r6, r0, #0 + sub r3, #0x24 _02239B5E: - add r1, r1, r0 - strb r6, [r1, r2] - ldr r1, [r4] - add r0, r0, #1 - ldrh r5, [r1, r3] - cmp r0, r5 - blt _02239B5E + add r1, r1, r0 + strb r6, [r1, r2] + ldr r1, [r4] + add r0, r0, #1 + ldrh r5, [r1, r3] + cmp r0, r5 + blt _02239B5E _02239B6C: - pop {r4, r5, r6, pc} - nop + pop {r4, r5, r6, pc} + nop _02239B70: .word MOD83_0223CAD4 _02239B74: .word 0x00001048 _02239B78: .word 0x00001158 _02239B7C: .word 0x0000115C - thumb_func_end MOD83_02239B00 + thumb_func_end MOD83_02239B00 - thumb_func_start MOD83_02239B80 + thumb_func_start MOD83_02239B80 MOD83_02239B80: ; 0x02239B80 - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldrh r1, [r4] - ldr r3, [r0] - ldr r0, _02239CA0 ; =0x0000115A - ldrh r2, [r3, r0] - cmp r2, r1 - bne _02239B9C - add r0, r0, #6 - ldr r1, [r3, r0] - ldr r0, [r4, #4] - cmp r1, r0 - beq _02239BC8 + push {r3, r4, r5, lr} + add r4, r0, #0 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldrh r1, [r4] + ldr r3, [r0] + ldr r0, _02239CA0 ; =0x0000115A + ldrh r2, [r3, r0] + cmp r2, r1 + bne _02239B9C + add r0, r0, #6 + ldr r1, [r3, r0] + ldr r0, [r4, #4] + cmp r1, r0 + beq _02239BC8 _02239B9C: - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldr r3, [r0] - ldr r0, _02239CA4 ; =0x00001164 - ldr r2, [r3, r0] - add r1, r2, #1 - str r1, [r3, r0] - cmp r2, #0x10 - blo _02239BC4 - add r0, r4, #0 - bl MOD83_02239B00 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239CA8 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239BC8 - mov r0, #5 - blx r1 - b _02239BC8 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldr r3, [r0] + ldr r0, _02239CA4 ; =0x00001164 + ldr r2, [r3, r0] + add r1, r2, #1 + str r1, [r3, r0] + cmp r2, #0x10 + blo _02239BC4 + add r0, r4, #0 + bl MOD83_02239B00 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239CA8 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239BC8 + mov r0, #5 + blx r1 + b _02239BC8 _02239BC4: - mov r0, #0 - pop {r3, r4, r5, pc} + mov r0, #0 + pop {r3, r4, r5, pc} _02239BC8: - ldrh r3, [r4, #2] - ldr r0, _02239CAC ; =0x0000FFFF - cmp r3, r0 - bne _02239BF0 - ldr r1, _02239C9C ; =MOD83_0223CAD4 - add r4, #8 - ldr r2, [r1] - mov r1, #0xfe - lsl r1, r1, #4 - add r1, r2, r1 - add r0, r4, #0 - mov r2, #0x68 - bl MIi_CpuCopy32 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - mov r2, #1 - ldr r1, [r0] - ldr r0, _02239CB0 ; =0x00001048 - str r2, [r1, r0] - b _02239C98 + ldrh r3, [r4, #2] + ldr r0, _02239CAC ; =0x0000FFFF + cmp r3, r0 + bne _02239BF0 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + add r4, #8 + ldr r2, [r1] + mov r1, #0xfe + lsl r1, r1, #4 + add r1, r2, r1 + add r0, r4, #0 + mov r2, #0x68 + bl MIi_CpuCopy32 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + mov r2, #1 + ldr r1, [r0] + ldr r0, _02239CB0 ; =0x00001048 + str r2, [r1, r0] + b _02239C98 _02239BF0: - ldr r1, _02239C9C ; =MOD83_0223CAD4 - ldr r0, _02239CB4 ; =0x00001168 - ldr r2, [r1] - str r3, [r2, r0] - ldr r3, [r1] - add r1, r0, #0 - sub r1, #0xc - ldrh r2, [r4, #2] - ldrh r1, [r3, r1] - cmp r2, r1 - blo _02239C18 - add r0, #0x14 - ldr r1, [r3, r0] - cmp r1, #0 - beq _02239C12 - mov r0, #4 - blx r1 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + ldr r0, _02239CB4 ; =0x00001168 + ldr r2, [r1] + str r3, [r2, r0] + ldr r3, [r1] + add r1, r0, #0 + sub r1, #0xc + ldrh r2, [r4, #2] + ldrh r1, [r3, r1] + cmp r2, r1 + blo _02239C18 + add r0, #0x14 + ldr r1, [r3, r0] + cmp r1, #0 + beq _02239C12 + mov r0, #4 + blx r1 _02239C12: - mov r0, #9 - bl MOD83_02239580 + mov r0, #9 + bl MOD83_02239580 _02239C18: - ldr r0, _02239C9C ; =MOD83_0223CAD4 - mov r2, #0x46 - ldr r1, [r0] - lsl r2, r2, #6 - ldrh r3, [r4, #2] - add r5, r1, r2 - ldrb r1, [r5, r3] - cmp r1, #0 - bne _02239C98 - mov r1, #1 - strb r1, [r5, r3] - ldr r5, [r0] - add r0, r2, #0 - sub r0, #0x24 - ldrh r0, [r5, r0] - ldrh r1, [r4, #2] - sub r0, r0, #1 - cmp r1, r0 - bne _02239C5C - add r3, r1, #0 - add r1, r2, #0 - sub r1, #8 - sub r2, #0x20 - mov r0, #0x68 - ldr r1, [r5, r1] - mul r3, r0 - ldr r2, [r5, r2] - add r4, #8 - add r0, r4, #0 - add r1, r1, r3 - sub r2, r2, r3 - bl MIi_CpuCopy32 - b _02239C70 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + mov r2, #0x46 + ldr r1, [r0] + lsl r2, r2, #6 + ldrh r3, [r4, #2] + add r5, r1, r2 + ldrb r1, [r5, r3] + cmp r1, #0 + bne _02239C98 + mov r1, #1 + strb r1, [r5, r3] + ldr r5, [r0] + add r0, r2, #0 + sub r0, #0x24 + ldrh r0, [r5, r0] + ldrh r1, [r4, #2] + sub r0, r0, #1 + cmp r1, r0 + bne _02239C5C + add r3, r1, #0 + add r1, r2, #0 + sub r1, #8 + sub r2, #0x20 + mov r0, #0x68 + ldr r1, [r5, r1] + mul r3, r0 + ldr r2, [r5, r2] + add r4, #8 + add r0, r4, #0 + add r1, r1, r3 + sub r2, r2, r3 + bl MIi_CpuCopy32 + b _02239C70 _02239C5C: - add r4, #8 - sub r2, #8 - add r0, r4, #0 - ldr r4, [r5, r2] - mov r2, #0x68 - add r3, r1, #0 - mul r3, r2 - add r1, r4, r3 - bl MIi_CpuCopy32 + add r4, #8 + sub r2, #8 + add r0, r4, #0 + ldr r4, [r5, r2] + mov r2, #0x68 + add r3, r1, #0 + mul r3, r2 + add r1, r4, r3 + bl MIi_CpuCopy32 _02239C70: - ldr r1, _02239C9C ; =MOD83_0223CAD4 - ldr r0, _02239CB8 ; =0x0000115E - ldr r3, [r1] - ldrh r2, [r3, r0] - add r2, r2, #1 - strh r2, [r3, r0] - ldr r3, [r1] - sub r1, r0, #2 - ldrh r2, [r3, r0] - ldrh r1, [r3, r1] - cmp r2, r1 - bne _02239C98 - add r0, #0x1e - ldr r1, [r3, r0] - cmp r1, #0 - beq _02239C94 - mov r0, #2 - blx r1 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + ldr r0, _02239CB8 ; =0x0000115E + ldr r3, [r1] + ldrh r2, [r3, r0] + add r2, r2, #1 + strh r2, [r3, r0] + ldr r3, [r1] + sub r1, r0, #2 + ldrh r2, [r3, r0] + ldrh r1, [r3, r1] + cmp r2, r1 + bne _02239C98 + add r0, #0x1e + ldr r1, [r3, r0] + cmp r1, #0 + beq _02239C94 + mov r0, #2 + blx r1 _02239C94: - mov r0, #1 - pop {r3, r4, r5, pc} + mov r0, #1 + pop {r3, r4, r5, pc} _02239C98: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02239C9C: .word MOD83_0223CAD4 _02239CA0: .word 0x0000115A _02239CA4: .word 0x00001164 @@ -25601,746 +25601,746 @@ _02239CAC: .word 0x0000FFFF _02239CB0: .word 0x00001048 _02239CB4: .word 0x00001168 _02239CB8: .word 0x0000115E - thumb_func_end MOD83_02239B80 + thumb_func_end MOD83_02239B80 - thumb_func_start MOD83_02239CBC + thumb_func_start MOD83_02239CBC MOD83_02239CBC: ; 0x02239CBC - push {r3, r4} - mov r2, #0 - add r3, r2, #0 - lsr r1, r1, #1 - beq _02239CE4 + push {r3, r4} + mov r2, #0 + add r3, r2, #0 + lsr r1, r1, #1 + beq _02239CE4 _02239CC6: - lsl r4, r3, #1 - ldrh r4, [r0, r4] - add r3, r3, #1 - lsl r3, r3, #0x10 - add r2, r2, r4 - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - lsl r4, r2, #1 - asr r2, r2, #0xf - orr r2, r4 - lsl r2, r2, #0x10 - lsr r3, r3, #0x10 - lsr r2, r2, #0x10 - cmp r3, r1 - blo _02239CC6 + lsl r4, r3, #1 + ldrh r4, [r0, r4] + add r3, r3, #1 + lsl r3, r3, #0x10 + add r2, r2, r4 + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + lsl r4, r2, #1 + asr r2, r2, #0xf + orr r2, r4 + lsl r2, r2, #0x10 + lsr r3, r3, #0x10 + lsr r2, r2, #0x10 + cmp r3, r1 + blo _02239CC6 _02239CE4: - add r0, r2, #0 - pop {r3, r4} - bx lr - .align 2, 0 - thumb_func_end MOD83_02239CBC + add r0, r2, #0 + pop {r3, r4} + bx lr + .align 2, 0 + thumb_func_end MOD83_02239CBC - thumb_func_start MOD83_02239CEC + thumb_func_start MOD83_02239CEC MOD83_02239CEC: ; 0x02239CEC - push {r4, lr} - sub sp, #8 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - add r1, sp, #0 - ldr r4, [r0] - ldr r0, _02239D84 ; =0x00001170 - add r3, r4, r0 - ldrh r2, [r3] - sub r0, #0x16 - strh r2, [r1] - ldrh r2, [r3, #2] - strh r2, [r1, #6] - ldrh r2, [r3, #4] - add r3, sp, #0 - strh r2, [r1, #4] - ldrh r0, [r4, r0] - ldr r2, _02239D88 ; =0x00003FA2 - strh r0, [r1, #2] - mov r1, #0 + push {r4, lr} + sub sp, #8 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + add r1, sp, #0 + ldr r4, [r0] + ldr r0, _02239D84 ; =0x00001170 + add r3, r4, r0 + ldrh r2, [r3] + sub r0, #0x16 + strh r2, [r1] + ldrh r2, [r3, #2] + strh r2, [r1, #6] + ldrh r2, [r3, #4] + add r3, sp, #0 + strh r2, [r1, #4] + ldrh r0, [r4, r0] + ldr r2, _02239D88 ; =0x00003FA2 + strh r0, [r1, #2] + mov r1, #0 _02239D12: - ldrh r0, [r3] - add r1, r1, #1 - eor r0, r2 - strh r0, [r3] - ldrh r2, [r3] - add r3, r3, #2 - cmp r1, #4 - blt _02239D12 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - mov r2, #8 - ldr r1, [r0] - ldr r0, _02239D8C ; =0x0000104C - add r0, r1, r0 - add r1, sp, #0 - bl FUN_0209521C - ldr r0, _02239D80 ; =MOD83_0223CAD4 - ldr r2, _02239D90 ; =0x00001178 - ldr r3, [r0] - ldr r0, _02239D8C ; =0x0000104C - ldr r1, [r3, r2] - sub r2, #0x18 - ldr r2, [r3, r2] - add r0, r3, r0 - add r3, r1, #0 - bl FUN_020952AC - ldr r1, _02239D80 ; =MOD83_0223CAD4 - ldr r2, _02239D8C ; =0x0000104C - ldr r1, [r1] - mov r0, #0 - add r1, r1, r2 - lsr r2, r2, #4 - bl MIi_CpuClear32 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - ldr r1, _02239D90 ; =0x00001178 - ldr r2, [r0] - ldr r0, [r2, r1] - sub r1, #0x18 - ldr r1, [r2, r1] - bl MOD83_02239CBC - ldr r1, _02239D80 ; =MOD83_0223CAD4 - ldr r2, [r1] - ldr r1, _02239D94 ; =0x0000115A - ldrh r1, [r2, r1] - cmp r1, r0 - bne _02239D7A - add sp, #8 - mov r0, #1 - pop {r4, pc} + ldrh r0, [r3] + add r1, r1, #1 + eor r0, r2 + strh r0, [r3] + ldrh r2, [r3] + add r3, r3, #2 + cmp r1, #4 + blt _02239D12 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + mov r2, #8 + ldr r1, [r0] + ldr r0, _02239D8C ; =0x0000104C + add r0, r1, r0 + add r1, sp, #0 + bl FUN_0209521C + ldr r0, _02239D80 ; =MOD83_0223CAD4 + ldr r2, _02239D90 ; =0x00001178 + ldr r3, [r0] + ldr r0, _02239D8C ; =0x0000104C + ldr r1, [r3, r2] + sub r2, #0x18 + ldr r2, [r3, r2] + add r0, r3, r0 + add r3, r1, #0 + bl FUN_020952AC + ldr r1, _02239D80 ; =MOD83_0223CAD4 + ldr r2, _02239D8C ; =0x0000104C + ldr r1, [r1] + mov r0, #0 + add r1, r1, r2 + lsr r2, r2, #4 + bl MIi_CpuClear32 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + ldr r1, _02239D90 ; =0x00001178 + ldr r2, [r0] + ldr r0, [r2, r1] + sub r1, #0x18 + ldr r1, [r2, r1] + bl MOD83_02239CBC + ldr r1, _02239D80 ; =MOD83_0223CAD4 + ldr r2, [r1] + ldr r1, _02239D94 ; =0x0000115A + ldrh r1, [r2, r1] + cmp r1, r0 + bne _02239D7A + add sp, #8 + mov r0, #1 + pop {r4, pc} _02239D7A: - mov r0, #0 - add sp, #8 - pop {r4, pc} - .align 2, 0 + mov r0, #0 + add sp, #8 + pop {r4, pc} + .align 2, 0 _02239D80: .word MOD83_0223CAD4 _02239D84: .word 0x00001170 _02239D88: .word 0x00003FA2 _02239D8C: .word 0x0000104C _02239D90: .word 0x00001178 _02239D94: .word 0x0000115A - thumb_func_end MOD83_02239CEC + thumb_func_end MOD83_02239CEC - thumb_func_start MOD83_02239D98 + thumb_func_start MOD83_02239D98 MOD83_02239D98: ; 0x02239D98 - ldr r0, _02239D9C ; =0x000016A0 - bx lr - .align 2, 0 + ldr r0, _02239D9C ; =0x000016A0 + bx lr + .align 2, 0 _02239D9C: .word 0x000016A0 - thumb_func_end MOD83_02239D98 + thumb_func_end MOD83_02239D98 - thumb_func_start MOD83_02239DA0 + thumb_func_start MOD83_02239DA0 MOD83_02239DA0: ; 0x02239DA0 - ldr r0, _02239DB8 ; =MOD83_0223CAD4 - ldr r2, [r0] - ldr r0, _02239DBC ; =0x00001048 - ldr r1, [r2, r0] - cmp r1, #0 - beq _02239DB2 - sub r0, #0x68 - add r0, r2, r0 - bx lr + ldr r0, _02239DB8 ; =MOD83_0223CAD4 + ldr r2, [r0] + ldr r0, _02239DBC ; =0x00001048 + ldr r1, [r2, r0] + cmp r1, #0 + beq _02239DB2 + sub r0, #0x68 + add r0, r2, r0 + bx lr _02239DB2: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02239DB8: .word MOD83_0223CAD4 _02239DBC: .word 0x00001048 - thumb_func_end MOD83_02239DA0 + thumb_func_end MOD83_02239DA0 - thumb_func_start MOD83_02239DC0 + thumb_func_start MOD83_02239DC0 MOD83_02239DC0: ; 0x02239DC0 - push {r3, lr} - add r1, #0x24 - mov r0, #0x1f - bic r1, r0 - add r1, #0x20 - mov r0, #0x56 - bl AllocFromHeap - add r2, r0, #0 - add r2, #0x20 - mov r1, #0x1f - bic r2, r1 - sub r1, r2, #4 - str r0, [r1] - add r0, r2, #0 - pop {r3, pc} - thumb_func_end MOD83_02239DC0 - - thumb_func_start MOD83_02239DE0 + push {r3, lr} + add r1, #0x24 + mov r0, #0x1f + bic r1, r0 + add r1, #0x20 + mov r0, #0x56 + bl AllocFromHeap + add r2, r0, #0 + add r2, #0x20 + mov r1, #0x1f + bic r2, r1 + sub r1, r2, #4 + str r0, [r1] + add r0, r2, #0 + pop {r3, pc} + thumb_func_end MOD83_02239DC0 + + thumb_func_start MOD83_02239DE0 MOD83_02239DE0: ; 0x02239DE0 - push {r3, lr} - cmp r1, #0 - beq _02239DEE - sub r0, r1, #4 - ldr r0, [r0] - bl FreeToHeap + push {r3, lr} + cmp r1, #0 + beq _02239DEE + sub r0, r1, #4 + ldr r0, [r0] + bl FreeToHeap _02239DEE: - pop {r3, pc} - thumb_func_end MOD83_02239DE0 + pop {r3, pc} + thumb_func_end MOD83_02239DE0 - thumb_func_start MOD83_02239DF0 + thumb_func_start MOD83_02239DF0 MOD83_02239DF0: ; 0x02239DF0 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - add r0, sp, #0 - add r1, sp, #4 - bl MOD04_021DD718 - ldr r0, [sp] - neg r0, r0 - bl MOD04_021D80E0 - ldr r1, _02239E34 ; =0x00002610 - str r0, [r4, r1] - ldr r0, [sp] - neg r2, r0 - add r0, r1, #4 - str r2, [r4, r0] - add r0, r1, #0 - ldr r2, [sp, #4] - add r0, #8 - str r2, [r4, r0] - sub r0, r1, #4 - mov r2, #1 - str r2, [r4, r0] - ldr r0, _02239E38 ; =MOD83_0223CADC - mov r1, #0 - str r1, [r0, #0xc] - add r0, r4, #0 - bl MOD83_0222FA44 - ldr r0, _02239E3C ; =0x0000100E - add sp, #8 - pop {r4, pc} - nop + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + add r0, sp, #0 + add r1, sp, #4 + bl MOD04_021DD718 + ldr r0, [sp] + neg r0, r0 + bl MOD04_021D80E0 + ldr r1, _02239E34 ; =0x00002610 + str r0, [r4, r1] + ldr r0, [sp] + neg r2, r0 + add r0, r1, #4 + str r2, [r4, r0] + add r0, r1, #0 + ldr r2, [sp, #4] + add r0, #8 + str r2, [r4, r0] + sub r0, r1, #4 + mov r2, #1 + str r2, [r4, r0] + ldr r0, _02239E38 ; =MOD83_0223CADC + mov r1, #0 + str r1, [r0, #0xc] + add r0, r4, #0 + bl MOD83_0222FA44 + ldr r0, _02239E3C ; =0x0000100E + add sp, #8 + pop {r4, pc} + nop _02239E34: .word 0x00002610 _02239E38: .word MOD83_0223CADC _02239E3C: .word 0x0000100E - thumb_func_end MOD83_02239DF0 + thumb_func_end MOD83_02239DF0 - thumb_func_start MOD83_02239E40 + thumb_func_start MOD83_02239E40 MOD83_02239E40: ; 0x02239E40 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02239E70 ; =0x00002618 - ldr r0, [r4, r0] - cmp r0, #5 - beq _02239E50 - cmp r0, #6 - bne _02239E5C + push {r4, lr} + add r4, r0, #0 + ldr r0, _02239E70 ; =0x00002618 + ldr r0, [r4, r0] + cmp r0, #5 + beq _02239E50 + cmp r0, #6 + bne _02239E5C _02239E50: - bl MOD04_021DDC1C - ldr r0, _02239E74 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #0xc] - b _02239E62 + bl MOD04_021DDC1C + ldr r0, _02239E74 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #0xc] + b _02239E62 _02239E5C: - ldr r0, _02239E74 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #0xc] + ldr r0, _02239E74 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #0xc] _02239E62: - bl FUN_02033ED0 - ldr r0, _02239E78 ; =0x0000260C - mov r1, #0 - str r1, [r4, r0] - ldr r0, _02239E7C ; =0x0000100F - pop {r4, pc} - .align 2, 0 + bl FUN_02033ED0 + ldr r0, _02239E78 ; =0x0000260C + mov r1, #0 + str r1, [r4, r0] + ldr r0, _02239E7C ; =0x0000100F + pop {r4, pc} + .align 2, 0 _02239E70: .word 0x00002618 _02239E74: .word MOD83_0223CADC _02239E78: .word 0x0000260C _02239E7C: .word 0x0000100F - thumb_func_end MOD83_02239E40 + thumb_func_end MOD83_02239E40 - thumb_func_start MOD83_02239E80 + thumb_func_start MOD83_02239E80 MOD83_02239E80: ; 0x02239E80 - push {lr} - sub sp, #0x3c - bl MOD04_021DDC1C - cmp r0, #4 - beq _02239E94 - cmp r0, #7 - beq _02239EA0 - cmp r0, #8 - b _02239EA0 + push {lr} + sub sp, #0x3c + bl MOD04_021DDC1C + cmp r0, #4 + beq _02239E94 + cmp r0, #7 + beq _02239EA0 + cmp r0, #8 + b _02239EA0 _02239E94: - add r0, sp, #0 - bl MOD04_021DD9DC - add sp, #0x3c - mov r0, #1 - pop {pc} + add r0, sp, #0 + bl MOD04_021DD9DC + add sp, #0x3c + mov r0, #1 + pop {pc} _02239EA0: - mov r0, #0 - add sp, #0x3c - pop {pc} - .align 2, 0 - thumb_func_end MOD83_02239E80 + mov r0, #0 + add sp, #0x3c + pop {pc} + .align 2, 0 + thumb_func_end MOD83_02239E80 - thumb_func_start MOD83_02239EA8 + thumb_func_start MOD83_02239EA8 MOD83_02239EA8: ; 0x02239EA8 - push {r3, r4} - ldr r3, _02239EBC ; =MOD83_0223CADC - mov r4, #0 - str r4, [r3] - ldr r3, _02239EC0 ; =0x000015F4 - str r2, [r0, r3] - ldr r0, _02239EC4 ; =0x00001011 - str r0, [r1] - pop {r3, r4} - bx lr - .align 2, 0 + push {r3, r4} + ldr r3, _02239EBC ; =MOD83_0223CADC + mov r4, #0 + str r4, [r3] + ldr r3, _02239EC0 ; =0x000015F4 + str r2, [r0, r3] + ldr r0, _02239EC4 ; =0x00001011 + str r0, [r1] + pop {r3, r4} + bx lr + .align 2, 0 _02239EBC: .word MOD83_0223CADC _02239EC0: .word 0x000015F4 _02239EC4: .word 0x00001011 - thumb_func_end MOD83_02239EA8 + thumb_func_end MOD83_02239EA8 - thumb_func_start MOD83_02239EC8 + thumb_func_start MOD83_02239EC8 MOD83_02239EC8: ; 0x02239EC8 - push {r3, r4, r5, lr} - ldr r4, _02239EE4 ; =MOD83_0223CADC - mov r5, #0 - str r5, [r4, #8] - str r1, [r4, #4] - ldr r1, _02239EE8 ; =0x000015F4 - str r3, [r0, r1] - ldr r0, _02239EEC ; =0x00001012 - str r0, [r2] - ldr r0, _02239EF0 ; =MOD83_02239F28 - bl MOD04_021DE404 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + ldr r4, _02239EE4 ; =MOD83_0223CADC + mov r5, #0 + str r5, [r4, #8] + str r1, [r4, #4] + ldr r1, _02239EE8 ; =0x000015F4 + str r3, [r0, r1] + ldr r0, _02239EEC ; =0x00001012 + str r0, [r2] + ldr r0, _02239EF0 ; =MOD83_02239F28 + bl MOD04_021DE404 + pop {r3, r4, r5, pc} + nop _02239EE4: .word MOD83_0223CADC _02239EE8: .word 0x000015F4 _02239EEC: .word 0x00001012 _02239EF0: .word MOD83_02239F28 - thumb_func_end MOD83_02239EC8 + thumb_func_end MOD83_02239EC8 - thumb_func_start MOD83_02239EF4 + thumb_func_start MOD83_02239EF4 MOD83_02239EF4: ; 0x02239EF4 - push {r3, lr} - cmp r1, #6 - bhi _02239F1C - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + push {r3, lr} + cmp r1, #6 + bhi _02239F1C + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _02239F06: ; jump table - .short _02239F1C - _02239F06 - 2 ; case 0 - .short _02239F1C - _02239F06 - 2 ; case 1 - .short _02239F1C - _02239F06 - 2 ; case 2 - .short _02239F14 - _02239F06 - 2 ; case 3 - .short _02239F1C - _02239F06 - 2 ; case 4 - .short _02239F1C - _02239F06 - 2 ; case 5 - .short _02239F1C - _02239F06 - 2 ; case 6 + .short _02239F1C - _02239F06 - 2 ; case 0 + .short _02239F1C - _02239F06 - 2 ; case 1 + .short _02239F1C - _02239F06 - 2 ; case 2 + .short _02239F14 - _02239F06 - 2 ; case 3 + .short _02239F1C - _02239F06 - 2 ; case 4 + .short _02239F1C - _02239F06 - 2 ; case 5 + .short _02239F1C - _02239F06 - 2 ; case 6 _02239F14: - cmp r0, #1 - bne _02239F1C - bl OS_Terminate + cmp r0, #1 + bne _02239F1C + bl OS_Terminate _02239F1C: - ldr r0, _02239F24 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0] - pop {r3, pc} - .align 2, 0 + ldr r0, _02239F24 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0] + pop {r3, pc} + .align 2, 0 _02239F24: .word MOD83_0223CADC - thumb_func_end MOD83_02239EF4 + thumb_func_end MOD83_02239EF4 - thumb_func_start MOD83_02239F28 + thumb_func_start MOD83_02239F28 MOD83_02239F28: ; 0x02239F28 - ldr r0, _02239F30 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #8] - bx lr - .align 2, 0 + ldr r0, _02239F30 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #8] + bx lr + .align 2, 0 _02239F30: .word MOD83_0223CADC - thumb_func_end MOD83_02239F28 + thumb_func_end MOD83_02239F28 - thumb_func_start MOD83_02239F34 + thumb_func_start MOD83_02239F34 MOD83_02239F34: ; 0x02239F34 - push {r3, r4, r5, lr} - add r5, r1, #0 - bl OverlayManager_GetData - ldr r1, _0223A24C ; =0x0000260C - add r4, r0, #0 - ldr r1, [r4, r1] - cmp r1, #1 - bne _02239F4C - bl MOD83_02239E40 - str r0, [r5] + push {r3, r4, r5, lr} + add r5, r1, #0 + bl OverlayManager_GetData + ldr r1, _0223A24C ; =0x0000260C + add r4, r0, #0 + ldr r1, [r4, r1] + cmp r1, #1 + bne _02239F4C + bl MOD83_02239E40 + str r0, [r5] _02239F4C: - ldr r0, _0223A250 ; =0x00002620 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02239F62 - blx r0 - cmp r0, #1 - bne _02239F62 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] + ldr r0, _0223A250 ; =0x00002620 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02239F62 + blx r0 + cmp r0, #1 + bne _02239F62 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] _02239F62: - mov r3, #1 - ldr r0, [r5] - lsl r3, r3, #0xc - sub r0, r0, r3 - cmp r0, #0x12 - bls _02239F70 - b _0223A342 + mov r3, #1 + ldr r0, [r5] + lsl r3, r3, #0xc + sub r0, r0, r3 + cmp r0, #0x12 + bls _02239F70 + b _0223A342 _02239F70: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239F7C: ; jump table - .short _02239FA2 - _02239F7C - 2 ; case 0 - .short _02239FB0 - _02239F7C - 2 ; case 1 - .short _02239FCC - _02239F7C - 2 ; case 2 - .short _02239FF4 - _02239F7C - 2 ; case 3 - .short _0223A046 - _02239F7C - 2 ; case 4 - .short _0223A05E - _02239F7C - 2 ; case 5 - .short _0223A09A - _02239F7C - 2 ; case 6 - .short _0223A0BE - _02239F7C - 2 ; case 7 - .short _0223A0F2 - _02239F7C - 2 ; case 8 - .short _0223A114 - _02239F7C - 2 ; case 9 - .short _0223A14E - _02239F7C - 2 ; case 10 - .short _0223A174 - _02239F7C - 2 ; case 11 - .short _0223A1E8 - _02239F7C - 2 ; case 12 - .short _0223A212 - _02239F7C - 2 ; case 13 - .short _0223A342 - _02239F7C - 2 ; case 14 - .short _0223A238 - _02239F7C - 2 ; case 15 - .short _0223A2D4 - _02239F7C - 2 ; case 16 - .short _0223A2F8 - _02239F7C - 2 ; case 17 - .short _0223A31E - _02239F7C - 2 ; case 18 + .short _02239FA2 - _02239F7C - 2 ; case 0 + .short _02239FB0 - _02239F7C - 2 ; case 1 + .short _02239FCC - _02239F7C - 2 ; case 2 + .short _02239FF4 - _02239F7C - 2 ; case 3 + .short _0223A046 - _02239F7C - 2 ; case 4 + .short _0223A05E - _02239F7C - 2 ; case 5 + .short _0223A09A - _02239F7C - 2 ; case 6 + .short _0223A0BE - _02239F7C - 2 ; case 7 + .short _0223A0F2 - _02239F7C - 2 ; case 8 + .short _0223A114 - _02239F7C - 2 ; case 9 + .short _0223A14E - _02239F7C - 2 ; case 10 + .short _0223A174 - _02239F7C - 2 ; case 11 + .short _0223A1E8 - _02239F7C - 2 ; case 12 + .short _0223A212 - _02239F7C - 2 ; case 13 + .short _0223A342 - _02239F7C - 2 ; case 14 + .short _0223A238 - _02239F7C - 2 ; case 15 + .short _0223A2D4 - _02239F7C - 2 ; case 16 + .short _0223A2F8 - _02239F7C - 2 ; case 17 + .short _0223A31E - _02239F7C - 2 ; case 18 _02239FA2: - bl FUN_0202E49C - bl FUN_02088858 - ldr r0, _0223A254 ; =0x00001001 - str r0, [r5] - b _0223A342 + bl FUN_0202E49C + bl FUN_02088858 + ldr r0, _0223A254 ; =0x00001001 + str r0, [r5] + b _0223A342 _02239FB0: - bl FUN_0202E4C8 - cmp r0, #0 - beq _0223A092 - ldr r0, _0223A258 ; =MOD83_02239DC0 - ldr r1, _0223A25C ; =MOD83_02239DE0 - bl MOD04_021DD968 - ldr r0, [r4, #4] - bl FUN_02033310 - ldr r0, _0223A260 ; =0x00001002 - str r0, [r5] - b _0223A342 + bl FUN_0202E4C8 + cmp r0, #0 + beq _0223A092 + ldr r0, _0223A258 ; =MOD83_02239DC0 + ldr r1, _0223A25C ; =MOD83_02239DE0 + bl MOD04_021DD968 + ldr r0, [r4, #4] + bl FUN_02033310 + ldr r0, _0223A260 ; =0x00001002 + str r0, [r5] + b _0223A342 _02239FCC: - ldr r0, _0223A264 ; =0x000015E4 - mov r1, #2 - add r0, r4, r0 - mov r2, #1 - mov r3, #0x14 - bl MOD04_021DDEE0 - mov r0, #2 - bl MOD04_021DDE7C - bl MOD04_021DDDCC - bl FUN_02033E74 - ldr r0, _0223A268 ; =0x00001003 - mov r1, #0 - str r0, [r5] - ldr r0, _0223A26C ; =0x0000261C - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A264 ; =0x000015E4 + mov r1, #2 + add r0, r4, r0 + mov r2, #1 + mov r3, #0x14 + bl MOD04_021DDEE0 + mov r0, #2 + bl MOD04_021DDE7C + bl MOD04_021DDDCC + bl FUN_02033E74 + ldr r0, _0223A268 ; =0x00001003 + mov r1, #0 + str r0, [r5] + ldr r0, _0223A26C ; =0x0000261C + str r1, [r4, r0] + b _0223A342 _02239FF4: - bl MOD04_021DDD7C - cmp r0, #0 - bne _0223A002 - bl MOD04_021DDCE8 - b _0223A034 + bl MOD04_021DDD7C + cmp r0, #0 + bne _0223A002 + bl MOD04_021DDCE8 + b _0223A034 _0223A002: - add r0, r4, #0 - bl MOD83_02239E80 - cmp r0, #1 - bne _0223A02C - ldr r0, _0223A26C ; =0x0000261C - ldr r1, [r4, r0] - cmp r1, #1 - bne _0223A020 - ldr r0, _0223A270 ; =MOD83_0223CADC - mov r1, #3 - str r1, [r0, #4] - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] - b _0223A034 + add r0, r4, #0 + bl MOD83_02239E80 + cmp r0, #1 + bne _0223A02C + ldr r0, _0223A26C ; =0x0000261C + ldr r1, [r4, r0] + cmp r1, #1 + bne _0223A020 + ldr r0, _0223A270 ; =MOD83_0223CADC + mov r1, #3 + str r1, [r0, #4] + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] + b _0223A034 _0223A020: - ldr r1, _0223A278 ; =MOD04_021DD984 - add r0, r0, #4 - str r1, [r4, r0] - ldr r0, _0223A27C ; =0x00001004 - str r0, [r5] - b _0223A034 + ldr r1, _0223A278 ; =MOD04_021DD984 + add r0, r0, #4 + str r1, [r4, r0] + ldr r0, _0223A27C ; =0x00001004 + str r0, [r5] + b _0223A034 _0223A02C: - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] _0223A034: - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A092 - ldr r0, _0223A26C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A092 + ldr r0, _0223A26C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] + b _0223A342 _0223A046: - bl MOD04_021DE05C - cmp r0, #0 - bne _0223A058 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + bl MOD04_021DE05C + cmp r0, #0 + bne _0223A058 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A058: - ldr r0, _0223A284 ; =0x00001005 - str r0, [r5] - b _0223A342 + ldr r0, _0223A284 ; =0x00001005 + str r0, [r5] + b _0223A342 _0223A05E: - bl MOD04_021DDF4C - cmp r0, #3 - bne _0223A06C - ldr r0, _0223A288 ; =0x00001006 - str r0, [r5] - b _0223A088 + bl MOD04_021DDF4C + cmp r0, #3 + bne _0223A06C + ldr r0, _0223A288 ; =0x00001006 + str r0, [r5] + b _0223A088 _0223A06C: - cmp r0, #4 - bne _0223A07A - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A088 + cmp r0, #4 + bne _0223A07A + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A088 _0223A07A: - cmp r0, #5 - bne _0223A088 - ldr r0, _0223A270 ; =MOD83_0223CADC - mov r1, #3 - str r1, [r0, #4] - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] + cmp r0, #5 + bne _0223A088 + ldr r0, _0223A270 ; =MOD83_0223CADC + mov r1, #3 + str r1, [r0, #4] + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] _0223A088: - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _0223A094 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _0223A094 _0223A092: - b _0223A342 + b _0223A342 _0223A094: - bl MOD04_021DDF40 - b _0223A342 + bl MOD04_021DDF40 + b _0223A342 _0223A09A: - ldr r0, _0223A28C ; =MOD83_02239EF4 - ldr r1, _0223A290 ; =MOD83_0223B838 - ldr r2, _0223A294 ; =MOD83_0223B840 - bl MOD04_021DE45C - cmp r0, #0 - bne _0223A0B2 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A28C ; =MOD83_02239EF4 + ldr r1, _0223A290 ; =MOD83_0223B838 + ldr r2, _0223A294 ; =MOD83_0223B840 + bl MOD04_021DE45C + cmp r0, #0 + bne _0223A0B2 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A0B2: - ldr r2, _0223A298 ; =0x00001007 - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A298 ; =0x00001007 + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A0BE: - ldr r0, _0223A26C ; =0x0000261C - ldr r0, [r4, r0] - cmp r0, #1 - bne _0223A0D4 - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xc - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A26C ; =0x0000261C + ldr r0, [r4, r0] + cmp r0, #1 + bne _0223A0D4 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xc + bl MOD83_02239EC8 + b _0223A342 _0223A0D4: - ldr r0, _0223A29C ; =MOD83_0223B854 - add r1, r0, #0 - add r2, r0, #0 - bl MOD04_021DE3D0 - cmp r0, #0 - bne _0223A0EC - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A29C ; =MOD83_0223B854 + add r1, r0, #0 + add r2, r0, #0 + bl MOD04_021DE3D0 + cmp r0, #0 + bne _0223A0EC + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A0EC: - ldr r0, _0223A2A0 ; =0x00001008 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2A0 ; =0x00001008 + str r0, [r5] + b _0223A342 _0223A0F2: - ldr r0, _0223A2A4 ; =0x000015F8 - add r0, r4, r0 - bl MOD04_021DE3AC - cmp r0, #0 - bne _0223A108 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2A4 ; =0x000015F8 + add r0, r4, r0 + bl MOD04_021DE3AC + cmp r0, #0 + bne _0223A108 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A108: - ldr r2, _0223A2A8 ; =0x00001009 - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A2A8 ; =0x00001009 + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A114: - ldr r0, _0223A2A4 ; =0x000015F8 - ldr r0, [r4, r0] - cmp r0, #1 - beq _0223A12A - add r0, r4, #0 - mov r1, #2 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A2A4 ; =0x000015F8 + ldr r0, [r4, r0] + cmp r0, #1 + beq _0223A12A + add r0, r4, #0 + mov r1, #2 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A12A: - ldr r0, _0223A2AC ; =MOD83_0223CAEC - mov r1, #0 - mov r2, #0xa - bl MOD04_021DE364 - cmp r0, #0 - bne _0223A142 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2AC ; =MOD83_0223CAEC + mov r1, #0 + mov r2, #0xa + bl MOD04_021DE364 + cmp r0, #0 + bne _0223A142 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A142: - ldr r2, _0223A2B0 ; =0x0000100A - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A2B0 ; =0x0000100A + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A14E: - ldr r1, _0223A2B4 ; =0x000015FC - ldr r0, _0223A2AC ; =MOD83_0223CAEC - add r1, r4, r1 - add r2, r3, #0 - bl MOD04_021DE330 - cmp r0, #0 - bne _0223A168 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r1, _0223A2B4 ; =0x000015FC + ldr r0, _0223A2AC ; =MOD83_0223CAEC + add r1, r4, r1 + add r2, r3, #0 + bl MOD04_021DE330 + cmp r0, #0 + bne _0223A168 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A168: - ldr r0, _0223A2B8 ; =0x0000100B - mov r1, #0 - str r0, [r5] - ldr r0, _0223A2BC ; =0x00002608 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A2B8 ; =0x0000100B + mov r1, #0 + str r0, [r5] + ldr r0, _0223A2BC ; =0x00002608 + str r1, [r4, r0] + b _0223A342 _0223A174: - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0] - cmp r0, #0 - bne _0223A1C4 - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A194 - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xc - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0] + cmp r0, #0 + bne _0223A1C4 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A194 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xc + bl MOD83_02239EC8 + b _0223A342 _0223A194: - mov r1, #0x26 - lsl r1, r1, #8 - add r0, r4, r1 - add r1, r1, #4 - add r1, r4, r1 - bl MOD04_021DE2D0 - cmp r0, #1 - bne _0223A21A - mov r1, #0x26 - lsl r1, r1, #8 - ldr r2, [r4, r1] - add r1, r1, #4 - mov r0, #0x64 - ldr r1, [r4, r1] - mul r0, r2 - bl _u32_div_f - ldr r1, _0223A2BC ; =0x00002608 - ldr r2, [r4, r1] - cmp r2, r0 - beq _0223A21A - str r0, [r4, r1] - b _0223A342 + mov r1, #0x26 + lsl r1, r1, #8 + add r0, r4, r1 + add r1, r1, #4 + add r1, r4, r1 + bl MOD04_021DE2D0 + cmp r0, #1 + bne _0223A21A + mov r1, #0x26 + lsl r1, r1, #8 + ldr r2, [r4, r1] + add r1, r1, #4 + mov r0, #0x64 + ldr r1, [r4, r1] + mul r0, r2 + bl _u32_div_f + ldr r1, _0223A2BC ; =0x00002608 + ldr r2, [r4, r1] + cmp r2, r0 + beq _0223A21A + str r0, [r4, r1] + b _0223A342 _0223A1C4: - ldr r0, _0223A26C ; =0x0000261C - ldr r0, [r4, r0] - cmp r0, #0 - bne _0223A1DA - add r0, r4, #0 - mov r1, #1 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A26C ; =0x0000261C + ldr r0, [r4, r0] + cmp r0, #0 + bne _0223A1DA + add r0, r4, #0 + mov r1, #1 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A1DA: - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A1E8: - bl MOD04_021DE308 - cmp r0, #0 - bne _0223A1F6 - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] - b _0223A342 + bl MOD04_021DE308 + cmp r0, #0 + bne _0223A1F6 + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] + b _0223A342 _0223A1F6: - ldr r0, _0223A250 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl FUN_02033ED0 - bl FUN_02033364 - bl FUN_02088868 - bl FUN_0202E4F0 - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #4] - pop {r3, r4, r5, pc} + ldr r0, _0223A250 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl FUN_02033ED0 + bl FUN_02033364 + bl FUN_02088868 + bl FUN_0202E4F0 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #4] + pop {r3, r4, r5, pc} _0223A212: - bl MOD04_021DDB40 - cmp r0, #1 - beq _0223A21C + bl MOD04_021DDB40 + cmp r0, #1 + beq _0223A21C _0223A21A: - b _0223A342 + b _0223A342 _0223A21C: - ldr r0, _0223A250 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl FUN_02033ED0 - bl FUN_020332DC - bl FUN_02088868 - bl FUN_0202E4F0 - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #4] - pop {r3, r4, r5, pc} + ldr r0, _0223A250 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl FUN_02033ED0 + bl FUN_020332DC + bl FUN_02088868 + bl FUN_0202E4F0 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #4] + pop {r3, r4, r5, pc} _0223A238: - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #0xc] - cmp r0, #1 - beq _0223A242 - b _0223A342 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #0xc] + cmp r0, #1 + beq _0223A242 + b _0223A342 _0223A242: - add r0, r4, #0 - bl MOD83_022307B4 - ldr r0, _0223A2C0 ; =0x00002618 - b _0223A2C4 - .align 2, 0 + add r0, r4, #0 + bl MOD83_022307B4 + ldr r0, _0223A2C0 ; =0x00002618 + b _0223A2C4 + .align 2, 0 _0223A24C: .word 0x0000260C _0223A250: .word 0x00002620 _0223A254: .word 0x00001001 @@ -26372,1160 +26372,1160 @@ _0223A2B8: .word 0x0000100B _0223A2BC: .word 0x00002608 _0223A2C0: .word 0x00002618 _0223A2C4: - ldr r0, [r4, r0] - cmp r0, #6 - bne _0223A2CE - bl MOD04_021DDBBC + ldr r0, [r4, r0] + cmp r0, #6 + bne _0223A2CE + bl MOD04_021DDBBC _0223A2CE: - ldr r0, _0223A348 ; =0x00001010 - str r0, [r5] - b _0223A342 + ldr r0, _0223A348 ; =0x00001010 + str r0, [r5] + b _0223A342 _0223A2D4: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A350 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl MOD04_021DD6F0 - bl FUN_020332DC - bl FUN_02088868 - bl FUN_0202E4F0 - mov r0, #4 - pop {r3, r4, r5, pc} + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A350 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl MOD04_021DD6F0 + bl FUN_020332DC + bl FUN_02088868 + bl FUN_0202E4F0 + mov r0, #4 + pop {r3, r4, r5, pc} _0223A2F8: - ldr r0, _0223A354 ; =MOD83_0223CADC - ldr r1, [r0] - cmp r1, #1 - bne _0223A30C - mov r1, #0 - str r1, [r0] - ldr r0, _0223A358 ; =0x000015F4 - ldr r0, [r4, r0] - str r0, [r5] - b _0223A342 + ldr r0, _0223A354 ; =MOD83_0223CADC + ldr r1, [r0] + cmp r1, #1 + bne _0223A30C + mov r1, #0 + str r1, [r0] + ldr r0, _0223A358 ; =0x000015F4 + ldr r0, [r4, r0] + str r0, [r5] + b _0223A342 _0223A30C: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A35C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A35C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] + b _0223A342 _0223A31E: - ldr r0, _0223A354 ; =MOD83_0223CADC - ldr r1, [r0, #8] - cmp r1, #1 - bne _0223A332 - mov r1, #0 - str r1, [r0, #8] - ldr r0, _0223A358 ; =0x000015F4 - ldr r0, [r4, r0] - str r0, [r5] - b _0223A342 + ldr r0, _0223A354 ; =MOD83_0223CADC + ldr r1, [r0, #8] + cmp r1, #1 + bne _0223A332 + mov r1, #0 + str r1, [r0, #8] + ldr r0, _0223A358 ; =0x000015F4 + ldr r0, [r4, r0] + str r0, [r5] + b _0223A342 _0223A332: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A35C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A35C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] _0223A342: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0223A348: .word 0x00001010 _0223A34C: .word gMain _0223A350: .word 0x00002620 _0223A354: .word MOD83_0223CADC _0223A358: .word 0x000015F4 _0223A35C: .word 0x0000261C - thumb_func_end MOD83_02239F34 + thumb_func_end MOD83_02239F34 - .rodata - .global MOD83_0223A360 + .rodata + .global MOD83_0223A360 MOD83_0223A360: ; 0x0223A360 - .word MOD83_0222E48C, MOD83_0222E540, MOD83_0222E850, 0xFFFFFFFF + .word MOD83_0222E48C, MOD83_0222E540, MOD83_0222E850, 0xFFFFFFFF - .global MOD83_0223A370 + .global MOD83_0223A370 MOD83_0223A370: ; 0x0223A370 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A380 + .global MOD83_0223A380 MOD83_0223A380: ; 0x0223A380 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A3A8 + .global MOD83_0223A3A8 MOD83_0223A3A8: ; 0x0223A3A8 - .word MOD83_0222EDF8, MOD83_0222EE8C, MOD83_0222F048, 0xFFFFFFFF + .word MOD83_0222EDF8, MOD83_0222EE8C, MOD83_0222F048, 0xFFFFFFFF - .global MOD83_0223A3B8 + .global MOD83_0223A3B8 MOD83_0223A3B8: ; 0x0223A3B8 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A3C8 + .global MOD83_0223A3C8 MOD83_0223A3C8: ; 0x0223A3C8 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A3F0 + .global MOD83_0223A3F0 MOD83_0223A3F0: ; 0x0223A3F0 - .word MOD83_0222F984, MOD83_0222F9B0, MOD83_0222F9B8, MOD83_0222F9C4 - .word FUN_0202DA80, 0x00000000 + .word MOD83_0222F984, MOD83_0222F9B0, MOD83_0222F9B8, MOD83_0222F9C4 + .word FUN_0202DA80, 0x00000000 - .global MOD83_0223A408 + .global MOD83_0223A408 MOD83_0223A408: ; 0x0223A408 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A418 + .global MOD83_0223A418 MOD83_0223A418: ; 0x0223A418 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A434 + .global MOD83_0223A434 MOD83_0223A434: ; 0x0223A434 - .word MOD83_02230954, MOD83_02230A10, MOD83_0223137C, 0xFFFFFFFF + .word MOD83_02230954, MOD83_02230A10, MOD83_0223137C, 0xFFFFFFFF - .global MOD83_0223A444 + .global MOD83_0223A444 MOD83_0223A444: ; 0x0223A444 - .word MOD83_022323A8, MOD83_02232788, MOD83_022330A4, 0xFFFFFFFF + .word MOD83_022323A8, MOD83_02232788, MOD83_022330A4, 0xFFFFFFFF - .global MOD83_0223A454 + .global MOD83_0223A454 MOD83_0223A454: ; 0x0223A454 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A464 + .global MOD83_0223A464 MOD83_0223A464: ; 0x0223A464 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1F, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1F, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A480 + .global MOD83_0223A480 MOD83_0223A480: ; 0x0223A480 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A49C + .global MOD83_0223A49C MOD83_0223A49C: ; 0x0223A49C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A4B8 + .global MOD83_0223A4B8 MOD83_0223A4B8: ; 0x0223A4B8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A4D4 + .global MOD83_0223A4D4 MOD83_0223A4D4: ; 0x0223A4D4 - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A4FC + .global MOD83_0223A4FC MOD83_0223A4FC: ; 0x0223A4FC - .word MOD83_02236764, MOD83_02236804, MOD83_02236DD0, 0xFFFFFFFF + .word MOD83_02236764, MOD83_02236804, MOD83_02236DD0, 0xFFFFFFFF - .global MOD83_0223A50C + .global MOD83_0223A50C MOD83_0223A50C: ; 0x0223A50C - .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00 + .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00 - .global MOD83_0223A51C + .global MOD83_0223A51C MOD83_0223A51C: ; 0x0223A51C - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A52C + .global MOD83_0223A52C MOD83_0223A52C: ; 0x0223A52C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A548 + .global MOD83_0223A548 MOD83_0223A548: ; 0x0223A548 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A564 + .global MOD83_0223A564 MOD83_0223A564: ; 0x0223A564 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1E, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1E, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A580 + .global MOD83_0223A580 MOD83_0223A580: ; 0x0223A580 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1F, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1F, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A59C + .global MOD83_0223A59C MOD83_0223A59C: ; 0x0223A59C - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A5C4 + .global MOD83_0223A5C4 MOD83_0223A5C4: ; 0x0223A5C4 - .byte 0x41, 0x58, 0x56, 0x4A, 0x00, 0x00, 0x01, 0x00, 0x41, 0x58, 0x56, 0x45, 0x00, 0x00, 0x02, 0x00 - .byte 0x41, 0x58, 0x56, 0x46, 0x00, 0x00, 0x03, 0x00, 0x41, 0x58, 0x56, 0x44, 0x00, 0x00, 0x05, 0x00 - .byte 0x41, 0x58, 0x56, 0x53, 0x00, 0x00, 0x07, 0x00, 0x41, 0x58, 0x56, 0x49, 0x00, 0x00, 0x04, 0x00 - .byte 0x41, 0x58, 0x50, 0x4A, 0x00, 0x01, 0x01, 0x00, 0x41, 0x58, 0x50, 0x45, 0x00, 0x01, 0x02, 0x00 - .byte 0x41, 0x58, 0x50, 0x46, 0x00, 0x01, 0x03, 0x00, 0x41, 0x58, 0x50, 0x44, 0x00, 0x01, 0x05, 0x00 - .byte 0x41, 0x58, 0x50, 0x53, 0x00, 0x01, 0x07, 0x00, 0x41, 0x58, 0x50, 0x49, 0x00, 0x01, 0x04, 0x00 - .byte 0x42, 0x50, 0x52, 0x4A, 0x01, 0x03, 0x01, 0x00, 0x42, 0x50, 0x52, 0x45, 0x01, 0x03, 0x02, 0x00 - .byte 0x42, 0x50, 0x52, 0x46, 0x01, 0x03, 0x03, 0x00, 0x42, 0x50, 0x52, 0x44, 0x01, 0x03, 0x05, 0x00 - .byte 0x42, 0x50, 0x52, 0x53, 0x01, 0x03, 0x07, 0x00, 0x42, 0x50, 0x52, 0x49, 0x01, 0x03, 0x04, 0x00 - .byte 0x42, 0x50, 0x47, 0x4A, 0x01, 0x02, 0x01, 0x00, 0x42, 0x50, 0x47, 0x45, 0x01, 0x02, 0x02, 0x00 - .byte 0x42, 0x50, 0x47, 0x46, 0x01, 0x02, 0x03, 0x00, 0x42, 0x50, 0x47, 0x44, 0x01, 0x02, 0x05, 0x00 - .byte 0x42, 0x50, 0x47, 0x53, 0x01, 0x02, 0x07, 0x00, 0x42, 0x50, 0x47, 0x49, 0x01, 0x02, 0x04, 0x00 - .byte 0x42, 0x50, 0x45, 0x4A, 0x02, 0x04, 0x01, 0x00, 0x42, 0x50, 0x45, 0x45, 0x02, 0x04, 0x02, 0x00 - .byte 0x42, 0x50, 0x45, 0x46, 0x02, 0x04, 0x03, 0x00, 0x42, 0x50, 0x45, 0x44, 0x02, 0x04, 0x05, 0x00 - .byte 0x42, 0x50, 0x45, 0x53, 0x02, 0x04, 0x07, 0x00, 0x42, 0x50, 0x45, 0x49, 0x02, 0x04, 0x04, 0x00 - - .global MOD83_0223A6B4 + .byte 0x41, 0x58, 0x56, 0x4A, 0x00, 0x00, 0x01, 0x00, 0x41, 0x58, 0x56, 0x45, 0x00, 0x00, 0x02, 0x00 + .byte 0x41, 0x58, 0x56, 0x46, 0x00, 0x00, 0x03, 0x00, 0x41, 0x58, 0x56, 0x44, 0x00, 0x00, 0x05, 0x00 + .byte 0x41, 0x58, 0x56, 0x53, 0x00, 0x00, 0x07, 0x00, 0x41, 0x58, 0x56, 0x49, 0x00, 0x00, 0x04, 0x00 + .byte 0x41, 0x58, 0x50, 0x4A, 0x00, 0x01, 0x01, 0x00, 0x41, 0x58, 0x50, 0x45, 0x00, 0x01, 0x02, 0x00 + .byte 0x41, 0x58, 0x50, 0x46, 0x00, 0x01, 0x03, 0x00, 0x41, 0x58, 0x50, 0x44, 0x00, 0x01, 0x05, 0x00 + .byte 0x41, 0x58, 0x50, 0x53, 0x00, 0x01, 0x07, 0x00, 0x41, 0x58, 0x50, 0x49, 0x00, 0x01, 0x04, 0x00 + .byte 0x42, 0x50, 0x52, 0x4A, 0x01, 0x03, 0x01, 0x00, 0x42, 0x50, 0x52, 0x45, 0x01, 0x03, 0x02, 0x00 + .byte 0x42, 0x50, 0x52, 0x46, 0x01, 0x03, 0x03, 0x00, 0x42, 0x50, 0x52, 0x44, 0x01, 0x03, 0x05, 0x00 + .byte 0x42, 0x50, 0x52, 0x53, 0x01, 0x03, 0x07, 0x00, 0x42, 0x50, 0x52, 0x49, 0x01, 0x03, 0x04, 0x00 + .byte 0x42, 0x50, 0x47, 0x4A, 0x01, 0x02, 0x01, 0x00, 0x42, 0x50, 0x47, 0x45, 0x01, 0x02, 0x02, 0x00 + .byte 0x42, 0x50, 0x47, 0x46, 0x01, 0x02, 0x03, 0x00, 0x42, 0x50, 0x47, 0x44, 0x01, 0x02, 0x05, 0x00 + .byte 0x42, 0x50, 0x47, 0x53, 0x01, 0x02, 0x07, 0x00, 0x42, 0x50, 0x47, 0x49, 0x01, 0x02, 0x04, 0x00 + .byte 0x42, 0x50, 0x45, 0x4A, 0x02, 0x04, 0x01, 0x00, 0x42, 0x50, 0x45, 0x45, 0x02, 0x04, 0x02, 0x00 + .byte 0x42, 0x50, 0x45, 0x46, 0x02, 0x04, 0x03, 0x00, 0x42, 0x50, 0x45, 0x44, 0x02, 0x04, 0x05, 0x00 + .byte 0x42, 0x50, 0x45, 0x53, 0x02, 0x04, 0x07, 0x00, 0x42, 0x50, 0x45, 0x49, 0x02, 0x04, 0x04, 0x00 + + .global MOD83_0223A6B4 MOD83_0223A6B4: ; 0x0223A6B4 - .byte 0xC8, 0x7E, 0x66, 0x71, 0x46, 0x0B, 0xE6, 0x6F, 0x17, 0x8A, 0x5C, 0x7D, 0xEA, 0xE1, 0x93, 0xFD - .byte 0xEE, 0xFA, 0x99, 0x84, 0xFE, 0x35, 0x02, 0xB9, 0x7F, 0x4F, 0xF1, 0x19, 0x74, 0xA2, 0x0F, 0x65 - .byte 0x8A, 0x9C, 0x44, 0x81, 0x0C, 0x1F, 0x94, 0xE4, 0xC0, 0xB6, 0xD7, 0x20, 0xEE, 0x11, 0x9A, 0x8D - .byte 0x27, 0x33, 0x9B, 0x7B, 0x02, 0xE9, 0x33, 0x11, 0xDC, 0xCF, 0x72, 0xD9, 0xA8, 0x78, 0x12, 0x8C - .byte 0x3B, 0x60, 0xD5, 0x24, 0xB8, 0xD9, 0xFC, 0x8D, 0x15, 0xBA, 0x0B, 0x90, 0xA3, 0xBD, 0x3A, 0xE4 - .byte 0x01, 0x18, 0xBA, 0xF9, 0x65, 0xA5, 0x15, 0x37, 0xDC, 0x7A, 0x48, 0x5C, 0x3A, 0x55, 0x35, 0x43 - .byte 0xE2, 0xC6, 0x66, 0xBA, 0x21, 0xEA, 0x67, 0x2E, 0xA8, 0x29, 0x03, 0xD7, 0x1F, 0x0F, 0xC6, 0xDE - .byte 0x1B, 0xE2, 0xA1, 0xCA, 0x21, 0x51, 0xFE, 0xB9, 0x68, 0x17, 0x3C, 0xEB, 0x04, 0x54, 0xE0, 0xBD - - .global MOD83_0223A734 + .byte 0xC8, 0x7E, 0x66, 0x71, 0x46, 0x0B, 0xE6, 0x6F, 0x17, 0x8A, 0x5C, 0x7D, 0xEA, 0xE1, 0x93, 0xFD + .byte 0xEE, 0xFA, 0x99, 0x84, 0xFE, 0x35, 0x02, 0xB9, 0x7F, 0x4F, 0xF1, 0x19, 0x74, 0xA2, 0x0F, 0x65 + .byte 0x8A, 0x9C, 0x44, 0x81, 0x0C, 0x1F, 0x94, 0xE4, 0xC0, 0xB6, 0xD7, 0x20, 0xEE, 0x11, 0x9A, 0x8D + .byte 0x27, 0x33, 0x9B, 0x7B, 0x02, 0xE9, 0x33, 0x11, 0xDC, 0xCF, 0x72, 0xD9, 0xA8, 0x78, 0x12, 0x8C + .byte 0x3B, 0x60, 0xD5, 0x24, 0xB8, 0xD9, 0xFC, 0x8D, 0x15, 0xBA, 0x0B, 0x90, 0xA3, 0xBD, 0x3A, 0xE4 + .byte 0x01, 0x18, 0xBA, 0xF9, 0x65, 0xA5, 0x15, 0x37, 0xDC, 0x7A, 0x48, 0x5C, 0x3A, 0x55, 0x35, 0x43 + .byte 0xE2, 0xC6, 0x66, 0xBA, 0x21, 0xEA, 0x67, 0x2E, 0xA8, 0x29, 0x03, 0xD7, 0x1F, 0x0F, 0xC6, 0xDE + .byte 0x1B, 0xE2, 0xA1, 0xCA, 0x21, 0x51, 0xFE, 0xB9, 0x68, 0x17, 0x3C, 0xEB, 0x04, 0x54, 0xE0, 0xBD + + .global MOD83_0223A734 MOD83_0223A734: ; 0x0223A734 - .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A744 + .global MOD83_0223A744 MOD83_0223A744: ; 0x0223A744 - .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x05, 0x02, 0x06, 0x02, 0x07, 0x00 - .byte 0x08, 0x05, 0x09, 0x05, 0x0A, 0x05, 0x0B, 0x04, 0xFF, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x05, 0x02, 0x06, 0x02, 0x07, 0x00 + .byte 0x08, 0x05, 0x09, 0x05, 0x0A, 0x05, 0x0B, 0x04, 0xFF, 0x00, 0x00, 0x00 - .global MOD83_0223A760 + .global MOD83_0223A760 MOD83_0223A760: ; 0x0223A760 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .data - .global MOD83_0223A780 + .data + .global MOD83_0223A780 MOD83_0223A780: ; 0x0223A780 - .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A784 + .global MOD83_0223A784 MOD83_0223A784: ; 0x0223A784 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .global MOD83_0223A794 + .global MOD83_0223A794 MOD83_0223A794: ; 0x0223A794 - .byte 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x65, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x65, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A7B0 + .global MOD83_0223A7B0 MOD83_0223A7B0: ; 0x0223A7B0 - .byte 0x81, 0x53, 0x83, 0x53, 0x85, 0x53, 0x87, 0x53, 0x89, 0x53, 0x8B, 0x53, 0x8D, 0x53, 0x8F, 0x53 - .byte 0x91, 0x53, 0x93, 0x53, 0x95, 0x53, 0x97, 0x53, 0x99, 0x53, 0x9B, 0x53, 0x9D, 0x53, 0x9F, 0x53 - .byte 0x9D, 0x53, 0x9B, 0x53, 0x99, 0x53, 0x97, 0x53, 0x95, 0x53, 0x93, 0x53, 0x91, 0x53, 0x8F, 0x53 - .byte 0x8D, 0x53, 0x8B, 0x53, 0x89, 0x53, 0x87, 0x53, 0x85, 0x53, 0x83, 0x53, 0x00, 0x00, 0x00, 0x00 + .byte 0x81, 0x53, 0x83, 0x53, 0x85, 0x53, 0x87, 0x53, 0x89, 0x53, 0x8B, 0x53, 0x8D, 0x53, 0x8F, 0x53 + .byte 0x91, 0x53, 0x93, 0x53, 0x95, 0x53, 0x97, 0x53, 0x99, 0x53, 0x9B, 0x53, 0x9D, 0x53, 0x9F, 0x53 + .byte 0x9D, 0x53, 0x9B, 0x53, 0x99, 0x53, 0x97, 0x53, 0x95, 0x53, 0x93, 0x53, 0x91, 0x53, 0x8F, 0x53 + .byte 0x8D, 0x53, 0x8B, 0x53, 0x89, 0x53, 0x87, 0x53, 0x85, 0x53, 0x83, 0x53, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A7F0 + .global MOD83_0223A7F0 MOD83_0223A7F0: ; 0x0223A7F0 - .byte 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00 - .global MOD83_0223A804 + .global MOD83_0223A804 MOD83_0223A804: ; 0x0223A804 - .byte 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 - .global MOD83_0223A818 + .global MOD83_0223A818 MOD83_0223A818: ; 0x0223A818 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A82C + .global MOD83_0223A82C MOD83_0223A82C: ; 0x0223A82C - .byte 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00 - .global MOD83_0223A840 + .global MOD83_0223A840 MOD83_0223A840: ; 0x0223A840 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 - .global MOD83_0223A854 + .global MOD83_0223A854 MOD83_0223A854: ; 0x0223A854 - .byte 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00 - .global MOD83_0223A85C + .global MOD83_0223A85C MOD83_0223A85C: ; 0x0223A85C - .word 0x00, MOD83_0222DD24, 0x02, 0x02 - .word 0x01, 0x00000000, 0x03, 0x02 - .word 0x02, MOD83_0222DF40, 0x04, 0x02 - .word 0x03, MOD83_0222DFEC, 0x05, 0x02 - .word 0x00, MOD83_0222DECC, 0x06, 0x02 - .word 0x0A, MOD83_0222E048, 0x07, 0x02 - .word 0x0B, MOD83_0222E098 - - .global MOD83_0223A8C4 + .word 0x00, MOD83_0222DD24, 0x02, 0x02 + .word 0x01, 0x00000000, 0x03, 0x02 + .word 0x02, MOD83_0222DF40, 0x04, 0x02 + .word 0x03, MOD83_0222DFEC, 0x05, 0x02 + .word 0x00, MOD83_0222DECC, 0x06, 0x02 + .word 0x0A, MOD83_0222E048, 0x07, 0x02 + .word 0x0B, MOD83_0222E098 + + .global MOD83_0223A8C4 MOD83_0223A8C4: ; 0x0223A8C4 - .asciz "data/eoo.dat" + .asciz "data/eoo.dat" - .balign 4 - .global MOD83_0223A8D4 + .balign 4 + .global MOD83_0223A8D4 MOD83_0223A8D4: ; 0x0223A8D4 - .byte 0x16, 0x01, 0x15, 0x00 - .word MOD83_0223B870, MOD83_0223B860 + .byte 0x16, 0x01, 0x15, 0x00 + .word MOD83_0223B870, MOD83_0223B860 - .global MOD83_0223A8E0 + .global MOD83_0223A8E0 MOD83_0223A8E0: ; 0x0223A8E0 - .byte 0x00, 0x00, 0xFF, 0xFF, 0x21, 0x00, 0xE1, 0x00, 0x23, 0x00, 0xC0, 0x01, 0x25, 0x00, 0xD2, 0x01 - .byte 0x27, 0x00, 0xEA, 0x00, 0x28, 0x00, 0xEB, 0x00, 0x29, 0x00, 0xBF, 0x01, 0x2A, 0x00, 0xBD, 0x01 - .byte 0x2B, 0x00, 0xAD, 0x01, 0x2C, 0x00, 0xBE, 0x01, 0x2E, 0x00, 0xB1, 0x01, 0x30, 0x00, 0xA2, 0x00 - .byte 0x31, 0x00, 0xA3, 0x00, 0x32, 0x00, 0xA4, 0x00, 0x33, 0x00, 0xA5, 0x00, 0x34, 0x00, 0xA6, 0x00 - .byte 0x35, 0x00, 0xA7, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x37, 0x00, 0xA9, 0x00, 0x38, 0x00, 0xAA, 0x00 - .byte 0x39, 0x00, 0xAB, 0x00, 0x3A, 0x00, 0xC4, 0x01, 0x3B, 0x00, 0xC5, 0x01, 0x3C, 0x00, 0xEC, 0x00 - .byte 0x3E, 0x00, 0xED, 0x00, 0x3F, 0x00, 0xAC, 0x01, 0x41, 0x00, 0xAC, 0x00, 0x42, 0x00, 0xAD, 0x00 - .byte 0x43, 0x00, 0xAE, 0x00, 0x44, 0x00, 0xAF, 0x00, 0x45, 0x00, 0xB0, 0x00, 0x46, 0x00, 0xB1, 0x00 - .byte 0x47, 0x00, 0xB2, 0x00, 0x48, 0x00, 0xB3, 0x00, 0x49, 0x00, 0xB4, 0x00, 0x4A, 0x00, 0xB5, 0x00 - .byte 0x4B, 0x00, 0xB6, 0x00, 0x4C, 0x00, 0xB7, 0x00, 0x4D, 0x00, 0xB8, 0x00, 0x4E, 0x00, 0xB9, 0x00 - .byte 0x4F, 0x00, 0xBA, 0x00, 0x50, 0x00, 0xBB, 0x00, 0x51, 0x00, 0xBC, 0x00, 0x52, 0x00, 0xBD, 0x00 - .byte 0x53, 0x00, 0xBE, 0x00, 0x54, 0x00, 0xBF, 0x00, 0x55, 0x00, 0xC0, 0x00, 0x56, 0x00, 0xC1, 0x00 - .byte 0x57, 0x00, 0xC2, 0x00, 0x58, 0x00, 0xC3, 0x00, 0x59, 0x00, 0xC4, 0x00, 0x5A, 0x00, 0xC5, 0x00 - .byte 0x61, 0x00, 0xC6, 0x00, 0x62, 0x00, 0xC7, 0x00, 0x63, 0x00, 0xC8, 0x00, 0x64, 0x00, 0xC9, 0x00 - .byte 0x65, 0x00, 0xCA, 0x00, 0x66, 0x00, 0xCB, 0x00, 0x67, 0x00, 0xCC, 0x00, 0x68, 0x00, 0xCD, 0x00 - .byte 0x69, 0x00, 0xCE, 0x00, 0x6A, 0x00, 0xCF, 0x00, 0x6B, 0x00, 0xD0, 0x00, 0x6C, 0x00, 0xD1, 0x00 - .byte 0x6D, 0x00, 0xD2, 0x00, 0x6E, 0x00, 0xD3, 0x00, 0x6F, 0x00, 0xD4, 0x00, 0x70, 0x00, 0xD5, 0x00 - .byte 0x71, 0x00, 0xD6, 0x00, 0x72, 0x00, 0xD7, 0x00, 0x73, 0x00, 0xD8, 0x00, 0x74, 0x00, 0xD9, 0x00 - .byte 0x75, 0x00, 0xDA, 0x00, 0x76, 0x00, 0xDB, 0x00, 0x77, 0x00, 0xDC, 0x00, 0x78, 0x00, 0xDD, 0x00 - .byte 0x79, 0x00, 0xDE, 0x00, 0x7A, 0x00, 0xDF, 0x00, 0x81, 0x00, 0x02, 0x00, 0x82, 0x00, 0x03, 0x00 - .byte 0x83, 0x00, 0x04, 0x00, 0x84, 0x00, 0x05, 0x00, 0x85, 0x00, 0x06, 0x00, 0x86, 0x00, 0x07, 0x00 - .byte 0x87, 0x00, 0x08, 0x00, 0x88, 0x00, 0x09, 0x00, 0x89, 0x00, 0x0A, 0x00, 0x8A, 0x00, 0x0B, 0x00 - .byte 0x8B, 0x00, 0x0C, 0x00, 0x8C, 0x00, 0x0D, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x8E, 0x00, 0x0F, 0x00 - .byte 0x8F, 0x00, 0x10, 0x00, 0x90, 0x00, 0x11, 0x00, 0x91, 0x00, 0x12, 0x00, 0x92, 0x00, 0x13, 0x00 - .byte 0x93, 0x00, 0x14, 0x00, 0x94, 0x00, 0x15, 0x00, 0x95, 0x00, 0x16, 0x00, 0x96, 0x00, 0x17, 0x00 - .byte 0x97, 0x00, 0x18, 0x00, 0x98, 0x00, 0x19, 0x00, 0x99, 0x00, 0x1A, 0x00, 0x9A, 0x00, 0x1B, 0x00 - .byte 0x9B, 0x00, 0x1C, 0x00, 0x9C, 0x00, 0x1D, 0x00, 0x9D, 0x00, 0x1E, 0x00, 0x9E, 0x00, 0x1F, 0x00 - .byte 0x9F, 0x00, 0x20, 0x00, 0xA0, 0x00, 0x21, 0x00, 0xA1, 0x00, 0x22, 0x00, 0xA2, 0x00, 0x23, 0x00 - .byte 0xA3, 0x00, 0x24, 0x00, 0xA4, 0x00, 0x25, 0x00, 0xA5, 0x00, 0x26, 0x00, 0xA6, 0x00, 0x27, 0x00 - .byte 0xA7, 0x00, 0x28, 0x00, 0xA8, 0x00, 0x29, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0xAA, 0x00, 0x2B, 0x00 - .byte 0xAB, 0x00, 0x2C, 0x00, 0xAC, 0x00, 0x2D, 0x00, 0xAD, 0x00, 0x2E, 0x00, 0xAE, 0x00, 0x2F, 0x00 - .byte 0xAF, 0x00, 0x30, 0x00, 0xB0, 0x00, 0x31, 0x00, 0xB1, 0x00, 0x32, 0x00, 0xB2, 0x00, 0x33, 0x00 - .byte 0xB3, 0x00, 0x34, 0x00, 0xB4, 0x00, 0x35, 0x00, 0xB5, 0x00, 0x36, 0x00, 0xB6, 0x00, 0x37, 0x00 - .byte 0xB7, 0x00, 0x38, 0x00, 0xB8, 0x00, 0x39, 0x00, 0xB9, 0x00, 0x3A, 0x00, 0xBA, 0x00, 0x3B, 0x00 - .byte 0xBB, 0x00, 0x3C, 0x00, 0xBC, 0x00, 0x3D, 0x00, 0xBD, 0x00, 0x3E, 0x00, 0xBE, 0x00, 0x3F, 0x00 - .byte 0xBF, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x41, 0x00, 0xC1, 0x00, 0x42, 0x00, 0xC2, 0x00, 0x43, 0x00 - .byte 0xC3, 0x00, 0x44, 0x00, 0xC4, 0x00, 0x45, 0x00, 0xC5, 0x00, 0x46, 0x00, 0xC6, 0x00, 0x47, 0x00 - .byte 0xC7, 0x00, 0x48, 0x00, 0xC8, 0x00, 0x49, 0x00, 0xC9, 0x00, 0x4A, 0x00, 0xCA, 0x00, 0x4B, 0x00 - .byte 0xCB, 0x00, 0x4C, 0x00, 0xCC, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x4E, 0x00, 0xCF, 0x00, 0x4F, 0x00 - .byte 0xD2, 0x00, 0x50, 0x00, 0xD3, 0x00, 0x51, 0x00, 0xE1, 0x00, 0x52, 0x00, 0xE2, 0x00, 0x53, 0x00 - .byte 0xE3, 0x00, 0x54, 0x00, 0xE4, 0x00, 0x55, 0x00, 0xE5, 0x00, 0x56, 0x00, 0xE6, 0x00, 0x57, 0x00 - .byte 0xE7, 0x00, 0x58, 0x00, 0xE8, 0x00, 0x59, 0x00, 0xE9, 0x00, 0x5A, 0x00, 0xEA, 0x00, 0x5B, 0x00 - .byte 0xEB, 0x00, 0x5C, 0x00, 0xEC, 0x00, 0x5D, 0x00, 0xED, 0x00, 0x5E, 0x00, 0xEE, 0x00, 0x5F, 0x00 - .byte 0xEF, 0x00, 0x60, 0x00, 0xF0, 0x00, 0x61, 0x00, 0xF1, 0x00, 0x62, 0x00, 0xF2, 0x00, 0x63, 0x00 - .byte 0xF3, 0x00, 0x64, 0x00, 0xF4, 0x00, 0x65, 0x00, 0xF5, 0x00, 0x66, 0x00, 0xF6, 0x00, 0x67, 0x00 - .byte 0xF7, 0x00, 0x68, 0x00, 0xF8, 0x00, 0x69, 0x00, 0xF9, 0x00, 0x6A, 0x00, 0xFA, 0x00, 0x6B, 0x00 - .byte 0xFB, 0x00, 0x6C, 0x00, 0xFC, 0x00, 0x6D, 0x00, 0xFD, 0x00, 0x6E, 0x00, 0xFE, 0x00, 0x6F, 0x00 - .byte 0xFF, 0x00, 0x70, 0x00, 0x00, 0x01, 0x71, 0x00, 0x01, 0x01, 0x72, 0x00, 0x02, 0x01, 0x73, 0x00 - .byte 0x03, 0x01, 0x74, 0x00, 0x04, 0x01, 0x75, 0x00, 0x05, 0x01, 0x76, 0x00, 0x06, 0x01, 0x77, 0x00 - .byte 0x07, 0x01, 0x78, 0x00, 0x08, 0x01, 0x79, 0x00, 0x09, 0x01, 0x7A, 0x00, 0x0A, 0x01, 0x7B, 0x00 - .byte 0x0B, 0x01, 0x7C, 0x00, 0x0C, 0x01, 0x7D, 0x00, 0x0D, 0x01, 0x7E, 0x00, 0x0E, 0x01, 0x7F, 0x00 - .byte 0x0F, 0x01, 0x80, 0x00, 0x10, 0x01, 0x81, 0x00, 0x11, 0x01, 0x82, 0x00, 0x12, 0x01, 0x83, 0x00 - .byte 0x13, 0x01, 0x84, 0x00, 0x14, 0x01, 0x85, 0x00, 0x15, 0x01, 0x86, 0x00, 0x16, 0x01, 0x87, 0x00 - .byte 0x17, 0x01, 0x88, 0x00, 0x18, 0x01, 0x89, 0x00, 0x19, 0x01, 0x8A, 0x00, 0x1A, 0x01, 0x8B, 0x00 - .byte 0x1B, 0x01, 0x8C, 0x00, 0x1C, 0x01, 0x8D, 0x00, 0x1D, 0x01, 0x8E, 0x00, 0x1E, 0x01, 0x8F, 0x00 - .byte 0x1F, 0x01, 0x90, 0x00, 0x20, 0x01, 0x91, 0x00, 0x21, 0x01, 0x92, 0x00, 0x22, 0x01, 0x93, 0x00 - .byte 0x23, 0x01, 0x94, 0x00, 0x24, 0x01, 0x95, 0x00, 0x25, 0x01, 0x96, 0x00, 0x26, 0x01, 0x97, 0x00 - .byte 0x27, 0x01, 0x98, 0x00, 0x28, 0x01, 0x99, 0x00, 0x29, 0x01, 0x9A, 0x00, 0x2A, 0x01, 0x9B, 0x00 - .byte 0x2B, 0x01, 0x9C, 0x00, 0x2C, 0x01, 0x9D, 0x00, 0x2D, 0x01, 0x9E, 0x00, 0x2F, 0x01, 0x9F, 0x00 - .byte 0x32, 0x01, 0xA0, 0x00, 0x33, 0x01, 0xA1, 0x00, 0x40, 0x01, 0xEA, 0x00, 0x41, 0x01, 0xEB, 0x00 - .byte 0x42, 0x01, 0xE8, 0x00, 0x43, 0x01, 0xE9, 0x00, 0x46, 0x01, 0xE6, 0x00, 0x47, 0x01, 0xE5, 0x00 - .byte 0x48, 0x01, 0xEE, 0x00, 0x49, 0x01, 0xEF, 0x00, 0x4A, 0x01, 0xE4, 0x00, 0x4B, 0x01, 0x12, 0x01 - .byte 0x4D, 0x01, 0x1C, 0x01, 0x4E, 0x01, 0x1E, 0x01, 0x4F, 0x01, 0x1D, 0x01, 0x50, 0x01, 0x1B, 0x01 - .byte 0x7C, 0x01, 0x9F, 0x01, 0x7D, 0x01, 0xA0, 0x01, 0x80, 0x01, 0x5F, 0x01, 0x81, 0x01, 0x60, 0x01 - .byte 0x82, 0x01, 0x61, 0x01, 0x84, 0x01, 0x63, 0x01, 0x87, 0x01, 0x66, 0x01, 0x89, 0x01, 0x68, 0x01 - .byte 0x8A, 0x01, 0x69, 0x01, 0x8B, 0x01, 0x6A, 0x01, 0x8C, 0x01, 0x6B, 0x01, 0x8D, 0x01, 0x6C, 0x01 - .byte 0x8E, 0x01, 0x6D, 0x01, 0x8F, 0x01, 0x6E, 0x01, 0x93, 0x01, 0x72, 0x01, 0x94, 0x01, 0x73, 0x01 - .byte 0x96, 0x01, 0x75, 0x01, 0x9A, 0x01, 0x79, 0x01, 0x9B, 0x01, 0x7A, 0x01, 0x9C, 0x01, 0x7B, 0x01 - .byte 0x9F, 0x01, 0x7E, 0x01, 0xA0, 0x01, 0x7F, 0x01, 0xA1, 0x01, 0x80, 0x01, 0xA2, 0x01, 0x81, 0x01 - .byte 0xA4, 0x01, 0x83, 0x01, 0xA7, 0x01, 0x86, 0x01, 0xA9, 0x01, 0x88, 0x01, 0xAA, 0x01, 0x89, 0x01 - .byte 0xAB, 0x01, 0x8A, 0x01, 0xAC, 0x01, 0x8B, 0x01, 0xAD, 0x01, 0x8C, 0x01, 0xAE, 0x01, 0x8D, 0x01 - .byte 0xAF, 0x01, 0x8E, 0x01, 0xB3, 0x01, 0x92, 0x01, 0xB4, 0x01, 0x93, 0x01, 0xB6, 0x01, 0x95, 0x01 - .byte 0xBA, 0x01, 0x99, 0x01, 0xBB, 0x01, 0x9A, 0x01, 0xBC, 0x01, 0x9B, 0x01 - - .global MOD83_0223AD6C + .byte 0x00, 0x00, 0xFF, 0xFF, 0x21, 0x00, 0xE1, 0x00, 0x23, 0x00, 0xC0, 0x01, 0x25, 0x00, 0xD2, 0x01 + .byte 0x27, 0x00, 0xEA, 0x00, 0x28, 0x00, 0xEB, 0x00, 0x29, 0x00, 0xBF, 0x01, 0x2A, 0x00, 0xBD, 0x01 + .byte 0x2B, 0x00, 0xAD, 0x01, 0x2C, 0x00, 0xBE, 0x01, 0x2E, 0x00, 0xB1, 0x01, 0x30, 0x00, 0xA2, 0x00 + .byte 0x31, 0x00, 0xA3, 0x00, 0x32, 0x00, 0xA4, 0x00, 0x33, 0x00, 0xA5, 0x00, 0x34, 0x00, 0xA6, 0x00 + .byte 0x35, 0x00, 0xA7, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x37, 0x00, 0xA9, 0x00, 0x38, 0x00, 0xAA, 0x00 + .byte 0x39, 0x00, 0xAB, 0x00, 0x3A, 0x00, 0xC4, 0x01, 0x3B, 0x00, 0xC5, 0x01, 0x3C, 0x00, 0xEC, 0x00 + .byte 0x3E, 0x00, 0xED, 0x00, 0x3F, 0x00, 0xAC, 0x01, 0x41, 0x00, 0xAC, 0x00, 0x42, 0x00, 0xAD, 0x00 + .byte 0x43, 0x00, 0xAE, 0x00, 0x44, 0x00, 0xAF, 0x00, 0x45, 0x00, 0xB0, 0x00, 0x46, 0x00, 0xB1, 0x00 + .byte 0x47, 0x00, 0xB2, 0x00, 0x48, 0x00, 0xB3, 0x00, 0x49, 0x00, 0xB4, 0x00, 0x4A, 0x00, 0xB5, 0x00 + .byte 0x4B, 0x00, 0xB6, 0x00, 0x4C, 0x00, 0xB7, 0x00, 0x4D, 0x00, 0xB8, 0x00, 0x4E, 0x00, 0xB9, 0x00 + .byte 0x4F, 0x00, 0xBA, 0x00, 0x50, 0x00, 0xBB, 0x00, 0x51, 0x00, 0xBC, 0x00, 0x52, 0x00, 0xBD, 0x00 + .byte 0x53, 0x00, 0xBE, 0x00, 0x54, 0x00, 0xBF, 0x00, 0x55, 0x00, 0xC0, 0x00, 0x56, 0x00, 0xC1, 0x00 + .byte 0x57, 0x00, 0xC2, 0x00, 0x58, 0x00, 0xC3, 0x00, 0x59, 0x00, 0xC4, 0x00, 0x5A, 0x00, 0xC5, 0x00 + .byte 0x61, 0x00, 0xC6, 0x00, 0x62, 0x00, 0xC7, 0x00, 0x63, 0x00, 0xC8, 0x00, 0x64, 0x00, 0xC9, 0x00 + .byte 0x65, 0x00, 0xCA, 0x00, 0x66, 0x00, 0xCB, 0x00, 0x67, 0x00, 0xCC, 0x00, 0x68, 0x00, 0xCD, 0x00 + .byte 0x69, 0x00, 0xCE, 0x00, 0x6A, 0x00, 0xCF, 0x00, 0x6B, 0x00, 0xD0, 0x00, 0x6C, 0x00, 0xD1, 0x00 + .byte 0x6D, 0x00, 0xD2, 0x00, 0x6E, 0x00, 0xD3, 0x00, 0x6F, 0x00, 0xD4, 0x00, 0x70, 0x00, 0xD5, 0x00 + .byte 0x71, 0x00, 0xD6, 0x00, 0x72, 0x00, 0xD7, 0x00, 0x73, 0x00, 0xD8, 0x00, 0x74, 0x00, 0xD9, 0x00 + .byte 0x75, 0x00, 0xDA, 0x00, 0x76, 0x00, 0xDB, 0x00, 0x77, 0x00, 0xDC, 0x00, 0x78, 0x00, 0xDD, 0x00 + .byte 0x79, 0x00, 0xDE, 0x00, 0x7A, 0x00, 0xDF, 0x00, 0x81, 0x00, 0x02, 0x00, 0x82, 0x00, 0x03, 0x00 + .byte 0x83, 0x00, 0x04, 0x00, 0x84, 0x00, 0x05, 0x00, 0x85, 0x00, 0x06, 0x00, 0x86, 0x00, 0x07, 0x00 + .byte 0x87, 0x00, 0x08, 0x00, 0x88, 0x00, 0x09, 0x00, 0x89, 0x00, 0x0A, 0x00, 0x8A, 0x00, 0x0B, 0x00 + .byte 0x8B, 0x00, 0x0C, 0x00, 0x8C, 0x00, 0x0D, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x8E, 0x00, 0x0F, 0x00 + .byte 0x8F, 0x00, 0x10, 0x00, 0x90, 0x00, 0x11, 0x00, 0x91, 0x00, 0x12, 0x00, 0x92, 0x00, 0x13, 0x00 + .byte 0x93, 0x00, 0x14, 0x00, 0x94, 0x00, 0x15, 0x00, 0x95, 0x00, 0x16, 0x00, 0x96, 0x00, 0x17, 0x00 + .byte 0x97, 0x00, 0x18, 0x00, 0x98, 0x00, 0x19, 0x00, 0x99, 0x00, 0x1A, 0x00, 0x9A, 0x00, 0x1B, 0x00 + .byte 0x9B, 0x00, 0x1C, 0x00, 0x9C, 0x00, 0x1D, 0x00, 0x9D, 0x00, 0x1E, 0x00, 0x9E, 0x00, 0x1F, 0x00 + .byte 0x9F, 0x00, 0x20, 0x00, 0xA0, 0x00, 0x21, 0x00, 0xA1, 0x00, 0x22, 0x00, 0xA2, 0x00, 0x23, 0x00 + .byte 0xA3, 0x00, 0x24, 0x00, 0xA4, 0x00, 0x25, 0x00, 0xA5, 0x00, 0x26, 0x00, 0xA6, 0x00, 0x27, 0x00 + .byte 0xA7, 0x00, 0x28, 0x00, 0xA8, 0x00, 0x29, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0xAA, 0x00, 0x2B, 0x00 + .byte 0xAB, 0x00, 0x2C, 0x00, 0xAC, 0x00, 0x2D, 0x00, 0xAD, 0x00, 0x2E, 0x00, 0xAE, 0x00, 0x2F, 0x00 + .byte 0xAF, 0x00, 0x30, 0x00, 0xB0, 0x00, 0x31, 0x00, 0xB1, 0x00, 0x32, 0x00, 0xB2, 0x00, 0x33, 0x00 + .byte 0xB3, 0x00, 0x34, 0x00, 0xB4, 0x00, 0x35, 0x00, 0xB5, 0x00, 0x36, 0x00, 0xB6, 0x00, 0x37, 0x00 + .byte 0xB7, 0x00, 0x38, 0x00, 0xB8, 0x00, 0x39, 0x00, 0xB9, 0x00, 0x3A, 0x00, 0xBA, 0x00, 0x3B, 0x00 + .byte 0xBB, 0x00, 0x3C, 0x00, 0xBC, 0x00, 0x3D, 0x00, 0xBD, 0x00, 0x3E, 0x00, 0xBE, 0x00, 0x3F, 0x00 + .byte 0xBF, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x41, 0x00, 0xC1, 0x00, 0x42, 0x00, 0xC2, 0x00, 0x43, 0x00 + .byte 0xC3, 0x00, 0x44, 0x00, 0xC4, 0x00, 0x45, 0x00, 0xC5, 0x00, 0x46, 0x00, 0xC6, 0x00, 0x47, 0x00 + .byte 0xC7, 0x00, 0x48, 0x00, 0xC8, 0x00, 0x49, 0x00, 0xC9, 0x00, 0x4A, 0x00, 0xCA, 0x00, 0x4B, 0x00 + .byte 0xCB, 0x00, 0x4C, 0x00, 0xCC, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x4E, 0x00, 0xCF, 0x00, 0x4F, 0x00 + .byte 0xD2, 0x00, 0x50, 0x00, 0xD3, 0x00, 0x51, 0x00, 0xE1, 0x00, 0x52, 0x00, 0xE2, 0x00, 0x53, 0x00 + .byte 0xE3, 0x00, 0x54, 0x00, 0xE4, 0x00, 0x55, 0x00, 0xE5, 0x00, 0x56, 0x00, 0xE6, 0x00, 0x57, 0x00 + .byte 0xE7, 0x00, 0x58, 0x00, 0xE8, 0x00, 0x59, 0x00, 0xE9, 0x00, 0x5A, 0x00, 0xEA, 0x00, 0x5B, 0x00 + .byte 0xEB, 0x00, 0x5C, 0x00, 0xEC, 0x00, 0x5D, 0x00, 0xED, 0x00, 0x5E, 0x00, 0xEE, 0x00, 0x5F, 0x00 + .byte 0xEF, 0x00, 0x60, 0x00, 0xF0, 0x00, 0x61, 0x00, 0xF1, 0x00, 0x62, 0x00, 0xF2, 0x00, 0x63, 0x00 + .byte 0xF3, 0x00, 0x64, 0x00, 0xF4, 0x00, 0x65, 0x00, 0xF5, 0x00, 0x66, 0x00, 0xF6, 0x00, 0x67, 0x00 + .byte 0xF7, 0x00, 0x68, 0x00, 0xF8, 0x00, 0x69, 0x00, 0xF9, 0x00, 0x6A, 0x00, 0xFA, 0x00, 0x6B, 0x00 + .byte 0xFB, 0x00, 0x6C, 0x00, 0xFC, 0x00, 0x6D, 0x00, 0xFD, 0x00, 0x6E, 0x00, 0xFE, 0x00, 0x6F, 0x00 + .byte 0xFF, 0x00, 0x70, 0x00, 0x00, 0x01, 0x71, 0x00, 0x01, 0x01, 0x72, 0x00, 0x02, 0x01, 0x73, 0x00 + .byte 0x03, 0x01, 0x74, 0x00, 0x04, 0x01, 0x75, 0x00, 0x05, 0x01, 0x76, 0x00, 0x06, 0x01, 0x77, 0x00 + .byte 0x07, 0x01, 0x78, 0x00, 0x08, 0x01, 0x79, 0x00, 0x09, 0x01, 0x7A, 0x00, 0x0A, 0x01, 0x7B, 0x00 + .byte 0x0B, 0x01, 0x7C, 0x00, 0x0C, 0x01, 0x7D, 0x00, 0x0D, 0x01, 0x7E, 0x00, 0x0E, 0x01, 0x7F, 0x00 + .byte 0x0F, 0x01, 0x80, 0x00, 0x10, 0x01, 0x81, 0x00, 0x11, 0x01, 0x82, 0x00, 0x12, 0x01, 0x83, 0x00 + .byte 0x13, 0x01, 0x84, 0x00, 0x14, 0x01, 0x85, 0x00, 0x15, 0x01, 0x86, 0x00, 0x16, 0x01, 0x87, 0x00 + .byte 0x17, 0x01, 0x88, 0x00, 0x18, 0x01, 0x89, 0x00, 0x19, 0x01, 0x8A, 0x00, 0x1A, 0x01, 0x8B, 0x00 + .byte 0x1B, 0x01, 0x8C, 0x00, 0x1C, 0x01, 0x8D, 0x00, 0x1D, 0x01, 0x8E, 0x00, 0x1E, 0x01, 0x8F, 0x00 + .byte 0x1F, 0x01, 0x90, 0x00, 0x20, 0x01, 0x91, 0x00, 0x21, 0x01, 0x92, 0x00, 0x22, 0x01, 0x93, 0x00 + .byte 0x23, 0x01, 0x94, 0x00, 0x24, 0x01, 0x95, 0x00, 0x25, 0x01, 0x96, 0x00, 0x26, 0x01, 0x97, 0x00 + .byte 0x27, 0x01, 0x98, 0x00, 0x28, 0x01, 0x99, 0x00, 0x29, 0x01, 0x9A, 0x00, 0x2A, 0x01, 0x9B, 0x00 + .byte 0x2B, 0x01, 0x9C, 0x00, 0x2C, 0x01, 0x9D, 0x00, 0x2D, 0x01, 0x9E, 0x00, 0x2F, 0x01, 0x9F, 0x00 + .byte 0x32, 0x01, 0xA0, 0x00, 0x33, 0x01, 0xA1, 0x00, 0x40, 0x01, 0xEA, 0x00, 0x41, 0x01, 0xEB, 0x00 + .byte 0x42, 0x01, 0xE8, 0x00, 0x43, 0x01, 0xE9, 0x00, 0x46, 0x01, 0xE6, 0x00, 0x47, 0x01, 0xE5, 0x00 + .byte 0x48, 0x01, 0xEE, 0x00, 0x49, 0x01, 0xEF, 0x00, 0x4A, 0x01, 0xE4, 0x00, 0x4B, 0x01, 0x12, 0x01 + .byte 0x4D, 0x01, 0x1C, 0x01, 0x4E, 0x01, 0x1E, 0x01, 0x4F, 0x01, 0x1D, 0x01, 0x50, 0x01, 0x1B, 0x01 + .byte 0x7C, 0x01, 0x9F, 0x01, 0x7D, 0x01, 0xA0, 0x01, 0x80, 0x01, 0x5F, 0x01, 0x81, 0x01, 0x60, 0x01 + .byte 0x82, 0x01, 0x61, 0x01, 0x84, 0x01, 0x63, 0x01, 0x87, 0x01, 0x66, 0x01, 0x89, 0x01, 0x68, 0x01 + .byte 0x8A, 0x01, 0x69, 0x01, 0x8B, 0x01, 0x6A, 0x01, 0x8C, 0x01, 0x6B, 0x01, 0x8D, 0x01, 0x6C, 0x01 + .byte 0x8E, 0x01, 0x6D, 0x01, 0x8F, 0x01, 0x6E, 0x01, 0x93, 0x01, 0x72, 0x01, 0x94, 0x01, 0x73, 0x01 + .byte 0x96, 0x01, 0x75, 0x01, 0x9A, 0x01, 0x79, 0x01, 0x9B, 0x01, 0x7A, 0x01, 0x9C, 0x01, 0x7B, 0x01 + .byte 0x9F, 0x01, 0x7E, 0x01, 0xA0, 0x01, 0x7F, 0x01, 0xA1, 0x01, 0x80, 0x01, 0xA2, 0x01, 0x81, 0x01 + .byte 0xA4, 0x01, 0x83, 0x01, 0xA7, 0x01, 0x86, 0x01, 0xA9, 0x01, 0x88, 0x01, 0xAA, 0x01, 0x89, 0x01 + .byte 0xAB, 0x01, 0x8A, 0x01, 0xAC, 0x01, 0x8B, 0x01, 0xAD, 0x01, 0x8C, 0x01, 0xAE, 0x01, 0x8D, 0x01 + .byte 0xAF, 0x01, 0x8E, 0x01, 0xB3, 0x01, 0x92, 0x01, 0xB4, 0x01, 0x93, 0x01, 0xB6, 0x01, 0x95, 0x01 + .byte 0xBA, 0x01, 0x99, 0x01, 0xBB, 0x01, 0x9A, 0x01, 0xBC, 0x01, 0x9B, 0x01 + + .global MOD83_0223AD6C MOD83_0223AD6C: ; 0x0223AD6C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AD98 + .global MOD83_0223AD98 MOD83_0223AD98: ; 0x0223AD98 - .word 0x12, MOD83_022300AC - .word 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_022300AC + .word 0x13, MOD83_0222FDE8 - .global MOD83_0223ADA8 + .global MOD83_0223ADA8 MOD83_0223ADA8: ; 0x0223ADA8 - .word 0x12, MOD83_02230010 - .word 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_02230010 + .word 0x13, MOD83_0222FDE8 - .global MOD83_0223ADB8 + .global MOD83_0223ADB8 MOD83_0223ADB8: ; 0x0223ADB8 - .word 0x12, MOD83_02230048 - .word 0x13, MOD83_02230084 + .word 0x12, MOD83_02230048 + .word 0x13, MOD83_02230084 - .global MOD83_0223ADC8 + .global MOD83_0223ADC8 MOD83_0223ADC8: ; 0x0223ADC8 - .word 0x12, MOD83_0222FB5C, 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_0222FB5C, 0x13, MOD83_0222FDE8 - .global MOD83_0223ADD8 + .global MOD83_0223ADD8 MOD83_0223ADD8: ; 0x0223ADD8 - .word 0x12, MOD83_0222FBBC - .word 0x13, MOD83_0222FFD8 - .word 0x0C, MOD83_02230118 - .word 0x0D, MOD83_0223019C - .word 0x0E, MOD83_022301D4 + .word 0x12, MOD83_0222FBBC + .word 0x13, MOD83_0222FFD8 + .word 0x0C, MOD83_02230118 + .word 0x0D, MOD83_0223019C + .word 0x0E, MOD83_022301D4 - .global MOD83_0223AE00 + .global MOD83_0223AE00 MOD83_0223AE00: ; 0x0223AE00 - .word 0x00, MOD83_02239414, 0x00, 0x00 - .byte 0x00, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 + .word 0x00, MOD83_02239414, 0x00, 0x00 + .byte 0x00, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AE20 + .global MOD83_0223AE20 MOD83_0223AE20: ; 0x0223AE20 - .word 0x0F, MOD83_0222FE24 - .word 0x14, MOD83_0222FF10 - .word 0x10, MOD83_0222FEA0 - .word 0x11, MOD83_022300F8 + .word 0x0F, MOD83_0222FE24 + .word 0x14, MOD83_0222FF10 + .word 0x10, MOD83_0222FEA0 + .word 0x11, MOD83_022300F8 - .global MOD83_0223AE40 + .global MOD83_0223AE40 MOD83_0223AE40: ; 0x0223AE40 - .word 0x40, MOD83_02231930 - .word 0x41, MOD83_022319D0 + .word 0x40, MOD83_02231930 + .word 0x41, MOD83_022319D0 - .global MOD83_0223AE50 + .global MOD83_0223AE50 MOD83_0223AE50: ; 0x0223AE50 - .byte 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00 - .word 0x41, MOD83_022319D0 + .byte 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00 + .word 0x41, MOD83_022319D0 - .global MOD83_0223AE60 + .global MOD83_0223AE60 MOD83_0223AE60: ; 0x0223AE60 - .byte 0x40, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .word 0x41, MOD83_022319D0 - .byte 0x2A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .word 0x2B, MOD83_022318B0 - .word 0x2C, MOD83_022318E0 - .byte 0x2D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x40, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .word 0x41, MOD83_022319D0 + .byte 0x2A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .word 0x2B, MOD83_022318B0 + .word 0x2C, MOD83_022318E0 + .byte 0x2D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .global MOD83_0223AE90 + .global MOD83_0223AE90 MOD83_0223AE90: ; 0x0223AE90 - .word 0x00, MOD83_02239414 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 + .word 0x00, MOD83_02239414 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AEB0 + .global MOD83_0223AEB0 MOD83_0223AEB0: ; 0x0223AEB0 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x28, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0xA1, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x31, 0x00, 0x00, 0x00, 0x1D, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x85, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x29, 0x00, 0x00, 0x00, 0xD9, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x00 - .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x59, 0x1C, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x61, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x34, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x37, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x39, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x3A, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x38, 0x00, 0x00, 0x00, 0x9D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00 - .byte 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x3B, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x3C, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD83_0223B240 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x28, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0xA1, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x31, 0x00, 0x00, 0x00, 0x1D, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x85, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x29, 0x00, 0x00, 0x00, 0xD9, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x00 + .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x59, 0x1C, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x61, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x34, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x37, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x39, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x3A, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x38, 0x00, 0x00, 0x00, 0x9D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00 + .byte 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x3B, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x3C, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD83_0223B240 MOD83_0223B240: ; 0x0223B240 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00 - .byte 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00 + .byte 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223B280 + .global MOD83_0223B280 MOD83_0223B280: ; 0x0223B280 - .byte 0x00, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00 + .byte 0x00, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00 - .global MOD83_0223B288 + .global MOD83_0223B288 MOD83_0223B288: ; 0x0223B288 - .word 0x00 - .ifdef DIAMOND - .word 0x14 - .word 0x12 - .word 0x16 - .word 0x18 - .word 0x1A - .else - .word 0x15 - .word 0x13 - .word 0x17 - .word 0x19 - .word 0x1B - .endif - - .global MOD83_0223B2A0 + .word 0x00 + .ifdef DIAMOND + .word 0x14 + .word 0x12 + .word 0x16 + .word 0x18 + .word 0x1A + .else + .word 0x15 + .word 0x13 + .word 0x17 + .word 0x19 + .word 0x1B + .endif + + .global MOD83_0223B2A0 MOD83_0223B2A0: ; 0x0223B2A0 - .word 0x00000000, 0x00000001, 0x00000000, 0x00000002 - .word 0x00000003, 0x00000004 + .word 0x00000000, 0x00000001, 0x00000000, 0x00000002 + .word 0x00000003, 0x00000004 - .global MOD83_0223B2B8 + .global MOD83_0223B2B8 MOD83_0223B2B8: ; 0x0223B2B8 - .word 0x0000000F, 0x00000013, 0x00000039, 0x00000046 - .word 0x00000094, 0x000000F9, 0x0000007F, 0x00000123 + .word 0x0000000F, 0x00000013, 0x00000039, 0x00000046 + .word 0x00000094, 0x000000F9, 0x0000007F, 0x00000123 - .global MOD83_0223B2D8 + .global MOD83_0223B2D8 MOD83_0223B2D8: ; 0x0223B2D8 - .word 0x00000000, 0x00000025, 0x0000001F, 0x00000020 - .word 0x00000020, 0x00000005, 0x00000007, 0x00000021 + .word 0x00000000, 0x00000025, 0x0000001F, 0x00000020 + .word 0x00000020, 0x00000005, 0x00000007, 0x00000021 - .global MOD83_InvalidItemIds + .global MOD83_InvalidItemIds MOD83_InvalidItemIds: ; 0x0223B2F8 - .short 0x0005 ; RS_ITEM_SAFARI_BALL - .short 0x0034 ; RS_ITEM_034 - .short 0x0035 ; RS_ITEM_035 - .short 0x0036 ; RS_ITEM_036 - .short 0x0037 ; RS_ITEM_037 - .short 0x0038 ; RS_ITEM_038 - .short 0x0039 ; RS_ITEM_039 - .short 0x003A ; RS_ITEM_03A - .short 0x003B ; RS_ITEM_03B - .short 0x003C ; RS_ITEM_03C - .short 0x003D ; RS_ITEM_03D - .short 0x003E ; RS_ITEM_03E - .short 0x0048 ; RS_ITEM_048 - .short 0x0052 ; RS_ITEM_052 - .short 0x0057 ; RS_ITEM_057 - .short 0x0058 ; RS_ITEM_058 - .short 0x0059 ; RS_ITEM_059 - .short 0x005A ; RS_ITEM_05A - .short 0x005B ; RS_ITEM_05B - .short 0x005C ; RS_ITEM_05C - .short 0x0063 ; RS_ITEM_063 - .short 0x0064 ; RS_ITEM_064 - .short 0x0065 ; RS_ITEM_065 - .short 0x0066 ; RS_ITEM_066 - .short 0x0069 ; RS_ITEM_069 - .short 0x0070 ; RS_ITEM_070 - .short 0x0071 ; RS_ITEM_071 - .short 0x0072 ; RS_ITEM_072 - .short 0x0073 ; RS_ITEM_073 - .short 0x0074 ; RS_ITEM_074 - .short 0x0075 ; RS_ITEM_075 - .short 0x0076 ; RS_ITEM_076 - .short 0x0077 ; RS_ITEM_077 - .short 0x0078 ; RS_ITEM_078 - .short 0x0079 ; RS_ITEM_ORANGE_MAIL - .short 0x007A ; RS_ITEM_HARBOR_MAIL - .short 0x007B ; RS_ITEM_GLITTER_MAIL - .short 0x007C ; RS_ITEM_MECH_MAIL - .short 0x007D ; RS_ITEM_WOOD_MAIL - .short 0x007E ; RS_ITEM_WAVE_MAIL - .short 0x007F ; RS_ITEM_BEAD_MAIL - .short 0x0080 ; RS_ITEM_SHADOW_MAIL - .short 0x0081 ; RS_ITEM_TROPIC_MAIL - .short 0x0082 ; RS_ITEM_DREAM_MAIL - .short 0x0083 ; RS_ITEM_FAB_MAIL - .short 0x0084 ; RS_ITEM_RETRO_MAIL - .short 0x00B0 ; RS_ITEM_0B0 - .short 0x00B1 ; RS_ITEM_0B1 - .short 0x00B2 ; RS_ITEM_0B2 - .short 0x00E2 ; RS_ITEM_0E2 - .short 0x00E3 ; RS_ITEM_0E3 - .short 0x00E4 ; RS_ITEM_0E4 - .short 0x00E5 ; RS_ITEM_0E5 - .short 0x00E6 ; RS_ITEM_0E6 - .short 0x00E7 ; RS_ITEM_0E7 - .short 0x00E8 ; RS_ITEM_0E8 - .short 0x00E9 ; RS_ITEM_0E9 - .short 0x00EA ; RS_ITEM_0EA - .short 0x00EB ; RS_ITEM_0EB - .short 0x00EC ; RS_ITEM_0EC - .short 0x00ED ; RS_ITEM_0ED - .short 0x00EE ; RS_ITEM_0EE - .short 0x00EF ; RS_ITEM_0EF - .short 0x00F0 ; RS_ITEM_0F0 - .short 0x00F1 ; RS_ITEM_0F1 - .short 0x00F2 ; RS_ITEM_0F2 - .short 0x00F3 ; RS_ITEM_0F3 - .short 0x00F4 ; RS_ITEM_0F4 - .short 0x00F5 ; RS_ITEM_0F5 - .short 0x00F6 ; RS_ITEM_0F6 - .short 0x00F7 ; RS_ITEM_0F7 - .short 0x00F8 ; RS_ITEM_0F8 - .short 0x00F9 ; RS_ITEM_0F9 - .short 0x00FA ; RS_ITEM_0FA - .short 0x00FB ; RS_ITEM_0FB - .short 0x00FC ; RS_ITEM_0FC - .short 0x00FD ; RS_ITEM_0FD - .short 0x0103 ; RS_ITEM_MACH_BIKE - .short 0x0104 ; RS_ITEM_COIN_CASE - .short 0x0105 ; RS_ITEM_ITEMFINDER - .short 0x0106 ; RS_ITEM_OLD_ROD - .short 0x0107 ; RS_ITEM_GOOD_ROD - .short 0x0108 ; RS_ITEM_SUPER_ROD - .short 0x0109 ; RS_ITEM_SS_TICKET - .short 0x010A ; RS_ITEM_CONTEST_PASS - .short 0x010B ; RS_ITEM_10B - .short 0x010C ; RS_ITEM_WAILMER_PAIL - .short 0x010D ; RS_ITEM_DEVON_GOODS - .short 0x010E ; RS_ITEM_SOOT_SACK - .short 0x010F ; RS_ITEM_BASEMENT_KEY - .short 0x0110 ; RS_ITEM_ACRO_BIKE - .short 0x0111 ; RS_ITEM_POKEBLOCK_CASE - .short 0x0112 ; RS_ITEM_LETTER - .short 0x0113 ; RS_ITEM_EON_TICKET - .short 0x0114 ; RS_ITEM_RED_ORB - .short 0x0115 ; RS_ITEM_BLUE_ORB - .short 0x0116 ; RS_ITEM_SCANNER - .short 0x0117 ; RS_ITEM_GO_GOGGLES - .short 0x0118 ; RS_ITEM_METEORITE - .short 0x0119 ; RS_ITEM_ROOM_1_KEY - .short 0x011A ; RS_ITEM_ROOM_2_KEY - .short 0x011B ; RS_ITEM_ROOM_4_KEY - .short 0x011C ; RS_ITEM_ROOM_6_KEY - .short 0x011D ; RS_ITEM_STORAGE_KEY - .short 0x011E ; RS_ITEM_ROOT_FOSSIL - .short 0x011F ; RS_ITEM_CLAW_FOSSIL - .short 0x0120 ; RS_ITEM_DEVON_SCOPE - .short 0x0153 ; RS_ITEM_HM01 - .short 0x0154 ; RS_ITEM_HM02 - .short 0x0155 ; RS_ITEM_HM03 - .short 0x0156 ; RS_ITEM_HM04 - .short 0x0157 ; RS_ITEM_HM05 - .short 0x0158 ; RS_ITEM_HM06 - .short 0x0159 ; RS_ITEM_HM07 - .short 0x015A ; RS_ITEM_HM08 - .short 0x015B ; RS_ITEM_15B - .short 0x015C ; RS_ITEM_15C - .short 0x015D ; RS_ITEM_OAKS_PARCEL - .short 0x015E ; RS_ITEM_POKE_FLUTE - .short 0x015F ; RS_ITEM_SECRET_KEY - .short 0x0160 ; RS_ITEM_BIKE_VOUCHER - .short 0x0161 ; RS_ITEM_GOLD_TEETH - .short 0x0162 ; RS_ITEM_OLD_AMBER - .short 0x0163 ; RS_ITEM_CARD_KEY - .short 0x0164 ; RS_ITEM_LIFT_KEY - .short 0x0165 ; RS_ITEM_HELIX_FOSSIL - .short 0x0166 ; RS_ITEM_DOME_FOSSIL - .short 0x0167 ; RS_ITEM_SILPH_SCOPE - .short 0x0168 ; RS_ITEM_BICYCLE - .short 0x0169 ; RS_ITEM_TOWN_MAP - .short 0x016A ; RS_ITEM_VS_SEEKER - .short 0x016B ; RS_ITEM_FAME_CHECKER - .short 0x016C ; RS_ITEM_TM_CASE - .short 0x016D ; RS_ITEM_BERRY_POUCH - .short 0x016E ; RS_ITEM_TEACHY_TV - .short 0x016F ; RS_ITEM_TRI_PASS - .short 0x0170 ; RS_ITEM_RAINBOW_PASS - .short 0x0171 ; RS_ITEM_TEA - .short 0x0172 ; RS_ITEM_MYSTIC_TICKET - .short 0x0173 ; RS_ITEM_AURORA_TICKET - .short 0x0174 ; RS_ITEM_POWDER_JAR - .short 0x0175 ; RS_ITEM_RUBY - .short 0x0176 ; RS_ITEM_SAPPHIRE - .short 0x0177 ; RS_ITEM_MAGMA_EMBLEM - .short 0x0178 ; RS_ITEM_OLD_SEA_MAP - .short 0x0000 ; RS_ITEM_NONE - - .global MOD83_0223B41C + .short 0x0005 ; RS_ITEM_SAFARI_BALL + .short 0x0034 ; RS_ITEM_034 + .short 0x0035 ; RS_ITEM_035 + .short 0x0036 ; RS_ITEM_036 + .short 0x0037 ; RS_ITEM_037 + .short 0x0038 ; RS_ITEM_038 + .short 0x0039 ; RS_ITEM_039 + .short 0x003A ; RS_ITEM_03A + .short 0x003B ; RS_ITEM_03B + .short 0x003C ; RS_ITEM_03C + .short 0x003D ; RS_ITEM_03D + .short 0x003E ; RS_ITEM_03E + .short 0x0048 ; RS_ITEM_048 + .short 0x0052 ; RS_ITEM_052 + .short 0x0057 ; RS_ITEM_057 + .short 0x0058 ; RS_ITEM_058 + .short 0x0059 ; RS_ITEM_059 + .short 0x005A ; RS_ITEM_05A + .short 0x005B ; RS_ITEM_05B + .short 0x005C ; RS_ITEM_05C + .short 0x0063 ; RS_ITEM_063 + .short 0x0064 ; RS_ITEM_064 + .short 0x0065 ; RS_ITEM_065 + .short 0x0066 ; RS_ITEM_066 + .short 0x0069 ; RS_ITEM_069 + .short 0x0070 ; RS_ITEM_070 + .short 0x0071 ; RS_ITEM_071 + .short 0x0072 ; RS_ITEM_072 + .short 0x0073 ; RS_ITEM_073 + .short 0x0074 ; RS_ITEM_074 + .short 0x0075 ; RS_ITEM_075 + .short 0x0076 ; RS_ITEM_076 + .short 0x0077 ; RS_ITEM_077 + .short 0x0078 ; RS_ITEM_078 + .short 0x0079 ; RS_ITEM_ORANGE_MAIL + .short 0x007A ; RS_ITEM_HARBOR_MAIL + .short 0x007B ; RS_ITEM_GLITTER_MAIL + .short 0x007C ; RS_ITEM_MECH_MAIL + .short 0x007D ; RS_ITEM_WOOD_MAIL + .short 0x007E ; RS_ITEM_WAVE_MAIL + .short 0x007F ; RS_ITEM_BEAD_MAIL + .short 0x0080 ; RS_ITEM_SHADOW_MAIL + .short 0x0081 ; RS_ITEM_TROPIC_MAIL + .short 0x0082 ; RS_ITEM_DREAM_MAIL + .short 0x0083 ; RS_ITEM_FAB_MAIL + .short 0x0084 ; RS_ITEM_RETRO_MAIL + .short 0x00B0 ; RS_ITEM_0B0 + .short 0x00B1 ; RS_ITEM_0B1 + .short 0x00B2 ; RS_ITEM_0B2 + .short 0x00E2 ; RS_ITEM_0E2 + .short 0x00E3 ; RS_ITEM_0E3 + .short 0x00E4 ; RS_ITEM_0E4 + .short 0x00E5 ; RS_ITEM_0E5 + .short 0x00E6 ; RS_ITEM_0E6 + .short 0x00E7 ; RS_ITEM_0E7 + .short 0x00E8 ; RS_ITEM_0E8 + .short 0x00E9 ; RS_ITEM_0E9 + .short 0x00EA ; RS_ITEM_0EA + .short 0x00EB ; RS_ITEM_0EB + .short 0x00EC ; RS_ITEM_0EC + .short 0x00ED ; RS_ITEM_0ED + .short 0x00EE ; RS_ITEM_0EE + .short 0x00EF ; RS_ITEM_0EF + .short 0x00F0 ; RS_ITEM_0F0 + .short 0x00F1 ; RS_ITEM_0F1 + .short 0x00F2 ; RS_ITEM_0F2 + .short 0x00F3 ; RS_ITEM_0F3 + .short 0x00F4 ; RS_ITEM_0F4 + .short 0x00F5 ; RS_ITEM_0F5 + .short 0x00F6 ; RS_ITEM_0F6 + .short 0x00F7 ; RS_ITEM_0F7 + .short 0x00F8 ; RS_ITEM_0F8 + .short 0x00F9 ; RS_ITEM_0F9 + .short 0x00FA ; RS_ITEM_0FA + .short 0x00FB ; RS_ITEM_0FB + .short 0x00FC ; RS_ITEM_0FC + .short 0x00FD ; RS_ITEM_0FD + .short 0x0103 ; RS_ITEM_MACH_BIKE + .short 0x0104 ; RS_ITEM_COIN_CASE + .short 0x0105 ; RS_ITEM_ITEMFINDER + .short 0x0106 ; RS_ITEM_OLD_ROD + .short 0x0107 ; RS_ITEM_GOOD_ROD + .short 0x0108 ; RS_ITEM_SUPER_ROD + .short 0x0109 ; RS_ITEM_SS_TICKET + .short 0x010A ; RS_ITEM_CONTEST_PASS + .short 0x010B ; RS_ITEM_10B + .short 0x010C ; RS_ITEM_WAILMER_PAIL + .short 0x010D ; RS_ITEM_DEVON_GOODS + .short 0x010E ; RS_ITEM_SOOT_SACK + .short 0x010F ; RS_ITEM_BASEMENT_KEY + .short 0x0110 ; RS_ITEM_ACRO_BIKE + .short 0x0111 ; RS_ITEM_POKEBLOCK_CASE + .short 0x0112 ; RS_ITEM_LETTER + .short 0x0113 ; RS_ITEM_EON_TICKET + .short 0x0114 ; RS_ITEM_RED_ORB + .short 0x0115 ; RS_ITEM_BLUE_ORB + .short 0x0116 ; RS_ITEM_SCANNER + .short 0x0117 ; RS_ITEM_GO_GOGGLES + .short 0x0118 ; RS_ITEM_METEORITE + .short 0x0119 ; RS_ITEM_ROOM_1_KEY + .short 0x011A ; RS_ITEM_ROOM_2_KEY + .short 0x011B ; RS_ITEM_ROOM_4_KEY + .short 0x011C ; RS_ITEM_ROOM_6_KEY + .short 0x011D ; RS_ITEM_STORAGE_KEY + .short 0x011E ; RS_ITEM_ROOT_FOSSIL + .short 0x011F ; RS_ITEM_CLAW_FOSSIL + .short 0x0120 ; RS_ITEM_DEVON_SCOPE + .short 0x0153 ; RS_ITEM_HM01 + .short 0x0154 ; RS_ITEM_HM02 + .short 0x0155 ; RS_ITEM_HM03 + .short 0x0156 ; RS_ITEM_HM04 + .short 0x0157 ; RS_ITEM_HM05 + .short 0x0158 ; RS_ITEM_HM06 + .short 0x0159 ; RS_ITEM_HM07 + .short 0x015A ; RS_ITEM_HM08 + .short 0x015B ; RS_ITEM_15B + .short 0x015C ; RS_ITEM_15C + .short 0x015D ; RS_ITEM_OAKS_PARCEL + .short 0x015E ; RS_ITEM_POKE_FLUTE + .short 0x015F ; RS_ITEM_SECRET_KEY + .short 0x0160 ; RS_ITEM_BIKE_VOUCHER + .short 0x0161 ; RS_ITEM_GOLD_TEETH + .short 0x0162 ; RS_ITEM_OLD_AMBER + .short 0x0163 ; RS_ITEM_CARD_KEY + .short 0x0164 ; RS_ITEM_LIFT_KEY + .short 0x0165 ; RS_ITEM_HELIX_FOSSIL + .short 0x0166 ; RS_ITEM_DOME_FOSSIL + .short 0x0167 ; RS_ITEM_SILPH_SCOPE + .short 0x0168 ; RS_ITEM_BICYCLE + .short 0x0169 ; RS_ITEM_TOWN_MAP + .short 0x016A ; RS_ITEM_VS_SEEKER + .short 0x016B ; RS_ITEM_FAME_CHECKER + .short 0x016C ; RS_ITEM_TM_CASE + .short 0x016D ; RS_ITEM_BERRY_POUCH + .short 0x016E ; RS_ITEM_TEACHY_TV + .short 0x016F ; RS_ITEM_TRI_PASS + .short 0x0170 ; RS_ITEM_RAINBOW_PASS + .short 0x0171 ; RS_ITEM_TEA + .short 0x0172 ; RS_ITEM_MYSTIC_TICKET + .short 0x0173 ; RS_ITEM_AURORA_TICKET + .short 0x0174 ; RS_ITEM_POWDER_JAR + .short 0x0175 ; RS_ITEM_RUBY + .short 0x0176 ; RS_ITEM_SAPPHIRE + .short 0x0177 ; RS_ITEM_MAGMA_EMBLEM + .short 0x0178 ; RS_ITEM_OLD_SEA_MAP + .short 0x0000 ; RS_ITEM_NONE + + .global MOD83_0223B41C MOD83_0223B41C: ; 0x0223B41C - .word 0, -1 + .word 0, -1 - .global MOD83_0223B424 + .global MOD83_0223B424 MOD83_0223B424: ; 0x0223B424 - .byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD - .byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 - .byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF - .byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC - .byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 - .byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD - .byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 - .byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 - .byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF - .byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 - - .global MOD83_SpeciesWithAbilityOverridesList + .byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD + .byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 + .byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF + .byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC + .byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 + .byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD + .byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 + .byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 + .byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF + .byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 + + .global MOD83_SpeciesWithAbilityOverridesList MOD83_SpeciesWithAbilityOverridesList: ; 0x0223B4C0 - .short SPECIES_PIDGEY - .short SPECIES_PIDGEOTTO - .short SPECIES_PIDGEOT - .short SPECIES_NIDORAN_F - .short SPECIES_NIDORINA - .short SPECIES_NIDOQUEEN - .short SPECIES_NIDORAN_M - .short SPECIES_NIDORINO - .short SPECIES_NIDOKING - .short SPECIES_CLEFAIRY - .short SPECIES_CLEFABLE - .short SPECIES_PARAS - .short SPECIES_PARASECT - .short SPECIES_VENONAT - .short SPECIES_VENOMOTH - .short SPECIES_MEOWTH - .short SPECIES_PERSIAN - .short SPECIES_MANKEY - .short SPECIES_PRIMEAPE - .short SPECIES_MACHOP - .short SPECIES_MACHOKE - .short SPECIES_MACHAMP - .short SPECIES_SEEL - .short SPECIES_DEWGONG - .short SPECIES_SHELLDER - .short SPECIES_CLOYSTER - .short SPECIES_DROWZEE - .short SPECIES_HYPNO - .short SPECIES_HITMONLEE - .short SPECIES_HITMONCHAN - .short SPECIES_TANGELA - .short SPECIES_KANGASKHAN - .short SPECIES_HORSEA - .short SPECIES_SEADRA - .short SPECIES_MR_MIME - .short SPECIES_SCYTHER - .short SPECIES_JYNX - .short SPECIES_PINSIR - .short SPECIES_TAUROS - .short SPECIES_EEVEE - .short SPECIES_VAPOREON - .short SPECIES_JOLTEON - .short SPECIES_FLAREON - .short SPECIES_PORYGON - .short SPECIES_CLEFFA - .short SPECIES_HOPPIP - .short SPECIES_SKIPLOOM - .short SPECIES_JUMPLUFF - .short SPECIES_SUNKERN - .short SPECIES_SUNFLORA - .short SPECIES_ESPEON - .short SPECIES_UMBREON - .short SPECIES_MURKROW - .short SPECIES_GRANBULL - .short SPECIES_SCIZOR - .short SPECIES_SHUCKLE - .short SPECIES_TEDDIURSA - .short SPECIES_URSARING - .short SPECIES_SWINUB - .short SPECIES_PILOSWINE - .short SPECIES_REMORAID - .short SPECIES_OCTILLERY - .short SPECIES_KINGDRA - .short SPECIES_PORYGON2 - .short SPECIES_STANTLER - .short SPECIES_SMEARGLE - .short SPECIES_TYROGUE - .short SPECIES_HITMONTOP - .short SPECIES_SMOOCHUM - .short SPECIES_MILTANK - .short SPECIES_POOCHYENA - .short SPECIES_MIGHTYENA - .short SPECIES_ZIGZAGOON - .short SPECIES_LINOONE - .short SPECIES_SHROOMISH - .short SPECIES_BRELOOM - .short SPECIES_SKITTY - .short SPECIES_DELCATTY - .short SPECIES_SABLEYE - .short SPECIES_ILLUMISE - .short SPECIES_NUMEL - .short SPECIES_CAMERUPT - .short SPECIES_SPINDA - .short SPECIES_BARBOACH - .short SPECIES_WHISCASH - .short SPECIES_SHUPPET - .short SPECIES_BANETTE - .short SPECIES_TROPIUS - .short SPECIES_ABSOL - .short SPECIES_SNORUNT - .short SPECIES_GLALIE - .short SPECIES_SPHEAL - .short SPECIES_SEALEO - .short SPECIES_WALREIN - - .global MOD83_UpConvertSpeciesLUT + .short SPECIES_PIDGEY + .short SPECIES_PIDGEOTTO + .short SPECIES_PIDGEOT + .short SPECIES_NIDORAN_F + .short SPECIES_NIDORINA + .short SPECIES_NIDOQUEEN + .short SPECIES_NIDORAN_M + .short SPECIES_NIDORINO + .short SPECIES_NIDOKING + .short SPECIES_CLEFAIRY + .short SPECIES_CLEFABLE + .short SPECIES_PARAS + .short SPECIES_PARASECT + .short SPECIES_VENONAT + .short SPECIES_VENOMOTH + .short SPECIES_MEOWTH + .short SPECIES_PERSIAN + .short SPECIES_MANKEY + .short SPECIES_PRIMEAPE + .short SPECIES_MACHOP + .short SPECIES_MACHOKE + .short SPECIES_MACHAMP + .short SPECIES_SEEL + .short SPECIES_DEWGONG + .short SPECIES_SHELLDER + .short SPECIES_CLOYSTER + .short SPECIES_DROWZEE + .short SPECIES_HYPNO + .short SPECIES_HITMONLEE + .short SPECIES_HITMONCHAN + .short SPECIES_TANGELA + .short SPECIES_KANGASKHAN + .short SPECIES_HORSEA + .short SPECIES_SEADRA + .short SPECIES_MR_MIME + .short SPECIES_SCYTHER + .short SPECIES_JYNX + .short SPECIES_PINSIR + .short SPECIES_TAUROS + .short SPECIES_EEVEE + .short SPECIES_VAPOREON + .short SPECIES_JOLTEON + .short SPECIES_FLAREON + .short SPECIES_PORYGON + .short SPECIES_CLEFFA + .short SPECIES_HOPPIP + .short SPECIES_SKIPLOOM + .short SPECIES_JUMPLUFF + .short SPECIES_SUNKERN + .short SPECIES_SUNFLORA + .short SPECIES_ESPEON + .short SPECIES_UMBREON + .short SPECIES_MURKROW + .short SPECIES_GRANBULL + .short SPECIES_SCIZOR + .short SPECIES_SHUCKLE + .short SPECIES_TEDDIURSA + .short SPECIES_URSARING + .short SPECIES_SWINUB + .short SPECIES_PILOSWINE + .short SPECIES_REMORAID + .short SPECIES_OCTILLERY + .short SPECIES_KINGDRA + .short SPECIES_PORYGON2 + .short SPECIES_STANTLER + .short SPECIES_SMEARGLE + .short SPECIES_TYROGUE + .short SPECIES_HITMONTOP + .short SPECIES_SMOOCHUM + .short SPECIES_MILTANK + .short SPECIES_POOCHYENA + .short SPECIES_MIGHTYENA + .short SPECIES_ZIGZAGOON + .short SPECIES_LINOONE + .short SPECIES_SHROOMISH + .short SPECIES_BRELOOM + .short SPECIES_SKITTY + .short SPECIES_DELCATTY + .short SPECIES_SABLEYE + .short SPECIES_ILLUMISE + .short SPECIES_NUMEL + .short SPECIES_CAMERUPT + .short SPECIES_SPINDA + .short SPECIES_BARBOACH + .short SPECIES_WHISCASH + .short SPECIES_SHUPPET + .short SPECIES_BANETTE + .short SPECIES_TROPIUS + .short SPECIES_ABSOL + .short SPECIES_SNORUNT + .short SPECIES_GLALIE + .short SPECIES_SPHEAL + .short SPECIES_SEALEO + .short SPECIES_WALREIN + + .global MOD83_UpConvertSpeciesLUT MOD83_UpConvertSpeciesLUT: ; 0x0223B57C - .short SPECIES_TREECKO - .short SPECIES_GROVYLE - .short SPECIES_SCEPTILE - .short SPECIES_TORCHIC - .short SPECIES_COMBUSKEN - .short SPECIES_BLAZIKEN - .short SPECIES_MUDKIP - .short SPECIES_MARSHTOMP - .short SPECIES_SWAMPERT - .short SPECIES_POOCHYENA - .short SPECIES_MIGHTYENA - .short SPECIES_ZIGZAGOON - .short SPECIES_LINOONE - .short SPECIES_WURMPLE - .short SPECIES_SILCOON - .short SPECIES_BEAUTIFLY - .short SPECIES_CASCOON - .short SPECIES_DUSTOX - .short SPECIES_LOTAD - .short SPECIES_LOMBRE - .short SPECIES_LUDICOLO - .short SPECIES_SEEDOT - .short SPECIES_NUZLEAF - .short SPECIES_SHIFTRY - .short SPECIES_NINCADA - .short SPECIES_NINJASK - .short SPECIES_SHEDINJA - .short SPECIES_TAILLOW - .short SPECIES_SWELLOW - .short SPECIES_SHROOMISH - .short SPECIES_BRELOOM - .short SPECIES_SPINDA - .short SPECIES_WINGULL - .short SPECIES_PELIPPER - .short SPECIES_SURSKIT - .short SPECIES_MASQUERAIN - .short SPECIES_WAILMER - .short SPECIES_WAILORD - .short SPECIES_SKITTY - .short SPECIES_DELCATTY - .short SPECIES_KECLEON - .short SPECIES_BALTOY - .short SPECIES_CLAYDOL - .short SPECIES_NOSEPASS - .short SPECIES_TORKOAL - .short SPECIES_SABLEYE - .short SPECIES_BARBOACH - .short SPECIES_WHISCASH - .short SPECIES_LUVDISC - .short SPECIES_CORPHISH - .short SPECIES_CRAWDAUNT - .short SPECIES_FEEBAS - .short SPECIES_MILOTIC - .short SPECIES_CARVANHA - .short SPECIES_SHARPEDO - .short SPECIES_TRAPINCH - .short SPECIES_VIBRAVA - .short SPECIES_FLYGON - .short SPECIES_MAKUHITA - .short SPECIES_HARIYAMA - .short SPECIES_ELECTRIKE - .short SPECIES_MANECTRIC - .short SPECIES_NUMEL - .short SPECIES_CAMERUPT - .short SPECIES_SPHEAL - .short SPECIES_SEALEO - .short SPECIES_WALREIN - .short SPECIES_CACNEA - .short SPECIES_CACTURNE - .short SPECIES_SNORUNT - .short SPECIES_GLALIE - .short SPECIES_LUNATONE - .short SPECIES_SOLROCK - .short SPECIES_AZURILL - .short SPECIES_SPOINK - .short SPECIES_GRUMPIG - .short SPECIES_PLUSLE - .short SPECIES_MINUN - .short SPECIES_MAWILE - .short SPECIES_MEDITITE - .short SPECIES_MEDICHAM - .short SPECIES_SWABLU - .short SPECIES_ALTARIA - .short SPECIES_WYNAUT - .short SPECIES_DUSKULL - .short SPECIES_DUSCLOPS - .short SPECIES_ROSELIA - .short SPECIES_SLAKOTH - .short SPECIES_VIGOROTH - .short SPECIES_SLAKING - .short SPECIES_GULPIN - .short SPECIES_SWALOT - .short SPECIES_TROPIUS - .short SPECIES_WHISMUR - .short SPECIES_LOUDRED - .short SPECIES_EXPLOUD - .short SPECIES_CLAMPERL - .short SPECIES_HUNTAIL - .short SPECIES_GOREBYSS - .short SPECIES_ABSOL - .short SPECIES_SHUPPET - .short SPECIES_BANETTE - .short SPECIES_SEVIPER - .short SPECIES_ZANGOOSE - .short SPECIES_RELICANTH - .short SPECIES_ARON - .short SPECIES_LAIRON - .short SPECIES_AGGRON - .short SPECIES_CASTFORM - .short SPECIES_VOLBEAT - .short SPECIES_ILLUMISE - .short SPECIES_LILEEP - .short SPECIES_CRADILY - .short SPECIES_ANORITH - .short SPECIES_ARMALDO - .short SPECIES_RALTS - .short SPECIES_KIRLIA - .short SPECIES_GARDEVOIR - .short SPECIES_BAGON - .short SPECIES_SHELGON - .short SPECIES_SALAMENCE - .short SPECIES_BELDUM - .short SPECIES_METANG - .short SPECIES_METAGROSS - .short SPECIES_REGIROCK - .short SPECIES_REGICE - .short SPECIES_REGISTEEL - .short SPECIES_KYOGRE - .short SPECIES_GROUDON - .short SPECIES_RAYQUAZA - .short SPECIES_LATIAS - .short SPECIES_LATIOS - .short SPECIES_JIRACHI - .short SPECIES_DEOXYS - .short SPECIES_CHIMECHO - .short SPECIES_BURMY - .short SPECIES_WORMADAM - .short SPECIES_MOTHIM - .short SPECIES_COMBEE - .short SPECIES_VESPIQUEN - .short SPECIES_PACHIRISU - .short SPECIES_BUIZEL - .short SPECIES_FLOATZEL - .short SPECIES_CHERUBI - - .global MOD83_0223B69C + .short SPECIES_TREECKO + .short SPECIES_GROVYLE + .short SPECIES_SCEPTILE + .short SPECIES_TORCHIC + .short SPECIES_COMBUSKEN + .short SPECIES_BLAZIKEN + .short SPECIES_MUDKIP + .short SPECIES_MARSHTOMP + .short SPECIES_SWAMPERT + .short SPECIES_POOCHYENA + .short SPECIES_MIGHTYENA + .short SPECIES_ZIGZAGOON + .short SPECIES_LINOONE + .short SPECIES_WURMPLE + .short SPECIES_SILCOON + .short SPECIES_BEAUTIFLY + .short SPECIES_CASCOON + .short SPECIES_DUSTOX + .short SPECIES_LOTAD + .short SPECIES_LOMBRE + .short SPECIES_LUDICOLO + .short SPECIES_SEEDOT + .short SPECIES_NUZLEAF + .short SPECIES_SHIFTRY + .short SPECIES_NINCADA + .short SPECIES_NINJASK + .short SPECIES_SHEDINJA + .short SPECIES_TAILLOW + .short SPECIES_SWELLOW + .short SPECIES_SHROOMISH + .short SPECIES_BRELOOM + .short SPECIES_SPINDA + .short SPECIES_WINGULL + .short SPECIES_PELIPPER + .short SPECIES_SURSKIT + .short SPECIES_MASQUERAIN + .short SPECIES_WAILMER + .short SPECIES_WAILORD + .short SPECIES_SKITTY + .short SPECIES_DELCATTY + .short SPECIES_KECLEON + .short SPECIES_BALTOY + .short SPECIES_CLAYDOL + .short SPECIES_NOSEPASS + .short SPECIES_TORKOAL + .short SPECIES_SABLEYE + .short SPECIES_BARBOACH + .short SPECIES_WHISCASH + .short SPECIES_LUVDISC + .short SPECIES_CORPHISH + .short SPECIES_CRAWDAUNT + .short SPECIES_FEEBAS + .short SPECIES_MILOTIC + .short SPECIES_CARVANHA + .short SPECIES_SHARPEDO + .short SPECIES_TRAPINCH + .short SPECIES_VIBRAVA + .short SPECIES_FLYGON + .short SPECIES_MAKUHITA + .short SPECIES_HARIYAMA + .short SPECIES_ELECTRIKE + .short SPECIES_MANECTRIC + .short SPECIES_NUMEL + .short SPECIES_CAMERUPT + .short SPECIES_SPHEAL + .short SPECIES_SEALEO + .short SPECIES_WALREIN + .short SPECIES_CACNEA + .short SPECIES_CACTURNE + .short SPECIES_SNORUNT + .short SPECIES_GLALIE + .short SPECIES_LUNATONE + .short SPECIES_SOLROCK + .short SPECIES_AZURILL + .short SPECIES_SPOINK + .short SPECIES_GRUMPIG + .short SPECIES_PLUSLE + .short SPECIES_MINUN + .short SPECIES_MAWILE + .short SPECIES_MEDITITE + .short SPECIES_MEDICHAM + .short SPECIES_SWABLU + .short SPECIES_ALTARIA + .short SPECIES_WYNAUT + .short SPECIES_DUSKULL + .short SPECIES_DUSCLOPS + .short SPECIES_ROSELIA + .short SPECIES_SLAKOTH + .short SPECIES_VIGOROTH + .short SPECIES_SLAKING + .short SPECIES_GULPIN + .short SPECIES_SWALOT + .short SPECIES_TROPIUS + .short SPECIES_WHISMUR + .short SPECIES_LOUDRED + .short SPECIES_EXPLOUD + .short SPECIES_CLAMPERL + .short SPECIES_HUNTAIL + .short SPECIES_GOREBYSS + .short SPECIES_ABSOL + .short SPECIES_SHUPPET + .short SPECIES_BANETTE + .short SPECIES_SEVIPER + .short SPECIES_ZANGOOSE + .short SPECIES_RELICANTH + .short SPECIES_ARON + .short SPECIES_LAIRON + .short SPECIES_AGGRON + .short SPECIES_CASTFORM + .short SPECIES_VOLBEAT + .short SPECIES_ILLUMISE + .short SPECIES_LILEEP + .short SPECIES_CRADILY + .short SPECIES_ANORITH + .short SPECIES_ARMALDO + .short SPECIES_RALTS + .short SPECIES_KIRLIA + .short SPECIES_GARDEVOIR + .short SPECIES_BAGON + .short SPECIES_SHELGON + .short SPECIES_SALAMENCE + .short SPECIES_BELDUM + .short SPECIES_METANG + .short SPECIES_METAGROSS + .short SPECIES_REGIROCK + .short SPECIES_REGICE + .short SPECIES_REGISTEEL + .short SPECIES_KYOGRE + .short SPECIES_GROUDON + .short SPECIES_RAYQUAZA + .short SPECIES_LATIAS + .short SPECIES_LATIOS + .short SPECIES_JIRACHI + .short SPECIES_DEOXYS + .short SPECIES_CHIMECHO + .short SPECIES_BURMY + .short SPECIES_WORMADAM + .short SPECIES_MOTHIM + .short SPECIES_COMBEE + .short SPECIES_VESPIQUEN + .short SPECIES_PACHIRISU + .short SPECIES_BUIZEL + .short SPECIES_FLOATZEL + .short SPECIES_CHERUBI + + .global MOD83_0223B69C MOD83_0223B69C: ; 0x0223B69C - .word 0x42354245 ; "EB5B" - .word 0x42354345 ; "EC5B" - .word 0x42354445 ; "ED5B" - .word 0x42354545 ; "EE5B" - .word 0x42354645 ; "EF5B" - .word 0x42354745 ; "EG5B" - .word 0x42354845 ; "EH5B" - .word 0x42354945 ; "EI5B" - .word 0x42354A45 ; "EJ5B" - .word 0x42354B45 ; "EK5B" - .word 0x42354C45 ; "EL5B" - .word 0x42354D45 ; "EM5B" - .word 0x42355045 ; "EP5B" - .word 0x42355145 ; "EQ5B" - .word 0x42355245 ; "ER5B" - .word 0x42355345 ; "ES5B" - .word 0x42355445 ; "ET5B" - .word 0x42355545 ; "EU5B" - .word 0x42355645 ; "EV5B" - .word 0x42355745 ; "EW5B" - .word 0x00000000 - - .global MOD83_0223B6F0 + .word 0x42354245 ; "EB5B" + .word 0x42354345 ; "EC5B" + .word 0x42354445 ; "ED5B" + .word 0x42354545 ; "EE5B" + .word 0x42354645 ; "EF5B" + .word 0x42354745 ; "EG5B" + .word 0x42354845 ; "EH5B" + .word 0x42354945 ; "EI5B" + .word 0x42354A45 ; "EJ5B" + .word 0x42354B45 ; "EK5B" + .word 0x42354C45 ; "EL5B" + .word 0x42354D45 ; "EM5B" + .word 0x42355045 ; "EP5B" + .word 0x42355145 ; "EQ5B" + .word 0x42355245 ; "ER5B" + .word 0x42355345 ; "ES5B" + .word 0x42355445 ; "ET5B" + .word 0x42355545 ; "EU5B" + .word 0x42355645 ; "EV5B" + .word 0x42355745 ; "EW5B" + .word 0x00000000 + + .global MOD83_0223B6F0 MOD83_0223B6F0: ; 0x0223B6F0 - .asciz "mywh_SYSSTATE_IDLE" + .asciz "mywh_SYSSTATE_IDLE" - .balign 4 - .global MOD83_0223B704 + .balign 4 + .global MOD83_0223B704 MOD83_0223B704: ; 0x0223B704 - .asciz "mywh_SYSSTATE_BUSY" + .asciz "mywh_SYSSTATE_BUSY" - .balign 4 - .global MOD83_0223B718 + .balign 4 + .global MOD83_0223B718 MOD83_0223B718: ; 0x0223B718 - .asciz "mywh_SYSSTATE_STOP" + .asciz "mywh_SYSSTATE_STOP" - .balign 4 - .global MOD83_0223B72C + .balign 4 + .global MOD83_0223B72C MOD83_0223B72C: ; 0x0223B72C - .asciz "mywh_SYSSTATE_ERROR" + .asciz "mywh_SYSSTATE_ERROR" - .balign 4 - .global MOD83_0223B740 + .balign 4 + .global MOD83_0223B740 MOD83_0223B740: ; 0x0223B740 - .asciz "mywh_SYSSTATE_SCANNING" + .asciz "mywh_SYSSTATE_SCANNING" - .balign 4 - .global MOD83_0223B758 + .balign 4 + .global MOD83_0223B758 MOD83_0223B758: ; 0x0223B758 - .asciz "mywh_SYSSTATE_CONNECTED" + .asciz "mywh_SYSSTATE_CONNECTED" - .balign 4 - .global MOD83_0223B770 + .balign 4 + .global MOD83_0223B770 MOD83_0223B770: ; 0x0223B770 - .asciz "mywh_SYSSTATE_KEYSHARING" + .asciz "mywh_SYSSTATE_KEYSHARING" - .balign 4 - .global MOD83_0223B78C + .balign 4 + .global MOD83_0223B78C MOD83_0223B78C: ; 0x0223B78C - .asciz "mywh_SYSSTATE_DATASHARING" + .asciz "mywh_SYSSTATE_DATASHARING" - .balign 4 - .global MOD83_0223B7A8 + .balign 4 + .global MOD83_0223B7A8 MOD83_0223B7A8: ; 0x0223B7A8 - .asciz "mywh_SYSSTATE_CONNECT_FAIL" + .asciz "mywh_SYSSTATE_CONNECT_FAIL" - .balign 4 - .global MOD83_0223B7C4 + .balign 4 + .global MOD83_0223B7C4 MOD83_0223B7C4: ; 0x0223B7C4 - .asciz "mywh_SYSSTATE_MEASURECHANNEL" + .asciz "mywh_SYSSTATE_MEASURECHANNEL" - .balign 4 - .global MOD83_0223B7E4 + .balign 4 + .global MOD83_0223B7E4 MOD83_0223B7E4: ; 0x0223B7E4 - .word MOD83_0223B718, MOD83_0223B6F0, MOD83_0223B740, MOD83_0223B704 - .word MOD83_0223B758, MOD83_0223B78C, MOD83_0223B770, MOD83_0223B7C4 - .word MOD83_0223B7A8, MOD83_0223B72C + .word MOD83_0223B718, MOD83_0223B6F0, MOD83_0223B740, MOD83_0223B704 + .word MOD83_0223B758, MOD83_0223B78C, MOD83_0223B770, MOD83_0223B7C4 + .word MOD83_0223B7A8, MOD83_0223B72C - .global MOD83_0223B80C + .global MOD83_0223B80C MOD83_0223B80C: ; 0x0223B80C - .asciz "%s -> " + .asciz "%s -> " - .balign 4 - .global MOD83_0223B814 + .balign 4 + .global MOD83_0223B814 MOD83_0223B814: ; 0x0223B814 - .asciz "%s\n" + .asciz "%s\n" - .balign 4 - .global MOD83_0223B818 + .balign 4 + .global MOD83_0223B818 MOD83_0223B818: ; 0x0223B818 - .asciz "not my parent ggid (%d != %d)\n" + .asciz "not my parent ggid (%d != %d)\n" - .balign 4 - .global MOD83_0223B838 + .balign 4 + .global MOD83_0223B838 MOD83_0223B838: ; 0x0223B838 - .asciz "ADAE" + .asciz "ADAE" - .balign 4 - .global MOD83_0223B840 + .balign 4 + .global MOD83_0223B840 MOD83_0223B840: ; 0x0223B840 - .asciz "Sx439tCkbrWyR8X2" + .asciz "Sx439tCkbrWyR8X2" - .balign 4 - .global MOD83_0223B854 + .balign 4 + .global MOD83_0223B854 MOD83_0223B854: ; 0x0223B854 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .bss - .global MOD83_0223B860 + .bss + .global MOD83_0223B860 MOD83_0223B860: ; 0x0223B860 - .space 0x10 + .space 0x10 - .global MOD83_0223B870 + .global MOD83_0223B870 MOD83_0223B870: ; 0x0223B870 - .space 0x14 + .space 0x14 - .global MOD83_0223B884 + .global MOD83_0223B884 MOD83_0223B884: ; 0x0223B884 - .space 0x4 + .space 0x4 - .global MOD83_0223B888 + .global MOD83_0223B888 MOD83_0223B888: ; 0x0223B888 - .space 0x14 + .space 0x14 - .global MOD83_0223B89C + .global MOD83_0223B89C MOD83_0223B89C: ; 0x0223B89C - .space 0x4 + .space 0x4 - .global MOD83_0223B8A0 + .global MOD83_0223B8A0 MOD83_0223B8A0: ; 0x0223B8A0 - .space 0x274 + .space 0x274 - .global MOD83_0223BB14 + .global MOD83_0223BB14 MOD83_0223BB14: ; 0x0223BB14 - .space 0x4 + .space 0x4 - .global MOD83_0223BB18 + .global MOD83_0223BB18 MOD83_0223BB18: ; 0x0223BB18 - .space 0x10 + .space 0x10 - .global MOD83_0223BB28 + .global MOD83_0223BB28 MOD83_0223BB28: ; 0x0223BB28 - .space 0x8 + .space 0x8 - .global MOD83_0223BB30 + .global MOD83_0223BB30 MOD83_0223BB30: ; 0x0223BB30 - .space 0x68 + .space 0x68 - .global MOD83_0223BB98 + .global MOD83_0223BB98 MOD83_0223BB98: ; 0x0223BB98 - .space 0x94 + .space 0x94 - .global heap_id + .global heap_id heap_id: ; 0x0223BC2C - .space 0x4 + .space 0x4 - .global MOD83_0223BC30 + .global MOD83_0223BC30 MOD83_0223BC30: ; 0x0223BC30 - .space 0x30 + .space 0x30 - .global MOD83_0223BC60 + .global MOD83_0223BC60 MOD83_0223BC60: ; 0x0223BC60 - .space 0x4 + .space 0x4 - .global MOD83_0223BC64 + .global MOD83_0223BC64 MOD83_0223BC64: ; 0x0223BC64 - .space 0x1CC + .space 0x1CC - .global MOD83_0223BE30 + .global MOD83_0223BE30 MOD83_0223BE30: ; 0x0223BE30 - .space 0xC80 + .space 0xC80 - .global MOD83_0223CAB0 + .global MOD83_0223CAB0 MOD83_0223CAB0: ; 0x0223CAB0 - .space 0x24 + .space 0x24 - .global MOD83_0223CAD4 + .global MOD83_0223CAD4 MOD83_0223CAD4: ; 0x0223CAD4 - .space 0x8 + .space 0x8 - .global MOD83_0223CADC + .global MOD83_0223CADC MOD83_0223CADC: ; 0x0223CADC - .space 0x10 + .space 0x10 - .global MOD83_0223CAEC + .global MOD83_0223CAEC MOD83_0223CAEC: ; 0x0223CAEC - .space 0x6F4 + .space 0x6F4 -- cgit v1.2.3 From 4fdd2c80ef990a4657c90db44349f0cebd2025af Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 10 Jul 2021 00:27:00 +0100 Subject: some more scrcmd decomp --- arm9/asm/scrcmd_asm.s | 169 ------------------------------------------------ arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 98 ++++++++++++++++++++++++++-- include/scrcmd.h | 2 + include/script.h | 3 +- 6 files changed, 99 insertions(+), 177 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index ef0c42fa..417c0605 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,175 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk02A1 -ScrCmd_Unk02A1: ; 0x0203B024 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [sp, #0x0] - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - add r1, r4, #0x0 - bl FUN_0203B120 - str r0, [sp, #0x4] - cmp r0, #0x0 - bne _0203B07A - bl GF_AssertFail -_0203B07A: - mov r0, #0x4 - add r1, r0, #0x0 - add r1, #0xfc - bl AllocFromHeap - add r4, r0, #0x0 - ldr r0, [sp, #0x4] - bl FUN_02058B2C - lsl r0, r0, #0x10 - lsr r6, r0, #0x10 - ldr r0, [sp, #0x4] - bl FUN_02058B4C - lsl r0, r0, #0x10 - ldr r2, [sp, #0x0] - lsr r0, r0, #0x10 - mov r1, #0x0 - cmp r6, r2 - bhs _0203B0B0 - mov r2, #0xf - strh r2, [r4, #0x0] - ldr r2, [sp, #0x0] - add r1, r1, #0x1 - sub r2, r2, r6 - strh r2, [r4, #0x2] - b _0203B0C0 -_0203B0B0: - cmp r6, r2 - bls _0203B0C0 - mov r2, #0xe - strh r2, [r4, #0x0] - ldr r2, [sp, #0x0] - add r1, r1, #0x1 - sub r2, r6, r2 - strh r2, [r4, #0x2] -_0203B0C0: - cmp r0, r7 - bhs _0203B0D4 - lsl r2, r1, #0x2 - mov r3, #0xc - strh r3, [r4, r2] - sub r3, r7, r0 - add r0, r4, r2 - strh r3, [r0, #0x2] - add r1, r1, #0x1 - b _0203B0E6 -_0203B0D4: - cmp r0, r7 - bls _0203B0E6 - lsl r2, r1, #0x2 - mov r3, #0xd - strh r3, [r4, r2] - sub r3, r0, r7 - add r0, r4, r2 - strh r3, [r0, #0x2] - add r1, r1, #0x1 -_0203B0E6: - lsl r2, r1, #0x2 - mov r0, #0xfe - strh r0, [r4, r2] - mov r1, #0x0 - add r0, r4, r2 - strh r1, [r0, #0x2] - ldr r0, [sp, #0x4] - add r1, r4, #0x0 - bl FUN_0205AEA4 - add r6, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x4 - bl FUN_02039438 - ldrb r1, [r0, #0x0] - add r5, #0x80 - add r2, r4, #0x0 - add r1, r1, #0x1 - strb r1, [r0, #0x0] - ldr r0, [r5, #0x0] - add r1, r6, #0x0 - bl FUN_0203B174 - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start FUN_0203B120 -FUN_0203B120: ; 0x0203B120 - push {r3, lr} - cmp r1, #0xf2 - bne _0203B130 - ldr r0, [r0, #0x34] - mov r1, #0x30 - bl FUN_020580B4 - pop {r3, pc} -_0203B130: - cmp r1, #0xf1 - bne _0203B13E - mov r1, #0xb - bl FUN_02039438 - ldr r0, [r0, #0x0] - pop {r3, pc} -_0203B13E: - ldr r0, [r0, #0x34] - bl FUN_02058060 - pop {r3, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk005F -ScrCmd_Unk005F: ; 0x0203B148 - push {r3, lr} - ldr r1, _0203B154 ; =FUN_0203B158 - bl SetupNativeScript - mov r0, #0x1 - pop {r3, pc} - .balign 4 -_0203B154: .word FUN_0203B158 - - thumb_func_start FUN_0203B158 -FUN_0203B158: ; 0x0203B158 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x4 - bl FUN_02039438 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _0203B16E - mov r0, #0x1 - pop {r3, pc} -_0203B16E: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - thumb_func_start FUN_0203B174 FUN_0203B174: ; 0x0203B174 push {r3-r7, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index e40bd803..aea1dbf8 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -244,7 +244,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_SaveChatotCry .word ScrCmd_Unk005D .word ScrCmd_Unk005E - .word ScrCmd_Unk005F + .word ScrCmd_WaitForMovement .word ScrCmd_Unk0060 .word ScrCmd_Unk0061 .word ScrCmd_Unk0062 diff --git a/arm9/global.inc b/arm9/global.inc index 57c33a09..fcb4126e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2788,7 +2788,7 @@ .extern ScrCmd_Unk02D0 .extern ScrCmd_Unk005E .extern ScrCmd_Unk02A1 -.extern ScrCmd_Unk005F +.extern ScrCmd_WaitForMovement .extern ScrCmd_Unk0060 .extern ScrCmd_Unk02B4 .extern ScrCmd_Unk0061 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 6287579c..e5d9fba5 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -53,10 +53,12 @@ extern void MOD05_021E1F60(u32 param0); extern void MOD05_021E26CC(u32 param0, u8 param1); extern void MOD05_021E2B80(u32 param0, u8 param1); extern void MOD05_021E2B9C(u32 param0, u8 param1); - -extern u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1); -extern u32 FUN_0205AEA4(u32 param0, const u8 *ptr); -extern void FUN_0203B174(struct UnkSavStruct80 *arg, u32 param1, u32 param2); +extern u32 FUN_0205AEA4(u32 param0, const void *ptr); +extern void FUN_0203B174(struct UnkSavStruct80 *arg, u32 param1, void *param2); +extern u32 FUN_02058B2C(u32 param0); +extern u32 FUN_02058B4C(u32 param0); +extern u32 FUN_020580B4(u32 param0, u32 param1); +extern u32 FUN_02058060(u32 param0, u32 param1); extern u8 *UNK_020F34E0; @@ -75,6 +77,8 @@ static BOOL FUN_0203AA0C(struct ScriptContext *ctx); static BOOL FUN_0203AB00(struct ScriptContext *ctx); static BOOL FUN_0203AD2C(struct ScriptContext *ctx); static BOOL FUN_0203AD78(struct ScriptContext *ctx); +static u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1); +static BOOL FUN_0203B158(struct ScriptContext *ctx); extern u8 sScriptConditionTable[6][3]; @@ -1314,6 +1318,90 @@ THUMB_FUNC BOOL ScrCmd_Unk005E(struct ScriptContext *ctx) //ApplyMovement? u8 *unk5 = FUN_02039438(ctx->unk80, 4); (*unk5)++; - FUN_0203B174(ctx->unk80, unk4, 0); + FUN_0203B174(ctx->unk80, unk4, NULL); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_Unk02A1(struct ScriptContext *ctx) +{ + u32 unk3; //has to be defined first to match + u16 unk0 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + unk3 = FUN_0203B120(ctx->unk80, unk0); + + GF_ASSERT(unk3 != 0); + + u16 *unk4 = AllocFromHeap(4, 0x100); + u16 unk5 = (u16)FUN_02058B2C(unk3); + u16 unk6 = (u16)FUN_02058B4C(unk3); + + u32 pos = 0; + + if (unk5 < unk1) + { + unk4[0] = 15; + pos++; + unk4[1] = unk1 - unk5; + } + else if (unk5 > unk1) + { + unk4[0] = 14; + pos++; + unk4[1] = unk5 - unk1; + } + + if (unk6 < unk2) + { + unk4[pos * 2] = 12; + unk4[pos * 2 + 1] = unk2 - unk6; + pos++; + } + else if (unk6 > unk2) + { + unk4[pos * 2] = 13; + unk4[pos * 2 + 1] = unk6 - unk2; + pos++; + } + + unk4[pos * 2] = 254; + unk4[pos * 2 + 1] = 0; + + u32 unk7 = FUN_0205AEA4(unk3, unk4); + u8 *unk8 = FUN_02039438(ctx->unk80, 4); + + (*unk8)++; + + FUN_0203B174(ctx->unk80, unk7, unk4); + return FALSE; +} + +THUMB_FUNC static u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1) +{ + if (param1 == 242) + { + return FUN_020580B4(arg->unk34, 48); //arg->unk34 + } + else if (param1 == 241) + { + u32 *res = FUN_02039438(arg, 11); + return *res; + } + else + { + return FUN_02058060(arg->unk34, param1); + } +} + +THUMB_FUNC BOOL ScrCmd_WaitForMovement(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, FUN_0203B158); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203B158(struct ScriptContext *ctx) +{ + u8 *unk = FUN_02039438(ctx->unk80, 4); + return *unk == 0 ? TRUE : FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 826b74d3..5e28a4d0 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -106,6 +106,8 @@ BOOL ScrCmd_Unk0048(struct ScriptContext *ctx); BOOL ScrCmd_Unk02CF(struct ScriptContext *ctx); BOOL ScrCmd_Unk02D0(struct ScriptContext *ctx); BOOL ScrCmd_Unk005E(struct ScriptContext *ctx); +BOOL ScrCmd_Unk02A1(struct ScriptContext *ctx); +BOOL ScrCmd_WaitForMovement(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); diff --git a/include/script.h b/include/script.h index 75b65f90..f6eec142 100644 --- a/include/script.h +++ b/include/script.h @@ -33,7 +33,8 @@ struct UnkSavStruct80 struct UnkStruct_0204639C *unk10; u8 padding2[0x8]; u32 *mapId; //0x1C - u8 padding3[0x18]; + u8 padding3[0x14]; + u32 unk34; u32 unk38; u8 padding4[0x24]; u32 unk60; -- cgit v1.2.3 From 9f3dc591c8d481d61e70afb5389e1d790d129803 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 10 Jul 2021 00:28:58 +0100 Subject: remove extra comment --- arm9/src/scrcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index e5d9fba5..c79684a0 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -1381,7 +1381,7 @@ THUMB_FUNC static u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1) { if (param1 == 242) { - return FUN_020580B4(arg->unk34, 48); //arg->unk34 + return FUN_020580B4(arg->unk34, 48); } else if (param1 == 241) { -- cgit v1.2.3 From afdedc1b2e42c5d622f169c0ce08571fb2e232c2 Mon Sep 17 00:00:00 2001 From: SNBeast Date: Fri, 9 Jul 2021 20:03:33 -0400 Subject: Correct Spacing For real this time --- arm9/arm9.lsf | 1800 +- arm9/modules/83/asm/module_83.s | 48414 +++++++++++++++++++------------------- arm9/src/unk_02022450.c | 14 +- 3 files changed, 25114 insertions(+), 25114 deletions(-) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 693ab358..d39e75e7 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -4,1264 +4,1264 @@ Static arm9 { - Address 0x02000000 - Object main.o - Object list_menu.o - Object unk_02001B80.o - Object string_util.o - Object render_text.o - Object font.o - Object palette.o - Object sound.o - Object unk_020040F4.o - Object unk_020051F4.o - Object unk_02005CFC.o - Object poke_overlay.o - Object unk_020061E8.o - Object overlay_manager.o - Object filesystem.o - Object gf_gfx_loader.o - Object unk_02006D98.o - Object unk_02008AA4.o - Object unk_02008DEC.o - Object unk_02009EAC.o - Object msgdata.o - Object script_buffers.o - Object unk_0200BA78.o - Object unk_0200BB14.o - Object unk_0200CA44.o - Object unk_0200CABC.o - Object unk_0200E1D0.o - Object unk_0200E850.o - Object unk_0201137C.o - Object unk_02011744.o - Object unk_02012004.o - Object gf_rtc.o - Object list_menu_items.o - Object unk_02012944.o - Object unk_02012CC8.o - Object mail_message.o - Object unk_020139D8.o - Object unk_02013CD4.o - Object unk_020142EC.o - Object unk_020144FC.o - Object unk_02014590.o - Object unk_02014BF4.o - Object unk_02015CC0.o - Object unk_02015D14.o - Object unk_02015E30.o - Object game_init.o - Object heap.o - Object bg_window.o - Object unk_0201B1A8.o - Object unk_0201B4E8.o - Object unk_0201B6D0.o - Object unk_0201B8B8.o - Object math_util.o - Object text.o - Object unk_0201C24C.o - Object unk_0201C360.o - Object unk_0201C620.o - Object unk_0201C6B4.o - Object unk_0201C7A0.o - Object unk_0201CBEC.o - Object unk_0201CC08.o - Object unk_0201D040.o - Object unk_0201E00C.o - Object GX_layers.o - Object unk_0201E7D8.o - Object unk_0201F06C.o - Object unk_020208B8.o - Object timer3.o - Object error_handling.o - Object unk_02020C44.o - Object unk_0202134C.o - Object unk_02021590.o - Object unk_02021934.o - Object unk_02021FF8.o - Object unk_02022244.o - Object unk_02022294.o - Object unk_020222E8.o - Object unk_02022318.o - Object unk_02022450.o - Object unk_02022504.o - Object save.o - Object save_arrays.o - Object sav_system_info.o - Object player_data.o - Object unk_02023AC4.o - Object daycare.o - Object pokedex.o - Object unk_02024E64.o - Object options.o - Object unk_020250A4.o - Object unk_02025484.o - Object unk_020254B8.o - Object mail.o - Object unk_02025954.o - Object unk_02026CD0.o - Object unk_02027E30.o - Object unk_020281E0.o - Object unk_020286F8.o - Object coins.o - Object unk_02028980.o - Object unk_02029A84.o - Object unk_02029AE0.o - Object seal_case.o - Object unk_02029CEC.o - Object igt.o - Object sav_chatot.o - Object unk_02029FB0.o - Object unk_0202A1E0.o - Object unk_0202A8F4.o - Object unk_0202A924.o - Object unk_0202ABBC.o - Object unk_0202AC20.o - Object hall_of_fame.o - Object unk_0202B374.o - Object unk_0202B870.o - Object unk_0202BE98.o - Object unk_0202C0E0.o - Object unk_0202C144.o - Object unk_0202C198.o - Object unk_0202D394.o - Object unk_0202D4C4.o - Object unk_0202D858.o - Object unk_0202D8D0.o - Object unk_0202DB14.o - Object unk_0202E29C.o - Object unk_0202F150.o - Object unk_02031480.o - Object unk_02031734.o - Object unk_020336C0.o - Object unk_02033778.o - Object unk_020337E8.o - Object unk_02033874.o - Object unk_02033B68.o - Object unk_02033F50.o - Object wfc_user_info_warning.o - Object map_matrix.o - Object map_header.o - Object unk_02034A28.o - Object unk_02034D7C.o - Object unk_02034E84.o - Object unk_02034FE4.o - Object unk_02035068.o - Object unk_02036FA4.o - Object unk_02037024.o - Object unk_020372D4.o - Object unk_020377B0.o - Object unk_020377F0.o - Object script.o - Object unk_02038C78.o - Object scrcmd.o - Object scrcmd_asm.o - Object scrcmd_mart.o - Object scrcmd_3.o - Object scrcmd_names.o - Object scrcmd_5.o - Object scrcmd_sound.o - Object scrcmd_7.o - Object scrcmd_8.o - Object scrcmd_9.o - Object scrcmd_10.o - Object scrcmd_berry_trees.o - Object scrcmd_12.o - Object scrcmd_13.o - Object scrcmd_coins.o - Object scrcmd_money.o - Object scrcmd_daycare.o - Object scrcmd_17.o - Object scrcmd_party.o - Object scrcmd_fossils.o - Object scrcmd_prizes.o - Object scrcmd_flags.o - Object scrcmd_items.o - Object scrcmd_underground.o - Object scrcmd_24.o - Object scrcmd_25.o - Object unk_02046030.o - Object event_data.o - Object unk_0204639C.o - Object unk_0204653C.o - Object unk_02047500.o - Object unk_020476CC.o - Object unk_02048120.o - Object unk_020484A8.o - Object unk_02048904.o - Object script_pokemon_util.o - Object unk_0204A368.o - Object unk_0204A498.o - Object unk_0204AB0C.o - Object unk_0204ADE0.o - Object unk_0204AEA8.o - Object unk_0204AF24.o - Object unk_0204B0A0.o - Object unk_0204B34C.o - Object unk_0204B9EC.o - Object poketch.o - Object unk_0204C1B4.o - Object unk_0204CA80.o - Object unk_0204CB20.o - Object unk_0204FBA8.o - Object unk_02050E48.o - Object unk_020520AC.o - Object unk_02052EE8.o - Object unk_0205363C.o - Object unk_02053750.o - Object text_02054590.o - Object unk_0205478C.o - Object unk_02054C14.o - Object unk_02055068.o - Object unk_020557F4.o - Object unk_02057380.o - Object unk_02058EE8.o - Object unk_02059F04.o - Object unk_0205AD98.o - Object unk_0205BEF8.o - Object unk_0205C334.o - Object unk_0205C598.o - Object unk_0205CDB4.o - Object unk_0205CE48.o - Object unk_0205DD18.o - Object unk_0205E4EC.o - Object unk_0205EB38.o - Object unk_0205EC84.o - Object unk_0205F314.o - Object unk_0205F7A0.o - Object unk_0205FA2C.o - Object unk_0206015C.o - Object unk_02060344.o - Object unk_020603B0.o - Object unk_020606B0.o - Object unk_020607D4.o - Object unk_02060CCC.o - Object unk_020625EC.o - Object unk_0206367C.o - Object unk_02063888.o - Object unk_02063948.o - Object unk_0206439C.o - Object unk_020643C0.o - Object unk_020647A4.o - Object unk_02064CA8.o - Object unk_02064E20.o - Object unk_02064E4C.o - Object unk_02064E90.o - Object unk_020653EC.o - Object unk_02066840.o - - ##poketool## - Object pokemon.o - Object waza.o - Object trainer_data.o - Object pokemon_storage_system.o - Object unk_0206B688.o - Object party.o - Object unk_0206BB28.o - Object unk_0206BB5C.o - Object unk_0206BF90.o - Object unk_0206C700.o - Object unk_0206DE24.o - Object unk_0206E0F0.o - Object bag_view.o - - ##itemtool## - Object itemtool.o - Object bag.o - Object unk_0206F1F0.o - Object unk_0206F3FC.o - Object unk_02072548.o - Object unk_02073710.o - Object unk_02073DA8.o - Object unk_0207550C.o - Object unk_020772F0.o - Object unk_020799E8.o - Object unk_02079C70.o - Object unk_0207C328.o - Object unk_0207D5BC.o - Object unk_0207EF6C.o - Object unk_0207F95C.o - Object unk_0207FC5C.o - Object unk_0207FD00.o - Object unk_02080C38.o - Object unk_020828BC.o - Object unk_020834D0.o - Object unk_02083B84.o - Object unk_02083D48.o - Object unk_02084098.o - Object unk_020842D0.o - Object use_item_on_mon.o - Object unk_020851B8.o - Object nutdata.o - Object unk_02085338.o - Object unk_020854E0.o - Object unk_020859C0.o - Object unk_02086084.o - Object unk_02086414.o - Object unk_02086FA8.o - Object unk_02087A1C.o - Object unk_02087A6C.o - Object unk_02087D00.o - Object unk_02088320.o - Object unk_02088814.o - Object unk_02088858.o - Object unk_0208890C.o - Object unk_0208898C.o - Object unk_02088AAC.o - Object unk_02088D1C.o - Object unk_02088DD8.o - Object unk_02088F0C.o - Object unk_020893E0.o - Object unk_02089498.o - Object unk_02089960.o - Object unk_02089D90.o - Object unk_02089F24.o - Object unk_0208A258.o - Object unk_0208A300.o - Object unk_0208A338.o - Object error_message_reset.o - ### Third-party libraries ### - Object unk_0208AC14.o - Object custom_allocator.o - Object unk_020910EC.o - Object DWC_backup.o - Object DWC_bm_init.o - Object DWC_util_wifiidtool.o - Object DWC_init.o - Object DWC_account.o - Object SOC_socl_startup.o - Object SOC_socl_command.o - Object SOC_socl_create.o - Object SOC_socl_bind.o - Object SOC_socl_read.o - Object SOC_socl_shutdown.o - Object SOC_socl_close.o - Object SOC_socl_cleanup.o - Object SOC_socl_poll.o - Object SOC_socl_misc.o - Object SOC_socl_list.o - Object SOC_soc.o - Object SOC_socl_ssl.o - Object CPS_network.o - Object SSL_ssl.o - Object SSL_md5.o - Object SSL_sha1.o - Object SSL_rca4.o - Object SSL_biginteger.o - Object WCM_system.o - Object WCM_aplist.o - Object WCM_cpsif.o - Object WCM_util.o - Object WIFI_stubsmd5_dummy.o - Object libVCT.o - ### Nitro System SDK ### - Object NNS_FND_list.o - Object NNS_FND_heapcommon.o - Object NNS_FND_expheap.o - Object NNS_FND_frameheap.o - Object NNS_FND_allocator.o - Object NNS_GFD_gfd_texvramman.o - Object NNS_GFD_gfd_plttvramman.o - Object NNS_GFD_gfd_frametexvra.o - Object NNS_GFD_gfd_frameplttvr.o - Object NNS_GFD_gfd_vramtransfe.o - Object NNS_GFD_gfdi_linkedlist.o - Object NNS_GFD_gfd_linkedlistt.o - Object NNS_GFD_gfd_linkedlistp.o - Object NNS_G2D_g2d_nan_load.o - Object NNS_G2D_g2d_nob_load.o - Object NNS_G2D_g2d_nmc_load.o - Object NNS_G2D_g2d_ncg_load.o - Object NNS_G2D_g2d_ncl_load.o - Object NNS_G2D_g2d_nsc_load.o - Object NNS_G2D_g2d_load.o - Object NNS_G2D_g2d_softsprite.o - Object NNS_G2D_g2d_animation.o - Object NNS_G2D_g2d_oam.o - Object NNS_G2D_g2d_palettetabl.o - Object NNS_G2D_g2d_image.o - Object NNS_G2D_g2d_srtcontrol.o - Object NNS_G2D_g2d_node.o - Object NNS_G2D_g2d_cellanimati.o - Object NNS_G2D_g2d_multicellan.o - Object NNS_G2D_g2d_renderer.o - Object NNS_G2D_g2di_mtx32.o - Object NNS_G2D_g2d_celltransfe.o - Object NNS_G2D_g2d_oamsoftware.o - Object NNS_G2D_g2d_renderercor.o - Object NNS_G2D_g2d_font.o - Object NNS_G2D_g2d_charcanvas.o - Object NNS_G2D_g2d_textcanvas.o - Object NNS_G2D_g2d_nft_load.o - Object NNS_G2D_g2di_bitreader.o - Object NNS_G2D_g2di_splitchar.o - Object NNS_G3D_kernel.o - Object NNS_G3D_glbstate.o - Object NNS_G3D_anm.o - Object NNS_G3D_cgtool.o - Object NNS_G3D_sbc.o - Object NNS_G3D_1mat1shp.o - Object NNS_G3D_gecom.o - Object NNS_G3D_util.o - Object NNS_G3D_mem.o - Object NNS_G3D_model.o - Object NNS_G3D_res_struct_acce.o - Object NNS_G3D_nsbca.o - Object NNS_G3D_nsbma.o - Object NNS_G3D_nsbta.o - Object NNS_G3D_nsbtp.o - Object NNS_G3D_nsbva.o - Object NNS_G3D_basic.o - Object NNS_G3D_maya.o - Object NNS_G3D_si3d.o - Object NNS_G3D_3dsmax.o - Object NNS_G3D_xsi.o - Object NNS_SND_main.o - Object NNS_SND_resource_mgr.o - Object NNS_SND_waveout.o - Object NNS_SND_player.o - Object NNS_SND_stream.o - Object NNS_SND_capture.o - Object NNS_SND_sndarc.o - Object NNS_SND_heap.o - Object NNS_SND_sndarc_loader.o - Object NNS_SND_sndarc_player.o - Object NNS_SND_sndarc_stream.o - Object NNS_SND_seqdata.o - Object NNS_SND_fader.o - ### Nitro SDK ### - Object FX_mtx22.o - Object FX_mtx33.o - Object FX_mtx43.o - Object FX_mtx44.o - Object FX_cp.o - Object FX_vec.o - Object FX_sincos.o - Object FX_atan.o - Object FX.o - Object GX.o - Object GX_state.o - Object GX_vramcnt.o - Object GX_bgcnt.o - Object GX_g2.o - Object GX_g3b.o - Object GX_g3imm.o - Object GX_g3x.o - Object GX_g3_util.o - Object GX_load2d.o - Object GX_load3d.o - Object GX_g3.o - Object GX_asm.o - Object OS_irqHandler.o (.text) - Object OS_irqTable.o - Object OS_interrupt.o - Object OS_spinLock.o - Object OS_printf.o - Object OS_thread.o - Object OS_context.o - Object OS_emulator.o - Object OS_message.o - Object OS_mutex.o - Object OS_cache.o - Object OS_init.o - Object OS_arena.o - Object OS_alloc.o - Object OS_tcm.o - Object OS_protectionUnit.o - Object OS_protectionRegion.o - Object OS_exception.o - Object OS_timer.o - Object OS_tick.o - Object OS_alarm.o - Object OS_valarm.o - Object OS_system.o - Object OS_reset.o - Object OS_ownerInfo.o - Object OS_vramExclusive.o - Object OS_entropy.o - Object OS_terminate_proc.o - Object MI_wram.o - Object MI_dma.o - Object MI_dma_hblank.o - Object MI_dma_gxcommand.o - Object MI_memory.o - Object MI_swap.o - Object MI_uncompress.o - Object MI_dma_card.o - Object MI_init.o - Object SND_interface.o - Object SND_main.o - Object SND_command.o - Object SND_alarm.o - Object SND_work.o - Object SND_util.o - Object SND_bank.o - Object PXI_init.o - Object PXI_fifo.o - Object FS_command.o - Object FS_command_default.o - Object FS_archive.o - Object FS_file.o - Object FS_rom.o - Object FS_overlay.o - Object DGT_hash1.o - Object DGT_hash2.o - Object DGT_sha1s_arm4cw.o - Object CP_context.o - Object SPI_tp.o - Object SPI_mic.o - Object SPI_pm.o - Object RTC_external.o - Object RTC_internal.o - Object RTC_convert.o - Object CARD_common.o - Object CARD_spi.o - Object CARD_backup.o - Object CARD_rom.o - Object CARD_request.o - Object CARD_pullOut.o - Object WM_system.o - Object WM_sync.o - Object WM_standard.o - Object WM_mp.o - Object WM_dcf.o - Object WM_ds.o - Object WM_ks.o - Object WM_etc.o - Object CTRDG_common.o - Object CTRDG_proc.o - Object CTRDG_backup.o - Object CTRDG_flash_common.o - Object CTRDG_flash_AT29LV512.o - Object CTRDG_flash_LE26FV10N1TS-10.o - Object CTRDG_flash_LE39FW512.o - Object CTRDG_flash_MX29L010.o - Object CTRDG_flash_MX29L512.o - Object CTRDG_task.o - Object MATH_pop.o - Object MATH_dgt.o - Object MATH_crc.o - Object STD_string.o - ### Standard libraries ### - ### Bundled with CodeWarrior, so probably compiled with 2.0sp1 ### - Object MSL_ARM_abort_exit.o - Object MSL_ARM_critical_regions_NITRO.o - Object MSL_ARM_math.o - Object MSL_Common_ansi_files.o - Object MSL_Common_arith.o - Object MSL_Common_assert.o - Object MSL_Common_buffer_io.o - Object MSL_Common_ctype.o - Object MSL_Common_direct_io.o - Object MSL_Common_errno.o - Object MSL_Common_file_io.o - Object MSL_Common_file_pos.o - Object MSL_Common_float.o - Object MSL_Common_mbstring.o - Object MSL_Common_mem.o - Object MSL_Common_mem_funcs.o - Object MSL_Common_printf.o - Object MSL_Common_qsort.o - Object MSL_Common_rand.o - Object MSL_Common_scanf.o - Object MSL_Common_signal.o - Object MSL_Common_string.o - Object MSL_Common_strtold.o - Object MSL_Common_strtoul.o - Object MSL_Common_wchar_io.o - Object MSL_Common_wctype.o - Object MSL_Common_wmem.o - Object MSL_Common_wprintf.o - Object MSL_Common_wstring.o - Object MSL_DPMath_e_pow.o - Object MSL_DPMath_s_copysign.o - Object MSL_DPMath_s_fabs.o - Object MSL_DPMath_s_frexp.o - Object MSL_DPMath_s_ldexp.o - Object MSL_DPMath_w_pow.o - Object MSL_fp_ansi.o - Object MSL_math.o - Object MSL_string_extras.o - Object RUNTIME_d_add.o - Object RUNTIME_d_dtof.o - Object RUNTIME_d_dtoi.o - Object RUNTIME_d_dtoull.o - Object RUNTIME_d_itod.o - Object RUNTIME_d_mul.o - Object RUNTIME_d_sqrt.o - Object RUNTIME_d_sub.o - Object RUNTIME_f_add.o - Object RUNTIME_f_cmp.o - Object RUNTIME_f_div.o - Object RUNTIME_f_ftod.o - Object RUNTIME_f_ftoi.o - Object RUNTIME_f_ftou.o - Object RUNTIME_f_itof.o - Object RUNTIME_f_mul.o - Object RUNTIME_f_sub.o - Object RUNTIME_ll_div.o - Object RUNTIME_ll_mul.o - Object RUNTIME_ll_sll.o - Object RUNTIME_s32_div_f.o - Object RUNTIME_u32_div_f.o - Object RUNTIME_d_div.o - Object RUNTIME_ieee_status.o - Object RUNTIME_ARM_semihosted_console_io.o - Object RUNTIME_CPLUS_StaticInitializers.o - Object RUNTIME_NITRO_eabi_init.o + Address 0x02000000 + Object main.o + Object list_menu.o + Object unk_02001B80.o + Object string_util.o + Object render_text.o + Object font.o + Object palette.o + Object sound.o + Object unk_020040F4.o + Object unk_020051F4.o + Object unk_02005CFC.o + Object poke_overlay.o + Object unk_020061E8.o + Object overlay_manager.o + Object filesystem.o + Object gf_gfx_loader.o + Object unk_02006D98.o + Object unk_02008AA4.o + Object unk_02008DEC.o + Object unk_02009EAC.o + Object msgdata.o + Object script_buffers.o + Object unk_0200BA78.o + Object unk_0200BB14.o + Object unk_0200CA44.o + Object unk_0200CABC.o + Object unk_0200E1D0.o + Object unk_0200E850.o + Object unk_0201137C.o + Object unk_02011744.o + Object unk_02012004.o + Object gf_rtc.o + Object list_menu_items.o + Object unk_02012944.o + Object unk_02012CC8.o + Object mail_message.o + Object unk_020139D8.o + Object unk_02013CD4.o + Object unk_020142EC.o + Object unk_020144FC.o + Object unk_02014590.o + Object unk_02014BF4.o + Object unk_02015CC0.o + Object unk_02015D14.o + Object unk_02015E30.o + Object game_init.o + Object heap.o + Object bg_window.o + Object unk_0201B1A8.o + Object unk_0201B4E8.o + Object unk_0201B6D0.o + Object unk_0201B8B8.o + Object math_util.o + Object text.o + Object unk_0201C24C.o + Object unk_0201C360.o + Object unk_0201C620.o + Object unk_0201C6B4.o + Object unk_0201C7A0.o + Object unk_0201CBEC.o + Object unk_0201CC08.o + Object unk_0201D040.o + Object unk_0201E00C.o + Object GX_layers.o + Object unk_0201E7D8.o + Object unk_0201F06C.o + Object unk_020208B8.o + Object timer3.o + Object error_handling.o + Object unk_02020C44.o + Object unk_0202134C.o + Object unk_02021590.o + Object unk_02021934.o + Object unk_02021FF8.o + Object unk_02022244.o + Object unk_02022294.o + Object unk_020222E8.o + Object unk_02022318.o + Object unk_02022450.o + Object unk_02022504.o + Object save.o + Object save_arrays.o + Object sav_system_info.o + Object player_data.o + Object unk_02023AC4.o + Object daycare.o + Object pokedex.o + Object unk_02024E64.o + Object options.o + Object unk_020250A4.o + Object unk_02025484.o + Object unk_020254B8.o + Object mail.o + Object unk_02025954.o + Object unk_02026CD0.o + Object unk_02027E30.o + Object unk_020281E0.o + Object unk_020286F8.o + Object coins.o + Object unk_02028980.o + Object unk_02029A84.o + Object unk_02029AE0.o + Object seal_case.o + Object unk_02029CEC.o + Object igt.o + Object sav_chatot.o + Object unk_02029FB0.o + Object unk_0202A1E0.o + Object unk_0202A8F4.o + Object unk_0202A924.o + Object unk_0202ABBC.o + Object unk_0202AC20.o + Object hall_of_fame.o + Object unk_0202B374.o + Object unk_0202B870.o + Object unk_0202BE98.o + Object unk_0202C0E0.o + Object unk_0202C144.o + Object unk_0202C198.o + Object unk_0202D394.o + Object unk_0202D4C4.o + Object unk_0202D858.o + Object unk_0202D8D0.o + Object unk_0202DB14.o + Object unk_0202E29C.o + Object unk_0202F150.o + Object unk_02031480.o + Object unk_02031734.o + Object unk_020336C0.o + Object unk_02033778.o + Object unk_020337E8.o + Object unk_02033874.o + Object unk_02033B68.o + Object unk_02033F50.o + Object wfc_user_info_warning.o + Object map_matrix.o + Object map_header.o + Object unk_02034A28.o + Object unk_02034D7C.o + Object unk_02034E84.o + Object unk_02034FE4.o + Object unk_02035068.o + Object unk_02036FA4.o + Object unk_02037024.o + Object unk_020372D4.o + Object unk_020377B0.o + Object unk_020377F0.o + Object script.o + Object unk_02038C78.o + Object scrcmd.o + Object scrcmd_asm.o + Object scrcmd_mart.o + Object scrcmd_3.o + Object scrcmd_names.o + Object scrcmd_5.o + Object scrcmd_sound.o + Object scrcmd_7.o + Object scrcmd_8.o + Object scrcmd_9.o + Object scrcmd_10.o + Object scrcmd_berry_trees.o + Object scrcmd_12.o + Object scrcmd_13.o + Object scrcmd_coins.o + Object scrcmd_money.o + Object scrcmd_daycare.o + Object scrcmd_17.o + Object scrcmd_party.o + Object scrcmd_fossils.o + Object scrcmd_prizes.o + Object scrcmd_flags.o + Object scrcmd_items.o + Object scrcmd_underground.o + Object scrcmd_24.o + Object scrcmd_25.o + Object unk_02046030.o + Object event_data.o + Object unk_0204639C.o + Object unk_0204653C.o + Object unk_02047500.o + Object unk_020476CC.o + Object unk_02048120.o + Object unk_020484A8.o + Object unk_02048904.o + Object script_pokemon_util.o + Object unk_0204A368.o + Object unk_0204A498.o + Object unk_0204AB0C.o + Object unk_0204ADE0.o + Object unk_0204AEA8.o + Object unk_0204AF24.o + Object unk_0204B0A0.o + Object unk_0204B34C.o + Object unk_0204B9EC.o + Object poketch.o + Object unk_0204C1B4.o + Object unk_0204CA80.o + Object unk_0204CB20.o + Object unk_0204FBA8.o + Object unk_02050E48.o + Object unk_020520AC.o + Object unk_02052EE8.o + Object unk_0205363C.o + Object unk_02053750.o + Object text_02054590.o + Object unk_0205478C.o + Object unk_02054C14.o + Object unk_02055068.o + Object unk_020557F4.o + Object unk_02057380.o + Object unk_02058EE8.o + Object unk_02059F04.o + Object unk_0205AD98.o + Object unk_0205BEF8.o + Object unk_0205C334.o + Object unk_0205C598.o + Object unk_0205CDB4.o + Object unk_0205CE48.o + Object unk_0205DD18.o + Object unk_0205E4EC.o + Object unk_0205EB38.o + Object unk_0205EC84.o + Object unk_0205F314.o + Object unk_0205F7A0.o + Object unk_0205FA2C.o + Object unk_0206015C.o + Object unk_02060344.o + Object unk_020603B0.o + Object unk_020606B0.o + Object unk_020607D4.o + Object unk_02060CCC.o + Object unk_020625EC.o + Object unk_0206367C.o + Object unk_02063888.o + Object unk_02063948.o + Object unk_0206439C.o + Object unk_020643C0.o + Object unk_020647A4.o + Object unk_02064CA8.o + Object unk_02064E20.o + Object unk_02064E4C.o + Object unk_02064E90.o + Object unk_020653EC.o + Object unk_02066840.o + + ##poketool## + Object pokemon.o + Object waza.o + Object trainer_data.o + Object pokemon_storage_system.o + Object unk_0206B688.o + Object party.o + Object unk_0206BB28.o + Object unk_0206BB5C.o + Object unk_0206BF90.o + Object unk_0206C700.o + Object unk_0206DE24.o + Object unk_0206E0F0.o + Object bag_view.o + + ##itemtool## + Object itemtool.o + Object bag.o + Object unk_0206F1F0.o + Object unk_0206F3FC.o + Object unk_02072548.o + Object unk_02073710.o + Object unk_02073DA8.o + Object unk_0207550C.o + Object unk_020772F0.o + Object unk_020799E8.o + Object unk_02079C70.o + Object unk_0207C328.o + Object unk_0207D5BC.o + Object unk_0207EF6C.o + Object unk_0207F95C.o + Object unk_0207FC5C.o + Object unk_0207FD00.o + Object unk_02080C38.o + Object unk_020828BC.o + Object unk_020834D0.o + Object unk_02083B84.o + Object unk_02083D48.o + Object unk_02084098.o + Object unk_020842D0.o + Object use_item_on_mon.o + Object unk_020851B8.o + Object nutdata.o + Object unk_02085338.o + Object unk_020854E0.o + Object unk_020859C0.o + Object unk_02086084.o + Object unk_02086414.o + Object unk_02086FA8.o + Object unk_02087A1C.o + Object unk_02087A6C.o + Object unk_02087D00.o + Object unk_02088320.o + Object unk_02088814.o + Object unk_02088858.o + Object unk_0208890C.o + Object unk_0208898C.o + Object unk_02088AAC.o + Object unk_02088D1C.o + Object unk_02088DD8.o + Object unk_02088F0C.o + Object unk_020893E0.o + Object unk_02089498.o + Object unk_02089960.o + Object unk_02089D90.o + Object unk_02089F24.o + Object unk_0208A258.o + Object unk_0208A300.o + Object unk_0208A338.o + Object error_message_reset.o + ### Third-party libraries ### + Object unk_0208AC14.o + Object custom_allocator.o + Object unk_020910EC.o + Object DWC_backup.o + Object DWC_bm_init.o + Object DWC_util_wifiidtool.o + Object DWC_init.o + Object DWC_account.o + Object SOC_socl_startup.o + Object SOC_socl_command.o + Object SOC_socl_create.o + Object SOC_socl_bind.o + Object SOC_socl_read.o + Object SOC_socl_shutdown.o + Object SOC_socl_close.o + Object SOC_socl_cleanup.o + Object SOC_socl_poll.o + Object SOC_socl_misc.o + Object SOC_socl_list.o + Object SOC_soc.o + Object SOC_socl_ssl.o + Object CPS_network.o + Object SSL_ssl.o + Object SSL_md5.o + Object SSL_sha1.o + Object SSL_rca4.o + Object SSL_biginteger.o + Object WCM_system.o + Object WCM_aplist.o + Object WCM_cpsif.o + Object WCM_util.o + Object WIFI_stubsmd5_dummy.o + Object libVCT.o + ### Nitro System SDK ### + Object NNS_FND_list.o + Object NNS_FND_heapcommon.o + Object NNS_FND_expheap.o + Object NNS_FND_frameheap.o + Object NNS_FND_allocator.o + Object NNS_GFD_gfd_texvramman.o + Object NNS_GFD_gfd_plttvramman.o + Object NNS_GFD_gfd_frametexvra.o + Object NNS_GFD_gfd_frameplttvr.o + Object NNS_GFD_gfd_vramtransfe.o + Object NNS_GFD_gfdi_linkedlist.o + Object NNS_GFD_gfd_linkedlistt.o + Object NNS_GFD_gfd_linkedlistp.o + Object NNS_G2D_g2d_nan_load.o + Object NNS_G2D_g2d_nob_load.o + Object NNS_G2D_g2d_nmc_load.o + Object NNS_G2D_g2d_ncg_load.o + Object NNS_G2D_g2d_ncl_load.o + Object NNS_G2D_g2d_nsc_load.o + Object NNS_G2D_g2d_load.o + Object NNS_G2D_g2d_softsprite.o + Object NNS_G2D_g2d_animation.o + Object NNS_G2D_g2d_oam.o + Object NNS_G2D_g2d_palettetabl.o + Object NNS_G2D_g2d_image.o + Object NNS_G2D_g2d_srtcontrol.o + Object NNS_G2D_g2d_node.o + Object NNS_G2D_g2d_cellanimati.o + Object NNS_G2D_g2d_multicellan.o + Object NNS_G2D_g2d_renderer.o + Object NNS_G2D_g2di_mtx32.o + Object NNS_G2D_g2d_celltransfe.o + Object NNS_G2D_g2d_oamsoftware.o + Object NNS_G2D_g2d_renderercor.o + Object NNS_G2D_g2d_font.o + Object NNS_G2D_g2d_charcanvas.o + Object NNS_G2D_g2d_textcanvas.o + Object NNS_G2D_g2d_nft_load.o + Object NNS_G2D_g2di_bitreader.o + Object NNS_G2D_g2di_splitchar.o + Object NNS_G3D_kernel.o + Object NNS_G3D_glbstate.o + Object NNS_G3D_anm.o + Object NNS_G3D_cgtool.o + Object NNS_G3D_sbc.o + Object NNS_G3D_1mat1shp.o + Object NNS_G3D_gecom.o + Object NNS_G3D_util.o + Object NNS_G3D_mem.o + Object NNS_G3D_model.o + Object NNS_G3D_res_struct_acce.o + Object NNS_G3D_nsbca.o + Object NNS_G3D_nsbma.o + Object NNS_G3D_nsbta.o + Object NNS_G3D_nsbtp.o + Object NNS_G3D_nsbva.o + Object NNS_G3D_basic.o + Object NNS_G3D_maya.o + Object NNS_G3D_si3d.o + Object NNS_G3D_3dsmax.o + Object NNS_G3D_xsi.o + Object NNS_SND_main.o + Object NNS_SND_resource_mgr.o + Object NNS_SND_waveout.o + Object NNS_SND_player.o + Object NNS_SND_stream.o + Object NNS_SND_capture.o + Object NNS_SND_sndarc.o + Object NNS_SND_heap.o + Object NNS_SND_sndarc_loader.o + Object NNS_SND_sndarc_player.o + Object NNS_SND_sndarc_stream.o + Object NNS_SND_seqdata.o + Object NNS_SND_fader.o + ### Nitro SDK ### + Object FX_mtx22.o + Object FX_mtx33.o + Object FX_mtx43.o + Object FX_mtx44.o + Object FX_cp.o + Object FX_vec.o + Object FX_sincos.o + Object FX_atan.o + Object FX.o + Object GX.o + Object GX_state.o + Object GX_vramcnt.o + Object GX_bgcnt.o + Object GX_g2.o + Object GX_g3b.o + Object GX_g3imm.o + Object GX_g3x.o + Object GX_g3_util.o + Object GX_load2d.o + Object GX_load3d.o + Object GX_g3.o + Object GX_asm.o + Object OS_irqHandler.o (.text) + Object OS_irqTable.o + Object OS_interrupt.o + Object OS_spinLock.o + Object OS_printf.o + Object OS_thread.o + Object OS_context.o + Object OS_emulator.o + Object OS_message.o + Object OS_mutex.o + Object OS_cache.o + Object OS_init.o + Object OS_arena.o + Object OS_alloc.o + Object OS_tcm.o + Object OS_protectionUnit.o + Object OS_protectionRegion.o + Object OS_exception.o + Object OS_timer.o + Object OS_tick.o + Object OS_alarm.o + Object OS_valarm.o + Object OS_system.o + Object OS_reset.o + Object OS_ownerInfo.o + Object OS_vramExclusive.o + Object OS_entropy.o + Object OS_terminate_proc.o + Object MI_wram.o + Object MI_dma.o + Object MI_dma_hblank.o + Object MI_dma_gxcommand.o + Object MI_memory.o + Object MI_swap.o + Object MI_uncompress.o + Object MI_dma_card.o + Object MI_init.o + Object SND_interface.o + Object SND_main.o + Object SND_command.o + Object SND_alarm.o + Object SND_work.o + Object SND_util.o + Object SND_bank.o + Object PXI_init.o + Object PXI_fifo.o + Object FS_command.o + Object FS_command_default.o + Object FS_archive.o + Object FS_file.o + Object FS_rom.o + Object FS_overlay.o + Object DGT_hash1.o + Object DGT_hash2.o + Object DGT_sha1s_arm4cw.o + Object CP_context.o + Object SPI_tp.o + Object SPI_mic.o + Object SPI_pm.o + Object RTC_external.o + Object RTC_internal.o + Object RTC_convert.o + Object CARD_common.o + Object CARD_spi.o + Object CARD_backup.o + Object CARD_rom.o + Object CARD_request.o + Object CARD_pullOut.o + Object WM_system.o + Object WM_sync.o + Object WM_standard.o + Object WM_mp.o + Object WM_dcf.o + Object WM_ds.o + Object WM_ks.o + Object WM_etc.o + Object CTRDG_common.o + Object CTRDG_proc.o + Object CTRDG_backup.o + Object CTRDG_flash_common.o + Object CTRDG_flash_AT29LV512.o + Object CTRDG_flash_LE26FV10N1TS-10.o + Object CTRDG_flash_LE39FW512.o + Object CTRDG_flash_MX29L010.o + Object CTRDG_flash_MX29L512.o + Object CTRDG_task.o + Object MATH_pop.o + Object MATH_dgt.o + Object MATH_crc.o + Object STD_string.o + ### Standard libraries ### + ### Bundled with CodeWarrior, so probably compiled with 2.0sp1 ### + Object MSL_ARM_abort_exit.o + Object MSL_ARM_critical_regions_NITRO.o + Object MSL_ARM_math.o + Object MSL_Common_ansi_files.o + Object MSL_Common_arith.o + Object MSL_Common_assert.o + Object MSL_Common_buffer_io.o + Object MSL_Common_ctype.o + Object MSL_Common_direct_io.o + Object MSL_Common_errno.o + Object MSL_Common_file_io.o + Object MSL_Common_file_pos.o + Object MSL_Common_float.o + Object MSL_Common_mbstring.o + Object MSL_Common_mem.o + Object MSL_Common_mem_funcs.o + Object MSL_Common_printf.o + Object MSL_Common_qsort.o + Object MSL_Common_rand.o + Object MSL_Common_scanf.o + Object MSL_Common_signal.o + Object MSL_Common_string.o + Object MSL_Common_strtold.o + Object MSL_Common_strtoul.o + Object MSL_Common_wchar_io.o + Object MSL_Common_wctype.o + Object MSL_Common_wmem.o + Object MSL_Common_wprintf.o + Object MSL_Common_wstring.o + Object MSL_DPMath_e_pow.o + Object MSL_DPMath_s_copysign.o + Object MSL_DPMath_s_fabs.o + Object MSL_DPMath_s_frexp.o + Object MSL_DPMath_s_ldexp.o + Object MSL_DPMath_w_pow.o + Object MSL_fp_ansi.o + Object MSL_math.o + Object MSL_string_extras.o + Object RUNTIME_d_add.o + Object RUNTIME_d_dtof.o + Object RUNTIME_d_dtoi.o + Object RUNTIME_d_dtoull.o + Object RUNTIME_d_itod.o + Object RUNTIME_d_mul.o + Object RUNTIME_d_sqrt.o + Object RUNTIME_d_sub.o + Object RUNTIME_f_add.o + Object RUNTIME_f_cmp.o + Object RUNTIME_f_div.o + Object RUNTIME_f_ftod.o + Object RUNTIME_f_ftoi.o + Object RUNTIME_f_ftou.o + Object RUNTIME_f_itof.o + Object RUNTIME_f_mul.o + Object RUNTIME_f_sub.o + Object RUNTIME_ll_div.o + Object RUNTIME_ll_mul.o + Object RUNTIME_ll_sll.o + Object RUNTIME_s32_div_f.o + Object RUNTIME_u32_div_f.o + Object RUNTIME_d_div.o + Object RUNTIME_ieee_status.o + Object RUNTIME_ARM_semihosted_console_io.o + Object RUNTIME_CPLUS_StaticInitializers.o + Object RUNTIME_NITRO_eabi_init.o } Autoload ITCM { - Address 0x01FF8000 - Object OS_irqHandler.o (.itcm) - Object OS_reset.o (.itcm) - Object MI_dma.o (.itcm) - Object MI_dma_gxcommand.o (.itcm) + Address 0x01FF8000 + Object OS_irqHandler.o (.itcm) + Object OS_reset.o (.itcm) + Object MI_dma.o (.itcm) + Object MI_dma_gxcommand.o (.itcm) } Autoload DTCM { - Address 0x027E0000 - Object OS_irqHandler.o (.bss) - Object OS_irqTable.o (.dtcm) + Address 0x027E0000 + Object OS_irqHandler.o (.bss) + Object OS_irqTable.o (.dtcm) } Autoload EXT { - Address 0x02400000 + Address 0x02400000 } Overlay MODULE_00 { - After arm9 + After arm9 } Overlay MODULE_01 { - After arm9 - Object module_01.o + After arm9 + Object module_01.o } Overlay MODULE_02 { - After MODULE_01 + After MODULE_01 } Overlay MODULE_03 { - After ITCM + After ITCM } Overlay MODULE_04 { - After arm9 - Object thumb_04.o - Object arm_04.o + After arm9 + Object thumb_04.o + Object arm_04.o } Overlay MODULE_05 { - ##Overworld## - After arm9 - Object mod05_021D74E0.o - Object mod05_021D7F4C.o - Object mod05_021D80E8.o - Object mod05_021D9320.o - Object mod05_021D9A48.o - Object mod05_021DA5B8.o - Object mod05_021DB44C.o - Object mod05_021DB900.o - Object mod05_021DBA00.o - Object mod05_021DBABC.o - Object mod05_021DBD84.o - Object mod05_021DBE04.o - Object mod05_021DBEF4.o - Object mod05_021DC0B8.o - Object mod05_021E1374.o - Object mod05_021E1AD8.o - Object mod05_021E2B80.o - Object mod05_021E2E88.o - Object mod05_021E3340.o - Object mod05_021E3444.o - Object mod05_021E4AE4.o - Object mod05_021E52A8.o - Object mod05_021E5300.o - Object mod05_021E5564.o - Object mod05_021E55BC.o - Object mod05_021E577C.o - Object mod05_021E5918.o - Object mod05_021E5AB4.o - Object mod05_021E5C8C.o - Object mod05_021E5E10.o - Object mod05_021E5FD8.o - Object mod05_021E72FC.o - Object mod05_021E7504.o - Object mod05_021E779C.o - Object mod05_021E7C00.o - Object mod05_021E80F8.o - Object mod05_021E8310.o - Object module_05.o + ##Overworld## + After arm9 + Object mod05_021D74E0.o + Object mod05_021D7F4C.o + Object mod05_021D80E8.o + Object mod05_021D9320.o + Object mod05_021D9A48.o + Object mod05_021DA5B8.o + Object mod05_021DB44C.o + Object mod05_021DB900.o + Object mod05_021DBA00.o + Object mod05_021DBABC.o + Object mod05_021DBD84.o + Object mod05_021DBE04.o + Object mod05_021DBEF4.o + Object mod05_021DC0B8.o + Object mod05_021E1374.o + Object mod05_021E1AD8.o + Object mod05_021E2B80.o + Object mod05_021E2E88.o + Object mod05_021E3340.o + Object mod05_021E3444.o + Object mod05_021E4AE4.o + Object mod05_021E52A8.o + Object mod05_021E5300.o + Object mod05_021E5564.o + Object mod05_021E55BC.o + Object mod05_021E577C.o + Object mod05_021E5918.o + Object mod05_021E5AB4.o + Object mod05_021E5C8C.o + Object mod05_021E5E10.o + Object mod05_021E5FD8.o + Object mod05_021E72FC.o + Object mod05_021E7504.o + Object mod05_021E779C.o + Object mod05_021E7C00.o + Object mod05_021E80F8.o + Object mod05_021E8310.o + Object module_05.o } Overlay MODULE_06 { - ##Overworld## - After MODULE_05 - Object module_06.o + ##Overworld## + After MODULE_05 + Object module_06.o } Overlay MODULE_07 { - After MODULE_04 - Object module_07.o + After MODULE_04 + Object module_07.o } Overlay MODULE_08 { - After MODULE_04 - Object module_08.o + After MODULE_04 + Object module_08.o } Overlay MODULE_09 { - After MODULE_04 - Object module_09.o + After MODULE_04 + Object module_09.o } Overlay MODULE_10 { - After arm9 + After arm9 } Overlay MODULE_11 { - ##Battles## - After MODULE_08 - Object module_11_thumb1.o - Object module_11_sinit.o - Object module_11_thumb2.o + ##Battles## + After MODULE_08 + Object module_11_thumb1.o + Object module_11_sinit.o + Object module_11_thumb2.o } Overlay MODULE_12 { - After MODULE_08 - Object module_12.o + After MODULE_08 + Object module_12.o } Overlay MODULE_13 { - After MODULE_04 - Object module_13_init.o - Object module_13_arm1.o - Object module_13_thumb.o - Object module_13_arm2.o + After MODULE_04 + Object module_13_init.o + Object module_13_arm1.o + Object module_13_thumb.o + Object module_13_arm2.o } Overlay MODULE_14 { - ##PC## - After arm9 - Object module_14.o + ##PC## + After arm9 + Object module_14.o } Overlay MODULE_15 { - After arm9 - Object module_15.o + After arm9 + Object module_15.o } Overlay MODULE_16 { - ##Pokedex/Battle Sprites## - After arm9 - Object module_16.o + ##Pokedex/Battle Sprites## + After arm9 + Object module_16.o } Overlay MODULE_17 { - After arm9 - Object module_17.o + After arm9 + Object module_17.o } Overlay MODULE_18 { - After MODULE_05 - Object module_18.o + After MODULE_05 + Object module_18.o } Overlay MODULE_19 { - ##Bottom screen before Pokétch## - After MODULE_06 - Object module_19.o + ##Bottom screen before Pokétch## + After MODULE_06 + Object module_19.o } Overlay MODULE_20 { - ##Pokétch## - After MODULE_06 - Object module_20.o + ##Pokétch## + After MODULE_06 + Object module_20.o } Overlay MODULE_21 { - ##Pokétch Clock## - After MODULE_20 - Object mod21_02254854.o - Object mod21_02254A6C.o + ##Pokétch Clock## + After MODULE_20 + Object mod21_02254854.o + Object mod21_02254A6C.o } Overlay MODULE_22 { - After MODULE_20 - Object module_22_sinit.o - Object module_22.o + After MODULE_20 + Object module_22_sinit.o + Object module_22.o } Overlay MODULE_23 { - ##Pokétch Calculator## - After MODULE_20 - Object module_23_sinit.o - Object module_23.o + ##Pokétch Calculator## + After MODULE_20 + Object module_23_sinit.o + Object module_23.o } Overlay MODULE_24 { - ##Memo Pad## - After MODULE_20 - Object module_24_sinit.o - Object module_24.o + ##Memo Pad## + After MODULE_20 + Object module_24_sinit.o + Object module_24.o } Overlay MODULE_25 { - ##Analogue Watch## - After MODULE_20 - Object module_25_sinit.o - Object module_25.o + ##Analogue Watch## + After MODULE_20 + Object module_25_sinit.o + Object module_25.o } Overlay MODULE_26 { - ##Dot Artist## - After MODULE_20 - Object module_26_sinit.o - Object module_26.o + ##Dot Artist## + After MODULE_20 + Object module_26_sinit.o + Object module_26.o } Overlay MODULE_27 { - ##Pokétch Party## - After MODULE_20 - Object module_27_sinit.o - Object module_27.o + ##Pokétch Party## + After MODULE_20 + Object module_27_sinit.o + Object module_27.o } Overlay MODULE_28 { - ##Friendship Checker## - After MODULE_20 - Object module_28_sinit.o - Object module_28.o + ##Friendship Checker## + After MODULE_20 + Object module_28_sinit.o + Object module_28.o } Overlay MODULE_29 { - ##Dowsing Machine## - After MODULE_20 - Object module_29_sinit.o - Object module_29.o + ##Dowsing Machine## + After MODULE_20 + Object module_29_sinit.o + Object module_29.o } Overlay MODULE_30 { - After MODULE_20 - Object module_30_sinit.o - Object module_30.o + After MODULE_20 + Object module_30_sinit.o + Object module_30.o } Overlay MODULE_31 { - ##Pokétch Counter## - After MODULE_20 - Object module_31_sinit.o - Object module_31.o + ##Pokétch Counter## + After MODULE_20 + Object module_31_sinit.o + Object module_31.o } Overlay MODULE_32 { - After MODULE_20 - Object module_32_sinit.o - Object module_32.o + After MODULE_20 + Object module_32_sinit.o + Object module_32.o } Overlay MODULE_33 { - After MODULE_20 - Object module_33_sinit.o - Object module_33.o + After MODULE_20 + Object module_33_sinit.o + Object module_33.o } Overlay MODULE_34 { - After MODULE_20 - Object module_34_sinit.o - Object module_34.o + After MODULE_20 + Object module_34_sinit.o + Object module_34.o } Overlay MODULE_35 { - ##Daycare Checker## - After MODULE_20 - Object module_35_sinit.o - Object module_35.o + ##Daycare Checker## + After MODULE_20 + Object module_35_sinit.o + Object module_35.o } Overlay MODULE_36 { - After MODULE_20 - Object module_36_sinit.o - Object module_36.o + After MODULE_20 + Object module_36_sinit.o + Object module_36.o } Overlay MODULE_37 { - ##Coin Toss## - After MODULE_20 - Object module_37_sinit.o - Object module_37.o + ##Coin Toss## + After MODULE_20 + Object module_37_sinit.o + Object module_37.o } Overlay MODULE_38 { - ##Move Checker## - After MODULE_20 - Object module_38_sinit.o - Object module_38.o + ##Move Checker## + After MODULE_20 + Object module_38_sinit.o + Object module_38.o } Overlay MODULE_39 { - After MODULE_20 - Object module_39_sinit.o - Object module_39.o + After MODULE_20 + Object module_39_sinit.o + Object module_39.o } Overlay MODULE_40 { - After MODULE_20 - Object module_40_sinit.o - Object module_40.o + After MODULE_20 + Object module_40_sinit.o + Object module_40.o } Overlay MODULE_41 { - After MODULE_20 - Object module_41_sinit.o - Object module_41.o + After MODULE_20 + Object module_41_sinit.o + Object module_41.o } Overlay MODULE_42 { - ##Marking Map## - After MODULE_20 - Object module_42_sinit.o - Object module_42.o + ##Marking Map## + After MODULE_20 + Object module_42_sinit.o + Object module_42.o } Overlay MODULE_43 { - ##Berry Searcher## - After MODULE_20 - Object module_43_sinit.o - Object module_43.o + ##Berry Searcher## + After MODULE_20 + Object module_43_sinit.o + Object module_43.o } Overlay MODULE_44 { - After MODULE_20 - Object module_44_sinit.o - Object module_44.o + After MODULE_20 + Object module_44_sinit.o + Object module_44.o } Overlay MODULE_45 { - After MODULE_20 - Object module_45_sinit.o - Object module_45.o + After MODULE_20 + Object module_45_sinit.o + Object module_45.o } Overlay MODULE_46 { - After MODULE_20 - Object module_46_sinit.o - Object module_46.o + After MODULE_20 + Object module_46_sinit.o + Object module_46.o } Overlay MODULE_47 { - ##Link Searcher## - After MODULE_20 - Object module_47_sinit.o - Object module_47.o + ##Link Searcher## + After MODULE_20 + Object module_47_sinit.o + Object module_47.o } Overlay MODULE_48 { - After MODULE_20 - Object module_48_sinit.o - Object module_48.o + After MODULE_20 + Object module_48_sinit.o + Object module_48.o } Overlay MODULE_49 { - ##Pokemon History## - After MODULE_20 - Object module_49_sinit.o - Object module_49.o + ##Pokemon History## + After MODULE_20 + Object module_49_sinit.o + Object module_49.o } Overlay MODULE_50 { - After MODULE_20 - Object module_50_sinit.o - Object module_50.o + After MODULE_20 + Object module_50_sinit.o + Object module_50.o } Overlay MODULE_51 { - After MODULE_20 - Object module_51.o + After MODULE_20 + Object module_51.o } Overlay MODULE_52 { - ##Some kind of transition overlay for intro## - After arm9 - Object module_52.o + ##Some kind of transition overlay for intro## + After arm9 + Object module_52.o } Overlay MODULE_53 { - After arm9 - Object module_53.o + After arm9 + Object module_53.o } Overlay MODULE_54 { - After arm9 - Object module_54.o + After arm9 + Object module_54.o } Overlay MODULE_55 { - After arm9 - Object module_55.o + After arm9 + Object module_55.o } Overlay MODULE_56 { - After MODULE_04 - Object module_56.o + After MODULE_04 + Object module_56.o } Overlay MODULE_57 { - ##Trainer card## - After arm9 - Object module_57.o + ##Trainer card## + After arm9 + Object module_57.o } Overlay MODULE_58 { - After MODULE_57 - Object module_58.o + After MODULE_57 + Object module_58.o } Overlay MODULE_59 { - ##Rowan's intro## - After arm9 - Object mod59_021D74E0_src.o - Object mod59_021D74E0_asm.o - Object mod59_021D9868.o + ##Rowan's intro## + After arm9 + Object mod59_021D74E0_src.o + Object mod59_021D74E0_asm.o + Object mod59_021D9868.o } Overlay MODULE_60 { - ##Options## - After arm9 - Object module_60.o + ##Options## + After arm9 + Object module_60.o } Overlay MODULE_61 { - After arm9 - Object module_61.o + After arm9 + Object module_61.o } Overlay MODULE_62 { - After MODULE_08 - Object module_62_sinit.o - Object module_62.o + After MODULE_08 + Object module_62_sinit.o + Object module_62.o } Overlay MODULE_63 { - ### Title Demo ### - After arm9 - Object mod63_021D74E0.o - Object mod63_021D8890.o - Object mod63_021DA640.o - Object mod63_021DAE5C.o - Object mod63_021DB450.o + ### Title Demo ### + After arm9 + Object mod63_021D74E0.o + Object mod63_021D8890.o + Object mod63_021DA640.o + Object mod63_021DAE5C.o + Object mod63_021DB450.o } Overlay MODULE_64 { - ##Pokemon Selection## - After arm9 - Object module_64.o + ##Pokemon Selection## + After arm9 + Object module_64.o } Overlay MODULE_65 { - After arm9 - Object module_65.o + After arm9 + Object module_65.o } Overlay MODULE_66 { - ##Fly Map## - After arm9 - Object module_66.o + ##Fly Map## + After arm9 + Object module_66.o } Overlay MODULE_67 { - After arm9 - Object module_67.o + After arm9 + Object module_67.o } Overlay MODULE_68 { - After arm9 - Object module_68.o + After arm9 + Object module_68.o } Overlay MODULE_69 { - ##Hall of Fame## - After MODULE_08 - Object module_69.o + ##Hall of Fame## + After MODULE_08 + Object module_69.o } Overlay MODULE_70 { - After arm9 - Object module_70.o + After arm9 + Object module_70.o } Overlay MODULE_71 { - After MODULE_08 - Object module_71.o + After MODULE_08 + Object module_71.o } Overlay MODULE_72 { - After arm9 + After arm9 } Overlay MODULE_73 { - After arm9 - Object module_73.o + After arm9 + Object module_73.o } Overlay MODULE_74 { - After arm9 - Object module_74.o + After arm9 + Object module_74.o } Overlay MODULE_75 { - ### Player's bag ### - After MODULE_14 - Object module_75.o + ### Player's bag ### + After MODULE_14 + Object module_75.o } Overlay MODULE_76 { - After arm9 - Object module_76.o + After arm9 + Object module_76.o } Overlay MODULE_77 { - After arm9 - Object module_77.o + After arm9 + Object module_77.o } Overlay MODULE_78 { - After arm9 - Object module_78.o + After arm9 + Object module_78.o } Overlay MODULE_79 { - After MODULE_04 - Object module_79_thumb.o - Object module_79_arm.o + After MODULE_04 + Object module_79_thumb.o + Object module_79_arm.o } Overlay MODULE_80 { - After MODULE_08 - Object module_80.o + After MODULE_08 + Object module_80.o } Overlay MODULE_81 { - After MODULE_80 - Object module_81.o + After MODULE_80 + Object module_81.o } Overlay MODULE_82 { - After MODULE_08 - Object module_82.o + After MODULE_08 + Object module_82.o } Overlay MODULE_83 { - ##Load Screen## - After MODULE_08 - Object module_83.o + ##Load Screen## + After MODULE_08 + Object module_83.o } Overlay MODULE_84 { - ##Credits## - After arm9 - Object module_84_thumb1.o - Object module_84_arm.o - Object module_84_thumb2.o + ##Credits## + After arm9 + Object module_84_thumb1.o + Object module_84_arm.o + Object module_84_thumb2.o } Overlay MODULE_85 { - After arm9 - Object module_85.o + After arm9 + Object module_85.o } Overlay MODULE_86 { - After arm9 - Object module_86.o + After arm9 + Object module_86.o } diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index afe833c1..06fa49b6 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -1,521 +1,521 @@ - .include "asm/macros.inc" - .include "global.inc" - .include "constants/species.h" - .section .text - .balign 4, 0 + .include "asm/macros.inc" + .include "global.inc" + .include "constants/species.h" + .section .text + .balign 4, 0 - thumb_func_start MOD83_0222D5C0 + thumb_func_start MOD83_0222D5C0 MOD83_0222D5C0: ; 0x0222D5C0 - mov r0, #0 - bx lr - thumb_func_end MOD83_0222D5C0 + mov r0, #0 + bx lr + thumb_func_end MOD83_0222D5C0 - thumb_func_start MOD83_0222D5C4 + thumb_func_start MOD83_0222D5C4 MOD83_0222D5C4: ; 0x0222D5C4 - push {r4, r5, r6, r7, lr} - sub sp, #0x5c - add r5, r0, #0 - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - bl WindowIsInUse - cmp r0, #0 - bne _0222D63C - mov r1, #0x4f - mov r0, #0 - add r3, r5, #0 - lsl r1, r1, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x5c + add r5, r0, #0 + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + bl WindowIsInUse + cmp r0, #0 + bne _0222D63C + mov r1, #0x4f + mov r0, #0 + add r3, r5, #0 + lsl r1, r1, #2 _0222D5E0: - ldr r2, [r3, r1] - cmp r2, #1 - bne _0222D632 - lsl r1, r0, #2 - add r3, r5, r1 - mov r1, #0x4f - add r6, r0, #0 - mov r2, #0 - lsl r1, r1, #2 - str r2, [r3, r1] - mov r3, #0x1c - mov r0, #1 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - add r1, r1, #4 - ldr r7, _0222D670 ; =MOD83_0223A794 - mul r6, r3 - add r4, r7, r6 - ldr r3, [r4, #0x10] - add r0, sp, #8 - add r1, r5, r1 - bl MOD83_022388E4 - ldr r1, [r4, #8] - ldr r2, [r4, #0xc] - add r0, sp, #8 - mov r3, #0x13 - bl MOD83_02238934 - ldr r0, [r4, #0x14] - add r1, sp, #8 - str r0, [sp] - ldr r0, [r5] - ldr r2, [r7, r6] - ldr r3, [r4, #4] - bl MOD83_02238A38 - add sp, #0x5c - mov r0, #1 - pop {r4, r5, r6, r7, pc} + ldr r2, [r3, r1] + cmp r2, #1 + bne _0222D632 + lsl r1, r0, #2 + add r3, r5, r1 + mov r1, #0x4f + add r6, r0, #0 + mov r2, #0 + lsl r1, r1, #2 + str r2, [r3, r1] + mov r3, #0x1c + mov r0, #1 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r1, r1, #4 + ldr r7, _0222D670 ; =MOD83_0223A794 + mul r6, r3 + add r4, r7, r6 + ldr r3, [r4, #0x10] + add r0, sp, #8 + add r1, r5, r1 + bl MOD83_022388E4 + ldr r1, [r4, #8] + ldr r2, [r4, #0xc] + add r0, sp, #8 + mov r3, #0x13 + bl MOD83_02238934 + ldr r0, [r4, #0x14] + add r1, sp, #8 + str r0, [sp] + ldr r0, [r5] + ldr r2, [r7, r6] + ldr r3, [r4, #4] + bl MOD83_02238A38 + add sp, #0x5c + mov r0, #1 + pop {r4, r5, r6, r7, pc} _0222D632: - add r0, r0, #1 - add r3, r3, #4 - cmp r0, #1 - blt _0222D5E0 - b _0222D668 + add r0, r0, #1 + add r3, r3, #4 + cmp r0, #1 + blt _0222D5E0 + b _0222D668 _0222D63C: - ldr r0, _0222D674 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _0222D662 - ldr r0, _0222D678 ; =0x000005DC - bl PlaySE - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - mov r1, #0 - bl FUN_0200CCF8 - mov r0, #5 - lsl r0, r0, #6 - add r0, r5, r0 - bl RemoveWindow + ldr r0, _0222D674 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _0222D662 + ldr r0, _0222D678 ; =0x000005DC + bl PlaySE + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + mov r1, #0 + bl FUN_0200CCF8 + mov r0, #5 + lsl r0, r0, #6 + add r0, r5, r0 + bl RemoveWindow _0222D662: - add sp, #0x5c - mov r0, #1 - pop {r4, r5, r6, r7, pc} + add sp, #0x5c + mov r0, #1 + pop {r4, r5, r6, r7, pc} _0222D668: - mov r0, #0 - add sp, #0x5c - pop {r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #0x5c + pop {r4, r5, r6, r7, pc} + nop _0222D670: .word MOD83_0223A794 _0222D674: .word gMain _0222D678: .word 0x000005DC - thumb_func_end MOD83_0222D5C4 + thumb_func_end MOD83_0222D5C4 - thumb_func_start MOD83_0222D67C + thumb_func_start MOD83_0222D67C MOD83_0222D67C: ; 0x0222D67C - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r0, #0 - bl MOD83_02236E18 - mov r4, #0 - str r4, [r5, #0x24] - cmp r0, #0 - bne _0222D6E6 - bl MOD83_02236E9C - cmp r0, #4 - bhi _0222D6BE - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0 + bl MOD83_02236E18 + mov r4, #0 + str r4, [r5, #0x24] + cmp r0, #0 + bne _0222D6E6 + bl MOD83_02236E9C + cmp r0, #4 + bhi _0222D6BE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D6A2: ; jump table - .short _0222D6AC - _0222D6A2 - 2 ; case 0 - .short _0222D6B0 - _0222D6A2 - 2 ; case 1 - .short _0222D6B4 - _0222D6A2 - 2 ; case 2 - .short _0222D6B8 - _0222D6A2 - 2 ; case 3 - .short _0222D6BC - _0222D6A2 - 2 ; case 4 + .short _0222D6AC - _0222D6A2 - 2 ; case 0 + .short _0222D6B0 - _0222D6A2 - 2 ; case 1 + .short _0222D6B4 - _0222D6A2 - 2 ; case 2 + .short _0222D6B8 - _0222D6A2 - 2 ; case 3 + .short _0222D6BC - _0222D6A2 - 2 ; case 4 _0222D6AC: - mov r4, #2 - b _0222D6BE + mov r4, #2 + b _0222D6BE _0222D6B0: - mov r4, #1 - b _0222D6BE + mov r4, #1 + b _0222D6BE _0222D6B4: - mov r4, #5 - b _0222D6BE + mov r4, #5 + b _0222D6BE _0222D6B8: - mov r4, #4 - b _0222D6BE + mov r4, #4 + b _0222D6BE _0222D6BC: - mov r4, #3 + mov r4, #3 _0222D6BE: - add r0, r4, #0 - bl FUN_02016438 - ldr r0, [r5, #8] - bl Pokedex_GetNatDexFlag - cmp r0, #0 - beq _0222D6E6 - bl MOD83_02236EA8 - ldr r1, _0222D6E8 ; =gGameLanguage - ldrb r1, [r1] - cmp r1, r0 - bne _0222D6E6 - bl MOD83_02236E9C - add r0, r0, #1 - str r0, [r5, #0x24] - bl MOD83_02239490 + add r0, r4, #0 + bl FUN_02016438 + ldr r0, [r5, #8] + bl Pokedex_GetNatDexFlag + cmp r0, #0 + beq _0222D6E6 + bl MOD83_02236EA8 + ldr r1, _0222D6E8 ; =gGameLanguage + ldrb r1, [r1] + cmp r1, r0 + bne _0222D6E6 + bl MOD83_02236E9C + add r0, r0, #1 + str r0, [r5, #0x24] + bl MOD83_02239490 _0222D6E6: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _0222D6E8: .word gGameLanguage - thumb_func_end MOD83_0222D67C + thumb_func_end MOD83_0222D67C - thumb_func_start MOD83_0222D6EC + thumb_func_start MOD83_0222D6EC MOD83_0222D6EC: ; 0x0222D6EC - push {r4, lr} - mov r1, #0x43 - add r4, r0, #0 - lsl r1, r1, #2 - ldr r0, [r4, r1] - sub r0, #0xa - cmp r0, #4 - bhi _0222D7DC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + mov r1, #0x43 + add r4, r0, #0 + lsl r1, r1, #2 + ldr r0, [r4, r1] + sub r0, #0xa + cmp r0, #4 + bhi _0222D7DC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D708: ; jump table - .short _0222D712 - _0222D708 - 2 ; case 0 - .short _0222D718 - _0222D708 - 2 ; case 1 - .short _0222D7DC - _0222D708 - 2 ; case 2 - .short _0222D74C - _0222D708 - 2 ; case 3 - .short _0222D7D0 - _0222D708 - 2 ; case 4 + .short _0222D712 - _0222D708 - 2 ; case 0 + .short _0222D718 - _0222D708 - 2 ; case 1 + .short _0222D7DC - _0222D708 - 2 ; case 2 + .short _0222D74C - _0222D708 - 2 ; case 3 + .short _0222D7D0 - _0222D708 - 2 ; case 4 _0222D712: - mov r0, #0xb - str r0, [r4, r1] - pop {r4, pc} + mov r0, #0xb + str r0, [r4, r1] + pop {r4, pc} _0222D718: - ldr r0, [r4, #4] - bl FUN_02032D44 - mov r1, #0x78 - add r0, r1, #0 - add r0, #0x98 - str r1, [r4, r0] - mov r1, #0xd - add r0, r1, #0 - add r0, #0xff - str r1, [r4, r0] - mov r0, #0 - str r0, [r4, #0x40] - ldr r0, [r4, #0x14] - bl FUN_0202AF50 - cmp r0, #1 - bne _0222D7DC - ldr r1, [r4, #0x40] - mov r0, #1 - orr r1, r0 - str r1, [r4, #0x40] - ldr r1, [r4, #0x44] - orr r0, r1 - str r0, [r4, #0x44] - pop {r4, pc} + ldr r0, [r4, #4] + bl FUN_02032D44 + mov r1, #0x78 + add r0, r1, #0 + add r0, #0x98 + str r1, [r4, r0] + mov r1, #0xd + add r0, r1, #0 + add r0, #0xff + str r1, [r4, r0] + mov r0, #0 + str r0, [r4, #0x40] + ldr r0, [r4, #0x14] + bl FUN_0202AF50 + cmp r0, #1 + bne _0222D7DC + ldr r1, [r4, #0x40] + mov r0, #1 + orr r1, r0 + str r1, [r4, #0x40] + ldr r1, [r4, #0x44] + orr r0, r1 + str r0, [r4, #0x44] + pop {r4, pc} _0222D74C: - add r1, #0xc - ldr r0, [r4, r1] - cmp r0, #0 - bne _0222D7DC - bl FUN_02032D9C - ldr r1, [r4, #0x40] - bic r0, r1 - beq _0222D7B2 - mov r2, #0x45 - lsl r2, r2, #2 - ldr r3, [r4, r2] - cmp r3, #0xf - bne _0222D7B2 - add r2, r2, #4 - ldr r2, [r4, r2] - cmp r2, #0 - bne _0222D7B2 - cmp r1, r0 - beq _0222D7B2 - mov r2, #1 - add r1, r0, #0 - str r2, [r4, #0x48] - tst r1, r2 - beq _0222D782 - str r2, [r4, #0x34] - add r0, r2, #0 + add r1, #0xc + ldr r0, [r4, r1] + cmp r0, #0 + bne _0222D7DC + bl FUN_02032D9C + ldr r1, [r4, #0x40] + bic r0, r1 + beq _0222D7B2 + mov r2, #0x45 + lsl r2, r2, #2 + ldr r3, [r4, r2] + cmp r3, #0xf + bne _0222D7B2 + add r2, r2, #4 + ldr r2, [r4, r2] + cmp r2, #0 + bne _0222D7B2 + cmp r1, r0 + beq _0222D7B2 + mov r2, #1 + add r1, r0, #0 + str r2, [r4, #0x48] + tst r1, r2 + beq _0222D782 + str r2, [r4, #0x34] + add r0, r2, #0 _0222D782: - mov r1, #2 - add r2, r0, #0 - tst r2, r1 - beq _0222D790 - mov r0, #1 - str r0, [r4, #0x2c] - add r0, r1, #0 + mov r1, #2 + add r2, r0, #0 + tst r2, r1 + beq _0222D790 + mov r0, #1 + str r0, [r4, #0x2c] + add r0, r1, #0 _0222D790: - mov r1, #4 - add r2, r0, #0 - tst r2, r1 - beq _0222D79E - mov r0, #1 - str r0, [r4, #0x30] - add r0, r1, #0 + mov r1, #4 + add r2, r0, #0 + tst r2, r1 + beq _0222D79E + mov r0, #1 + str r0, [r4, #0x30] + add r0, r1, #0 _0222D79E: - mov r1, #3 - tst r1, r0 - beq _0222D7AC - mov r1, #0x4e - mov r2, #1 - lsl r1, r1, #2 - str r2, [r4, r1] + mov r1, #3 + tst r1, r0 + beq _0222D7AC + mov r1, #0x4e + mov r2, #1 + lsl r1, r1, #2 + str r2, [r4, r1] _0222D7AC: - ldr r1, [r4, #0x40] - orr r0, r1 - str r0, [r4, #0x40] + ldr r1, [r4, #0x40] + orr r0, r1 + str r0, [r4, #0x40] _0222D7B2: - mov r0, #0x11 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D7DC - bl FUN_02032D80 - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] - pop {r4, pc} + mov r0, #0x11 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D7DC + bl FUN_02032D80 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] + pop {r4, pc} _0222D7D0: - bl FUN_02032D80 - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] + bl FUN_02032D80 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] _0222D7DC: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222D6EC + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222D6EC - thumb_func_start MOD83_0222D7E0 + thumb_func_start MOD83_0222D7E0 MOD83_0222D7E0: ; 0x0222D7E0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x60 - mov r1, #0x45 - add r4, r0, #0 - lsl r1, r1, #2 - ldr r0, [r4, r1] - sub r0, #0xf - cmp r0, #4 - bls _0222D7F4 - b _0222D994 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x60 + mov r1, #0x45 + add r4, r0, #0 + lsl r1, r1, #2 + ldr r0, [r4, r1] + sub r0, #0xf + cmp r0, #4 + bls _0222D7F4 + b _0222D994 _0222D7F4: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222D800: ; jump table - .short _0222D80A - _0222D800 - 2 ; case 0 - .short _0222D832 - _0222D800 - 2 ; case 1 - .short _0222D85E - _0222D800 - 2 ; case 2 - .short _0222D932 - _0222D800 - 2 ; case 3 - .short _0222D974 - _0222D800 - 2 ; case 4 + .short _0222D80A - _0222D800 - 2 ; case 0 + .short _0222D832 - _0222D800 - 2 ; case 1 + .short _0222D85E - _0222D800 - 2 ; case 2 + .short _0222D932 - _0222D800 - 2 ; case 3 + .short _0222D974 - _0222D800 - 2 ; case 4 _0222D80A: - add r0, r1, #4 - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D818 - add sp, #0x60 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + add r0, r1, #4 + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D818 + add sp, #0x60 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0222D818: - add r0, r1, #4 - ldr r0, [r4, r0] - sub r2, r0, #1 - add r0, r1, #4 - str r2, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222D82C - mov r0, #0x10 - str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + sub r2, r0, #1 + add r0, r1, #4 + str r2, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222D82C + mov r0, #0x10 + str r0, [r4, r1] _0222D82C: - add sp, #0x60 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add sp, #0x60 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222D832: - mov r0, #0 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - mov r1, #1 - ldr r0, [r4] - add r2, r1, #0 - mov r3, #2 - bl FUN_0200CB00 - ldr r0, [r4] - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r1, _0222D99C ; =0x00006B5A - ldr r0, _0222D9A0 ; =0x05000042 - strh r1, [r0] - mov r0, #0x45 - mov r1, #0x11 - lsl r0, r0, #2 - str r1, [r4, r0] - b _0222D994 + mov r0, #0 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + mov r1, #1 + ldr r0, [r4] + add r2, r1, #0 + mov r3, #2 + bl FUN_0200CB00 + ldr r0, [r4] + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r1, _0222D99C ; =0x00006B5A + ldr r0, _0222D9A0 ; =0x05000042 + strh r1, [r0] + mov r0, #0x45 + mov r1, #0x11 + lsl r0, r0, #2 + str r1, [r4, r0] + b _0222D994 _0222D85E: - mov r0, #1 - str r0, [sp] - mov r0, #2 - add r1, #0x10 - str r0, [sp, #4] - add r0, sp, #0xc - add r1, r4, r1 - mov r2, #0 - mov r3, #0xc - bl MOD83_022388E4 - ldr r0, [r4, #0x44] - ldr r1, [r4, #0x40] - mvn r0, r0 - and r0, r1 - mov r1, #1 - add r2, r0, #0 - tst r2, r1 - beq _0222D892 - ldr r2, [r4, #0x38] - tst r1, r2 - beq _0222D88E - ldr r5, _0222D9A4 ; =MOD83_0223A7F0 - b _0222D8B2 + mov r0, #1 + str r0, [sp] + mov r0, #2 + add r1, #0x10 + str r0, [sp, #4] + add r0, sp, #0xc + add r1, r4, r1 + mov r2, #0 + mov r3, #0xc + bl MOD83_022388E4 + ldr r0, [r4, #0x44] + ldr r1, [r4, #0x40] + mvn r0, r0 + and r0, r1 + mov r1, #1 + add r2, r0, #0 + tst r2, r1 + beq _0222D892 + ldr r2, [r4, #0x38] + tst r1, r2 + beq _0222D88E + ldr r5, _0222D9A4 ; =MOD83_0223A7F0 + b _0222D8B2 _0222D88E: - ldr r5, _0222D9A8 ; =MOD83_0223A804 - b _0222D8B2 + ldr r5, _0222D9A8 ; =MOD83_0223A804 + b _0222D8B2 _0222D892: - mov r1, #2 - add r2, r0, #0 - tst r2, r1 - beq _0222D8A8 - ldr r2, [r4, #0x38] - tst r1, r2 - beq _0222D8A4 - ldr r5, _0222D9AC ; =MOD83_0223A818 - b _0222D8B2 + mov r1, #2 + add r2, r0, #0 + tst r2, r1 + beq _0222D8A8 + ldr r2, [r4, #0x38] + tst r1, r2 + beq _0222D8A4 + ldr r5, _0222D9AC ; =MOD83_0223A818 + b _0222D8B2 _0222D8A4: - ldr r5, _0222D9B0 ; =MOD83_0223A82C - b _0222D8B2 + ldr r5, _0222D9B0 ; =MOD83_0223A82C + b _0222D8B2 _0222D8A8: - mov r1, #0x80 - tst r1, r0 - beq _0222D8B2 - ldr r5, _0222D9B4 ; =MOD83_0223A840 - mov r0, #0 + mov r1, #0x80 + tst r1, r0 + beq _0222D8B2 + ldr r5, _0222D9B4 ; =MOD83_0223A840 + mov r0, #0 _0222D8B2: - ldr r1, [r4, #0x44] - mov r3, #0x13 - orr r0, r1 - str r0, [r4, #0x44] - ldr r1, [r5, #8] - ldr r2, [r5, #0xc] - add r0, sp, #0xc - bl MOD83_02238934 - mov r0, #1 - str r0, [sp, #0x38] - ldr r0, [r5, #0x10] - add r1, sp, #0xc - str r0, [sp] - ldr r0, [r4] - ldr r2, [r5] - ldr r3, [r5, #4] - bl MOD83_02238A38 - ldr r0, [sp, #0x1c] - bl GetWindowX - add r6, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowY - add r7, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowWidth - add r5, r0, #0 - ldr r0, [sp, #0x1c] - bl GetWindowHeight - str r5, [sp] - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #1 - add r2, r6, #0 - add r3, r7, #0 - bl BgTilemapRectChangePalette - mov r0, #1 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #4 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #2 - mov r1, #1 - bl GX_EngineAToggleLayers - mov r1, #0x1e - add r0, r1, #0 - add r0, #0xfe - str r1, [r4, r0] - mov r0, #0x12 - add r1, #0xf6 - str r0, [r4, r1] - b _0222D994 + ldr r1, [r4, #0x44] + mov r3, #0x13 + orr r0, r1 + str r0, [r4, #0x44] + ldr r1, [r5, #8] + ldr r2, [r5, #0xc] + add r0, sp, #0xc + bl MOD83_02238934 + mov r0, #1 + str r0, [sp, #0x38] + ldr r0, [r5, #0x10] + add r1, sp, #0xc + str r0, [sp] + ldr r0, [r4] + ldr r2, [r5] + ldr r3, [r5, #4] + bl MOD83_02238A38 + ldr r0, [sp, #0x1c] + bl GetWindowX + add r6, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowY + add r7, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowWidth + add r5, r0, #0 + ldr r0, [sp, #0x1c] + bl GetWindowHeight + str r5, [sp] + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #1 + add r2, r6, #0 + add r3, r7, #0 + bl BgTilemapRectChangePalette + mov r0, #1 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #4 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #2 + mov r1, #1 + bl GX_EngineAToggleLayers + mov r1, #0x1e + add r0, r1, #0 + add r0, #0xfe + str r1, [r4, r0] + mov r0, #0x12 + add r1, #0xf6 + str r0, [r4, r1] + b _0222D994 _0222D932: - add r0, r1, #0 - add r0, #8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222D94A - add r0, r1, #0 - add r0, #8 - ldr r0, [r4, r0] - add r1, #8 - sub r0, r0, #1 - str r0, [r4, r1] - b _0222D994 + add r0, r1, #0 + add r0, #8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222D94A + add r0, r1, #0 + add r0, #8 + ldr r0, [r4, r0] + add r1, #8 + sub r0, r0, #1 + str r0, [r4, r1] + b _0222D994 _0222D94A: - ldr r0, _0222D9B8 ; =gMain - ldr r2, [r0, #0x48] - mov r0, #3 - tst r0, r2 - beq _0222D994 - add r1, #0x10 - add r0, r4, r1 - bl RemoveWindow - mov r0, #0x45 - mov r1, #0x13 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r1, _0222D9B8 ; =gMain - add r0, #0xc - ldr r1, [r1, #0x48] - str r1, [r4, r0] - ldr r0, _0222D9BC ; =0x000005DC - bl PlaySE - b _0222D994 + ldr r0, _0222D9B8 ; =gMain + ldr r2, [r0, #0x48] + mov r0, #3 + tst r0, r2 + beq _0222D994 + add r1, #0x10 + add r0, r4, r1 + bl RemoveWindow + mov r0, #0x45 + mov r1, #0x13 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r1, _0222D9B8 ; =gMain + add r0, #0xc + ldr r1, [r1, #0x48] + str r1, [r4, r0] + ldr r0, _0222D9BC ; =0x000005DC + bl PlaySE + b _0222D994 _0222D974: - mov r0, #1 - add r1, r0, #0 - bl GX_EngineAToggleLayers - mov r0, #4 - mov r1, #1 - bl GX_EngineAToggleLayers - mov r0, #2 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #0x45 - mov r1, #0xf - lsl r0, r0, #2 - str r1, [r4, r0] + mov r0, #1 + add r1, r0, #0 + bl GX_EngineAToggleLayers + mov r0, #4 + mov r1, #1 + bl GX_EngineAToggleLayers + mov r0, #2 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #0x45 + mov r1, #0xf + lsl r0, r0, #2 + str r1, [r4, r0] _0222D994: - mov r0, #1 - add sp, #0x60 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #1 + add sp, #0x60 + pop {r3, r4, r5, r6, r7, pc} + nop _0222D99C: .word 0x00006B5A _0222D9A0: .word 0x05000042 _0222D9A4: .word MOD83_0223A7F0 @@ -525,202 +525,202 @@ _0222D9B0: .word MOD83_0223A82C _0222D9B4: .word MOD83_0223A840 _0222D9B8: .word gMain _0222D9BC: .word 0x000005DC - thumb_func_end MOD83_0222D7E0 + thumb_func_end MOD83_0222D7E0 - thumb_func_start MOD83_0222D9C0 + thumb_func_start MOD83_0222D9C0 MOD83_0222D9C0: ; 0x0222D9C0 - push {r3, r4, r5, lr} - add r4, r0, #0 - mov r0, #0x42 - lsl r0, r0, #2 - ldr r1, [r4, r0] - sub r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, r1 - beq _0222DA48 - sub r1, r1, r0 - asr r0, r1, #1 - lsr r0, r0, #0x1e - add r0, r1, r0 - asr r0, r0, #2 - asr r2, r0, #0x1f - add r1, r0, #0 - eor r1, r2 - sub r2, r1, r2 - mov r1, #3 - lsl r1, r1, #0xe - cmp r2, r1 - ble _0222D9F6 - cmp r0, #0 - ble _0222D9F4 - add r0, r1, #0 - b _0222D9F6 + push {r3, r4, r5, lr} + add r4, r0, #0 + mov r0, #0x42 + lsl r0, r0, #2 + ldr r1, [r4, r0] + sub r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, r1 + beq _0222DA48 + sub r1, r1, r0 + asr r0, r1, #1 + lsr r0, r0, #0x1e + add r0, r1, r0 + asr r0, r0, #2 + asr r2, r0, #0x1f + add r1, r0, #0 + eor r1, r2 + sub r2, r1, r2 + mov r1, #3 + lsl r1, r1, #0xe + cmp r2, r1 + ble _0222D9F6 + cmp r0, #0 + ble _0222D9F4 + add r0, r1, #0 + b _0222D9F6 _0222D9F4: - ldr r0, _0222DA4C ; =0xFFFF4000 + ldr r0, _0222DA4C ; =0xFFFF4000 _0222D9F6: - mov r1, #0x41 - lsl r1, r1, #2 - ldr r2, [r4, r1] - add r0, r2, r0 - str r0, [r4, r1] - add r0, r1, #4 - ldr r0, [r4, r0] - ldr r2, [r4, r1] - sub r2, r0, r2 - asr r3, r2, #0x1f - eor r2, r3 - sub r3, r2, r3 - add r2, r1, #0 - add r2, #0xfc - cmp r3, r2 - bge _0222DA18 - str r0, [r4, r1] + mov r1, #0x41 + lsl r1, r1, #2 + ldr r2, [r4, r1] + add r0, r2, r0 + str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + ldr r2, [r4, r1] + sub r2, r0, r2 + asr r3, r2, #0x1f + eor r2, r3 + sub r3, r2, r3 + add r2, r1, #0 + add r2, #0xfc + cmp r3, r2 + bge _0222DA18 + str r0, [r4, r1] _0222DA18: - mov r3, #0x41 - lsl r3, r3, #2 - ldr r5, [r4, r3] - ldr r0, [r4] - asr r3, r5, #0xb - lsr r3, r3, #0x14 - add r3, r5, r3 - mov r1, #0 - mov r2, #3 - asr r3, r3, #0xc - bl ScheduleSetBgPosText - mov r3, #0x41 - lsl r3, r3, #2 - ldr r0, [r4] - ldr r4, [r4, r3] - mov r1, #2 - asr r3, r4, #0xb - lsr r3, r3, #0x14 - add r3, r4, r3 - mov r2, #3 - asr r3, r3, #0xc - bl ScheduleSetBgPosText + mov r3, #0x41 + lsl r3, r3, #2 + ldr r5, [r4, r3] + ldr r0, [r4] + asr r3, r5, #0xb + lsr r3, r3, #0x14 + add r3, r5, r3 + mov r1, #0 + mov r2, #3 + asr r3, r3, #0xc + bl ScheduleSetBgPosText + mov r3, #0x41 + lsl r3, r3, #2 + ldr r0, [r4] + ldr r4, [r4, r3] + mov r1, #2 + asr r3, r4, #0xb + lsr r3, r3, #0x14 + add r3, r4, r3 + mov r2, #3 + asr r3, r3, #0xc + bl ScheduleSetBgPosText _0222DA48: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0222DA4C: .word 0xFFFF4000 - thumb_func_end MOD83_0222D9C0 + thumb_func_end MOD83_0222D9C0 - thumb_func_start MOD83_0222DA50 + thumb_func_start MOD83_0222DA50 MOD83_0222DA50: ; 0x0222DA50 - push {r3, r4, r5, lr} - sub sp, #0x40 - ldr r5, _0222DB4C ; =MOD83_0223A380 - add r4, r0, #0 - add r3, sp, #0x18 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x40 + ldr r5, _0222DB4C ; =MOD83_0223A380 + add r4, r0, #0 + add r3, sp, #0x18 + mov r2, #5 _0222DA5C: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _0222DA5C - ldr r3, _0222DB50 ; =MOD83_0223A370 - add r2, sp, #8 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - add r0, sp, #0x18 - bl GX_SetBanks - add r0, sp, #8 - bl SetBothScreensModesAndDisable - mov r1, #0 - str r1, [sp] - mov r3, #0xf - ldr r0, [r4] - mov r2, #2 - lsl r3, r3, #0xc - bl MOD83_022387D8 - ldr r1, _0222DB54 ; =0x04000008 - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - mov r0, #2 - orr r0, r2 - strh r0, [r1] - mov r0, #0 - mov r1, #0x20 - add r2, r0, #0 - bl BG_ClearCharDataRange - mov r0, #2 - lsl r0, r0, #0xe - str r0, [sp] - mov r1, #1 - mov r3, #0x36 - ldr r0, [r4] - add r2, r1, #0 - lsl r3, r3, #0xa - bl MOD83_022387D8 - ldr r1, _0222DB58 ; =0x0400000A - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - mov r0, #1 - orr r2, r0 - strh r2, [r1] - mov r1, #0x20 - mov r2, #0 - bl BG_ClearCharDataRange - mov r0, #0 - str r0, [sp] - mov r1, #2 - mov r3, #0xe - ldr r0, [r4] - add r2, r1, #0 - lsl r3, r3, #0xc - bl MOD83_022387D8 - ldr r1, _0222DB5C ; =0x0400000C - mov r0, #3 - ldrh r2, [r1] - mov r3, #0x51 - bic r2, r0 - strh r2, [r1] - mov r0, #2 - mov r1, #0x20 - mov r2, #0 - bl BG_ClearCharDataRange - bl FUN_0201BD5C - mov r0, #0 - mov r1, #0x20 - mov r2, #0x51 - bl FUN_02002ED0 - mov r0, #0 - add r1, r0, #0 - mov r2, #0x51 - bl FUN_02002ED0 - mov r2, #5 - mov r1, #0 - lsl r2, r2, #0x18 - ldr r0, _0222DB60 ; =0x00006B5A - strh r1, [r2] - strh r0, [r2, #0x3e] - str r1, [sp] - mov r0, #0x51 - str r0, [sp, #4] - ldr r0, [r4] - mov r2, #1 - mov r3, #2 - bl FUN_0200CB00 - mov r0, #1 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #0xa - mov r3, #3 - bl FUN_0200CB00 - ldr r1, _0222DB60 ; =0x00006B5A - ldr r0, _0222DB64 ; =0x05000042 - strh r1, [r0] - add sp, #0x40 - pop {r3, r4, r5, pc} - .align 2, 0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _0222DA5C + ldr r3, _0222DB50 ; =MOD83_0223A370 + add r2, sp, #8 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + add r0, sp, #0x18 + bl GX_SetBanks + add r0, sp, #8 + bl SetBothScreensModesAndDisable + mov r1, #0 + str r1, [sp] + mov r3, #0xf + ldr r0, [r4] + mov r2, #2 + lsl r3, r3, #0xc + bl MOD83_022387D8 + ldr r1, _0222DB54 ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + mov r0, #2 + orr r0, r2 + strh r0, [r1] + mov r0, #0 + mov r1, #0x20 + add r2, r0, #0 + bl BG_ClearCharDataRange + mov r0, #2 + lsl r0, r0, #0xe + str r0, [sp] + mov r1, #1 + mov r3, #0x36 + ldr r0, [r4] + add r2, r1, #0 + lsl r3, r3, #0xa + bl MOD83_022387D8 + ldr r1, _0222DB58 ; =0x0400000A + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + mov r0, #1 + orr r2, r0 + strh r2, [r1] + mov r1, #0x20 + mov r2, #0 + bl BG_ClearCharDataRange + mov r0, #0 + str r0, [sp] + mov r1, #2 + mov r3, #0xe + ldr r0, [r4] + add r2, r1, #0 + lsl r3, r3, #0xc + bl MOD83_022387D8 + ldr r1, _0222DB5C ; =0x0400000C + mov r0, #3 + ldrh r2, [r1] + mov r3, #0x51 + bic r2, r0 + strh r2, [r1] + mov r0, #2 + mov r1, #0x20 + mov r2, #0 + bl BG_ClearCharDataRange + bl FUN_0201BD5C + mov r0, #0 + mov r1, #0x20 + mov r2, #0x51 + bl FUN_02002ED0 + mov r0, #0 + add r1, r0, #0 + mov r2, #0x51 + bl FUN_02002ED0 + mov r2, #5 + mov r1, #0 + lsl r2, r2, #0x18 + ldr r0, _0222DB60 ; =0x00006B5A + strh r1, [r2] + strh r0, [r2, #0x3e] + str r1, [sp] + mov r0, #0x51 + str r0, [sp, #4] + ldr r0, [r4] + mov r2, #1 + mov r3, #2 + bl FUN_0200CB00 + mov r0, #1 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #0xa + mov r3, #3 + bl FUN_0200CB00 + ldr r1, _0222DB60 ; =0x00006B5A + ldr r0, _0222DB64 ; =0x05000042 + strh r1, [r0] + add sp, #0x40 + pop {r3, r4, r5, pc} + .align 2, 0 _0222DB4C: .word MOD83_0223A380 _0222DB50: .word MOD83_0223A370 _0222DB54: .word 0x04000008 @@ -728,1628 +728,1628 @@ _0222DB58: .word 0x0400000A _0222DB5C: .word 0x0400000C _0222DB60: .word 0x00006B5A _0222DB64: .word 0x05000042 - thumb_func_end MOD83_0222DA50 + thumb_func_end MOD83_0222DA50 - thumb_func_start MOD83_0222DB68 + thumb_func_start MOD83_0222DB68 MOD83_0222DB68: ; 0x0222DB68 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0x25 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x27 - mov r2, #0x24 - mov r3, #0x26 - bl MOD83_02238BC4 - mov r0, #0 - mov r1, #0x15 - str r0, [sp] - lsl r1, r1, #4 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #8 - bl MOD83_02238DBC - mov r1, #0x15 - lsl r1, r1, #4 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_020200A0 - mov r0, #1 - mov r1, #0x55 - str r0, [sp] - lsl r1, r1, #2 - ldr r1, [r4, r1] - mov r0, #0 - mov r2, #0x80 - mov r3, #0xb8 - bl MOD83_02238DBC - mov r1, #0x55 - lsl r1, r1, #2 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_020200A0 - add sp, #8 - pop {r4, pc} - thumb_func_end MOD83_0222DB68 - - thumb_func_start MOD83_0222DBD0 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0x25 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x27 + mov r2, #0x24 + mov r3, #0x26 + bl MOD83_02238BC4 + mov r0, #0 + mov r1, #0x15 + str r0, [sp] + lsl r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #8 + bl MOD83_02238DBC + mov r1, #0x15 + lsl r1, r1, #4 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_020200A0 + mov r0, #1 + mov r1, #0x55 + str r0, [sp] + lsl r1, r1, #2 + ldr r1, [r4, r1] + mov r0, #0 + mov r2, #0x80 + mov r3, #0xb8 + bl MOD83_02238DBC + mov r1, #0x55 + lsl r1, r1, #2 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_020200A0 + add sp, #8 + pop {r4, pc} + thumb_func_end MOD83_0222DB68 + + thumb_func_start MOD83_0222DBD0 MOD83_0222DBD0: ; 0x0222DBD0 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x51 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x29 - mov r2, #0 - mov r3, #0x80 - bl GfGfxLoader_GXLoadPal - mov r0, #0xe - lsl r0, r0, #6 - str r0, [sp] - mov r0, #2 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - mov r0, #0x51 - str r0, [sp, #0xc] - ldr r2, [r4] - mov r0, #0x74 - mov r1, #0x28 - mov r3, #2 - bl GfGfxLoader_LoadCharData - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222DBD0 - - thumb_func_start MOD83_0222DC10 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x51 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x29 + mov r2, #0 + mov r3, #0x80 + bl GfGfxLoader_GXLoadPal + mov r0, #0xe + lsl r0, r0, #6 + str r0, [sp] + mov r0, #2 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + mov r0, #0x51 + str r0, [sp, #0xc] + ldr r2, [r4] + mov r0, #0x74 + mov r1, #0x28 + mov r3, #2 + bl GfGfxLoader_LoadCharData + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222DBD0 + + thumb_func_start MOD83_0222DC10 MOD83_0222DC10: ; 0x0222DC10 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [r5] - add r4, r1, #0 - mov r1, #2 - add r6, r2, #0 - add r7, r3, #0 - bl GetBgTilemapBuffer - ldr r1, _0222DC5C ; =0x00004380 - cmp r7, #2 - bne _0222DC2A - add r1, r1, #2 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [r5] + add r4, r1, #0 + mov r1, #2 + add r6, r2, #0 + add r7, r3, #0 + bl GetBgTilemapBuffer + ldr r1, _0222DC5C ; =0x00004380 + cmp r7, #2 + bne _0222DC2A + add r1, r1, #2 _0222DC2A: - lsl r2, r6, #5 - add r3, r4, r2 - lsl r2, r3, #1 - add r3, r3, #1 - strh r1, [r0, r2] - add r2, r1, #1 - lsl r3, r3, #1 - strh r2, [r0, r3] - add r3, r1, #0 - add r2, r6, #1 - lsl r2, r2, #5 - add r4, r4, r2 - add r3, #8 - lsl r2, r4, #1 - strh r3, [r0, r2] - add r2, r4, #1 - add r1, #9 - lsl r2, r2, #1 - strh r1, [r0, r2] - ldr r0, [r5] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r2, r6, #5 + add r3, r4, r2 + lsl r2, r3, #1 + add r3, r3, #1 + strh r1, [r0, r2] + add r2, r1, #1 + lsl r3, r3, #1 + strh r2, [r0, r3] + add r3, r1, #0 + add r2, r6, #1 + lsl r2, r2, #5 + add r4, r4, r2 + add r3, #8 + lsl r2, r4, #1 + strh r3, [r0, r2] + add r2, r4, #1 + add r1, #9 + lsl r2, r2, #1 + strh r1, [r0, r2] + ldr r0, [r5] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r3, r4, r5, r6, r7, pc} + nop _0222DC5C: .word 0x00004380 - thumb_func_end MOD83_0222DC10 + thumb_func_end MOD83_0222DC10 - thumb_func_start MOD83_0222DC60 + thumb_func_start MOD83_0222DC60 MOD83_0222DC60: ; 0x0222DC60 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, [r5] - add r4, r1, #0 - add r6, r2, #0 - mov r1, #2 - bl GetBgTilemapBuffer - lsl r1, r6, #5 - add r3, r4, r1 - ldr r1, _0222DC9C ; =0x00004384 - lsl r2, r3, #1 - strh r1, [r0, r2] - add r2, r3, #1 - lsl r2, r2, #1 - strh r1, [r0, r2] - add r2, r6, #1 - lsl r2, r2, #5 - add r3, r4, r2 - lsl r2, r3, #1 - strh r1, [r0, r2] - add r2, r3, #1 - lsl r2, r2, #1 - strh r1, [r0, r2] - ldr r0, [r5] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, [r5] + add r4, r1, #0 + add r6, r2, #0 + mov r1, #2 + bl GetBgTilemapBuffer + lsl r1, r6, #5 + add r3, r4, r1 + ldr r1, _0222DC9C ; =0x00004384 + lsl r2, r3, #1 + strh r1, [r0, r2] + add r2, r3, #1 + lsl r2, r2, #1 + strh r1, [r0, r2] + add r2, r6, #1 + lsl r2, r2, #5 + add r3, r4, r2 + lsl r2, r3, #1 + strh r1, [r0, r2] + add r2, r3, #1 + lsl r2, r2, #1 + strh r1, [r0, r2] + ldr r0, [r5] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r4, r5, r6, pc} + nop _0222DC9C: .word 0x00004384 - thumb_func_end MOD83_0222DC60 + thumb_func_end MOD83_0222DC60 - thumb_func_start MOD83_0222DCA0 + thumb_func_start MOD83_0222DCA0 MOD83_0222DCA0: ; 0x0222DCA0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r6, r0, #0 - add r0, r2, #0 - add r7, r3, #0 - ldr r2, [sp, #0x28] - mov r3, #0x51 - bl ReadMsgData_ExpandPlaceholders - add r5, r0, #0 - mov r0, #0 - mov r1, #2 - bl GetFontAttribute - add r2, r0, #0 - mov r0, #0 - add r1, r5, #0 - bl FUN_02002E14 - add r4, r0, #0 - add r0, r6, #0 - bl GetWindowWidth - lsl r0, r0, #3 - add r4, #0x20 - sub r3, r0, r4 - ldr r0, [sp, #0x2c] - mov r1, #0 - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r7, [sp, #8] - add r0, r6, #0 - add r2, r5, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - bl String_dtor - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222DCA0 - - thumb_func_start MOD83_0222DCF4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r6, r0, #0 + add r0, r2, #0 + add r7, r3, #0 + ldr r2, [sp, #0x28] + mov r3, #0x51 + bl ReadMsgData_ExpandPlaceholders + add r5, r0, #0 + mov r0, #0 + mov r1, #2 + bl GetFontAttribute + add r2, r0, #0 + mov r0, #0 + add r1, r5, #0 + bl FUN_02002E14 + add r4, r0, #0 + add r0, r6, #0 + bl GetWindowWidth + lsl r0, r0, #3 + add r4, #0x20 + sub r3, r0, r4 + ldr r0, [sp, #0x2c] + mov r1, #0 + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r7, [sp, #8] + add r0, r6, #0 + add r2, r5, #0 + str r1, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + bl String_dtor + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222DCA0 + + thumb_func_start MOD83_0222DCF4 MOD83_0222DCF4: ; 0x0222DCF4 - push {r3, lr} - sub sp, #8 - add r2, r1, #0 - cmp r2, #0x64 - blt _0222DD04 - mov r3, #3 - mov r1, #0 - b _0222DD12 + push {r3, lr} + sub sp, #8 + add r2, r1, #0 + cmp r2, #0x64 + blt _0222DD04 + mov r3, #3 + mov r1, #0 + b _0222DD12 _0222DD04: - cmp r2, #0xa - blt _0222DD0E - mov r3, #3 - mov r1, #1 - b _0222DD12 + cmp r2, #0xa + blt _0222DD0E + mov r3, #3 + mov r1, #1 + b _0222DD12 _0222DD0E: - mov r3, #2 - mov r1, #1 + mov r3, #2 + mov r1, #1 _0222DD12: - str r1, [sp] - mov r1, #1 - str r1, [sp, #4] - mov r1, #0 - bl BufferIntegerAsString - add sp, #8 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0222DCF4 - - thumb_func_start MOD83_0222DD24 + str r1, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r1, #0 + bl BufferIntegerAsString + add sp, #8 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0222DCF4 + + thumb_func_start MOD83_0222DD24 MOD83_0222DD24: ; 0x0222DD24 - push {r4, r5, r6, r7, lr} - sub sp, #0x2c - str r2, [sp, #0x18] - str r0, [sp, #0x10] - str r1, [sp, #0x14] - add r4, r3, #0 - ldr r2, _0222DEB4 ; =0x000001EE - mov r0, #1 - mov r1, #0x1a - mov r3, #0x51 - bl NewMsgDataFromNarc - str r0, [sp, #0x24] - mov r0, #0x51 - bl ScrStrBufs_new - str r0, [sp, #0x28] - ldr r0, [sp, #0x10] - ldr r0, [r0, #0xc] - bl PlayerProfile_GetTrainerGender - cmp r0, #1 - bne _0222DD58 - ldr r0, _0222DEB8 ; =0x0003040F - str r0, [sp, #0x1c] - b _0222DD5C + push {r4, r5, r6, r7, lr} + sub sp, #0x2c + str r2, [sp, #0x18] + str r0, [sp, #0x10] + str r1, [sp, #0x14] + add r4, r3, #0 + ldr r2, _0222DEB4 ; =0x000001EE + mov r0, #1 + mov r1, #0x1a + mov r3, #0x51 + bl NewMsgDataFromNarc + str r0, [sp, #0x24] + mov r0, #0x51 + bl ScrStrBufs_new + str r0, [sp, #0x28] + ldr r0, [sp, #0x10] + ldr r0, [r0, #0xc] + bl PlayerProfile_GetTrainerGender + cmp r0, #1 + bne _0222DD58 + ldr r0, _0222DEB8 ; =0x0003040F + str r0, [sp, #0x1c] + b _0222DD5C _0222DD58: - ldr r0, _0222DEBC ; =0x0007080F - str r0, [sp, #0x1c] + ldr r0, _0222DEBC ; =0x0007080F + str r0, [sp, #0x1c] _0222DD5C: - ldr r0, [sp, #0x14] - ldr r1, _0222DEC0 ; =MOD83_0223A85C - lsl r0, r0, #4 - str r0, [sp, #0x20] - ldr r0, [r1, r0] - ldr r1, [sp, #0x18] - str r0, [sp] - ldr r0, [sp, #0x10] - mov r2, #3 - ldr r0, [r0] - add r3, r4, #0 - bl MOD83_02238A38 - ldr r4, _0222DEC4 ; =MOD83_0223A784 - mov r6, #1 - mov r5, #0x10 + ldr r0, [sp, #0x14] + ldr r1, _0222DEC0 ; =MOD83_0223A85C + lsl r0, r0, #4 + str r0, [sp, #0x20] + ldr r0, [r1, r0] + ldr r1, [sp, #0x18] + str r0, [sp] + ldr r0, [sp, #0x10] + mov r2, #3 + ldr r0, [r0] + add r3, r4, #0 + bl MOD83_02238A38 + ldr r4, _0222DEC4 ; =MOD83_0223A784 + mov r6, #1 + mov r5, #0x10 _0222DD7C: - cmp r6, #4 - bne _0222DD88 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x4c] - cmp r0, #0 - beq _0222DDB8 + cmp r6, #4 + bne _0222DD88 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x4c] + cmp r0, #0 + beq _0222DDB8 _0222DD88: - ldr r0, [sp, #0x28] - ldr r1, [sp, #0x24] - ldr r2, [r4] - mov r3, #0x51 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - str r5, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [sp, #0x1c] - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x18] - add r2, r7, #0 - ldr r0, [r0, #0x10] - mov r3, #0x20 - bl AddTextPrinterParameterized2 - add r0, r7, #0 - bl String_dtor + ldr r0, [sp, #0x28] + ldr r1, [sp, #0x24] + ldr r2, [r4] + mov r3, #0x51 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + str r5, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [sp, #0x1c] + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x18] + add r2, r7, #0 + ldr r0, [r0, #0x10] + mov r3, #0x20 + bl AddTextPrinterParameterized2 + add r0, r7, #0 + bl String_dtor _0222DDB8: - add r6, r6, #1 - add r4, r4, #4 - add r5, #0x10 - cmp r6, #5 - blo _0222DD7C - ldr r2, [sp, #0x10] - ldr r0, [sp, #0x28] - ldr r2, [r2, #0xc] - mov r1, #0 - bl BufferPlayersName - mov r0, #0x10 - str r0, [sp] - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x10] - bl GetIGTHours - add r1, r0, #0 - ldr r0, [sp, #0x28] - bl MOD83_0222DCF4 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x10] - bl GetIGTMinutes - add r2, r0, #0 - mov r3, #2 - ldr r0, [sp, #0x28] - str r3, [sp] - mov r1, #1 - str r1, [sp, #4] - bl BufferIntegerAsString - mov r0, #0x11 - str r0, [sp] - mov r0, #0x20 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - mov r1, #0 - str r1, [sp] - mov r3, #1 - ldr r2, [sp, #0x10] - str r3, [sp, #4] - ldr r0, [sp, #0x28] - ldr r2, [r2, #0x50] - bl BufferIntegerAsString - mov r0, #0x13 - str r0, [sp] - mov r0, #0x30 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x4c] - cmp r0, #0 - beq _0222DE76 - ldr r0, [sp, #0x10] - ldr r0, [r0, #8] - bl Pokedex_CountSeenMons - add r1, r0, #0 - ldr r0, [sp, #0x28] - bl MOD83_0222DCF4 - mov r0, #0x12 - str r0, [sp] - mov r0, #0x40 - str r0, [sp, #4] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x24] - ldr r0, [r0, #0x10] - ldr r2, [sp, #0x28] - ldr r3, [sp, #0x1c] - bl MOD83_0222DCA0 + add r6, r6, #1 + add r4, r4, #4 + add r5, #0x10 + cmp r6, #5 + blo _0222DD7C + ldr r2, [sp, #0x10] + ldr r0, [sp, #0x28] + ldr r2, [r2, #0xc] + mov r1, #0 + bl BufferPlayersName + mov r0, #0x10 + str r0, [sp] + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x10] + bl GetIGTHours + add r1, r0, #0 + ldr r0, [sp, #0x28] + bl MOD83_0222DCF4 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x10] + bl GetIGTMinutes + add r2, r0, #0 + mov r3, #2 + ldr r0, [sp, #0x28] + str r3, [sp] + mov r1, #1 + str r1, [sp, #4] + bl BufferIntegerAsString + mov r0, #0x11 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + mov r1, #0 + str r1, [sp] + mov r3, #1 + ldr r2, [sp, #0x10] + str r3, [sp, #4] + ldr r0, [sp, #0x28] + ldr r2, [r2, #0x50] + bl BufferIntegerAsString + mov r0, #0x13 + str r0, [sp] + mov r0, #0x30 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x4c] + cmp r0, #0 + beq _0222DE76 + ldr r0, [sp, #0x10] + ldr r0, [r0, #8] + bl Pokedex_CountSeenMons + add r1, r0, #0 + ldr r0, [sp, #0x28] + bl MOD83_0222DCF4 + mov r0, #0x12 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x24] + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x28] + ldr r3, [sp, #0x1c] + bl MOD83_0222DCA0 _0222DE76: - ldr r2, [sp, #0x18] - ldr r3, [sp, #0x18] - ldr r0, [sp, #0x18] - ldr r2, [r2, #0x38] - ldr r3, [r3, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - ldr r0, [r0, #0x10] - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - ldr r1, _0222DEC8 ; =MOD83_0223A854 - ldr r0, [sp, #0x20] - ldr r2, [r1, r0] - ldr r0, [sp, #0x14] - lsl r1, r0, #2 - ldr r0, [sp, #0x10] - add r0, r0, r1 - add r0, #0xcc - str r2, [r0] - ldr r0, [sp, #0x28] - bl ScrStrBufs_delete - ldr r0, [sp, #0x24] - bl DestroyMsgData - mov r0, #1 - add sp, #0x2c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, [sp, #0x18] + ldr r3, [sp, #0x18] + ldr r0, [sp, #0x18] + ldr r2, [r2, #0x38] + ldr r3, [r3, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + ldr r0, [r0, #0x10] + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + ldr r1, _0222DEC8 ; =MOD83_0223A854 + ldr r0, [sp, #0x20] + ldr r2, [r1, r0] + ldr r0, [sp, #0x14] + lsl r1, r0, #2 + ldr r0, [sp, #0x10] + add r0, r0, r1 + add r0, #0xcc + str r2, [r0] + ldr r0, [sp, #0x28] + bl ScrStrBufs_delete + ldr r0, [sp, #0x24] + bl DestroyMsgData + mov r0, #1 + add sp, #0x2c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0222DEB4: .word 0x000001EE _0222DEB8: .word 0x0003040F _0222DEBC: .word 0x0007080F _0222DEC0: .word MOD83_0223A85C _0222DEC4: .word MOD83_0223A784 _0222DEC8: .word MOD83_0223A854 - thumb_func_end MOD83_0222DD24 + thumb_func_end MOD83_0222DD24 - thumb_func_start MOD83_0222DECC + thumb_func_start MOD83_0222DECC MOD83_0222DECC: ; 0x0222DECC - push {r3, r4, r5, r6, lr} - sub sp, #4 - add r4, r0, #0 - add r5, r1, #0 - add r1, r2, #0 - ldr r2, [r4, #0x24] - add r6, r3, #0 - cmp r2, #0 - bne _0222DEE4 - add sp, #4 - mov r0, #0 - pop {r3, r4, r5, r6, pc} + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r4, r0, #0 + add r5, r1, #0 + add r1, r2, #0 + ldr r2, [r4, #0x24] + add r6, r3, #0 + cmp r2, #0 + bne _0222DEE4 + add sp, #4 + mov r0, #0 + pop {r3, r4, r5, r6, pc} _0222DEE4: - sub r2, r2, #1 - cmp r2, #4 - bhi _0222DF12 - add r2, r2, r2 - add r2, pc - ldrh r2, [r2, #6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 + sub r2, r2, #1 + cmp r2, #4 + bhi _0222DF12 + add r2, r2, r2 + add r2, pc + ldrh r2, [r2, #6] + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + add pc, r2 _0222DEF6: ; jump table - .short _0222DF00 - _0222DEF6 - 2 ; case 0 - .short _0222DF04 - _0222DEF6 - 2 ; case 1 - .short _0222DF08 - _0222DEF6 - 2 ; case 2 - .short _0222DF0C - _0222DEF6 - 2 ; case 3 - .short _0222DF10 - _0222DEF6 - 2 ; case 4 + .short _0222DF00 - _0222DEF6 - 2 ; case 0 + .short _0222DF04 - _0222DEF6 - 2 ; case 1 + .short _0222DF08 - _0222DEF6 - 2 ; case 2 + .short _0222DF0C - _0222DEF6 - 2 ; case 3 + .short _0222DF10 - _0222DEF6 - 2 ; case 4 _0222DF00: - mov r0, #4 - b _0222DF12 + mov r0, #4 + b _0222DF12 _0222DF04: - mov r0, #5 - b _0222DF12 + mov r0, #5 + b _0222DF12 _0222DF08: - mov r0, #6 - b _0222DF12 + mov r0, #6 + b _0222DF12 _0222DF0C: - mov r0, #7 - b _0222DF12 + mov r0, #7 + b _0222DF12 _0222DF10: - mov r0, #8 + mov r0, #8 _0222DF12: - str r0, [sp] - ldr r0, [r4] - mov r2, #3 - add r3, r6, #0 - bl MOD83_02238A38 - add r0, r4, #0 - mov r1, #0x1a - add r2, r6, #0 - bl MOD83_0222DC60 - ldr r0, _0222DF3C ; =MOD83_0223A854 - lsl r1, r5, #4 - ldr r1, [r0, r1] - lsl r0, r5, #2 - add r0, r4, r0 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - add sp, #4 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + str r0, [sp] + ldr r0, [r4] + mov r2, #3 + add r3, r6, #0 + bl MOD83_02238A38 + add r0, r4, #0 + mov r1, #0x1a + add r2, r6, #0 + bl MOD83_0222DC60 + ldr r0, _0222DF3C ; =MOD83_0223A854 + lsl r1, r5, #4 + ldr r1, [r0, r1] + lsl r0, r5, #2 + add r0, r4, r0 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222DF3C: .word MOD83_0223A854 - thumb_func_end MOD83_0222DECC + thumb_func_end MOD83_0222DECC - thumb_func_start MOD83_0222DF40 + thumb_func_start MOD83_0222DF40 MOD83_0222DF40: ; 0x0222DF40 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, [r5, #0x34] - add r4, r1, #0 - add r7, r3, #0 - str r2, [sp, #4] - cmp r0, #0 - bne _0222DF88 - ldr r0, [r5, #0x14] - bl FUN_0202AF50 - cmp r0, #1 - bne _0222DF60 - mov r0, #1 - str r0, [r5, #0x34] + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r5, r0, #0 + ldr r0, [r5, #0x34] + add r4, r1, #0 + add r7, r3, #0 + str r2, [sp, #4] + cmp r0, #0 + bne _0222DF88 + ldr r0, [r5, #0x14] + bl FUN_0202AF50 + cmp r0, #1 + bne _0222DF60 + mov r0, #1 + str r0, [r5, #0x34] _0222DF60: - ldr r0, [r5, #4] - bl Sav2_SysInfo_get - bl FUN_02023820 - cmp r0, #1 - bne _0222DF72 - mov r0, #1 - str r0, [r5, #0x34] + ldr r0, [r5, #4] + bl Sav2_SysInfo_get + bl FUN_02023820 + cmp r0, #1 + bne _0222DF72 + mov r0, #1 + str r0, [r5, #0x34] _0222DF72: - mov r0, #0x51 - bl MOD83_SetHeapId - bl MOD83_02238700 - cmp r0, #0 - beq _0222DF88 - mov r0, #1 - str r0, [r5, #0x34] - bl MOD83_02239450 + mov r0, #0x51 + bl MOD83_SetHeapId + bl MOD83_02238700 + cmp r0, #0 + beq _0222DF88 + mov r0, #1 + str r0, [r5, #0x34] + bl MOD83_02239450 _0222DF88: - ldr r0, [r5, #0x34] - cmp r0, #1 - bne _0222DF98 - ldr r0, [r5, #0x4c] - cmp r0, #0 - bne _0222DF98 - mov r0, #0 - str r0, [r5, #0x34] + ldr r0, [r5, #0x34] + cmp r0, #1 + bne _0222DF98 + ldr r0, [r5, #0x4c] + cmp r0, #0 + bne _0222DF98 + mov r0, #0 + str r0, [r5, #0x34] _0222DF98: - ldr r0, [r5, #0x34] - cmp r0, #1 - bne _0222DFDC - ldr r0, _0222DFE4 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - ldr r1, [sp, #4] - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - add r3, r7, #0 - bl MOD83_02238A38 - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC60 - ldr r0, _0222DFE8 ; =MOD83_0223A854 - ldr r1, [r0, r6] - lsl r0, r4, #2 - add r0, r5, r0 - add r0, #0xcc - str r1, [r0] - ldr r1, [r5, #0x38] - mov r0, #1 - orr r0, r1 - str r0, [r5, #0x38] - ldr r0, [r5, #0x14] - bl FUN_0202AF60 - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r5, #0x34] + cmp r0, #1 + bne _0222DFDC + ldr r0, _0222DFE4 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + ldr r1, [sp, #4] + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + add r3, r7, #0 + bl MOD83_02238A38 + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC60 + ldr r0, _0222DFE8 ; =MOD83_0223A854 + ldr r1, [r0, r6] + lsl r0, r4, #2 + add r0, r5, r0 + add r0, #0xcc + str r1, [r0] + ldr r1, [r5, #0x38] + mov r0, #1 + orr r0, r1 + str r0, [r5, #0x38] + ldr r0, [r5, #0x14] + bl FUN_0202AF60 + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222DFDC: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _0222DFE4: .word MOD83_0223A85C _0222DFE8: .word MOD83_0223A854 - thumb_func_end MOD83_0222DF40 + thumb_func_end MOD83_0222DF40 - thumb_func_start MOD83_0222DFEC + thumb_func_start MOD83_0222DFEC MOD83_0222DFEC: ; 0x0222DFEC - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [r5, #0x2c] - add r4, r1, #0 - add r7, r3, #0 - cmp r0, #1 - bne _0222E03C - ldr r0, [r5, #0x4c] - cmp r0, #1 - bne _0222E03C - ldr r0, _0222E040 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - bl MOD83_02238A38 - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - mov r3, #1 - bl MOD83_0222DC10 - lsl r3, r4, #2 - add r1, r5, r3 - mov r0, #1 - add r1, #0xe8 - str r0, [r1] - ldr r1, _0222E044 ; =MOD83_0223A854 - ldr r2, [r1, r6] - add r1, r5, r3 - add r1, #0xcc - str r2, [r1] - ldr r2, [r5, #0x38] - mov r1, #2 - orr r1, r2 - str r1, [r5, #0x38] - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [r5, #0x2c] + add r4, r1, #0 + add r7, r3, #0 + cmp r0, #1 + bne _0222E03C + ldr r0, [r5, #0x4c] + cmp r0, #1 + bne _0222E03C + ldr r0, _0222E040 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + bl MOD83_02238A38 + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + mov r3, #1 + bl MOD83_0222DC10 + lsl r3, r4, #2 + add r1, r5, r3 + mov r0, #1 + add r1, #0xe8 + str r0, [r1] + ldr r1, _0222E044 ; =MOD83_0223A854 + ldr r2, [r1, r6] + add r1, r5, r3 + add r1, #0xcc + str r2, [r1] + ldr r2, [r5, #0x38] + mov r1, #2 + orr r1, r2 + str r1, [r5, #0x38] + pop {r3, r4, r5, r6, r7, pc} _0222E03C: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E040: .word MOD83_0223A85C _0222E044: .word MOD83_0223A854 - thumb_func_end MOD83_0222DFEC + thumb_func_end MOD83_0222DFEC - thumb_func_start MOD83_0222E048 + thumb_func_start MOD83_0222E048 MOD83_0222E048: ; 0x0222E048 - push {r3, r4, r5, r6, r7, lr} - add r4, r0, #0 - ldr r0, [r4, #0x30] - add r5, r1, #0 - add r7, r3, #0 - cmp r0, #1 - bne _0222E08A - ldr r0, _0222E090 ; =MOD83_0223A85C - lsl r6, r5, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r4] - mov r2, #3 - bl MOD83_02238A38 - lsl r5, r5, #2 - add r0, r4, r5 - mov r3, #1 - add r0, #0xe8 - str r3, [r0] - add r0, r4, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC10 - ldr r0, _0222E094 ; =MOD83_0223A854 - ldr r1, [r0, r6] - add r0, r4, r5 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r4, r0, #0 + ldr r0, [r4, #0x30] + add r5, r1, #0 + add r7, r3, #0 + cmp r0, #1 + bne _0222E08A + ldr r0, _0222E090 ; =MOD83_0223A85C + lsl r6, r5, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r4] + mov r2, #3 + bl MOD83_02238A38 + lsl r5, r5, #2 + add r0, r4, r5 + mov r3, #1 + add r0, #0xe8 + str r3, [r0] + add r0, r4, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC10 + ldr r0, _0222E094 ; =MOD83_0223A854 + ldr r1, [r0, r6] + add r0, r4, r5 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0222E08A: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _0222E090: .word MOD83_0223A85C _0222E094: .word MOD83_0223A854 - thumb_func_end MOD83_0222E048 + thumb_func_end MOD83_0222E048 - thumb_func_start MOD83_0222E098 + thumb_func_start MOD83_0222E098 MOD83_0222E098: ; 0x0222E098 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - ldr r0, _0222E0D4 ; =MOD83_0223A85C - lsl r6, r4, #4 - ldr r0, [r0, r6] - add r1, r2, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #3 - add r7, r3, #0 - bl MOD83_02238A38 - lsl r4, r4, #2 - add r0, r5, r4 - mov r3, #2 - add r0, #0xe8 - str r3, [r0] - add r0, r5, #0 - mov r1, #0x1a - add r2, r7, #0 - bl MOD83_0222DC10 - ldr r0, _0222E0D8 ; =MOD83_0223A854 - ldr r1, [r0, r6] - add r0, r5, r4 - add r0, #0xcc - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, _0222E0D4 ; =MOD83_0223A85C + lsl r6, r4, #4 + ldr r0, [r0, r6] + add r1, r2, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #3 + add r7, r3, #0 + bl MOD83_02238A38 + lsl r4, r4, #2 + add r0, r5, r4 + mov r3, #2 + add r0, #0xe8 + str r3, [r0] + add r0, r5, #0 + mov r1, #0x1a + add r2, r7, #0 + bl MOD83_0222DC10 + ldr r0, _0222E0D8 ; =MOD83_0223A854 + ldr r1, [r0, r6] + add r0, r5, r4 + add r0, #0xcc + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E0D4: .word MOD83_0223A85C _0222E0D8: .word MOD83_0223A854 - thumb_func_end MOD83_0222E098 + thumb_func_end MOD83_0222E098 - thumb_func_start MOD83_0222E0DC + thumb_func_start MOD83_0222E0DC MOD83_0222E0DC: ; 0x0222E0DC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x70 - add r7, r0, #0 - mov r0, #0 - str r0, [sp, #0xc] - mov r0, #0x13 - str r0, [r7, #0x20] - ldr r0, [sp, #0xc] - ldr r4, _0222E1F0 ; =MOD83_0223A854 - str r0, [sp, #0x10] - add r0, r7, #0 - str r0, [sp, #8] - add r0, #0x5c - str r0, [sp, #8] - add r0, r7, #0 - str r0, [sp, #0x14] - add r0, #0x20 - mov r5, #1 - str r7, [sp, #0x18] - str r0, [sp, #0x14] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x70 + add r7, r0, #0 + mov r0, #0 + str r0, [sp, #0xc] + mov r0, #0x13 + str r0, [r7, #0x20] + ldr r0, [sp, #0xc] + ldr r4, _0222E1F0 ; =MOD83_0223A854 + str r0, [sp, #0x10] + add r0, r7, #0 + str r0, [sp, #8] + add r0, #0x5c + str r0, [sp, #8] + add r0, r7, #0 + str r0, [sp, #0x14] + add r0, #0x20 + mov r5, #1 + str r7, [sp, #0x18] + str r0, [sp, #0x14] _0222E104: - mov r0, #1 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - ldr r1, [sp, #8] - ldr r3, _0222E1F4 ; =0x000001EE - add r0, sp, #0x1c - mov r2, #1 - bl MOD83_022388E4 - ldr r2, [r4, #4] - ldr r3, [r7, #0x20] - add r0, sp, #0x1c - mov r1, #0x1a - bl MOD83_02238934 - ldr r0, [r4, #0xc] - mov ip, r0 - cmp r0, #0 - beq _0222E1A4 - ldr r0, [sp, #0x18] - add r0, #0xcc - ldr r0, [r0] - cmp r0, #0 - beq _0222E188 - ldr r0, [sp, #0x2c] - mov r1, #3 - bl MoveWindowX - lsl r1, r5, #0x18 - ldr r0, [sp, #0x2c] - lsr r1, r1, #0x18 - bl MoveWindowY - ldr r2, [sp, #0x54] - ldr r3, [sp, #0x58] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - ldr r0, [sp, #0x2c] - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - ldr r0, [sp, #0x18] - add r0, #0xe8 - ldr r3, [r0] - cmp r3, #0 - beq _0222E172 - add r0, r7, #0 - mov r1, #0x1a - add r2, r5, #0 - bl MOD83_0222DC10 - b _0222E17C + mov r0, #1 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r1, [sp, #8] + ldr r3, _0222E1F4 ; =0x000001EE + add r0, sp, #0x1c + mov r2, #1 + bl MOD83_022388E4 + ldr r2, [r4, #4] + ldr r3, [r7, #0x20] + add r0, sp, #0x1c + mov r1, #0x1a + bl MOD83_02238934 + ldr r0, [r4, #0xc] + mov ip, r0 + cmp r0, #0 + beq _0222E1A4 + ldr r0, [sp, #0x18] + add r0, #0xcc + ldr r0, [r0] + cmp r0, #0 + beq _0222E188 + ldr r0, [sp, #0x2c] + mov r1, #3 + bl MoveWindowX + lsl r1, r5, #0x18 + ldr r0, [sp, #0x2c] + lsr r1, r1, #0x18 + bl MoveWindowY + ldr r2, [sp, #0x54] + ldr r3, [sp, #0x58] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + ldr r0, [sp, #0x2c] + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + ldr r0, [sp, #0x18] + add r0, #0xe8 + ldr r3, [r0] + cmp r3, #0 + beq _0222E172 + add r0, r7, #0 + mov r1, #0x1a + add r2, r5, #0 + bl MOD83_0222DC10 + b _0222E17C _0222E172: - add r0, r7, #0 - mov r1, #0x1a - add r2, r5, #0 - bl MOD83_0222DC60 + add r0, r7, #0 + mov r1, #0x1a + add r2, r5, #0 + bl MOD83_0222DC60 _0222E17C: - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 - mov r0, #1 - str r0, [sp, #0xc] - b _0222E1C2 + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 + mov r0, #1 + str r0, [sp, #0xc] + b _0222E1C2 _0222E188: - ldr r1, [sp, #0x10] - add r0, r7, #0 - add r2, sp, #0x1c - add r3, r5, #0 - mov r6, ip - blx r6 - cmp r0, #1 - bne _0222E1C2 - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 - mov r0, #1 - str r0, [sp, #0xc] - b _0222E1C2 + ldr r1, [sp, #0x10] + add r0, r7, #0 + add r2, sp, #0x1c + add r3, r5, #0 + mov r6, ip + blx r6 + cmp r0, #1 + bne _0222E1C2 + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 + mov r0, #1 + str r0, [sp, #0xc] + b _0222E1C2 _0222E1A4: - ldr r0, [r4, #8] - add r1, sp, #0x1c - str r0, [sp] - ldr r0, [r7] - mov r2, #3 - add r3, r5, #0 - bl MOD83_02238A38 - ldr r0, [sp, #0x18] - ldr r1, [r4] - add r0, #0xcc - str r1, [r0] - ldr r0, [r4, #4] - add r0, r0, #2 - add r5, r5, r0 + ldr r0, [r4, #8] + add r1, sp, #0x1c + str r0, [sp] + ldr r0, [r7] + mov r2, #3 + add r3, r5, #0 + bl MOD83_02238A38 + ldr r0, [sp, #0x18] + ldr r1, [r4] + add r0, #0xcc + str r1, [r0] + ldr r0, [r4, #4] + add r0, r0, #2 + add r5, r5, r0 _0222E1C2: - ldr r0, [sp, #0x14] - ldr r1, [r4, #4] - ldr r2, [r0] - mov r0, #0x1a - mul r0, r1 - add r1, r2, r0 - ldr r0, [sp, #0x14] - add r4, #0x10 - str r1, [r0] - ldr r0, [sp, #8] - add r0, #0x10 - str r0, [sp, #8] - ldr r0, [sp, #0x18] - add r0, r0, #4 - str r0, [sp, #0x18] - ldr r0, [sp, #0x10] - add r0, r0, #1 - str r0, [sp, #0x10] - cmp r0, #7 - blo _0222E104 - ldr r0, [sp, #0xc] - add sp, #0x70 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp, #0x14] + ldr r1, [r4, #4] + ldr r2, [r0] + mov r0, #0x1a + mul r0, r1 + add r1, r2, r0 + ldr r0, [sp, #0x14] + add r4, #0x10 + str r1, [r0] + ldr r0, [sp, #8] + add r0, #0x10 + str r0, [sp, #8] + ldr r0, [sp, #0x18] + add r0, r0, #4 + str r0, [sp, #0x18] + ldr r0, [sp, #0x10] + add r0, r0, #1 + str r0, [sp, #0x10] + cmp r0, #7 + blo _0222E104 + ldr r0, [sp, #0xc] + add sp, #0x70 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E1F0: .word MOD83_0223A854 _0222E1F4: .word 0x000001EE - thumb_func_end MOD83_0222E0DC + thumb_func_end MOD83_0222E0DC - thumb_func_start MOD83_0222E1F8 + thumb_func_start MOD83_0222E1F8 MOD83_0222E1F8: ; 0x0222E1F8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x20 - add r6, r0, #0 - add r5, r6, #0 - str r1, [sp, #0xc] - mov r4, #0 - add r5, #0x5c + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r6, r0, #0 + add r5, r6, #0 + str r1, [sp, #0xc] + mov r4, #0 + add r5, #0x5c _0222E206: - add r0, r5, #0 - bl WindowIsInUse - cmp r0, #0 - beq _0222E294 - ldr r0, [sp, #0xc] - cmp r4, r0 - bne _0222E256 - add r0, r5, #0 - mov r1, #1 - mov r2, #0xa - mov r3, #3 - bl FUN_0200CCA4 - add r0, r5, #0 - bl GetWindowX - str r0, [sp, #0x10] - add r0, r5, #0 - bl GetWindowY - str r0, [sp, #0x14] - add r0, r5, #0 - bl GetWindowWidth - add r7, r0, #0 - add r0, r5, #0 - bl GetWindowHeight - str r7, [sp] - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [r6] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0x14] - mov r1, #0 - bl BgTilemapRectChangePalette - b _0222E294 + add r0, r5, #0 + bl WindowIsInUse + cmp r0, #0 + beq _0222E294 + ldr r0, [sp, #0xc] + cmp r4, r0 + bne _0222E256 + add r0, r5, #0 + mov r1, #1 + mov r2, #0xa + mov r3, #3 + bl FUN_0200CCA4 + add r0, r5, #0 + bl GetWindowX + str r0, [sp, #0x10] + add r0, r5, #0 + bl GetWindowY + str r0, [sp, #0x14] + add r0, r5, #0 + bl GetWindowWidth + add r7, r0, #0 + add r0, r5, #0 + bl GetWindowHeight + str r7, [sp] + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r0, [r6] + ldr r2, [sp, #0x10] + ldr r3, [sp, #0x14] + mov r1, #0 + bl BgTilemapRectChangePalette + b _0222E294 _0222E256: - mov r1, #1 - add r0, r5, #0 - add r2, r1, #0 - mov r3, #2 - bl FUN_0200CCA4 - add r0, r5, #0 - bl GetWindowX - str r0, [sp, #0x18] - add r0, r5, #0 - bl GetWindowY - str r0, [sp, #0x1c] - add r0, r5, #0 - bl GetWindowWidth - add r7, r0, #0 - add r0, r5, #0 - bl GetWindowHeight - str r7, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, [r6] - ldr r2, [sp, #0x18] - ldr r3, [sp, #0x1c] - mov r1, #0 - bl BgTilemapRectChangePalette + mov r1, #1 + add r0, r5, #0 + add r2, r1, #0 + mov r3, #2 + bl FUN_0200CCA4 + add r0, r5, #0 + bl GetWindowX + str r0, [sp, #0x18] + add r0, r5, #0 + bl GetWindowY + str r0, [sp, #0x1c] + add r0, r5, #0 + bl GetWindowWidth + add r7, r0, #0 + add r0, r5, #0 + bl GetWindowHeight + str r7, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, [r6] + ldr r2, [sp, #0x18] + ldr r3, [sp, #0x1c] + mov r1, #0 + bl BgTilemapRectChangePalette _0222E294: - add r4, r4, #1 - add r5, #0x10 - cmp r4, #7 - blo _0222E206 - ldr r0, [r6] - mov r1, #0 - bl BgCommitTilemapBufferToVram - add sp, #0x20 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222E1F8 - - thumb_func_start MOD83_0222E2A8 + add r4, r4, #1 + add r5, #0x10 + cmp r4, #7 + blo _0222E206 + ldr r0, [r6] + mov r1, #0 + bl BgCommitTilemapBufferToVram + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222E1F8 + + thumb_func_start MOD83_0222E2A8 MOD83_0222E2A8: ; 0x0222E2A8 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r2, r1, #0 - ldr r1, [r5, #0x54] - mov r7, #6 - add r4, r1, #0 - mov r0, #0 - sub r6, r7, #7 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r2, r1, #0 + ldr r1, [r5, #0x54] + mov r7, #6 + add r4, r1, #0 + mov r0, #0 + sub r6, r7, #7 _0222E2B8: - add r4, r4, r2 - cmp r4, r6 - bne _0222E2C0 - add r4, r0, #0 + add r4, r4, r2 + cmp r4, r6 + bne _0222E2C0 + add r4, r0, #0 _0222E2C0: - cmp r4, #7 - bne _0222E2C6 - add r4, r7, #0 + cmp r4, #7 + bne _0222E2C6 + add r4, r7, #0 _0222E2C6: - cmp r4, r1 - beq _0222E2DC - lsl r3, r4, #2 - add r3, r5, r3 - add r3, #0xcc - ldr r3, [r3] - cmp r3, #0 - beq _0222E2B8 - ldr r0, _0222E2E0 ; =0x000005DC - bl PlaySE + cmp r4, r1 + beq _0222E2DC + lsl r3, r4, #2 + add r3, r5, r3 + add r3, #0xcc + ldr r3, [r3] + cmp r3, #0 + beq _0222E2B8 + ldr r0, _0222E2E0 ; =0x000005DC + bl PlaySE _0222E2DC: - str r4, [r5, #0x54] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r4, [r5, #0x54] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E2E0: .word 0x000005DC - thumb_func_end MOD83_0222E2A8 + thumb_func_end MOD83_0222E2A8 - thumb_func_start MOD83_0222E2E4 + thumb_func_start MOD83_0222E2E4 MOD83_0222E2E4: ; 0x0222E2E4 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #0x54] - add r1, r5, #0 - add r1, #0x5c - lsl r0, r0, #4 - add r0, r1, r0 - bl GetWindowY - sub r0, r0, #1 - lsl r4, r0, #3 - ldr r0, [r5, #0x54] - add r1, r5, #0 - add r1, #0x5c - lsl r0, r0, #4 - add r0, r1, r0 - bl GetWindowHeight - add r0, r0, #2 - lsl r3, r0, #3 - mov r0, #0x42 - lsl r0, r0, #2 - ldr r2, [r5, r0] - asr r1, r2, #0xb - lsr r1, r1, #0x14 - add r1, r2, r1 - asr r2, r1, #0xc - cmp r2, r4 - ble _0222E322 - lsl r1, r4, #0xc - str r1, [r5, r0] + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, [r5, #0x54] + add r1, r5, #0 + add r1, #0x5c + lsl r0, r0, #4 + add r0, r1, r0 + bl GetWindowY + sub r0, r0, #1 + lsl r4, r0, #3 + ldr r0, [r5, #0x54] + add r1, r5, #0 + add r1, #0x5c + lsl r0, r0, #4 + add r0, r1, r0 + bl GetWindowHeight + add r0, r0, #2 + lsl r3, r0, #3 + mov r0, #0x42 + lsl r0, r0, #2 + ldr r2, [r5, r0] + asr r1, r2, #0xb + lsr r1, r1, #0x14 + add r1, r2, r1 + asr r2, r1, #0xc + cmp r2, r4 + ble _0222E322 + lsl r1, r4, #0xc + str r1, [r5, r0] _0222E322: - add r2, #0xc0 - cmp r2, r4 - bgt _0222E334 - add r0, r4, r3 - sub r0, #0xc0 - lsl r1, r0, #0xc - mov r0, #0x42 - lsl r0, r0, #2 - str r1, [r5, r0] + add r2, #0xc0 + cmp r2, r4 + bgt _0222E334 + add r0, r4, r3 + sub r0, #0xc0 + lsl r1, r0, #0xc + mov r0, #0x42 + lsl r0, r0, #2 + str r1, [r5, r0] _0222E334: - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0222E2E4 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0222E2E4 - thumb_func_start MOD83_0222E338 + thumb_func_start MOD83_0222E338 MOD83_0222E338: ; 0x0222E338 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - str r0, [sp, #8] - mov r1, #0x42 - ldr r0, [sp] - lsl r1, r1, #2 - ldr r1, [r0, r1] - ldr r5, [sp] - asr r0, r1, #0xb - lsr r0, r0, #0x14 - add r0, r1, r0 - asr r7, r0, #0xc - add r0, r7, #0 - str r0, [sp, #0xc] - add r0, #0xc0 - ldr r6, [sp, #4] - add r5, #0x5c - str r0, [sp, #0xc] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #0x42 + ldr r0, [sp] + lsl r1, r1, #2 + ldr r1, [r0, r1] + ldr r5, [sp] + asr r0, r1, #0xb + lsr r0, r0, #0x14 + add r0, r1, r0 + asr r7, r0, #0xc + add r0, r7, #0 + str r0, [sp, #0xc] + add r0, #0xc0 + ldr r6, [sp, #4] + add r5, #0x5c + str r0, [sp, #0xc] _0222E362: - add r0, r5, #0 - bl WindowIsInUse - cmp r0, #0 - beq _0222E38E - add r0, r5, #0 - bl GetWindowY - sub r0, r0, #1 - lsl r4, r0, #3 - add r0, r5, #0 - bl GetWindowHeight - cmp r7, r4 - ble _0222E384 - mov r0, #1 - str r0, [sp, #8] + add r0, r5, #0 + bl WindowIsInUse + cmp r0, #0 + beq _0222E38E + add r0, r5, #0 + bl GetWindowY + sub r0, r0, #1 + lsl r4, r0, #3 + add r0, r5, #0 + bl GetWindowHeight + cmp r7, r4 + ble _0222E384 + mov r0, #1 + str r0, [sp, #8] _0222E384: - ldr r0, [sp, #0xc] - cmp r0, r4 - bgt _0222E38E - mov r0, #1 - str r0, [sp, #4] + ldr r0, [sp, #0xc] + cmp r0, r4 + bgt _0222E38E + mov r0, #1 + str r0, [sp, #4] _0222E38E: - add r6, r6, #1 - add r5, #0x10 - cmp r6, #7 - blo _0222E362 - mov r1, #0x15 - ldr r0, [sp] - lsl r1, r1, #4 - ldr r0, [r0, r1] - ldr r1, [sp, #8] - bl FUN_020200A0 - mov r1, #0x55 - ldr r0, [sp] - lsl r1, r1, #2 - ldr r0, [r0, r1] - ldr r1, [sp, #4] - bl FUN_020200A0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_0222E338 - - thumb_func_start MOD83_0222E3B8 + add r6, r6, #1 + add r5, #0x10 + cmp r6, #7 + blo _0222E362 + mov r1, #0x15 + ldr r0, [sp] + lsl r1, r1, #4 + ldr r0, [r0, r1] + ldr r1, [sp, #8] + bl FUN_020200A0 + mov r1, #0x55 + ldr r0, [sp] + lsl r1, r1, #2 + ldr r0, [r0, r1] + ldr r1, [sp, #4] + bl FUN_020200A0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_0222E338 + + thumb_func_start MOD83_0222E3B8 MOD83_0222E3B8: ; 0x0222E3B8 - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - mov r1, #0x15 - add r7, r0, #0 - lsl r1, r1, #4 - ldr r0, [r7, r1] - cmp r0, #0 - bne _0222E3D2 - add r1, r1, #4 - ldr r1, [r7, r1] - cmp r1, #0 - beq _0222E3E4 + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + mov r1, #0x15 + add r7, r0, #0 + lsl r1, r1, #4 + ldr r0, [r7, r1] + cmp r0, #0 + bne _0222E3D2 + add r1, r1, #4 + ldr r1, [r7, r1] + cmp r1, #0 + beq _0222E3E4 _0222E3D2: - bl FUN_0201FFC8 - mov r0, #0x55 - lsl r0, r0, #2 - ldr r0, [r7, r0] - bl FUN_0201FFC8 - bl MOD83_02238E48 + bl FUN_0201FFC8 + mov r0, #0x55 + lsl r0, r0, #2 + ldr r0, [r7, r0] + bl FUN_0201FFC8 + bl MOD83_02238E48 _0222E3E4: - add r5, r7, #0 - mov r6, #0 - add r4, r7, #0 - add r5, #0x5c + add r5, r7, #0 + mov r6, #0 + add r4, r7, #0 + add r5, #0x5c _0222E3EC: - ldr r0, [r4, #0x5c] - cmp r0, #0 - beq _0222E3FE - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, [r4, #0x5c] + cmp r0, #0 + beq _0222E3FE + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _0222E3FE: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #7 - blo _0222E3EC - ldr r0, [r7] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #2 - bl FreeBgTilemapBuffer - ldr r0, [r7] - bl FreeToHeap - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222E3B8 - - thumb_func_start MOD83_0222E430 + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #7 + blo _0222E3EC + ldr r0, [r7] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #2 + bl FreeBgTilemapBuffer + ldr r0, [r7] + bl FreeToHeap + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222E3B8 + + thumb_func_start MOD83_0222E430 MOD83_0222E430: ; 0x0222E430 - mov r1, #0x56 - lsl r1, r1, #2 - ldr r2, [r0, r1] - lsl r3, r2, #1 - ldr r2, _0222E45C ; =MOD83_0223A7B0 - ldrh r2, [r2, r3] - cmp r2, #0 - bne _0222E444 - mov r2, #0 - str r2, [r0, r1] + mov r1, #0x56 + lsl r1, r1, #2 + ldr r2, [r0, r1] + lsl r3, r2, #1 + ldr r2, _0222E45C ; =MOD83_0223A7B0 + ldrh r2, [r2, r3] + cmp r2, #0 + bne _0222E444 + mov r2, #0 + str r2, [r0, r1] _0222E444: - mov r1, #0x56 - lsl r1, r1, #2 - ldr r3, [r0, r1] - add r2, r3, #1 - str r2, [r0, r1] - ldr r0, _0222E45C ; =MOD83_0223A7B0 - lsl r1, r3, #1 - ldrh r1, [r0, r1] - ldr r0, _0222E460 ; =0x0500006C - strh r1, [r0] - bx lr - nop + mov r1, #0x56 + lsl r1, r1, #2 + ldr r3, [r0, r1] + add r2, r3, #1 + str r2, [r0, r1] + ldr r0, _0222E45C ; =MOD83_0223A7B0 + lsl r1, r3, #1 + ldrh r1, [r0, r1] + ldr r0, _0222E460 ; =0x0500006C + strh r1, [r0] + bx lr + nop _0222E45C: .word MOD83_0223A7B0 _0222E460: .word 0x0500006C - thumb_func_end MOD83_0222E430 + thumb_func_end MOD83_0222E430 - thumb_func_start MOD83_0222E464 + thumb_func_start MOD83_0222E464 MOD83_0222E464: ; 0x0222E464 - push {r4, lr} - add r4, r0, #0 - bl FUN_0201C30C - bl FUN_02009F80 - add r0, r4, #0 - bl DoScheduledBgGpuUpdates - ldr r3, _0222E484 ; =MOD83_027E0000 - ldr r1, _0222E488 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + bl FUN_0201C30C + bl FUN_02009F80 + add r0, r4, #0 + bl DoScheduledBgGpuUpdates + ldr r3, _0222E484 ; =MOD83_027E0000 + ldr r1, _0222E488 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _0222E484: .word 0x027E0000 _0222E488: .word 0x00003FF8 - thumb_func_end MOD83_0222E464 + thumb_func_end MOD83_0222E464 - thumb_func_start MOD83_0222E48C + thumb_func_start MOD83_0222E48C MOD83_0222E48C: ; 0x0222E48C - push {r3, r4, r5, lr} - mov r2, #1 - add r5, r0, #0 - mov r0, #3 - mov r1, #0x51 - lsl r2, r2, #0x12 - bl CreateHeap - mov r1, #0x57 - add r0, r5, #0 - lsl r1, r1, #2 - mov r2, #0x51 - bl OverlayManager_CreateAndGetData - mov r2, #0x57 - mov r1, #0 - lsl r2, r2, #2 - add r4, r0, #0 - bl memset - mov r0, #0x51 - bl BgConfig_Alloc - str r0, [r4] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #4] - bl FUN_0202251C - str r0, [r4, #0x14] - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] - add r0, r0, #4 - str r1, [r4, r0] - ldr r0, [r4, #4] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0xc] - ldr r0, [r4, #4] - bl Sav2_Pokedex_get - str r0, [r4, #8] - ldr r0, [r4, #4] - bl Sav2_PlayerData_GetIGTAddr - str r0, [r4, #0x10] - ldr r0, [r4, #8] - bl Pokedex_GetSinnohDexFlag - str r0, [r4, #0x4c] - ldr r0, [r4, #0xc] - bl PlayerProfile_CountBadges - str r0, [r4, #0x50] - mov r0, #0x45 - mov r1, #0xf - lsl r0, r0, #2 - str r1, [r4, r0] - mov r0, #0x51 - bl MOD83_02238770 - ldr r0, [r4, #4] - bl FUN_02022804 - cmp r0, #0 - bne _0222E530 - mov r0, #0x4d - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] + push {r3, r4, r5, lr} + mov r2, #1 + add r5, r0, #0 + mov r0, #3 + mov r1, #0x51 + lsl r2, r2, #0x12 + bl CreateHeap + mov r1, #0x57 + add r0, r5, #0 + lsl r1, r1, #2 + mov r2, #0x51 + bl OverlayManager_CreateAndGetData + mov r2, #0x57 + mov r1, #0 + lsl r2, r2, #2 + add r4, r0, #0 + bl memset + mov r0, #0x51 + bl BgConfig_Alloc + str r0, [r4] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #4] + bl FUN_0202251C + str r0, [r4, #0x14] + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] + add r0, r0, #4 + str r1, [r4, r0] + ldr r0, [r4, #4] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0xc] + ldr r0, [r4, #4] + bl Sav2_Pokedex_get + str r0, [r4, #8] + ldr r0, [r4, #4] + bl Sav2_PlayerData_GetIGTAddr + str r0, [r4, #0x10] + ldr r0, [r4, #8] + bl Pokedex_GetSinnohDexFlag + str r0, [r4, #0x4c] + ldr r0, [r4, #0xc] + bl PlayerProfile_CountBadges + str r0, [r4, #0x50] + mov r0, #0x45 + mov r1, #0xf + lsl r0, r0, #2 + str r1, [r4, r0] + mov r0, #0x51 + bl MOD83_02238770 + ldr r0, [r4, #4] + bl FUN_02022804 + cmp r0, #0 + bne _0222E530 + mov r0, #0x4d + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] _0222E530: - mov r0, #0 - bl FUN_0200516C - mov r0, #0 - bl FUN_0200415C - mov r0, #1 - pop {r3, r4, r5, pc} - thumb_func_end MOD83_0222E48C - - thumb_func_start MOD83_0222E540 + mov r0, #0 + bl FUN_0200516C + mov r0, #0 + bl FUN_0200415C + mov r0, #1 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_0222E48C + + thumb_func_start MOD83_0222E540 MOD83_0222E540: ; 0x0222E540 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, [r4, #0x18] - add r0, r0, #1 - str r0, [r4, #0x18] - bl CTRDG_IsExisting - add r0, r4, #0 - bl MOD83_0222D7E0 - cmp r0, #1 - bne _0222E570 - add r0, r4, #0 - bl MOD83_0222D6EC - add r0, r4, #0 - bl MOD83_0222D9C0 - mov r0, #0 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, [r4, #0x18] + add r0, r0, #1 + str r0, [r4, #0x18] + bl CTRDG_IsExisting + add r0, r4, #0 + bl MOD83_0222D7E0 + cmp r0, #1 + bne _0222E570 + add r0, r4, #0 + bl MOD83_0222D6EC + add r0, r4, #0 + bl MOD83_0222D9C0 + mov r0, #0 + pop {r4, r5, r6, pc} _0222E570: - add r0, r4, #0 - bl MOD83_0222E430 - ldr r0, [r5] - cmp r0, #9 - bhi _0222E5D8 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r4, #0 + bl MOD83_0222E430 + ldr r0, [r5] + cmp r0, #9 + bhi _0222E5D8 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222E588: ; jump table - .short _0222E59C - _0222E588 - 2 ; case 0 - .short _0222E5A8 - _0222E588 - 2 ; case 1 - .short _0222E5CE - _0222E588 - 2 ; case 2 - .short _0222E5E8 - _0222E588 - 2 ; case 3 - .short _0222E616 - _0222E588 - 2 ; case 4 - .short _0222E656 - _0222E588 - 2 ; case 5 - .short _0222E74A - _0222E588 - 2 ; case 6 - .short _0222E772 - _0222E588 - 2 ; case 7 - .short _0222E77C - _0222E588 - 2 ; case 8 - .short _0222E784 - _0222E588 - 2 ; case 9 + .short _0222E59C - _0222E588 - 2 ; case 0 + .short _0222E5A8 - _0222E588 - 2 ; case 1 + .short _0222E5CE - _0222E588 - 2 ; case 2 + .short _0222E5E8 - _0222E588 - 2 ; case 3 + .short _0222E616 - _0222E588 - 2 ; case 4 + .short _0222E656 - _0222E588 - 2 ; case 5 + .short _0222E74A - _0222E588 - 2 ; case 6 + .short _0222E772 - _0222E588 - 2 ; case 7 + .short _0222E77C - _0222E588 - 2 ; case 8 + .short _0222E784 - _0222E588 - 2 ; case 9 _0222E59C: - add r0, r4, #0 - bl MOD83_0222DA50 - mov r0, #1 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222DA50 + mov r0, #1 + str r0, [r5] + b _0222E788 _0222E5A8: - add r0, r4, #0 - bl MOD83_0222D5C0 - cmp r0, #0 - bne _0222E5B8 - mov r0, #3 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222D5C0 + cmp r0, #0 + bne _0222E5B8 + mov r0, #3 + str r0, [r5] + b _0222E788 _0222E5B8: - mov r0, #1 - mov r1, #2 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - mov r0, #5 - ldr r1, _0222E79C ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - b _0222E788 + mov r0, #1 + mov r1, #2 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + mov r0, #5 + ldr r1, _0222E79C ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + b _0222E788 _0222E5CE: - add r0, r4, #0 - bl MOD83_0222D5C4 - cmp r0, #0 - beq _0222E5DA + add r0, r4, #0 + bl MOD83_0222D5C4 + cmp r0, #0 + beq _0222E5DA _0222E5D8: - b _0222E788 + b _0222E788 _0222E5DA: - mov r0, #0 - mov r1, #3 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0 + mov r1, #3 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E5E8: - mov r0, #0x43 - mov r1, #0xc - lsl r0, r0, #2 - str r1, [r4, r0] - add r0, #0x28 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222E60A - mov r0, #2 - str r0, [r4, #0x58] - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0x43 + mov r1, #0xc + lsl r0, r0, #2 + str r1, [r4, r0] + add r0, #0x28 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222E60A + mov r0, #2 + str r0, [r4, #0x58] + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E60A: - add r0, r4, #0 - bl MOD83_0222D67C - mov r0, #4 - str r0, [r5] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222D67C + mov r0, #4 + str r0, [r5] + b _0222E788 _0222E616: - add r0, r4, #0 - bl MOD83_0222DB68 - add r0, r4, #0 - bl MOD83_0222DBD0 - ldr r0, _0222E7A0 ; =MOD83_0222E464 - ldr r1, [r4] - bl Main_SetVBlankIntrCB - add r0, r4, #0 - bl MOD83_0222E0DC - ldr r1, [r4, #0x54] - add r0, r4, #0 - bl MOD83_0222E1F8 - mov r0, #1 - mov r1, #5 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - mov r0, #5 - ldr r1, _0222E79C ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - mov r0, #0x43 - mov r1, #0xa - lsl r0, r0, #2 - str r1, [r4, r0] - b _0222E788 + add r0, r4, #0 + bl MOD83_0222DB68 + add r0, r4, #0 + bl MOD83_0222DBD0 + ldr r0, _0222E7A0 ; =MOD83_0222E464 + ldr r1, [r4] + bl Main_SetVBlankIntrCB + add r0, r4, #0 + bl MOD83_0222E0DC + ldr r1, [r4, #0x54] + add r0, r4, #0 + bl MOD83_0222E1F8 + mov r0, #1 + mov r1, #5 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + mov r0, #5 + ldr r1, _0222E79C ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + mov r0, #0x43 + mov r1, #0xa + lsl r0, r0, #2 + str r1, [r4, r0] + b _0222E788 _0222E656: - ldr r0, _0222E7A4 ; =gMain - mov r1, #3 - ldr r0, [r0, #0x48] - tst r1, r0 - beq _0222E6E8 - mov r1, #1 - tst r0, r1 - ldr r0, _0222E7A8 ; =0x000005DC - beq _0222E69A - bl PlaySE - ldr r0, [r4, #0x54] - lsl r0, r0, #2 - add r0, r4, r0 - add r0, #0xcc - ldr r0, [r0] - str r0, [r4, #0x58] - cmp r0, #5 - bne _0222E6A8 - bl CTRDG_IsPulledOut - cmp r0, #1 - bne _0222E6A8 - mov r0, #0x43 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #0xc - beq _0222E692 - bl FUN_02032D80 + ldr r0, _0222E7A4 ; =gMain + mov r1, #3 + ldr r0, [r0, #0x48] + tst r1, r0 + beq _0222E6E8 + mov r1, #1 + tst r0, r1 + ldr r0, _0222E7A8 ; =0x000005DC + beq _0222E69A + bl PlaySE + ldr r0, [r4, #0x54] + lsl r0, r0, #2 + add r0, r4, r0 + add r0, #0xcc + ldr r0, [r0] + str r0, [r4, #0x58] + cmp r0, #5 + bne _0222E6A8 + bl CTRDG_IsPulledOut + cmp r0, #1 + bne _0222E6A8 + mov r0, #0x43 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #0xc + beq _0222E692 + bl FUN_02032D80 _0222E692: - mov r0, #0x51 - bl FUN_02089F24 - b _0222E6A8 + mov r0, #0x51 + bl FUN_02089F24 + b _0222E6A8 _0222E69A: - bl PlaySE - mov r0, #0 - str r0, [r4, #0x58] - mov r0, #1 - bl MOD83_02238860 + bl PlaySE + mov r0, #0 + str r0, [r4, #0x58] + mov r0, #1 + bl MOD83_02238860 _0222E6A8: - ldr r0, [r4, #0x58] - cmp r0, #2 - bne _0222E6C2 - ldr r1, [r4, #0x40] - mov r0, #0x80 - orr r1, r0 - str r1, [r4, #0x40] - mov r1, #1 - add r0, #0x98 - str r1, [r4, r0] - mov r0, #6 - str r0, [r5] - b _0222E6D8 + ldr r0, [r4, #0x58] + cmp r0, #2 + bne _0222E6C2 + ldr r1, [r4, #0x40] + mov r0, #0x80 + orr r1, r0 + str r1, [r4, #0x40] + mov r1, #1 + add r0, #0x98 + str r1, [r4, r0] + mov r0, #6 + str r0, [r5] + b _0222E6D8 _0222E6C2: - cmp r0, #6 - bne _0222E6CC - mov r0, #1 - bl MOD83_02238860 + cmp r0, #6 + bne _0222E6CC + mov r0, #1 + bl MOD83_02238860 _0222E6CC: - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C _0222E6D8: - mov r0, #0x43 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0xd - bne _0222E788 - mov r1, #0xe - str r1, [r4, r0] - b _0222E788 + mov r0, #0x43 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0xd + bne _0222E788 + mov r1, #0xe + str r1, [r4, r0] + b _0222E788 _0222E6E8: - ldr r1, [r4, #0x48] - cmp r1, #1 - bne _0222E6FA - add r0, r4, #0 - bl MOD83_0222E0DC - mov r0, #0 - str r0, [r4, #0x48] - b _0222E788 + ldr r1, [r4, #0x48] + cmp r1, #1 + bne _0222E6FA + add r0, r4, #0 + bl MOD83_0222E0DC + mov r0, #0 + str r0, [r4, #0x48] + b _0222E788 _0222E6FA: - mov r1, #0x40 - tst r0, r1 - beq _0222E708 - add r0, r4, #0 - sub r1, #0x41 - bl MOD83_0222E2A8 + mov r1, #0x40 + tst r0, r1 + beq _0222E708 + add r0, r4, #0 + sub r1, #0x41 + bl MOD83_0222E2A8 _0222E708: - ldr r0, _0222E7A4 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #0x80 - tst r0, r1 - beq _0222E71A - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222E2A8 + ldr r0, _0222E7A4 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #0x80 + tst r0, r1 + beq _0222E71A + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222E2A8 _0222E71A: - ldr r1, [r4, #0x54] - add r0, r4, #0 - bl MOD83_0222E1F8 - add r0, r4, #0 - bl MOD83_0222E2E4 - add r0, r4, #0 - bl MOD83_0222E338 - ldr r0, [r5] - cmp r0, #5 - bne _0222E788 - mov r0, #0x4e - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #1 - bne _0222E788 - mov r1, #0 - str r1, [r4, r0] - mov r1, #1 - sub r0, #0x20 - str r1, [r4, r0] - b _0222E788 + ldr r1, [r4, #0x54] + add r0, r4, #0 + bl MOD83_0222E1F8 + add r0, r4, #0 + bl MOD83_0222E2E4 + add r0, r4, #0 + bl MOD83_0222E338 + ldr r0, [r5] + cmp r0, #5 + bne _0222E788 + mov r0, #0x4e + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #1 + bne _0222E788 + mov r1, #0 + str r1, [r4, r0] + mov r1, #1 + sub r0, #0x20 + str r1, [r4, r0] + b _0222E788 _0222E74A: - mov r0, #0x45 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0xf - bne _0222E788 - add r0, #0xc - ldr r1, [r4, r0] - mov r0, #2 - tst r0, r1 - beq _0222E764 - mov r0, #5 - str r0, [r5] - b _0222E788 + mov r0, #0x45 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0xf + bne _0222E788 + add r0, #0xc + ldr r1, [r4, r0] + mov r0, #2 + tst r0, r1 + beq _0222E764 + mov r0, #5 + str r0, [r5] + b _0222E788 _0222E764: - mov r0, #0 - mov r1, #7 - add r2, r5, #0 - mov r3, #8 - bl MOD83_0223886C - b _0222E788 + mov r0, #0 + mov r1, #7 + add r2, r5, #0 + mov r3, #8 + bl MOD83_0223886C + b _0222E788 _0222E772: - add r0, r6, #0 - bl MOD83_0222E3B8 - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r6, #0 + bl MOD83_0222E3B8 + mov r0, #1 + pop {r4, r5, r6, pc} _0222E77C: - add r0, r5, #0 - bl MOD83_022388CC - b _0222E788 + add r0, r5, #0 + bl MOD83_022388CC + b _0222E788 _0222E784: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _0222E788: - add r0, r4, #0 - bl MOD83_0222D6EC - add r0, r4, #0 - bl MOD83_0222D9C0 - bl MOD83_02238D58 - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + bl MOD83_0222D6EC + add r0, r4, #0 + bl MOD83_0222D9C0 + bl MOD83_02238D58 + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 _0222E79C: .word 0x00007D8C _0222E7A0: .word MOD83_0222E464 _0222E7A4: .word gMain _0222E7A8: .word 0x000005DC - thumb_func_end MOD83_0222E540 + thumb_func_end MOD83_0222E540 - thumb_func_start MOD83_0222E7AC + thumb_func_start MOD83_0222E7AC MOD83_0222E7AC: ; 0x0222E7AC - push {r3, lr} - ldr r0, [r0, #0x58] - cmp r0, #7 - bhi _0222E822 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r0, [r0, #0x58] + cmp r0, #7 + bhi _0222E822 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222E7C0: ; jump table - .short _0222E81A - _0222E7C0 - 2 ; case 0 - .short _0222E7D0 - _0222E7C0 - 2 ; case 1 - .short _0222E7DA - _0222E7C0 - 2 ; case 2 - .short _0222E7E4 - _0222E7C0 - 2 ; case 3 - .short _0222E7F8 - _0222E7C0 - 2 ; case 4 - .short _0222E7EE - _0222E7C0 - 2 ; case 5 - .short _0222E802 - _0222E7C0 - 2 ; case 6 - .short _0222E80A - _0222E7C0 - 2 ; case 7 + .short _0222E81A - _0222E7C0 - 2 ; case 0 + .short _0222E7D0 - _0222E7C0 - 2 ; case 1 + .short _0222E7DA - _0222E7C0 - 2 ; case 2 + .short _0222E7E4 - _0222E7C0 - 2 ; case 3 + .short _0222E7F8 - _0222E7C0 - 2 ; case 4 + .short _0222E7EE - _0222E7C0 - 2 ; case 5 + .short _0222E802 - _0222E7C0 - 2 ; case 6 + .short _0222E80A - _0222E7C0 - 2 ; case 7 _0222E7D0: - ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID - ldr r1, _0222E828 ; =MOD52_021D76C8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID + ldr r1, _0222E828 ; =MOD52_021D76C8 + bl RegisterMainOverlay + pop {r3, pc} _0222E7DA: - ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID - ldr r1, _0222E82C ; =MOD52_021D76E8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E824 ; =SDK_OVERLAY_MODULE_52_ID + ldr r1, _0222E82C ; =MOD52_021D76E8 + bl RegisterMainOverlay + pop {r3, pc} _0222E7E4: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E834 ; =MOD83_0223A434 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E834 ; =MOD83_0223A434 + bl RegisterMainOverlay + pop {r3, pc} _0222E7EE: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E838 ; =MOD83_0223A4FC - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E838 ; =MOD83_0223A4FC + bl RegisterMainOverlay + pop {r3, pc} _0222E7F8: - ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _0222E83C ; =MOD83_0223A3A8 - bl RegisterMainOverlay - pop {r3, pc} + ldr r0, _0222E830 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _0222E83C ; =MOD83_0223A3A8 + bl RegisterMainOverlay + pop {r3, pc} _0222E802: - ldr r0, _0222E840 ; =MOD83_0223A8C4 - bl Reset_To_File - pop {r3, pc} + ldr r0, _0222E840 ; =MOD83_0223A8C4 + bl Reset_To_File + pop {r3, pc} _0222E80A: - bl FUN_0200541C - mov r0, #0 - ldr r1, _0222E844 ; =UNK_020FD6D4 - mvn r0, r0 - bl RegisterMainOverlay - pop {r3, pc} + bl FUN_0200541C + mov r0, #0 + ldr r1, _0222E844 ; =UNK_020FD6D4 + mvn r0, r0 + bl RegisterMainOverlay + pop {r3, pc} _0222E81A: - ldr r0, _0222E848 ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _0222E84C ; =MOD63_021DBAB8 - bl RegisterMainOverlay + ldr r0, _0222E848 ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _0222E84C ; =MOD63_021DBAB8 + bl RegisterMainOverlay _0222E822: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0222E824: .word SDK_OVERLAY_MODULE_52_ID _0222E828: .word MOD52_021D76C8 _0222E82C: .word MOD52_021D76E8 @@ -2361,1632 +2361,1632 @@ _0222E840: .word MOD83_0223A8C4 _0222E844: .word UNK_020FD6D4 _0222E848: .word SDK_OVERLAY_MODULE_63_ID _0222E84C: .word MOD63_021DBAB8 - thumb_func_end MOD83_0222E7AC + thumb_func_end MOD83_0222E7AC - thumb_func_start MOD83_0222E850 + thumb_func_start MOD83_0222E850 MOD83_0222E850: ; 0x0222E850 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - bl MOD83_0222E7AC - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x51 - bl DestroyHeap - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222E850 - - thumb_func_start MOD83_0222E874 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + bl MOD83_0222E7AC + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x51 + bl DestroyHeap + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222E850 + + thumb_func_start MOD83_0222E874 MOD83_0222E874: ; 0x0222E874 - push {r3, r4} - ldr r4, _0222E89C ; =MOD83_0223A8E0 - ldr r1, _0222E8A0 ; =0x00000123 - mov r3, #0 + push {r3, r4} + ldr r4, _0222E89C ; =MOD83_0223A8E0 + ldr r1, _0222E8A0 ; =0x00000123 + mov r3, #0 _0222E87C: - ldrh r2, [r4, #2] - cmp r0, r2 - bne _0222E88C - ldr r0, _0222E89C ; =MOD83_0223A8E0 - lsl r1, r3, #2 - ldrh r0, [r0, r1] - pop {r3, r4} - bx lr + ldrh r2, [r4, #2] + cmp r0, r2 + bne _0222E88C + ldr r0, _0222E89C ; =MOD83_0223A8E0 + lsl r1, r3, #2 + ldrh r0, [r0, r1] + pop {r3, r4} + bx lr _0222E88C: - add r3, r3, #1 - add r4, r4, #4 - cmp r3, r1 - blo _0222E87C - mov r0, #0x3f - pop {r3, r4} - bx lr - nop + add r3, r3, #1 + add r4, r4, #4 + cmp r3, r1 + blo _0222E87C + mov r0, #0x3f + pop {r3, r4} + bx lr + nop _0222E89C: .word MOD83_0223A8E0 _0222E8A0: .word 0x00000123 - thumb_func_end MOD83_0222E874 + thumb_func_end MOD83_0222E874 - thumb_func_start MOD83_0222E8A4 + thumb_func_start MOD83_0222E8A4 MOD83_0222E8A4: ; 0x0222E8A4 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldr r1, _0222E90C ; =0x00002710 - add r0, r4, #0 - bl _s32_div_f - add r0, #0x30 - strh r0, [r5] - ldr r1, _0222E90C ; =0x00002710 - add r0, r4, #0 - bl _s32_div_f - add r4, r1, #0 - mov r1, #0xfa - add r0, r4, #0 - lsl r1, r1, #2 - bl _s32_div_f - add r0, #0x30 - mov r1, #0xfa - strh r0, [r5, #2] - add r0, r4, #0 - lsl r1, r1, #2 - bl _s32_div_f - add r4, r1, #0 - add r0, r4, #0 - mov r1, #0x64 - bl _s32_div_f - add r0, #0x30 - strh r0, [r5, #4] - add r0, r4, #0 - mov r1, #0x64 - bl _s32_div_f - add r4, r1, #0 - add r0, r4, #0 - mov r1, #0xa - bl _s32_div_f - add r0, #0x30 - strh r0, [r5, #6] - add r0, r4, #0 - mov r1, #0xa - bl _s32_div_f - add r4, r1, #0 - add r4, #0x30 - strh r4, [r5, #8] - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r1, _0222E90C ; =0x00002710 + add r0, r4, #0 + bl _s32_div_f + add r0, #0x30 + strh r0, [r5] + ldr r1, _0222E90C ; =0x00002710 + add r0, r4, #0 + bl _s32_div_f + add r4, r1, #0 + mov r1, #0xfa + add r0, r4, #0 + lsl r1, r1, #2 + bl _s32_div_f + add r0, #0x30 + mov r1, #0xfa + strh r0, [r5, #2] + add r0, r4, #0 + lsl r1, r1, #2 + bl _s32_div_f + add r4, r1, #0 + add r0, r4, #0 + mov r1, #0x64 + bl _s32_div_f + add r0, #0x30 + strh r0, [r5, #4] + add r0, r4, #0 + mov r1, #0x64 + bl _s32_div_f + add r4, r1, #0 + add r0, r4, #0 + mov r1, #0xa + bl _s32_div_f + add r0, #0x30 + strh r0, [r5, #6] + add r0, r4, #0 + mov r1, #0xa + bl _s32_div_f + add r4, r1, #0 + add r4, #0x30 + strh r4, [r5, #8] + pop {r3, r4, r5, pc} + .align 2, 0 _0222E90C: .word 0x00002710 - thumb_func_end MOD83_0222E8A4 + thumb_func_end MOD83_0222E8A4 - thumb_func_start MOD83_0222E910 + thumb_func_start MOD83_0222E910 MOD83_0222E910: ; 0x0222E910 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - ldr r0, [r7, #0x10] - bl PlayerProfile_GetNamePtr - ldr r5, _0222E948 ; =MOD83_0223B860 - add r4, r0, #0 - mov r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + ldr r0, [r7, #0x10] + bl PlayerProfile_GetNamePtr + ldr r5, _0222E948 ; =MOD83_0223B860 + add r4, r0, #0 + mov r6, #0 _0222E920: - ldrh r0, [r4] - bl MOD83_0222E874 - strh r0, [r5] - add r6, r6, #1 - add r4, r4, #2 - add r5, r5, #2 - cmp r6, #8 - blt _0222E920 - ldr r0, [r7, #0x10] - bl PlayerProfile_GetTrainerID_VisibleHalf - add r1, r0, #0 - ldr r0, _0222E94C ; =MOD83_0223B870 - bl MOD83_0222E8A4 - ldr r0, _0222E950 ; =MOD83_0223B860 - mov r1, #0 - strh r1, [r0, #0x1a] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r4] + bl MOD83_0222E874 + strh r0, [r5] + add r6, r6, #1 + add r4, r4, #2 + add r5, r5, #2 + cmp r6, #8 + blt _0222E920 + ldr r0, [r7, #0x10] + bl PlayerProfile_GetTrainerID_VisibleHalf + add r1, r0, #0 + ldr r0, _0222E94C ; =MOD83_0223B870 + bl MOD83_0222E8A4 + ldr r0, _0222E950 ; =MOD83_0223B860 + mov r1, #0 + strh r1, [r0, #0x1a] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222E948: .word MOD83_0223B860 _0222E94C: .word MOD83_0223B870 _0222E950: .word MOD83_0223B860 - thumb_func_end MOD83_0222E910 + thumb_func_end MOD83_0222E910 - thumb_func_start MOD83_0222E954 + thumb_func_start MOD83_0222E954 MOD83_0222E954: ; 0x0222E954 - push {r3, r4, r5, lr} - sub sp, #0x48 - ldr r5, _0222EA80 ; =MOD83_0223A3C8 - add r4, r0, #0 - add r3, sp, #0x20 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x48 + ldr r5, _0222EA80 ; =MOD83_0223A3C8 + add r4, r0, #0 + add r3, sp, #0x20 + mov r2, #5 _0222E960: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _0222E960 - ldr r3, _0222EA84 ; =MOD83_0223A3B8 - add r2, sp, #0x10 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - add r0, sp, #0x20 - bl GX_SetBanks - add r0, sp, #0x10 - bl SetBothScreensModesAndDisable - mov r1, #0 - str r1, [sp] - mov r3, #0xf - ldr r0, [r4, #4] - mov r2, #1 - lsl r3, r3, #0xc - bl MOD83_022387D8 - mov r0, #1 - lsl r0, r0, #0xe - str r0, [sp] - mov r1, #1 - mov r3, #0x3e - ldr r0, [r4, #4] - add r2, r1, #0 - lsl r3, r3, #0xa - bl MOD83_022387D8 - mov r0, #0 - str r0, [sp] - mov r3, #0x1e - ldr r0, [r4, #4] - mov r1, #4 - mov r2, #1 - lsl r3, r3, #0xa - bl MOD83_022387D8 - mov r0, #1 - lsl r0, r0, #0xe - str r0, [sp] - mov r3, #7 - ldr r0, [r4, #4] - mov r1, #5 - mov r2, #1 - lsl r3, r3, #0xc - bl MOD83_022387D8 - bl FUN_0201BD5C - mov r0, #0 - ldr r2, [r4] - add r1, r0, #0 - bl FUN_02002ED0 - mov r1, #0 - str r1, [sp] - ldr r0, [r4] - mov r2, #1 - str r0, [sp, #4] - ldr r0, [r4, #4] - add r3, r2, #0 - bl FUN_0200CB00 - ldr r0, [r4, #0x14] - bl Options_GetFrame - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4] - mov r1, #0 - str r0, [sp, #4] - ldr r0, [r4, #4] - mov r2, #0xa - mov r3, #2 - bl FUN_0200CD68 - mov r0, #0x20 - str r0, [sp] - ldr r0, [r4] - mov r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0x8c - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - mov r1, #1 - str r0, [sp, #4] - str r1, [sp, #8] - ldr r0, [r4] - add r3, r1, #0 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r4] - mov r1, #2 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - ldr r0, [r4, #4] - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, [r4, #4] - mov r1, #1 - bl BgCommitTilemapBufferToVram - add r0, r4, #0 - bl MOD83_0222EA88 - add sp, #0x48 - pop {r3, r4, r5, pc} - nop + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _0222E960 + ldr r3, _0222EA84 ; =MOD83_0223A3B8 + add r2, sp, #0x10 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + add r0, sp, #0x20 + bl GX_SetBanks + add r0, sp, #0x10 + bl SetBothScreensModesAndDisable + mov r1, #0 + str r1, [sp] + mov r3, #0xf + ldr r0, [r4, #4] + mov r2, #1 + lsl r3, r3, #0xc + bl MOD83_022387D8 + mov r0, #1 + lsl r0, r0, #0xe + str r0, [sp] + mov r1, #1 + mov r3, #0x3e + ldr r0, [r4, #4] + add r2, r1, #0 + lsl r3, r3, #0xa + bl MOD83_022387D8 + mov r0, #0 + str r0, [sp] + mov r3, #0x1e + ldr r0, [r4, #4] + mov r1, #4 + mov r2, #1 + lsl r3, r3, #0xa + bl MOD83_022387D8 + mov r0, #1 + lsl r0, r0, #0xe + str r0, [sp] + mov r3, #7 + ldr r0, [r4, #4] + mov r1, #5 + mov r2, #1 + lsl r3, r3, #0xc + bl MOD83_022387D8 + bl FUN_0201BD5C + mov r0, #0 + ldr r2, [r4] + add r1, r0, #0 + bl FUN_02002ED0 + mov r1, #0 + str r1, [sp] + ldr r0, [r4] + mov r2, #1 + str r0, [sp, #4] + ldr r0, [r4, #4] + add r3, r2, #0 + bl FUN_0200CB00 + ldr r0, [r4, #0x14] + bl Options_GetFrame + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4] + mov r1, #0 + str r0, [sp, #4] + ldr r0, [r4, #4] + mov r2, #0xa + mov r3, #2 + bl FUN_0200CD68 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r4] + mov r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0x8c + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + mov r1, #1 + str r0, [sp, #4] + str r1, [sp, #8] + ldr r0, [r4] + add r3, r1, #0 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r4] + mov r1, #2 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + ldr r0, [r4, #4] + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, [r4, #4] + mov r1, #1 + bl BgCommitTilemapBufferToVram + add r0, r4, #0 + bl MOD83_0222EA88 + add sp, #0x48 + pop {r3, r4, r5, pc} + nop _0222EA80: .word MOD83_0223A3C8 _0222EA84: .word MOD83_0223A3B8 - thumb_func_end MOD83_0222E954 + thumb_func_end MOD83_0222E954 - thumb_func_start MOD83_0222EA88 + thumb_func_start MOD83_0222EA88 MOD83_0222EA88: ; 0x0222EA88 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - ldr r0, [r4] - mov r2, #4 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - ldr r0, [r4] - mov r3, #4 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, [r4] - mov r1, #2 - str r0, [sp, #0xc] - ldr r2, [r4, #4] - mov r0, #0x74 - mov r3, #4 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - ldr r0, [r4, #4] - mov r1, #4 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, [r4, #4] - mov r1, #4 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0222EA88 - - thumb_func_start MOD83_0222EB04 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r4] + mov r2, #4 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + ldr r0, [r4] + mov r3, #4 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #2 + str r0, [sp, #0xc] + ldr r2, [r4, #4] + mov r0, #0x74 + mov r3, #4 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + ldr r0, [r4, #4] + mov r1, #4 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, [r4, #4] + mov r1, #4 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0222EA88 + + thumb_func_start MOD83_0222EB04 MOD83_0222EB04: ; 0x0222EB04 - push {r3, r4, lr} - sub sp, #0x5c - add r4, r0, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #0 - bne _0222EB4E - mov r0, #1 - str r0, [sp] - add r1, r4, #0 - str r0, [sp, #4] - add r0, sp, #8 - add r1, #0x18 - mov r2, #0 - mov r3, #0xc - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - ldr r3, [r4, r3] - add r0, sp, #8 - mov r1, #0x16 - mov r2, #0x10 - bl MOD83_02238934 - mov r0, #2 - str r0, [sp] - ldr r0, [r4, #4] - add r1, sp, #8 - mov r2, #5 - mov r3, #4 - bl MOD83_02238A38 - add sp, #0x5c - mov r0, #1 - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #0x5c + add r4, r0, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #0 + bne _0222EB4E + mov r0, #1 + str r0, [sp] + add r1, r4, #0 + str r0, [sp, #4] + add r0, sp, #8 + add r1, #0x18 + mov r2, #0 + mov r3, #0xc + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + ldr r3, [r4, r3] + add r0, sp, #8 + mov r1, #0x16 + mov r2, #0x10 + bl MOD83_02238934 + mov r0, #2 + str r0, [sp] + ldr r0, [r4, #4] + add r1, sp, #8 + mov r2, #5 + mov r3, #4 + bl MOD83_02238A38 + add sp, #0x5c + mov r0, #1 + pop {r3, r4, pc} _0222EB4E: - ldr r0, _0222EB78 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _0222EB70 - add r0, r4, #0 - add r0, #0x18 - mov r1, #0 - bl FUN_0200CCF8 - add r4, #0x18 - add r0, r4, #0 - bl RemoveWindow - add sp, #0x5c - mov r0, #0 - pop {r3, r4, pc} + ldr r0, _0222EB78 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _0222EB70 + add r0, r4, #0 + add r0, #0x18 + mov r1, #0 + bl FUN_0200CCF8 + add r4, #0x18 + add r0, r4, #0 + bl RemoveWindow + add sp, #0x5c + mov r0, #0 + pop {r3, r4, pc} _0222EB70: - mov r0, #1 - add sp, #0x5c - pop {r3, r4, pc} - nop + mov r0, #1 + add sp, #0x5c + pop {r3, r4, pc} + nop _0222EB78: .word gMain - thumb_func_end MOD83_0222EB04 + thumb_func_end MOD83_0222EB04 - thumb_func_start MOD83_0222EB7C + thumb_func_start MOD83_0222EB7C MOD83_0222EB7C: ; 0x0222EB7C - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - mov r0, #0xa - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - add r0, r4, #0 - add r1, r4, #0 - ldr r3, _0222EC70 ; =0x00000172 - add r0, #0x48 - add r1, #0x28 - mov r2, #0 - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r4, #0 - ldr r3, [r4, r3] - add r0, #0x48 - mov r1, #0x1b - mov r2, #4 - bl MOD83_02238934 - add r0, r4, #0 - mov r1, #1 - add r0, #0x48 - add r2, r1, #0 - bl MOD83_0223893C - mov r0, #0x46 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x48 - bl MOD83_02238AF4 - mov r3, #0x51 - lsl r3, r3, #2 - ldr r1, [r4, r3] - mov r2, #0 - add r0, r1, r0 - str r0, [r4, r3] - mov r0, #1 - str r0, [sp] - str r0, [sp, #4] - add r0, r4, #0 - add r1, r4, #0 - add r0, #0x9c - add r1, #0x18 - add r3, #0x2e - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r4, #0 - ldr r3, [r4, r3] - add r0, #0x9c - mov r1, #0x1e - mov r2, #4 - bl MOD83_02238934 - add r0, r4, #0 - add r0, #0x9c - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - mov r0, #0xb - str r0, [sp] - add r1, r4, #0 - mov r2, #1 - ldr r0, [r4, #4] - add r1, #0x9c - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x9c - bl MOD83_02238AF4 - mov r1, #0x51 - lsl r1, r1, #2 - ldr r2, [r4, r1] - add r0, r2, r0 - str r0, [r4, r1] - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #8 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xa - mov r2, #7 - mov r3, #9 - bl MOD83_02238BC4 - mov r0, #1 - str r0, [sp] - ldr r1, _0222EC74 ; =0x00003170 - mov r0, #0 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #0x4c - bl MOD83_02238DBC - ldr r1, _0222EC74 ; =0x00003170 - str r0, [r4, r1] - add r0, r4, #0 - bl MOD83_0222EC78 - add sp, #8 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + mov r0, #0xa + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r0, r4, #0 + add r1, r4, #0 + ldr r3, _0222EC70 ; =0x00000172 + add r0, #0x48 + add r1, #0x28 + mov r2, #0 + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r4, #0 + ldr r3, [r4, r3] + add r0, #0x48 + mov r1, #0x1b + mov r2, #4 + bl MOD83_02238934 + add r0, r4, #0 + mov r1, #1 + add r0, #0x48 + add r2, r1, #0 + bl MOD83_0223893C + mov r0, #0x46 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x48 + bl MOD83_02238AF4 + mov r3, #0x51 + lsl r3, r3, #2 + ldr r1, [r4, r3] + mov r2, #0 + add r0, r1, r0 + str r0, [r4, r3] + mov r0, #1 + str r0, [sp] + str r0, [sp, #4] + add r0, r4, #0 + add r1, r4, #0 + add r0, #0x9c + add r1, #0x18 + add r3, #0x2e + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r4, #0 + ldr r3, [r4, r3] + add r0, #0x9c + mov r1, #0x1e + mov r2, #4 + bl MOD83_02238934 + add r0, r4, #0 + add r0, #0x9c + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + mov r0, #0xb + str r0, [sp] + add r1, r4, #0 + mov r2, #1 + ldr r0, [r4, #4] + add r1, #0x9c + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x9c + bl MOD83_02238AF4 + mov r1, #0x51 + lsl r1, r1, #2 + ldr r2, [r4, r1] + add r0, r2, r0 + str r0, [r4, r1] + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #8 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xa + mov r2, #7 + mov r3, #9 + bl MOD83_02238BC4 + mov r0, #1 + str r0, [sp] + ldr r1, _0222EC74 ; =0x00003170 + mov r0, #0 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #0x4c + bl MOD83_02238DBC + ldr r1, _0222EC74 ; =0x00003170 + str r0, [r4, r1] + add r0, r4, #0 + bl MOD83_0222EC78 + add sp, #8 + pop {r4, pc} + .align 2, 0 _0222EC70: .word 0x00000172 _0222EC74: .word 0x00003170 - thumb_func_end MOD83_0222EB7C + thumb_func_end MOD83_0222EB7C - thumb_func_start MOD83_0222EC78 + thumb_func_start MOD83_0222EC78 MOD83_0222EC78: ; 0x0222EC78 - push {r3, r4, r5, lr} - sub sp, #0x20 - add r5, r0, #0 - ldr r0, [r5] - bl ScrStrBufs_new - add r4, r0, #0 - mov r0, #1 - str r0, [sp] - str r0, [sp, #4] - add r0, r5, #0 - add r1, r5, #0 - ldr r3, _0222ED84 ; =0x00000172 - add r0, #0xf0 - add r1, #0x38 - mov r2, #0 - bl MOD83_022388E4 - mov r3, #0x51 - lsl r3, r3, #2 - add r0, r5, #0 - ldr r3, [r5, r3] - add r0, #0xf0 - mov r1, #0x1a - mov r2, #4 - bl MOD83_02238934 - add r0, r5, #0 - add r0, #0xf0 - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - mov r0, #0x41 - lsl r0, r0, #2 - str r4, [r5, r0] - ldr r2, [r5, #0x10] - add r0, r4, #0 - mov r1, #0 - bl BufferPlayersName - ldr r0, [r5, #0x10] - bl PlayerProfile_GetTrainerID_VisibleHalf - add r2, r0, #0 - mov r0, #2 - str r0, [sp] - mov r1, #1 - add r0, r4, #0 - mov r3, #5 - str r1, [sp, #4] - bl BufferIntegerAsString - mov r0, #0x42 - str r0, [sp] - add r1, r5, #0 - ldr r0, [r5, #4] - add r1, #0xf0 - mov r2, #3 - mov r3, #0xd - bl MOD83_02238A38 - add r1, r5, #0 - mov r0, #0 - add r1, #0xf8 - str r0, [r1] - mov r1, #1 - bl GetFontAttribute - add r2, r0, #0 - add r0, r5, #0 - add r0, #0xf0 - mov r1, #0 - bl MOD83_02238944 - mov r2, #0x44 - str r2, [sp] - add r1, r5, #0 - sub r2, #0x45 - ldr r0, [r5, #4] - add r1, #0xf0 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, sp, #0x10 - bl OS_GetMacAddress - add r0, sp, #0x10 - bl MOD83_02234704 - add r1, sp, #0x1c - add r2, sp, #0x18 - str r0, [sp, #8] - str r0, [sp, #0xc] - bl MOD83_02234748 - mov r0, #2 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r2, [sp, #0x1c] - add r0, r4, #0 - mov r1, #0 - mov r3, #4 - bl BufferIntegerAsString - mov r0, #2 - str r0, [sp] - mov r1, #1 - str r1, [sp, #4] - ldr r2, [sp, #0x18] - add r0, r4, #0 - mov r3, #4 - bl BufferIntegerAsString - add r0, r5, #0 - mov r1, #1 - add r0, #0xfc - str r1, [r0] - mov r2, #0x45 - str r2, [sp] - ldr r0, [r5, #4] - add r5, #0xf0 - sub r2, #0x46 - add r1, r5, #0 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r4, #0 - bl ScrStrBufs_delete - add sp, #0x20 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x20 + add r5, r0, #0 + ldr r0, [r5] + bl ScrStrBufs_new + add r4, r0, #0 + mov r0, #1 + str r0, [sp] + str r0, [sp, #4] + add r0, r5, #0 + add r1, r5, #0 + ldr r3, _0222ED84 ; =0x00000172 + add r0, #0xf0 + add r1, #0x38 + mov r2, #0 + bl MOD83_022388E4 + mov r3, #0x51 + lsl r3, r3, #2 + add r0, r5, #0 + ldr r3, [r5, r3] + add r0, #0xf0 + mov r1, #0x1a + mov r2, #4 + bl MOD83_02238934 + add r0, r5, #0 + add r0, #0xf0 + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + mov r0, #0x41 + lsl r0, r0, #2 + str r4, [r5, r0] + ldr r2, [r5, #0x10] + add r0, r4, #0 + mov r1, #0 + bl BufferPlayersName + ldr r0, [r5, #0x10] + bl PlayerProfile_GetTrainerID_VisibleHalf + add r2, r0, #0 + mov r0, #2 + str r0, [sp] + mov r1, #1 + add r0, r4, #0 + mov r3, #5 + str r1, [sp, #4] + bl BufferIntegerAsString + mov r0, #0x42 + str r0, [sp] + add r1, r5, #0 + ldr r0, [r5, #4] + add r1, #0xf0 + mov r2, #3 + mov r3, #0xd + bl MOD83_02238A38 + add r1, r5, #0 + mov r0, #0 + add r1, #0xf8 + str r0, [r1] + mov r1, #1 + bl GetFontAttribute + add r2, r0, #0 + add r0, r5, #0 + add r0, #0xf0 + mov r1, #0 + bl MOD83_02238944 + mov r2, #0x44 + str r2, [sp] + add r1, r5, #0 + sub r2, #0x45 + ldr r0, [r5, #4] + add r1, #0xf0 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, sp, #0x10 + bl OS_GetMacAddress + add r0, sp, #0x10 + bl MOD83_02234704 + add r1, sp, #0x1c + add r2, sp, #0x18 + str r0, [sp, #8] + str r0, [sp, #0xc] + bl MOD83_02234748 + mov r0, #2 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r2, [sp, #0x1c] + add r0, r4, #0 + mov r1, #0 + mov r3, #4 + bl BufferIntegerAsString + mov r0, #2 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + ldr r2, [sp, #0x18] + add r0, r4, #0 + mov r3, #4 + bl BufferIntegerAsString + add r0, r5, #0 + mov r1, #1 + add r0, #0xfc + str r1, [r0] + mov r2, #0x45 + str r2, [sp] + ldr r0, [r5, #4] + add r5, #0xf0 + sub r2, #0x46 + add r1, r5, #0 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r4, #0 + bl ScrStrBufs_delete + add sp, #0x20 + pop {r3, r4, r5, pc} + nop _0222ED84: .word 0x00000172 - thumb_func_end MOD83_0222EC78 + thumb_func_end MOD83_0222EC78 - thumb_func_start MOD83_0222ED88 + thumb_func_start MOD83_0222ED88 MOD83_0222ED88: ; 0x0222ED88 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02238E48 - add r0, r4, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #1 - bne _0222EDD0 - add r0, r4, #0 - add r0, #0x18 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x18 - bl RemoveWindow - add r0, r4, #0 - add r0, #0x28 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x28 - bl RemoveWindow - add r0, r4, #0 - add r0, #0x38 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - add r0, #0x38 - bl RemoveWindow + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02238E48 + add r0, r4, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #1 + bne _0222EDD0 + add r0, r4, #0 + add r0, #0x18 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x18 + bl RemoveWindow + add r0, r4, #0 + add r0, #0x28 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x28 + bl RemoveWindow + add r0, r4, #0 + add r0, #0x38 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + add r0, #0x38 + bl RemoveWindow _0222EDD0: - ldr r0, [r4, #4] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #4 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #5 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD83_0222ED88 - - thumb_func_start MOD83_0222EDF8 + ldr r0, [r4, #4] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #4 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + mov r1, #5 + bl FreeBgTilemapBuffer + ldr r0, [r4, #4] + bl FreeToHeap + pop {r4, pc} + thumb_func_end MOD83_0222ED88 + + thumb_func_start MOD83_0222EDF8 MOD83_0222EDF8: ; 0x0222EDF8 - push {r3, r4, r5, lr} - mov r3, #2 - ldr r2, _0222EE80 ; =0x000034DC - mov r1, #0x55 - lsl r3, r3, #0x10 - add r5, r0, #0 - bl MOD83_022387A0 - add r4, r0, #0 - mov r0, #0x55 - str r0, [r4] - bl BgConfig_Alloc - str r0, [r4, #4] - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #8] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0x10] - ldr r0, [r4, #8] - bl Sav2_Pokedex_get - str r0, [r4, #0xc] - ldr r0, [r4, #8] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0x14] - ldr r0, [r4] - bl MOD83_02238770 - ldr r0, [r4, #8] - bl FUN_0202251C - ldr r1, _0222EE84 ; =0x00003174 - mov r2, #0x53 - str r0, [r4, r1] - mov r0, #9 - lsl r2, r2, #2 - str r0, [r4, r2] - add r0, r2, #0 - mov r1, #0x28 - sub r0, #8 - str r1, [r4, r0] - add r1, r2, #0 - mov r0, #0 - add r1, #8 - str r0, [r4, r1] - add r1, r2, #0 - add r1, #0x10 - str r0, [r4, r1] - add r2, #0xc - str r0, [r4, r2] - mov r2, #3 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - ldr r1, _0222EE88 ; =0x00000496 - mov r0, #9 - mov r2, #1 - bl FUN_0200433C - mov r0, #1 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + mov r3, #2 + ldr r2, _0222EE80 ; =0x000034DC + mov r1, #0x55 + lsl r3, r3, #0x10 + add r5, r0, #0 + bl MOD83_022387A0 + add r4, r0, #0 + mov r0, #0x55 + str r0, [r4] + bl BgConfig_Alloc + str r0, [r4, #4] + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #8] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0x10] + ldr r0, [r4, #8] + bl Sav2_Pokedex_get + str r0, [r4, #0xc] + ldr r0, [r4, #8] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #0x14] + ldr r0, [r4] + bl MOD83_02238770 + ldr r0, [r4, #8] + bl FUN_0202251C + ldr r1, _0222EE84 ; =0x00003174 + mov r2, #0x53 + str r0, [r4, r1] + mov r0, #9 + lsl r2, r2, #2 + str r0, [r4, r2] + add r0, r2, #0 + mov r1, #0x28 + sub r0, #8 + str r1, [r4, r0] + add r1, r2, #0 + mov r0, #0 + add r1, #8 + str r0, [r4, r1] + add r1, r2, #0 + add r1, #0x10 + str r0, [r4, r1] + add r2, #0xc + str r0, [r4, r2] + mov r2, #3 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + ldr r1, _0222EE88 ; =0x00000496 + mov r0, #9 + mov r2, #1 + bl FUN_0200433C + mov r0, #1 + pop {r3, r4, r5, pc} + nop _0222EE80: .word 0x000034DC _0222EE84: .word 0x00003174 _0222EE88: .word 0x00000496 - thumb_func_end MOD83_0222EDF8 + thumb_func_end MOD83_0222EDF8 - thumb_func_start MOD83_0222EE8C + thumb_func_start MOD83_0222EE8C MOD83_0222EE8C: ; 0x0222EE8C - push {r3, r4, r5, r6, lr} - sub sp, #4 - add r5, r1, #0 - add r6, r0, #0 - bl OverlayManager_GetData - ldr r1, [r5] - add r4, r0, #0 - cmp r1, #0xd - bhi _0222EEF2 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r1, #0 + add r6, r0, #0 + bl OverlayManager_GetData + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #0xd + bhi _0222EEF2 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _0222EEAC: ; jump table - .short _0222EEC8 - _0222EEAC - 2 ; case 0 - .short _0222EEEA - _0222EEAC - 2 ; case 1 - .short _0222EF08 - _0222EEAC - 2 ; case 2 - .short _0222EF5A - _0222EEAC - 2 ; case 3 - .short _0222EF86 - _0222EEAC - 2 ; case 4 - .short _0222EFC2 - _0222EEAC - 2 ; case 5 - .short _0222EFFC - _0222EEAC - 2 ; case 6 - .short _0222F02C - _0222EEAC - 2 ; case 7 - .short _0222F02C - _0222EEAC - 2 ; case 8 - .short _0222F02C - _0222EEAC - 2 ; case 9 - .short _0222F02C - _0222EEAC - 2 ; case 10 - .short _0222F012 - _0222EEAC - 2 ; case 11 - .short _0222F01A - _0222EEAC - 2 ; case 12 - .short _0222F026 - _0222EEAC - 2 ; case 13 + .short _0222EEC8 - _0222EEAC - 2 ; case 0 + .short _0222EEEA - _0222EEAC - 2 ; case 1 + .short _0222EF08 - _0222EEAC - 2 ; case 2 + .short _0222EF5A - _0222EEAC - 2 ; case 3 + .short _0222EF86 - _0222EEAC - 2 ; case 4 + .short _0222EFC2 - _0222EEAC - 2 ; case 5 + .short _0222EFFC - _0222EEAC - 2 ; case 6 + .short _0222F02C - _0222EEAC - 2 ; case 7 + .short _0222F02C - _0222EEAC - 2 ; case 8 + .short _0222F02C - _0222EEAC - 2 ; case 9 + .short _0222F02C - _0222EEAC - 2 ; case 10 + .short _0222F012 - _0222EEAC - 2 ; case 11 + .short _0222F01A - _0222EEAC - 2 ; case 12 + .short _0222F026 - _0222EEAC - 2 ; case 13 _0222EEC8: - bl MOD83_0222E954 - ldr r0, [r4, #0xc] - bl Pokedex_GetSinnohDexFlag - cmp r0, #0 - bne _0222EEE4 - mov r0, #1 - add r1, r0, #0 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222E954 + ldr r0, [r4, #0xc] + bl Pokedex_GetSinnohDexFlag + cmp r0, #0 + bne _0222EEE4 + mov r0, #1 + add r1, r0, #0 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EEE4: - mov r0, #2 - str r0, [r5] - b _0222F02C + mov r0, #2 + str r0, [r5] + b _0222F02C _0222EEEA: - bl MOD83_0222EB04 - cmp r0, #0 - beq _0222EEF4 + bl MOD83_0222EB04 + cmp r0, #0 + beq _0222EEF4 _0222EEF2: - b _0222F02C + b _0222F02C _0222EEF4: - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF08: - bl MOD83_0222EB7C - ldr r0, _0222F038 ; =0x00003174 - ldr r0, [r4, r0] - bl FUN_0202ADF0 - cmp r0, #0 - bne _0222EF44 - add r0, r4, #0 - mov r1, #1 - add r0, #0x98 - str r1, [r0] - mov r0, #0x15 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r1, _0222F03C ; =0x0000317C - add r2, r5, #0 - str r0, [r4, r1] - mov r0, #1 - mov r1, #3 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222EB7C + ldr r0, _0222F038 ; =0x00003174 + ldr r0, [r4, r0] + bl FUN_0202ADF0 + cmp r0, #0 + bne _0222EF44 + add r0, r4, #0 + mov r1, #1 + add r0, #0x98 + str r1, [r0] + mov r0, #0x15 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r1, _0222F03C ; =0x0000317C + add r2, r5, #0 + str r0, [r4, r1] + mov r0, #1 + mov r1, #3 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF44: - mov r0, #0x53 - mov r1, #7 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r0, #1 - mov r1, #4 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + mov r0, #0x53 + mov r1, #7 + lsl r0, r0, #2 + str r1, [r4, r0] + mov r0, #1 + mov r1, #4 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF5A: - ldr r0, _0222F03C ; =0x0000317C - ldr r0, [r4, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _0222F02C - ldr r0, _0222F040 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r1, r0 - beq _0222F02C - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + ldr r0, _0222F03C ; =0x0000317C + ldr r0, [r4, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _0222F02C + ldr r0, _0222F040 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r1, r0 + beq _0222F02C + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EF86: - bl MOD83_0222F210 - mov r1, #0x15 - lsl r1, r1, #4 - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #5 - bne _0222EFAA - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + bl MOD83_0222F210 + mov r1, #0x15 + lsl r1, r1, #4 + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #5 + bne _0222EFAA + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EFAA: - cmp r0, #4 - bne _0222F02C - mov r0, #1 - bl MOD83_02238860 - mov r0, #0 - mov r1, #0xc - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + cmp r0, #4 + bne _0222F02C + mov r0, #1 + bl MOD83_02238860 + mov r0, #0 + mov r1, #0xc + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222EFC2: - bl MOD83_0222EA88 - mov r0, #1 - add r1, r0, #0 - bl GX_EngineBToggleLayers - mov r0, #2 - mov r1, #0 - bl GX_EngineBToggleLayers - mov r1, #0xc6 - lsl r1, r1, #6 - ldr r0, [r4, #4] - add r1, r4, r1 - mov r2, #0x55 - bl MOD83_02233168 - mov r0, #1 - mov r1, #6 - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - ldr r1, _0222F044 ; =0x000032D2 - mov r0, #4 - ldrb r2, [r4, r1] - bic r2, r0 - strb r2, [r4, r1] - b _0222F02C + bl MOD83_0222EA88 + mov r0, #1 + add r1, r0, #0 + bl GX_EngineBToggleLayers + mov r0, #2 + mov r1, #0 + bl GX_EngineBToggleLayers + mov r1, #0xc6 + lsl r1, r1, #6 + ldr r0, [r4, #4] + add r1, r4, r1 + mov r2, #0x55 + bl MOD83_02233168 + mov r0, #1 + mov r1, #6 + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + ldr r1, _0222F044 ; =0x000032D2 + mov r0, #4 + ldrb r2, [r4, r1] + bic r2, r0 + strb r2, [r4, r1] + b _0222F02C _0222EFFC: - ldr r0, _0222F040 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _0222F02C - mov r0, #0 - mov r1, #0xb - add r2, r5, #0 - mov r3, #0xd - bl MOD83_0223886C - b _0222F02C + ldr r0, _0222F040 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _0222F02C + mov r0, #0 + mov r1, #0xb + add r2, r5, #0 + mov r3, #0xd + bl MOD83_0223886C + b _0222F02C _0222F012: - mov r0, #0 - bl OS_ResetSystem - b _0222F02C + mov r0, #0 + bl OS_ResetSystem + b _0222F02C _0222F01A: - add r0, r6, #0 - bl MOD83_0222ED88 - add sp, #4 - mov r0, #1 - pop {r3, r4, r5, r6, pc} + add r0, r6, #0 + bl MOD83_0222ED88 + add sp, #4 + mov r0, #1 + pop {r3, r4, r5, r6, pc} _0222F026: - add r0, r5, #0 - bl MOD83_022388CC + add r0, r5, #0 + bl MOD83_022388CC _0222F02C: - bl MOD83_02238D58 - mov r0, #0 - add sp, #4 - pop {r3, r4, r5, r6, pc} - nop + bl MOD83_02238D58 + mov r0, #0 + add sp, #4 + pop {r3, r4, r5, r6, pc} + nop _0222F038: .word 0x00003174 _0222F03C: .word 0x0000317C _0222F040: .word gMain _0222F044: .word 0x000032D2 - thumb_func_end MOD83_0222EE8C + thumb_func_end MOD83_0222EE8C - thumb_func_start MOD83_0222F048 + thumb_func_start MOD83_0222F048 MOD83_0222F048: ; 0x0222F048 - push {r4, lr} - add r4, r0, #0 - mov r0, #0x5b - bl DestroyHeap - ldr r0, _0222F06C ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _0222F070 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x55 - bl DestroyHeap - mov r0, #1 - pop {r4, pc} - nop + push {r4, lr} + add r4, r0, #0 + mov r0, #0x5b + bl DestroyHeap + ldr r0, _0222F06C ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _0222F070 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x55 + bl DestroyHeap + mov r0, #1 + pop {r4, pc} + nop _0222F06C: .word SDK_OVERLAY_MODULE_63_ID _0222F070: .word MOD63_021DBAB8 - thumb_func_end MOD83_0222F048 + thumb_func_end MOD83_0222F048 - thumb_func_start MOD83_0222F074 + thumb_func_start MOD83_0222F074 MOD83_0222F074: ; 0x0222F074 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r5, r0, #0 - mov r0, #0xc6 - lsl r0, r0, #6 - add r4, r5, r0 - mov r2, #0xd6 - add r0, r4, #0 - mov r1, #0 - lsl r2, r2, #2 - bl MI_CpuFill8 - ldr r2, _0222F1A0 ; =0x00000172 - ldr r3, [r5] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - add r6, r0, #0 - ldr r0, [r5] - bl ScrStrBufs_new - mov r1, #0xc6 - mov r2, #7 - lsl r1, r1, #6 - strh r2, [r5, r1] - ldr r3, [r5] - add r1, r6, #0 - mov r2, #0x4c - str r0, [sp] - bl ReadMsgData_ExpandPlaceholders - mov r1, #0x41 - lsl r1, r1, #2 - add r7, r0, #0 - add r1, r4, r1 - mov r2, #0x24 - bl CopyStringToU16Array - add r0, r7, #0 - bl String_dtor - mov r0, #0xc - bl MOD83_02238EF4 - add r7, r0, #0 - mov r0, #0xa - bl MOD83_02238EF4 - str r0, [sp, #4] - mov r0, #0xb - bl MOD83_02238EF4 - ldr r1, [sp, #4] - mov r2, #1 - orr r0, r1 - add r1, r7, #0 - orr r1, r0 - mov r0, #0x53 - lsl r0, r0, #2 - str r1, [r4, r0] - add r1, r0, #4 - strh r2, [r4, r1] - add r1, r0, #6 - ldrb r2, [r4, r1] - mov r1, #1 - bic r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #2 - bic r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #4 - orr r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #8 - orr r2, r1 - add r1, r0, #6 - strb r2, [r4, r1] - ldrb r2, [r4, r1] - mov r1, #0x20 - add r0, r0, #6 - bic r2, r1 - strb r2, [r4, r0] - ldr r0, [sp] - ldr r3, [r5] - add r1, r6, #0 - mov r2, #0x4b - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - mov r1, #0x55 - lsl r1, r1, #2 - add r1, r4, r1 - mov r2, #0xfa - bl CopyStringToU16Array - add r0, r7, #0 - bl String_dtor - mov r0, #0xd2 - lsl r0, r0, #2 - mov r1, #0 - ldr r3, _0222F1A4 ; =0x000001EA - strb r1, [r4, r0] - add r2, r0, #2 - strh r3, [r4, r2] - add r2, r0, #4 - strh r1, [r4, r2] - add r2, r0, #6 - strh r1, [r4, r2] - add r0, #8 - strb r1, [r4, r0] - add r0, sp, #8 - bl GF_RTC_CopyDate - add r0, sp, #8 - bl RTC_ConvertDateToDay - mov r1, #0xd5 - lsl r1, r1, #2 - str r0, [r4, r1] - ldr r0, [sp] - bl ScrStrBufs_delete - add r0, r6, #0 - bl DestroyMsgData - ldr r0, _0222F1A8 ; =0x00003174 - add r1, r4, #0 - ldr r0, [r5, r0] - mov r2, #0 - bl FUN_0202AC98 - mov r0, #1 - mov r1, #0 - bl GX_EngineBToggleLayers - ldr r0, [r5, #4] - add r1, r4, #0 - bl MOD83_022391EC - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + mov r0, #0xc6 + lsl r0, r0, #6 + add r4, r5, r0 + mov r2, #0xd6 + add r0, r4, #0 + mov r1, #0 + lsl r2, r2, #2 + bl MI_CpuFill8 + ldr r2, _0222F1A0 ; =0x00000172 + ldr r3, [r5] + mov r0, #1 + mov r1, #0x1a + bl NewMsgDataFromNarc + add r6, r0, #0 + ldr r0, [r5] + bl ScrStrBufs_new + mov r1, #0xc6 + mov r2, #7 + lsl r1, r1, #6 + strh r2, [r5, r1] + ldr r3, [r5] + add r1, r6, #0 + mov r2, #0x4c + str r0, [sp] + bl ReadMsgData_ExpandPlaceholders + mov r1, #0x41 + lsl r1, r1, #2 + add r7, r0, #0 + add r1, r4, r1 + mov r2, #0x24 + bl CopyStringToU16Array + add r0, r7, #0 + bl String_dtor + mov r0, #0xc + bl MOD83_02238EF4 + add r7, r0, #0 + mov r0, #0xa + bl MOD83_02238EF4 + str r0, [sp, #4] + mov r0, #0xb + bl MOD83_02238EF4 + ldr r1, [sp, #4] + mov r2, #1 + orr r0, r1 + add r1, r7, #0 + orr r1, r0 + mov r0, #0x53 + lsl r0, r0, #2 + str r1, [r4, r0] + add r1, r0, #4 + strh r2, [r4, r1] + add r1, r0, #6 + ldrb r2, [r4, r1] + mov r1, #1 + bic r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #2 + bic r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #4 + orr r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #8 + orr r2, r1 + add r1, r0, #6 + strb r2, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #0x20 + add r0, r0, #6 + bic r2, r1 + strb r2, [r4, r0] + ldr r0, [sp] + ldr r3, [r5] + add r1, r6, #0 + mov r2, #0x4b + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + mov r1, #0x55 + lsl r1, r1, #2 + add r1, r4, r1 + mov r2, #0xfa + bl CopyStringToU16Array + add r0, r7, #0 + bl String_dtor + mov r0, #0xd2 + lsl r0, r0, #2 + mov r1, #0 + ldr r3, _0222F1A4 ; =0x000001EA + strb r1, [r4, r0] + add r2, r0, #2 + strh r3, [r4, r2] + add r2, r0, #4 + strh r1, [r4, r2] + add r2, r0, #6 + strh r1, [r4, r2] + add r0, #8 + strb r1, [r4, r0] + add r0, sp, #8 + bl GF_RTC_CopyDate + add r0, sp, #8 + bl RTC_ConvertDateToDay + mov r1, #0xd5 + lsl r1, r1, #2 + str r0, [r4, r1] + ldr r0, [sp] + bl ScrStrBufs_delete + add r0, r6, #0 + bl DestroyMsgData + ldr r0, _0222F1A8 ; =0x00003174 + add r1, r4, #0 + ldr r0, [r5, r0] + mov r2, #0 + bl FUN_0202AC98 + mov r0, #1 + mov r1, #0 + bl GX_EngineBToggleLayers + ldr r0, [r5, #4] + add r1, r4, #0 + bl MOD83_022391EC + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop _0222F1A0: .word 0x00000172 _0222F1A4: .word 0x000001EA _0222F1A8: .word 0x00003174 - thumb_func_end MOD83_0222F074 + thumb_func_end MOD83_0222F074 - thumb_func_start MOD83_0222F1AC + thumb_func_start MOD83_0222F1AC MOD83_0222F1AC: ; 0x0222F1AC - mov r2, #0x16 - lsl r2, r2, #4 - str r1, [r0, r2] - bx lr - thumb_func_end MOD83_0222F1AC + mov r2, #0x16 + lsl r2, r2, #4 + str r1, [r0, r2] + bx lr + thumb_func_end MOD83_0222F1AC - thumb_func_start MOD83_0222F1B4 + thumb_func_start MOD83_0222F1B4 MOD83_0222F1B4: ; 0x0222F1B4 - push {r3, r4, r5, lr} - add r5, r1, #0 - mov r1, #0x16 - lsl r1, r1, #4 - add r4, r3, #0 - ldr r3, [r0, r1] - sub r3, r3, #1 - str r3, [r0, r1] - ldr r0, [r0, r1] - cmp r0, #0 - bne _0222F1D6 - bl MOD83_02234518 - mov r0, #0x17 - str r0, [r5] - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r1, #0 + mov r1, #0x16 + lsl r1, r1, #4 + add r4, r3, #0 + ldr r3, [r0, r1] + sub r3, r3, #1 + str r3, [r0, r1] + ldr r0, [r0, r1] + cmp r0, #0 + bne _0222F1D6 + bl MOD83_02234518 + mov r0, #0x17 + str r0, [r5] + mov r0, #0 + pop {r3, r4, r5, pc} _0222F1D6: - cmp r2, #0 - beq _0222F1EE - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F1EE - bl MOD83_02234518 - mov r0, #0x16 - str r0, [r5] - mov r0, #0 - pop {r3, r4, r5, pc} + cmp r2, #0 + beq _0222F1EE + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F1EE + bl MOD83_02234518 + mov r0, #0x16 + str r0, [r5] + mov r0, #0 + pop {r3, r4, r5, pc} _0222F1EE: - cmp r4, #0 - beq _0222F206 - ldr r0, _0222F20C ; =gMain - ldr r0, [r0, #0x48] - tst r0, r4 - beq _0222F206 - bl MOD83_02234518 - mov r0, #0x1a - str r0, [r5] - mov r0, #1 - pop {r3, r4, r5, pc} + cmp r4, #0 + beq _0222F206 + ldr r0, _0222F20C ; =gMain + ldr r0, [r0, #0x48] + tst r0, r4 + beq _0222F206 + bl MOD83_02234518 + mov r0, #0x1a + str r0, [r5] + mov r0, #1 + pop {r3, r4, r5, pc} _0222F206: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0222F20C: .word gMain - thumb_func_end MOD83_0222F1B4 + thumb_func_end MOD83_0222F1B4 - thumb_func_start MOD83_0222F210 + thumb_func_start MOD83_0222F210 MOD83_0222F210: ; 0x0222F210 - push {r3, r4, r5, lr} - mov r5, #0x57 - lsl r5, r5, #2 - add r4, r0, #0 - sub r0, r5, #4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F236 - bl MOD83_0223438C - mov r1, #3 - sub r0, r1, r0 - bl FUN_02033EEC - bl MOD83_02234238 - mov r0, #1 - bl MOD83_022345C8 + push {r3, r4, r5, lr} + mov r5, #0x57 + lsl r5, r5, #2 + add r4, r0, #0 + sub r0, r5, #4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F236 + bl MOD83_0223438C + mov r1, #3 + sub r0, r1, r0 + bl FUN_02033EEC + bl MOD83_02234238 + mov r0, #1 + bl MOD83_022345C8 _0222F236: - ldr r0, [r4, r5] - cmp r0, #0x1e - bls _0222F23E - b _0222F736 + ldr r0, [r4, r5] + cmp r0, #0x1e + bls _0222F23E + b _0222F736 _0222F23E: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0222F24A: ; jump table - .short _0222F288 - _0222F24A - 2 ; case 0 - .short _0222F29E - _0222F24A - 2 ; case 1 - .short _0222F2C4 - _0222F24A - 2 ; case 2 - .short _0222F2E6 - _0222F24A - 2 ; case 3 - .short _0222F310 - _0222F24A - 2 ; case 4 - .short _0222F736 - _0222F24A - 2 ; case 5 - .short _0222F736 - _0222F24A - 2 ; case 6 - .short _0222F342 - _0222F24A - 2 ; case 7 - .short _0222F3B8 - _0222F24A - 2 ; case 8 - .short _0222F3D6 - _0222F24A - 2 ; case 9 - .short _0222F420 - _0222F24A - 2 ; case 10 - .short _0222F45C - _0222F24A - 2 ; case 11 - .short _0222F476 - _0222F24A - 2 ; case 12 - .short _0222F4AA - _0222F24A - 2 ; case 13 - .short _0222F4EC - _0222F24A - 2 ; case 14 - .short _0222F50C - _0222F24A - 2 ; case 15 - .short _0222F524 - _0222F24A - 2 ; case 16 - .short _0222F53E - _0222F24A - 2 ; case 17 - .short _0222F594 - _0222F24A - 2 ; case 18 - .short _0222F61C - _0222F24A - 2 ; case 19 - .short _0222F664 - _0222F24A - 2 ; case 20 - .short _0222F736 - _0222F24A - 2 ; case 21 - .short _0222F698 - _0222F24A - 2 ; case 22 - .short _0222F69C - _0222F24A - 2 ; case 23 - .short _0222F736 - _0222F24A - 2 ; case 24 - .short _0222F736 - _0222F24A - 2 ; case 25 - .short _0222F704 - _0222F24A - 2 ; case 26 - .short _0222F736 - _0222F24A - 2 ; case 27 - .short _0222F6D0 - _0222F24A - 2 ; case 28 - .short _0222F35E - _0222F24A - 2 ; case 29 - .short _0222F39C - _0222F24A - 2 ; case 30 + .short _0222F288 - _0222F24A - 2 ; case 0 + .short _0222F29E - _0222F24A - 2 ; case 1 + .short _0222F2C4 - _0222F24A - 2 ; case 2 + .short _0222F2E6 - _0222F24A - 2 ; case 3 + .short _0222F310 - _0222F24A - 2 ; case 4 + .short _0222F736 - _0222F24A - 2 ; case 5 + .short _0222F736 - _0222F24A - 2 ; case 6 + .short _0222F342 - _0222F24A - 2 ; case 7 + .short _0222F3B8 - _0222F24A - 2 ; case 8 + .short _0222F3D6 - _0222F24A - 2 ; case 9 + .short _0222F420 - _0222F24A - 2 ; case 10 + .short _0222F45C - _0222F24A - 2 ; case 11 + .short _0222F476 - _0222F24A - 2 ; case 12 + .short _0222F4AA - _0222F24A - 2 ; case 13 + .short _0222F4EC - _0222F24A - 2 ; case 14 + .short _0222F50C - _0222F24A - 2 ; case 15 + .short _0222F524 - _0222F24A - 2 ; case 16 + .short _0222F53E - _0222F24A - 2 ; case 17 + .short _0222F594 - _0222F24A - 2 ; case 18 + .short _0222F61C - _0222F24A - 2 ; case 19 + .short _0222F664 - _0222F24A - 2 ; case 20 + .short _0222F736 - _0222F24A - 2 ; case 21 + .short _0222F698 - _0222F24A - 2 ; case 22 + .short _0222F69C - _0222F24A - 2 ; case 23 + .short _0222F736 - _0222F24A - 2 ; case 24 + .short _0222F736 - _0222F24A - 2 ; case 25 + .short _0222F704 - _0222F24A - 2 ; case 26 + .short _0222F736 - _0222F24A - 2 ; case 27 + .short _0222F6D0 - _0222F24A - 2 ; case 28 + .short _0222F35E - _0222F24A - 2 ; case 29 + .short _0222F39C - _0222F24A - 2 ; case 30 _0222F288: - add r0, r4, #0 - bl MOD83_0222E910 - bl FUN_0202E49C - mov r0, #0x52 - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] - str r1, [r4, r5] - b _0222F736 + add r0, r4, #0 + bl MOD83_0222E910 + bl FUN_0202E49C + mov r0, #0x52 + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] + str r1, [r4, r5] + b _0222F736 _0222F29E: - bl FUN_0202E4C8 - cmp r0, #0 - beq _0222F356 - mov r1, #0x5b - lsl r1, r1, #2 - ldr r0, _0222F5E0 ; =MOD83_0223A8D4 - add r1, r4, r1 - bl MOD83_02233F94 - mov r0, #0x56 - mov r1, #1 - lsl r0, r0, #2 - str r1, [r4, r0] - bl FUN_02033E74 - mov r0, #2 - str r0, [r4, r5] - b _0222F736 + bl FUN_0202E4C8 + cmp r0, #0 + beq _0222F356 + mov r1, #0x5b + lsl r1, r1, #2 + ldr r0, _0222F5E0 ; =MOD83_0223A8D4 + add r1, r4, r1 + bl MOD83_02233F94 + mov r0, #0x56 + mov r1, #1 + lsl r0, r0, #2 + str r1, [r4, r0] + bl FUN_02033E74 + mov r0, #2 + str r0, [r4, r5] + b _0222F736 _0222F2C4: - bl MOD83_0223427C - mov r1, #0x19 - add r0, r4, #0 - lsl r1, r1, #6 - bl MOD83_0222F1AC - add r0, r4, #0 - add r0, #0x28 - mov r1, #0xa - bl FUN_0200D858 - ldr r1, _0222F5E4 ; =0x000034D8 - str r0, [r4, r1] - mov r0, #3 - str r0, [r4, r5] - b _0222F736 + bl MOD83_0223427C + mov r1, #0x19 + add r0, r4, #0 + lsl r1, r1, #6 + bl MOD83_0222F1AC + add r0, r4, #0 + add r0, #0x28 + mov r1, #0xa + bl FUN_0200D858 + ldr r1, _0222F5E4 ; =0x000034D8 + str r0, [r4, r1] + mov r0, #3 + str r0, [r4, r5] + b _0222F736 _0222F2E6: - bl MOD83_022343A4 - cmp r0, #0 - beq _0222F302 - sub r1, r0, #1 - mov r0, #0x59 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r1, _0222F5E8 ; =0x00000708 - add r0, r4, #0 - bl MOD83_0222F1AC - mov r0, #4 - str r0, [r4, r5] + bl MOD83_022343A4 + cmp r0, #0 + beq _0222F302 + sub r1, r0, #1 + mov r0, #0x59 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r1, _0222F5E8 ; =0x00000708 + add r0, r4, #0 + bl MOD83_0222F1AC + mov r0, #4 + str r0, [r4, r5] _0222F302: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F310: - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD83_022342C8 - cmp r0, #0 - beq _0222F334 - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD83_02234304 - mov r0, #7 - str r0, [r4, r5] - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD83_022342C8 + cmp r0, #0 + beq _0222F334 + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD83_02234304 + mov r0, #7 + str r0, [r4, r5] + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] _0222F334: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F342: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #0 - mov r3, #2 - bl MOD83_0222F1B4 - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F358 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #0 + mov r3, #2 + bl MOD83_0222F1B4 + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F358 _0222F356: - b _0222F736 + b _0222F736 _0222F358: - mov r0, #0x1d - str r0, [r4, r5] - b _0222F736 + mov r0, #0x1d + str r0, [r4, r5] + b _0222F736 _0222F35E: - mov r0, #0x1e - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5EC ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F5E4 ; =0x000034D8 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _0222F5E4 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - ldr r0, _0222F5F0 ; =0x000005DC - bl PlaySE - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x1e - str r0, [r4, r5] - b _0222F736 + mov r0, #0x1e + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5EC ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F5E4 ; =0x000034D8 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _0222F5E4 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + ldr r0, _0222F5F0 ; =0x000005DC + bl PlaySE + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x1e + str r0, [r4, r5] + b _0222F736 _0222F39C: - ldr r0, _0222F5F4 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F3AA - mov r0, #8 - str r0, [r4, r5] + ldr r0, _0222F5F4 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F3AA + mov r0, #8 + str r0, [r4, r5] _0222F3AA: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F3B8: - bl MOD83_022343C4 - mov r0, #9 - str r0, [r4, r5] - mov r0, #0x16 - ldr r1, _0222F5E8 ; =0x00000708 - lsl r0, r0, #4 - str r1, [r4, r0] - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + bl MOD83_022343C4 + mov r0, #9 + str r0, [r4, r5] + mov r0, #0x16 + ldr r1, _0222F5E8 ; =0x00000708 + lsl r0, r0, #4 + str r1, [r4, r0] + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F3D6: - bl MOD83_02234450 - cmp r0, #0 - beq _0222F412 - bl MOD83_022343F8 - mov r0, #0xa - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x22 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5F0 ; =0x000005DC - bl PlaySE - ldr r0, _0222F5E4 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - mov r0, #1 - pop {r3, r4, r5, pc} + bl MOD83_02234450 + cmp r0, #0 + beq _0222F412 + bl MOD83_022343F8 + mov r0, #0xa + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x22 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5F0 ; =0x000005DC + bl PlaySE + ldr r0, _0222F5E4 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + mov r0, #1 + pop {r3, r4, r5, pc} _0222F412: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F420: - bl MOD83_02234450 - cmp r0, #0 - beq _0222F44E - mov r0, #0x47 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F5EC ; =0x00003170 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_020200A0 - add r0, r4, #0 - bl MOD83_0222EC78 - mov r0, #0xb - str r0, [r4, r5] + bl MOD83_02234450 + cmp r0, #0 + beq _0222F44E + mov r0, #0x47 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F5EC ; =0x00003170 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_020200A0 + add r0, r4, #0 + bl MOD83_0222EC78 + mov r0, #0xb + str r0, [r4, r5] _0222F44E: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F45C: - ldr r0, _0222F5F8 ; =MOD83_0223AD6C - mov r1, #0x2a - mov r2, #1 - bl MOD83_02234424 - mov r0, #0xc - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + ldr r0, _0222F5F8 ; =MOD83_0223AD6C + mov r1, #0x2a + mov r2, #1 + bl MOD83_02234424 + mov r0, #0xc + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F476: - bl MOD83_0223447C - cmp r0, #0 - beq _0222F49C - mov r0, #0xd - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #0x3c - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0x47 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 + bl MOD83_0223447C + cmp r0, #0 + beq _0222F49C + mov r0, #0xd + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #0x3c + lsl r0, r0, #4 + str r1, [r4, r0] + mov r0, #0x47 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 _0222F49C: - add r0, r4, #0 - add r1, r4, r5 - mov r2, #1 - mov r3, #2 - bl MOD83_0222F1B4 - b _0222F736 + add r0, r4, #0 + add r1, r4, r5 + mov r2, #1 + mov r3, #2 + bl MOD83_0222F1B4 + b _0222F736 _0222F4AA: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F51C - mov r0, #0x48 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - add r0, r4, #0 - add r0, #0x28 - mov r1, #0xa - bl FUN_0200D858 - ldr r1, _0222F5E4 ; =0x000034D8 - str r0, [r4, r1] - add r0, r4, #0 - bl MOD83_0222F074 - ldr r0, [r4, #8] - bl MOD83_022394BC - mov r0, #0xe - str r0, [r4, r5] - b _0222F736 + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F51C + mov r0, #0x48 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + add r0, r4, #0 + add r0, #0x28 + mov r1, #0xa + bl FUN_0200D858 + ldr r1, _0222F5E4 ; =0x000034D8 + str r0, [r4, r1] + add r0, r4, #0 + bl MOD83_0222F074 + ldr r0, [r4, #8] + bl MOD83_022394BC + mov r0, #0xe + str r0, [r4, r5] + b _0222F736 _0222F4EC: - bl MOD83_022394CC - cmp r0, #1 - bne _0222F51C - mov r0, #0xf - str r0, [r4, r5] - bl OS_GetTickLo - mov r1, #0x36 - bl _s32_div_f - mov r0, #0x16 - add r1, r1, #6 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022394CC + cmp r0, #1 + bne _0222F51C + mov r0, #0xf + str r0, [r4, r5] + bl OS_GetTickLo + mov r1, #0x36 + bl _s32_div_f + mov r0, #0x16 + add r1, r1, #6 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F50C: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F51E + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F51E _0222F51C: - b _0222F736 + b _0222F736 _0222F51E: - mov r0, #0x10 - str r0, [r4, r5] - b _0222F736 + mov r0, #0x10 + str r0, [r4, r5] + b _0222F736 _0222F524: - ldr r0, _0222F5F8 ; =MOD83_0223AD6C - mov r1, #0x2a - mov r2, #2 - bl MOD83_02234424 - mov r0, #0x11 - str r0, [r4, r5] - mov r1, #0x4b - mov r0, #0x16 - lsl r1, r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + ldr r0, _0222F5F8 ; =MOD83_0223AD6C + mov r1, #0x2a + mov r2, #2 + bl MOD83_02234424 + mov r0, #0x11 + str r0, [r4, r5] + mov r1, #0x4b + mov r0, #0x16 + lsl r1, r1, #4 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F53E: - bl MOD83_022344A8 - cmp r0, #0 - beq _0222F55A - bl MOD83_02239544 - mov r0, #0x12 - str r0, [r4, r5] - mov r1, #0x32 - mov r0, #0x16 - lsl r1, r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022344A8 + cmp r0, #0 + beq _0222F55A + bl MOD83_02239544 + mov r0, #0x12 + str r0, [r4, r5] + mov r1, #0x32 + mov r0, #0x16 + lsl r1, r1, #4 + lsl r0, r0, #4 + str r1, [r4, r0] + b _0222F736 _0222F55A: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F57A - bl MOD83_02234518 - mov r0, #0x17 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F57A + bl MOD83_02234518 + mov r0, #0x17 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] _0222F57A: - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F62C - bl MOD83_02234518 - mov r0, #0x16 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] - b _0222F736 + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F62C + bl MOD83_02234518 + mov r0, #0x16 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] + b _0222F736 _0222F594: - bl MOD83_02239574 - cmp r0, #3 - bne _0222F5AE - bl MOD83_02234518 - mov r0, #0x16 - mov r1, #0x78 - str r0, [r4, r5] - add r0, r1, #0 - add r0, #0xe8 - str r1, [r4, r0] - b _0222F5FC + bl MOD83_02239574 + cmp r0, #3 + bne _0222F5AE + bl MOD83_02234518 + mov r0, #0x16 + mov r1, #0x78 + str r0, [r4, r5] + add r0, r1, #0 + add r0, #0xe8 + str r1, [r4, r0] + b _0222F5FC _0222F5AE: - bl MOD83_02239574 - cmp r0, #2 - beq _0222F5BC - bl MOD83_022394CC - b _0222F5FC + bl MOD83_02239574 + cmp r0, #2 + beq _0222F5BC + bl MOD83_022394CC + b _0222F5FC _0222F5BC: - bl MOD83_0223447C - cmp r0, #0 - bne _0222F5CC - bl MOD83_022344E4 - cmp r0, #0 - bne _0222F5FC + bl MOD83_0223447C + cmp r0, #0 + bne _0222F5CC + bl MOD83_022344E4 + cmp r0, #0 + bne _0222F5FC _0222F5CC: - mov r0, #0x13 - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - bl MOD83_02234518 - b _0222F736 - nop + mov r0, #0x13 + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #1 + lsl r0, r0, #4 + str r1, [r4, r0] + bl MOD83_02234518 + b _0222F736 + nop _0222F5E0: .word MOD83_0223A8D4 _0222F5E4: .word 0x000034D8 _0222F5E8: .word 0x00000708 @@ -3995,2973 +3995,2973 @@ _0222F5F0: .word 0x000005DC _0222F5F4: .word gMain _0222F5F8: .word MOD83_0223AD6C _0222F5FC: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222F61C - bl MOD83_02234518 - mov r0, #0x17 - str r0, [r4, r5] - mov r0, #0x16 - mov r1, #0xa - lsl r0, r0, #4 - str r1, [r4, r0] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222F61C + bl MOD83_02234518 + mov r0, #0x17 + str r0, [r4, r5] + mov r0, #0x16 + mov r1, #0xa + lsl r0, r0, #4 + str r1, [r4, r0] _0222F61C: - mov r0, #0x16 - lsl r0, r0, #4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F62E + mov r0, #0x16 + lsl r0, r0, #4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F62E _0222F62C: - b _0222F736 + b _0222F736 _0222F62E: - mov r0, #0x14 - str r0, [r4, r5] - mov r0, #0x49 - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F73C ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _0222F744 ; =0x000005DC - bl PlaySE - ldr r0, _0222F740 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - b _0222F736 + mov r0, #0x14 + str r0, [r4, r5] + mov r0, #0x49 + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F73C ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _0222F744 ; =0x000005DC + bl PlaySE + ldr r0, _0222F740 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + b _0222F736 _0222F664: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F686 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F686 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _0222F686: - ldr r0, _0222F748 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F736 - mov r0, #0x1b - str r0, [r4, r5] - mov r0, #4 - pop {r3, r4, r5, pc} + ldr r0, _0222F748 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F736 + mov r0, #0x1b + str r0, [r4, r5] + mov r0, #4 + pop {r3, r4, r5, pc} _0222F698: - mov r0, #0x17 - str r0, [r4, r5] + mov r0, #0x17 + str r0, [r4, r5] _0222F69C: - mov r0, #0x4a - str r0, [sp] - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x48 - mov r2, #2 - mov r3, #0x13 - bl MOD83_02238A38 - ldr r0, _0222F73C ; =0x00003170 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F6C4 - bl FUN_0200DBFC + mov r0, #0x4a + str r0, [sp] + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x48 + mov r2, #2 + mov r3, #0x13 + bl MOD83_02238A38 + ldr r0, _0222F73C ; =0x00003170 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F6C4 + bl FUN_0200DBFC _0222F6C4: - ldr r0, _0222F740 ; =0x000034D8 - mov r1, #0 - str r1, [r4, r0] - mov r0, #0x1c - str r0, [r4, r5] - b _0222F736 + ldr r0, _0222F740 ; =0x000034D8 + mov r1, #0 + str r1, [r4, r0] + mov r0, #0x1c + str r0, [r4, r5] + b _0222F736 _0222F6D0: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F6F2 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F6F2 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _0222F6F2: - ldr r0, _0222F748 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0222F736 - mov r0, #0 - bl OS_ResetSystem - b _0222F736 + ldr r0, _0222F748 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0222F736 + mov r0, #0 + bl OS_ResetSystem + b _0222F736 _0222F704: - bl MOD83_02234558 - cmp r0, #0 - beq _0222F736 - mov r0, #0x52 - lsl r0, r0, #2 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222F736 - bl FUN_0202E4F0 - bl FUN_02033ED0 - mov r0, #0x52 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] - ldr r0, _0222F740 ; =0x000034D8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222F732 - bl FUN_0200DBFC + bl MOD83_02234558 + cmp r0, #0 + beq _0222F736 + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222F736 + bl FUN_0202E4F0 + bl FUN_02033ED0 + mov r0, #0x52 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r0, _0222F740 ; =0x000034D8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222F732 + bl FUN_0200DBFC _0222F732: - mov r0, #5 - pop {r3, r4, r5, pc} + mov r0, #5 + pop {r3, r4, r5, pc} _0222F736: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0222F73C: .word 0x00003170 _0222F740: .word 0x000034D8 _0222F744: .word 0x000005DC _0222F748: .word gMain - thumb_func_end MOD83_0222F210 + thumb_func_end MOD83_0222F210 - thumb_func_start MOD83_0222F74C + thumb_func_start MOD83_0222F74C MOD83_0222F74C: ; 0x0222F74C - push {r4, lr} - ldr r1, _0222F79C ; =MOD83_0223B884 - add r4, r0, #0 - ldr r1, [r1] - cmp r1, #0 - bne _0222F798 - bl MOD83_0222F9F8 - mov r1, #0xf5 - mov r0, #0xf - lsl r1, r1, #2 - bl AllocFromHeap - ldr r1, _0222F79C ; =MOD83_0223B884 - mov r2, #0xf5 - str r0, [r1] - mov r1, #0 - lsl r2, r2, #2 - bl MI_CpuFill8 - ldr r0, _0222F79C ; =MOD83_0223B884 - mov r1, #0x32 - ldr r0, [r0] - mov r2, #0xa - strh r1, [r0, #0x24] - ldr r0, _0222F7A0 ; =MOD83_0222F89C - mov r1, #0 - bl FUN_0200CA44 - ldr r1, _0222F79C ; =MOD83_0223B884 - ldr r2, [r1] - str r0, [r2, #0x1c] - ldr r0, [r1] - str r4, [r0] - ldr r0, [r1] - add r0, r0, #4 - bl FUN_020312BC + push {r4, lr} + ldr r1, _0222F79C ; =MOD83_0223B884 + add r4, r0, #0 + ldr r1, [r1] + cmp r1, #0 + bne _0222F798 + bl MOD83_0222F9F8 + mov r1, #0xf5 + mov r0, #0xf + lsl r1, r1, #2 + bl AllocFromHeap + ldr r1, _0222F79C ; =MOD83_0223B884 + mov r2, #0xf5 + str r0, [r1] + mov r1, #0 + lsl r2, r2, #2 + bl MI_CpuFill8 + ldr r0, _0222F79C ; =MOD83_0223B884 + mov r1, #0x32 + ldr r0, [r0] + mov r2, #0xa + strh r1, [r0, #0x24] + ldr r0, _0222F7A0 ; =MOD83_0222F89C + mov r1, #0 + bl FUN_0200CA44 + ldr r1, _0222F79C ; =MOD83_0223B884 + ldr r2, [r1] + str r0, [r2, #0x1c] + ldr r0, [r1] + str r4, [r0] + ldr r0, [r1] + add r0, r0, #4 + bl FUN_020312BC _0222F798: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222F79C: .word MOD83_0223B884 _0222F7A0: .word MOD83_0222F89C - thumb_func_end MOD83_0222F74C + thumb_func_end MOD83_0222F74C - thumb_func_start MOD83_0222F7A4 + thumb_func_start MOD83_0222F7A4 MOD83_0222F7A4: ; 0x0222F7A4 - ldr r2, _0222F7B0 ; =MOD83_0223B884 - ldr r3, [r2] - str r0, [r3, #0x20] - ldr r0, [r2] - strh r1, [r0, #0x24] - bx lr - .align 2, 0 + ldr r2, _0222F7B0 ; =MOD83_0223B884 + ldr r3, [r2] + str r0, [r3, #0x20] + ldr r0, [r2] + strh r1, [r0, #0x24] + bx lr + .align 2, 0 _0222F7B0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F7A4 + thumb_func_end MOD83_0222F7A4 - thumb_func_start MOD83_0222F7B4 + thumb_func_start MOD83_0222F7B4 MOD83_0222F7B4: ; 0x0222F7B4 - push {r4, lr} - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0 - beq _0222F7E2 - mov r4, #0 - ldr r1, _0222F7E4 ; =MOD83_0223B884 - ldr r0, _0222F7E8 ; =0x000003C1 - add r3, r4, #0 + push {r4, lr} + bl FUN_02031190 + bl FUN_02030E7C + cmp r0, #0 + beq _0222F7E2 + mov r4, #0 + ldr r1, _0222F7E4 ; =MOD83_0223B884 + ldr r0, _0222F7E8 ; =0x000003C1 + add r3, r4, #0 _0222F7CA: - ldr r2, [r1] - add r2, r2, r4 - add r4, r4, #1 - strb r3, [r2, r0] - cmp r4, #0x10 - blt _0222F7CA - bl FUN_0202DBE0 - ldr r0, _0222F7EC ; =MOD83_0222F7F0 - mov r1, #0 - bl MOD83_0222F7A4 + ldr r2, [r1] + add r2, r2, r4 + add r4, r4, #1 + strb r3, [r2, r0] + cmp r4, #0x10 + blt _0222F7CA + bl FUN_0202DBE0 + ldr r0, _0222F7EC ; =MOD83_0222F7F0 + mov r1, #0 + bl MOD83_0222F7A4 _0222F7E2: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _0222F7E4: .word MOD83_0223B884 _0222F7E8: .word 0x000003C1 _0222F7EC: .word MOD83_0222F7F0 - thumb_func_end MOD83_0222F7B4 + thumb_func_end MOD83_0222F7B4 - thumb_func_start MOD83_0222F7F0 + thumb_func_start MOD83_0222F7F0 MOD83_0222F7F0: ; 0x0222F7F0 - push {r4, r5, r6, lr} - mov r4, #0 - ldr r6, _0222F824 ; =MOD83_0223B884 - add r5, r4, #0 + push {r4, r5, r6, lr} + mov r4, #0 + ldr r6, _0222F824 ; =MOD83_0223B884 + add r5, r4, #0 _0222F7F8: - ldr r0, [r6] - add r0, r0, r5 - ldr r0, [r0, #0x28] - cmp r0, #0 - bne _0222F81A - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #1 - bne _0222F81A - add r0, r4, #0 - bl FUN_0202DFA4 - ldr r1, [r6] - add r1, r1, r5 - str r0, [r1, #0x28] + ldr r0, [r6] + add r0, r0, r5 + ldr r0, [r0, #0x28] + cmp r0, #0 + bne _0222F81A + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #1 + bne _0222F81A + add r0, r4, #0 + bl FUN_0202DFA4 + ldr r1, [r6] + add r1, r1, r5 + str r0, [r1, #0x28] _0222F81A: - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #0x10 - blt _0222F7F8 - pop {r4, r5, r6, pc} - .align 2, 0 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #0x10 + blt _0222F7F8 + pop {r4, r5, r6, pc} + .align 2, 0 _0222F824: .word MOD83_0223B884 - thumb_func_end MOD83_0222F7F0 + thumb_func_end MOD83_0222F7F0 - thumb_func_start MOD83_0222F828 + thumb_func_start MOD83_0222F828 MOD83_0222F828: ; 0x0222F828 - push {r3, lr} - bl FUN_0202E4C8 - cmp r0, #0 - beq _0222F83A - ldr r0, _0222F83C ; =MOD83_0222F840 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, lr} + bl FUN_0202E4C8 + cmp r0, #0 + beq _0222F83A + ldr r0, _0222F83C ; =MOD83_0222F840 + mov r1, #0 + bl MOD83_0222F7A4 _0222F83A: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0222F83C: .word MOD83_0222F840 - thumb_func_end MOD83_0222F828 + thumb_func_end MOD83_0222F828 - thumb_func_start MOD83_0222F840 + thumb_func_start MOD83_0222F840 MOD83_0222F840: ; 0x0222F840 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F840 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F840 - thumb_func_start MOD83_0222F844 + thumb_func_start MOD83_0222F844 MOD83_0222F844: ; 0x0222F844 - push {r3, lr} - ldr r0, _0222F85C ; =MOD83_0223B884 - ldr r0, [r0] - add r0, #0x27 - ldrb r0, [r0] - bl FUN_020319D8 - ldr r0, _0222F860 ; =MOD83_0222F864 - mov r1, #0 - bl MOD83_0222F7A4 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r0, _0222F85C ; =MOD83_0223B884 + ldr r0, [r0] + add r0, #0x27 + ldrb r0, [r0] + bl FUN_020319D8 + ldr r0, _0222F860 ; =MOD83_0222F864 + mov r1, #0 + bl MOD83_0222F7A4 + pop {r3, pc} + .align 2, 0 _0222F85C: .word MOD83_0223B884 _0222F860: .word MOD83_0222F864 - thumb_func_end MOD83_0222F844 + thumb_func_end MOD83_0222F844 - thumb_func_start MOD83_0222F864 + thumb_func_start MOD83_0222F864 MOD83_0222F864: ; 0x0222F864 - push {r3, lr} - bl FUN_02031A2C - cmp r0, #0 - beq _0222F88C - ldr r0, _0222F890 ; =MOD83_0223B884 - mov r2, #0 - ldr r1, [r0] - mov r0, #0xf - lsl r0, r0, #6 - strb r2, [r1, r0] - bl FUN_0202DBE0 - mov r0, #0xab - bl FUN_02031588 - ldr r0, _0222F894 ; =MOD83_0222F898 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, lr} + bl FUN_02031A2C + cmp r0, #0 + beq _0222F88C + ldr r0, _0222F890 ; =MOD83_0223B884 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xf + lsl r0, r0, #6 + strb r2, [r1, r0] + bl FUN_0202DBE0 + mov r0, #0xab + bl FUN_02031588 + ldr r0, _0222F894 ; =MOD83_0222F898 + mov r1, #0 + bl MOD83_0222F7A4 _0222F88C: - pop {r3, pc} - nop + pop {r3, pc} + nop _0222F890: .word MOD83_0223B884 _0222F894: .word MOD83_0222F898 - thumb_func_end MOD83_0222F864 + thumb_func_end MOD83_0222F864 - thumb_func_start MOD83_0222F898 + thumb_func_start MOD83_0222F898 MOD83_0222F898: ; 0x0222F898 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F898 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F898 - thumb_func_start MOD83_0222F89C + thumb_func_start MOD83_0222F89C MOD83_0222F89C: ; 0x0222F89C - push {r3, lr} - ldr r1, _0222F8C0 ; =MOD83_0223B884 - ldr r2, [r1] - cmp r2, #0 - bne _0222F8AC - bl FUN_0200CAB4 - pop {r3, pc} + push {r3, lr} + ldr r1, _0222F8C0 ; =MOD83_0223B884 + ldr r2, [r1] + cmp r2, #0 + bne _0222F8AC + bl FUN_0200CAB4 + pop {r3, pc} _0222F8AC: - ldr r1, [r2, #0x20] - cmp r1, #0 - beq _0222F8BC - add r2, #0x26 - ldrb r0, [r2] - cmp r0, #0 - bne _0222F8BC - blx r1 + ldr r1, [r2, #0x20] + cmp r1, #0 + beq _0222F8BC + add r2, #0x26 + ldrb r0, [r2] + cmp r0, #0 + bne _0222F8BC + blx r1 _0222F8BC: - pop {r3, pc} - nop + pop {r3, pc} + nop _0222F8C0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F89C + thumb_func_end MOD83_0222F89C - thumb_func_start MOD83_0222F8C4 + thumb_func_start MOD83_0222F8C4 MOD83_0222F8C4: ; 0x0222F8C4 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl FUN_02030F40 - cmp r0, #0 - bne _0222F8EA - add r0, r4, #0 - add r1, r6, #0 - bl FUN_02031C74 - add r0, r5, #0 - bl MOD83_0222F74C - ldr r0, _0222F8EC ; =MOD83_0222F7B4 - mov r1, #0 - bl MOD83_0222F7A4 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl FUN_02030F40 + cmp r0, #0 + bne _0222F8EA + add r0, r4, #0 + add r1, r6, #0 + bl FUN_02031C74 + add r0, r5, #0 + bl MOD83_0222F74C + ldr r0, _0222F8EC ; =MOD83_0222F7B4 + mov r1, #0 + bl MOD83_0222F7A4 _0222F8EA: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _0222F8EC: .word MOD83_0222F7B4 - thumb_func_end MOD83_0222F8C4 + thumb_func_end MOD83_0222F8C4 - thumb_func_start MOD83_0222F8F0 + thumb_func_start MOD83_0222F8F0 MOD83_0222F8F0: ; 0x0222F8F0 - add r3, r0, #0 - add r2, r1, #0 - add r1, r3, #0 - ldr r3, _0222F8FC ; =FUN_02030B3C - mov r0, #0x16 - bx r3 - .align 2, 0 + add r3, r0, #0 + add r2, r1, #0 + add r1, r3, #0 + ldr r3, _0222F8FC ; =FUN_02030B3C + mov r0, #0x16 + bx r3 + .align 2, 0 _0222F8FC: .word FUN_02030B3C - thumb_func_end MOD83_0222F8F0 + thumb_func_end MOD83_0222F8F0 - thumb_func_start MOD83_0222F900 + thumb_func_start MOD83_0222F900 MOD83_0222F900: ; 0x0222F900 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl FUN_02030F40 - cmp r0, #0 - bne _0222F92C - bl MOD83_02231364 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - add r1, r4, #0 - bl FUN_02031CA8 - add r0, r5, #0 - bl MOD83_0222F74C - ldr r0, _0222F930 ; =MOD83_0222F828 - mov r1, #0 - bl MOD83_0222F7A4 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl FUN_02030F40 + cmp r0, #0 + bne _0222F92C + bl MOD83_02231364 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + add r1, r4, #0 + bl FUN_02031CA8 + add r0, r5, #0 + bl MOD83_0222F74C + ldr r0, _0222F930 ; =MOD83_0222F828 + mov r1, #0 + bl MOD83_0222F7A4 _0222F92C: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0222F930: .word MOD83_0222F828 - thumb_func_end MOD83_0222F900 + thumb_func_end MOD83_0222F900 - thumb_func_start MOD83_0222F934 + thumb_func_start MOD83_0222F934 MOD83_0222F934: ; 0x0222F934 - ldr r1, _0222F944 ; =MOD83_0223B884 - ldr r3, _0222F948 ; =MOD83_0222F7A4 - ldr r1, [r1] - add r1, #0x27 - strb r0, [r1] - ldr r0, _0222F94C ; =MOD83_0222F844 - mov r1, #0 - bx r3 - .align 2, 0 + ldr r1, _0222F944 ; =MOD83_0223B884 + ldr r3, _0222F948 ; =MOD83_0222F7A4 + ldr r1, [r1] + add r1, #0x27 + strb r0, [r1] + ldr r0, _0222F94C ; =MOD83_0222F844 + mov r1, #0 + bx r3 + .align 2, 0 _0222F944: .word MOD83_0223B884 _0222F948: .word MOD83_0222F7A4 _0222F94C: .word MOD83_0222F844 - thumb_func_end MOD83_0222F934 + thumb_func_end MOD83_0222F934 - thumb_func_start MOD83_0222F950 + thumb_func_start MOD83_0222F950 MOD83_0222F950: ; 0x0222F950 - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r4, #0 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r4, #0 _0222F956: - add r0, r4, #0 - bl FUN_0202F124 - add r1, r0, #0 - beq _0222F976 - add r0, #0x4c - ldrh r0, [r0] - cmp r0, #0 - beq _0222F976 - add r5, #0x8c - add r0, r5, #0 - mov r2, #0x50 - bl memcpy - add r0, r4, #0 - pop {r3, r4, r5, pc} + add r0, r4, #0 + bl FUN_0202F124 + add r1, r0, #0 + beq _0222F976 + add r0, #0x4c + ldrh r0, [r0] + cmp r0, #0 + beq _0222F976 + add r5, #0x8c + add r0, r5, #0 + mov r2, #0x50 + bl memcpy + add r0, r4, #0 + pop {r3, r4, r5, pc} _0222F976: - add r4, r4, #1 - cmp r4, #0x10 - blt _0222F956 - mov r0, #0 - mvn r0, r0 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0222F950 - - thumb_func_start MOD83_0222F984 + add r4, r4, #1 + cmp r4, #0x10 + blt _0222F956 + mov r0, #0 + mvn r0, r0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0222F950 + + thumb_func_start MOD83_0222F984 MOD83_0222F984: ; 0x0222F984 - ldr r1, _0222F99C ; =MOD83_0223B884 - ldr r2, [r1] - add r1, r2, #0 - add r1, #0x27 - ldrb r1, [r1] - cmp r1, r0 - bne _0222F99A - mov r0, #0xf - mov r1, #1 - lsl r0, r0, #6 - strb r1, [r2, r0] + ldr r1, _0222F99C ; =MOD83_0223B884 + ldr r2, [r1] + add r1, r2, #0 + add r1, #0x27 + ldrb r1, [r1] + cmp r1, r0 + bne _0222F99A + mov r0, #0xf + mov r1, #1 + lsl r0, r0, #6 + strb r1, [r2, r0] _0222F99A: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _0222F99C: .word MOD83_0223B884 - thumb_func_end MOD83_0222F984 + thumb_func_end MOD83_0222F984 - thumb_func_start MOD83_0222F9A0 + thumb_func_start MOD83_0222F9A0 MOD83_0222F9A0: ; 0x0222F9A0 - ldr r0, _0222F9AC ; =MOD83_0223B884 - ldr r1, [r0] - mov r0, #0xf - lsl r0, r0, #6 - ldrb r0, [r1, r0] - bx lr - .align 2, 0 + ldr r0, _0222F9AC ; =MOD83_0223B884 + ldr r1, [r0] + mov r0, #0xf + lsl r0, r0, #6 + ldrb r0, [r1, r0] + bx lr + .align 2, 0 _0222F9AC: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9A0 + thumb_func_end MOD83_0222F9A0 - thumb_func_start MOD83_0222F9B0 + thumb_func_start MOD83_0222F9B0 MOD83_0222F9B0: ; 0x0222F9B0 - mov r0, #0xd6 - lsl r0, r0, #2 - bx lr - .align 2, 0 - thumb_func_end MOD83_0222F9B0 + mov r0, #0xd6 + lsl r0, r0, #2 + bx lr + .align 2, 0 + thumb_func_end MOD83_0222F9B0 - thumb_func_start MOD83_0222F9B8 + thumb_func_start MOD83_0222F9B8 MOD83_0222F9B8: ; 0x0222F9B8 - ldr r0, _0222F9C0 ; =MOD83_0223B884 - ldr r0, [r0] - add r0, #0x68 - bx lr - .align 2, 0 + ldr r0, _0222F9C0 ; =MOD83_0223B884 + ldr r0, [r0] + add r0, #0x68 + bx lr + .align 2, 0 _0222F9C0: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9B8 + thumb_func_end MOD83_0222F9B8 - thumb_func_start MOD83_0222F9C4 + thumb_func_start MOD83_0222F9C4 MOD83_0222F9C4: ; 0x0222F9C4 - ldr r1, _0222F9D4 ; =MOD83_0223B884 - mov r2, #1 - ldr r1, [r1] - add r1, r1, r0 - ldr r0, _0222F9D8 ; =0x000003C1 - strb r2, [r1, r0] - bx lr - nop + ldr r1, _0222F9D4 ; =MOD83_0223B884 + mov r2, #1 + ldr r1, [r1] + add r1, r1, r0 + ldr r0, _0222F9D8 ; =0x000003C1 + strb r2, [r1, r0] + bx lr + nop _0222F9D4: .word MOD83_0223B884 _0222F9D8: .word 0x000003C1 - thumb_func_end MOD83_0222F9C4 + thumb_func_end MOD83_0222F9C4 - thumb_func_start MOD83_0222F9DC + thumb_func_start MOD83_0222F9DC MOD83_0222F9DC: ; 0x0222F9DC - push {r3, lr} - ldr r1, _0222F9F4 ; =MOD83_0223B884 - mov r0, #0xf - ldr r1, [r1] - bl FreeToHeapExplicit - ldr r0, _0222F9F4 ; =MOD83_0223B884 - mov r1, #0 - str r1, [r0] - bl FUN_02031A08 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r1, _0222F9F4 ; =MOD83_0223B884 + mov r0, #0xf + ldr r1, [r1] + bl FreeToHeapExplicit + ldr r0, _0222F9F4 ; =MOD83_0223B884 + mov r1, #0 + str r1, [r0] + bl FUN_02031A08 + pop {r3, pc} + .align 2, 0 _0222F9F4: .word MOD83_0223B884 - thumb_func_end MOD83_0222F9DC + thumb_func_end MOD83_0222F9DC - thumb_func_start MOD83_0222F9F8 + thumb_func_start MOD83_0222F9F8 MOD83_0222F9F8: ; 0x0222F9F8 - ldr r3, _0222FA04 ; =FUN_0202D8D0 - add r2, r0, #0 - ldr r0, _0222FA08 ; =MOD83_0223A3F0 - mov r1, #2 - bx r3 - nop + ldr r3, _0222FA04 ; =FUN_0202D8D0 + add r2, r0, #0 + ldr r0, _0222FA08 ; =MOD83_0223A3F0 + mov r1, #2 + bx r3 + nop _0222FA04: .word FUN_0202D8D0 _0222FA08: .word MOD83_0223A3F0 - thumb_func_end MOD83_0222F9F8 + thumb_func_end MOD83_0222F9F8 - thumb_func_start MOD83_0222FA0C + thumb_func_start MOD83_0222FA0C MOD83_0222FA0C: ; 0x0222FA0C - push {r4, lr} - add r4, r0, #0 - cmp r1, #1 - ldr r0, _0222FA40 ; =0x00002994 - bne _0222FA2C - ldr r0, [r4, r0] - cmp r0, #0 - bne _0222FA3C - add r0, r4, #0 - add r0, #0x18 - mov r1, #1 - bl FUN_0200D858 - ldr r1, _0222FA40 ; =0x00002994 - str r0, [r4, r1] - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + cmp r1, #1 + ldr r0, _0222FA40 ; =0x00002994 + bne _0222FA2C + ldr r0, [r4, r0] + cmp r0, #0 + bne _0222FA3C + add r0, r4, #0 + add r0, #0x18 + mov r1, #1 + bl FUN_0200D858 + ldr r1, _0222FA40 ; =0x00002994 + str r0, [r4, r1] + pop {r4, pc} _0222FA2C: - ldr r0, [r4, r0] - cmp r0, #0 - beq _0222FA36 - bl FUN_0200DBFC + ldr r0, [r4, r0] + cmp r0, #0 + beq _0222FA36 + bl FUN_0200DBFC _0222FA36: - ldr r0, _0222FA40 ; =0x00002994 - mov r1, #0 - str r1, [r4, r0] + ldr r0, _0222FA40 ; =0x00002994 + mov r1, #0 + str r1, [r4, r0] _0222FA3C: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222FA40: .word 0x00002994 - thumb_func_end MOD83_0222FA0C + thumb_func_end MOD83_0222FA0C - thumb_func_start MOD83_0222FA44 + thumb_func_start MOD83_0222FA44 MOD83_0222FA44: ; 0x0222FA44 - ldr r3, _0222FA48 ; =MOD83_0222FA0C - bx r3 - .align 2, 0 + ldr r3, _0222FA48 ; =MOD83_0222FA0C + bx r3 + .align 2, 0 _0222FA48: .word MOD83_0222FA0C - thumb_func_end MOD83_0222FA44 + thumb_func_end MOD83_0222FA44 - thumb_func_start MOD83_0222FA4C + thumb_func_start MOD83_0222FA4C MOD83_0222FA4C: ; 0x0222FA4C - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - add r7, r0, #0 - bl MOD83_02238E48 - ldr r0, [r7, #0x7c] - cmp r0, #0 - beq _0222FA62 - bl ListMenuItems_dtor + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + add r7, r0, #0 + bl MOD83_02238E48 + ldr r0, [r7, #0x7c] + cmp r0, #0 + beq _0222FA62 + bl ListMenuItems_dtor _0222FA62: - ldr r0, [r7, #0x78] - cmp r0, #0 - beq _0222FA70 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, [r7, #0x78] + cmp r0, #0 + beq _0222FA70 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _0222FA70: - add r0, r7, #0 - add r0, #0x18 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - add r0, #0x18 - bl RemoveWindow - add r0, r7, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - beq _0222FA9C - add r0, r7, #0 - add r0, #0x58 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - add r0, #0x58 - bl RemoveWindow + add r0, r7, #0 + add r0, #0x18 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + add r0, #0x18 + bl RemoveWindow + add r0, r7, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + beq _0222FA9C + add r0, r7, #0 + add r0, #0x58 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + add r0, #0x58 + bl RemoveWindow _0222FA9C: - add r5, r7, #0 - mov r6, #0 - add r4, r7, #0 - add r5, #0x28 + add r5, r7, #0 + mov r6, #0 + add r4, r7, #0 + add r5, #0x28 _0222FAA4: - ldr r0, [r4, #0x28] - cmp r0, #0 - beq _0222FAB6 - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _0222FAB6 + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _0222FAB6: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #3 - blt _0222FAA4 - ldr r0, [r7] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #4 - bl FreeBgTilemapBuffer - ldr r0, [r7] - mov r1, #5 - bl FreeBgTilemapBuffer - ldr r0, [r7] - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_0222FA4C - - thumb_func_start MOD83_0222FAE8 + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #3 + blt _0222FAA4 + ldr r0, [r7] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #4 + bl FreeBgTilemapBuffer + ldr r0, [r7] + mov r1, #5 + bl FreeBgTilemapBuffer + ldr r0, [r7] + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_0222FA4C + + thumb_func_start MOD83_0222FAE8 MOD83_0222FAE8: ; 0x0222FAE8 - push {r3, lr} - sub sp, #8 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #8 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xa - mov r2, #7 - mov r3, #9 - bl MOD83_02238BC4 - add sp, #8 - pop {r3, pc} - thumb_func_end MOD83_0222FAE8 - - thumb_func_start MOD83_0222FB0C + push {r3, lr} + sub sp, #8 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #8 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xa + mov r2, #7 + mov r3, #9 + bl MOD83_02238BC4 + add sp, #8 + pop {r3, pc} + thumb_func_end MOD83_0222FAE8 + + thumb_func_start MOD83_0222FB0C MOD83_0222FB0C: ; 0x0222FB0C - push {r3, r4, lr} - sub sp, #4 - add r4, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r1, r0 - beq _0222FB32 - str r1, [sp] - ldr r1, _0222FB40 ; =0x000005C4 - mov r0, #0 - ldr r1, [r4, r1] - mov r2, #0x80 - mov r3, #0x64 - bl MOD83_02238DBC - ldr r1, _0222FB40 ; =0x000005C4 - add sp, #4 - str r0, [r4, r1] - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #4 + add r4, r0, #0 + mov r0, #0 + mvn r0, r0 + cmp r1, r0 + beq _0222FB32 + str r1, [sp] + ldr r1, _0222FB40 ; =0x000005C4 + mov r0, #0 + ldr r1, [r4, r1] + mov r2, #0x80 + mov r3, #0x64 + bl MOD83_02238DBC + ldr r1, _0222FB40 ; =0x000005C4 + add sp, #4 + str r0, [r4, r1] + pop {r3, r4, pc} _0222FB32: - ldr r0, _0222FB40 ; =0x000005C4 - mov r1, #0 - ldr r0, [r4, r0] - bl FUN_020200A0 - add sp, #4 - pop {r3, r4, pc} - .align 2, 0 + ldr r0, _0222FB40 ; =0x000005C4 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020200A0 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 _0222FB40: .word 0x000005C4 - thumb_func_end MOD83_0222FB0C + thumb_func_end MOD83_0222FB0C - thumb_func_start MOD83_0222FB44 + thumb_func_start MOD83_0222FB44 MOD83_0222FB44: ; 0x0222FB44 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _0222FB5A - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200CCF8 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _0222FB5A + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200CCF8 _0222FB5A: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_0222FB44 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_0222FB44 - thumb_func_start MOD83_0222FB5C + thumb_func_start MOD83_0222FB5C MOD83_0222FB5C: ; 0x0222FB5C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FBB0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - beq _0222FB7A - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FBB0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + beq _0222FB7A + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C _0222FB7A: - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FBB0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - beq _0222FBAA - add r0, r4, #0 - mov r1, #0xf - bl MOD83_0222F900 - ldr r1, _0222FBB4 ; =0x00001C20 - ldr r0, _0222FBB8 ; =0x00000434 - str r1, [r4, r0] - bl FUN_02033E74 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r0, #7 - pop {r3, r4, r5, pc} + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FBB0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + beq _0222FBAA + add r0, r4, #0 + mov r1, #0xf + bl MOD83_0222F900 + ldr r1, _0222FBB4 ; =0x00001C20 + ldr r0, _0222FBB8 ; =0x00000434 + str r1, [r4, r0] + bl FUN_02033E74 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r0, #7 + pop {r3, r4, r5, pc} _0222FBAA: - mov r0, #0x13 - pop {r3, r4, r5, pc} - nop + mov r0, #0x13 + pop {r3, r4, r5, pc} + nop _0222FBB0: .word 0x000015D4 _0222FBB4: .word 0x00001C20 _0222FBB8: .word 0x00000434 - thumb_func_end MOD83_0222FB5C + thumb_func_end MOD83_0222FB5C - thumb_func_start MOD83_0222FBBC + thumb_func_start MOD83_0222FBBC MOD83_0222FBBC: ; 0x0222FBBC - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x80 - ldr r1, [r0] - cmp r1, #1 - bne _0222FBD2 - mov r0, #0x30 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x80 + ldr r1, [r0] + cmp r1, #1 + bne _0222FBD2 + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBD2: - sub r0, r1, #2 - cmp r0, #2 - bhi _0222FBDC - mov r0, #0x30 - pop {r3, r4, r5, pc} + sub r0, r1, #2 + cmp r0, #2 + bhi _0222FBDC + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBDC: - cmp r1, #5 - bne _0222FBE4 - mov r0, #0x30 - pop {r3, r4, r5, pc} + cmp r1, #5 + bne _0222FBE4 + mov r0, #0x30 + pop {r3, r4, r5, pc} _0222FBE4: - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FBF4 - ldr r0, _0222FC3C ; =0x00000438 - ldr r0, [r4, r0] - bl MOD83_0222F934 + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FBF4 + ldr r0, _0222FC3C ; =0x00000438 + ldr r0, [r4, r0] + bl MOD83_0222F934 _0222FBF4: - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #6 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FC22 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #6 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FC22 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C _0222FC22: - ldr r0, _0222FC38 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FC34 - mov r0, #0xab - bl FUN_02031588 - mov r0, #9 - pop {r3, r4, r5, pc} + ldr r0, _0222FC38 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FC34 + mov r0, #0xab + bl FUN_02031588 + mov r0, #9 + pop {r3, r4, r5, pc} _0222FC34: - mov r0, #0x15 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0x15 + pop {r3, r4, r5, pc} + .align 2, 0 _0222FC38: .word 0x000015D4 _0222FC3C: .word 0x00000438 - thumb_func_end MOD83_0222FBBC + thumb_func_end MOD83_0222FBBC - thumb_func_start MOD83_0222FC40 + thumb_func_start MOD83_0222FC40 MOD83_0222FC40: ; 0x0222FC40 - push {r3, r4, r5, r6, r7, lr} - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FCA4 ; =0x000015D4 - add r5, r4, #0 - add r6, r4, #0 - ldr r0, [r4, r0] - add r5, #0xdc - add r6, #0x8c - cmp r0, #1 - beq _0222FC5E - cmp r0, #3 - beq _0222FC84 - b _0222FC9E + push {r3, r4, r5, r6, r7, lr} + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FCA4 ; =0x000015D4 + add r5, r4, #0 + add r6, r4, #0 + ldr r0, [r4, r0] + add r5, #0xdc + add r6, #0x8c + cmp r0, #1 + beq _0222FC5E + cmp r0, #3 + beq _0222FC84 + b _0222FC9E _0222FC5E: - mov r0, #0 - add r1, r0, #0 - add r2, r0, #0 - bl MOD83_0222F9B8 - mov r2, #0xd6 - add r1, r0, #0 - add r0, r5, #0 - lsl r2, r2, #2 - bl memcpy - add r0, r4, #0 - add r4, #0xdc - add r0, #0x8c - add r1, r4, #0 - mov r2, #0x56 - bl MOD83_02239374 - b _0222FC9E + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + bl MOD83_0222F9B8 + mov r2, #0xd6 + add r1, r0, #0 + add r0, r5, #0 + lsl r2, r2, #2 + bl memcpy + add r0, r4, #0 + add r4, #0xdc + add r0, #0x8c + add r1, r4, #0 + mov r2, #0x56 + bl MOD83_02239374 + b _0222FC9E _0222FC84: - ldr r7, _0222FCA8 ; =0x000005D4 - mov r2, #0xd6 - add r1, r4, r7 - add r0, r5, #0 - add r1, #0x50 - lsl r2, r2, #2 - bl memcpy - add r0, r6, #0 - add r1, r4, r7 - mov r2, #0x50 - bl memcpy + ldr r7, _0222FCA8 ; =0x000005D4 + mov r2, #0xd6 + add r1, r4, r7 + add r0, r5, #0 + add r1, #0x50 + lsl r2, r2, #2 + bl memcpy + add r0, r6, #0 + add r1, r4, r7 + mov r2, #0x50 + bl memcpy _0222FC9E: - add r0, r5, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r5, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _0222FCA4: .word 0x000015D4 _0222FCA8: .word 0x000005D4 - thumb_func_end MOD83_0222FC40 + thumb_func_end MOD83_0222FC40 - thumb_func_start MOD83_0222FCAC + thumb_func_start MOD83_0222FCAC MOD83_0222FCAC: ; 0x0222FCAC - push {r4, lr} - add r4, r0, #0 - ldr r0, _0222FCD8 ; =0x00002990 - ldr r1, [r4, r0] - cmp r1, #1 - bne _0222FCBE - mov r1, #0 - sub r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _0222FCD8 ; =0x00002990 + ldr r1, [r4, r0] + cmp r1, #1 + bne _0222FCBE + mov r1, #0 + sub r0, r0, #4 + str r1, [r4, r0] _0222FCBE: - bl MOD83_022394CC - sub r0, r0, #2 - cmp r0, #1 - bhi _0222FCD4 - ldr r0, _0222FCDC ; =0x0000061B - bl PlaySE - ldr r0, _0222FCE0 ; =0x0000298C - mov r1, #0 - str r1, [r4, r0] + bl MOD83_022394CC + sub r0, r0, #2 + cmp r0, #1 + bhi _0222FCD4 + ldr r0, _0222FCDC ; =0x0000061B + bl PlaySE + ldr r0, _0222FCE0 ; =0x0000298C + mov r1, #0 + str r1, [r4, r0] _0222FCD4: - pop {r4, pc} - nop + pop {r4, pc} + nop _0222FCD8: .word 0x00002990 _0222FCDC: .word 0x0000061B _0222FCE0: .word 0x0000298C - thumb_func_end MOD83_0222FCAC + thumb_func_end MOD83_0222FCAC - thumb_func_start MOD83_0222FCE4 + thumb_func_start MOD83_0222FCE4 MOD83_0222FCE4: ; 0x0222FCE4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r7, r0, #0 - bl OverlayManager_GetData - add r6, r0, #0 - add r4, r6, #0 - add r5, r6, #0 - add r0, r7, #0 - add r4, #0x8c - add r5, #0xdc - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [sp] - add r0, r4, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - bne _0222FD12 - mov r7, #0 - b _0222FD3E + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r7, r0, #0 + bl OverlayManager_GetData + add r6, r0, #0 + add r4, r6, #0 + add r5, r6, #0 + add r0, r7, #0 + add r4, #0x8c + add r5, #0xdc + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [sp] + add r0, r4, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + bne _0222FD12 + mov r7, #0 + b _0222FD3E _0222FD12: - mov r1, #0x35 - add r2, r4, #0 - mov r0, #0 - lsl r1, r1, #4 - strb r0, [r5, r1] - add r2, #0x4e - ldrb r2, [r2] - mov r7, #1 - lsl r2, r2, #0x1b - lsr r2, r2, #0x1f - bne _0222FD2C - sub r1, #8 - strb r0, [r5, r1] + mov r1, #0x35 + add r2, r4, #0 + mov r0, #0 + lsl r1, r1, #4 + strb r0, [r5, r1] + add r2, #0x4e + ldrb r2, [r2] + mov r7, #1 + lsl r2, r2, #0x1b + lsr r2, r2, #0x1f + bne _0222FD2C + sub r1, #8 + strb r0, [r5, r1] _0222FD2C: - add r0, sp, #8 - bl GF_RTC_CopyDate - add r0, sp, #8 - bl RTC_ConvertDateToDay - mov r1, #0xd5 - lsl r1, r1, #2 - str r0, [r5, r1] + add r0, sp, #8 + bl GF_RTC_CopyDate + add r0, sp, #8 + bl RTC_ConvertDateToDay + mov r1, #0xd5 + lsl r1, r1, #2 + str r0, [r5, r1] _0222FD3E: - ldr r0, [sp] - bl FUN_0202251C - add r4, #0x4c - ldrh r1, [r4] - str r0, [sp, #4] - bl FUN_0202AF24 - cmp r7, #0 - bne _0222FD5E - ldr r0, [sp, #4] - add r1, r5, #0 - mov r2, #0 - bl FUN_0202AC98 - b _0222FD66 + ldr r0, [sp] + bl FUN_0202251C + add r4, #0x4c + ldrh r1, [r4] + str r0, [sp, #4] + bl FUN_0202AF24 + cmp r7, #0 + bne _0222FD5E + ldr r0, [sp, #4] + add r1, r5, #0 + mov r2, #0 + bl FUN_0202AC98 + b _0222FD66 _0222FD5E: - ldr r0, [sp, #4] - add r1, r5, #0 - bl FUN_0202AD08 + ldr r0, [sp, #4] + add r1, r5, #0 + bl FUN_0202AD08 _0222FD66: - ldr r0, [sp] - bl MOD83_022394BC - ldr r0, _0222FD7C ; =0x00002990 - mov r1, #0 - str r1, [r6, r0] - ldr r1, _0222FD80 ; =MOD83_0222FCAC - sub r0, r0, #4 - str r1, [r6, r0] - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp] + bl MOD83_022394BC + ldr r0, _0222FD7C ; =0x00002990 + mov r1, #0 + str r1, [r6, r0] + ldr r1, _0222FD80 ; =MOD83_0222FCAC + sub r0, r0, #4 + str r1, [r6, r0] + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0222FD7C: .word 0x00002990 _0222FD80: .word MOD83_0222FCAC - thumb_func_end MOD83_0222FCE4 + thumb_func_end MOD83_0222FCE4 - thumb_func_start MOD83_0222FD84 + thumb_func_start MOD83_0222FD84 MOD83_0222FD84: ; 0x0222FD84 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - add r4, r1, #0 - bl OverlayManager_GetData - cmp r4, #0 - bne _0222FD98 - mov r5, #4 - b _0222FD9C + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + add r4, r1, #0 + bl OverlayManager_GetData + cmp r4, #0 + bne _0222FD98 + mov r5, #4 + b _0222FD9C _0222FD98: - mov r5, #0 - mvn r5, r5 + mov r5, #0 + mvn r5, r5 _0222FD9C: - ldr r1, [r0, #0x48] - add r4, r0, #0 - add r4, #0x48 - cmp r1, #0 - bne _0222FDC6 - mov r1, #0xa - str r1, [sp] - mov r1, #6 - str r1, [sp, #4] - mov r1, #4 - str r1, [sp, #8] - mov r2, #0 - mov r1, #0x6b - str r2, [sp, #0xc] - lsl r1, r1, #2 - str r1, [sp, #0x10] - ldr r0, [r0] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + ldr r1, [r0, #0x48] + add r4, r0, #0 + add r4, #0x48 + cmp r1, #0 + bne _0222FDC6 + mov r1, #0xa + str r1, [sp] + mov r1, #6 + str r1, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + mov r2, #0 + mov r1, #0x6b + str r2, [sp, #0xc] + lsl r1, r1, #2 + str r1, [sp, #0x10] + ldr r0, [r0] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FDC6: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - ldr r1, _0222FDE4 ; =MOD83_0223ADD8 - add r0, r6, #0 - mov r2, #2 - add r3, r4, #0 - str r5, [sp] - bl MOD83_022303B0 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + ldr r1, _0222FDE4 ; =MOD83_0223ADD8 + add r0, r6, #0 + mov r2, #2 + add r3, r4, #0 + str r5, [sp] + bl MOD83_022303B0 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FDE4: .word MOD83_0223ADD8 - thumb_func_end MOD83_0222FD84 + thumb_func_end MOD83_0222FD84 - thumb_func_start MOD83_0222FDE8 + thumb_func_start MOD83_0222FDE8 MOD83_0222FDE8: ; 0x0222FDE8 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - ldr r0, _0222FE20 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _0222FE14 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + ldr r0, _0222FE20 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _0222FE14 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C _0222FE14: - bl FUN_02033ED0 - add r0, r5, #0 - bl MOD83_02230118 - pop {r3, r4, r5, pc} - .align 2, 0 + bl FUN_02033ED0 + add r0, r5, #0 + bl MOD83_02230118 + pop {r3, r4, r5, pc} + .align 2, 0 _0222FE20: .word 0x000015D4 - thumb_func_end MOD83_0222FDE8 + thumb_func_end MOD83_0222FDE8 - thumb_func_start MOD83_0222FE24 + thumb_func_start MOD83_0222FE24 MOD83_0222FE24: ; 0x0222FE24 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r5, r0, #0 - bl MOD83_02238700 - cmp r0, #0 - beq _0222FE3C - mov r1, #2 - b _0222FE3E + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r5, r0, #0 + bl MOD83_02238700 + cmp r0, #0 + beq _0222FE3C + mov r1, #2 + b _0222FE3E _0222FE3C: - mov r1, #1 + mov r1, #1 _0222FE3E: - ldr r0, _0222FE98 ; =0x000015D4 - str r1, [r5, r0] - add r0, r5, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r4, r5, #0 - ldr r0, [r5, #0x48] - add r4, #0x48 - cmp r0, #0 - bne _0222FE76 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r5] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + ldr r0, _0222FE98 ; =0x000015D4 + str r1, [r5, r0] + add r0, r5, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r4, r5, #0 + ldr r0, [r5, #0x48] + add r4, #0x48 + cmp r0, #0 + bne _0222FE76 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r5] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FE76: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r2, #2 - ldr r1, _0222FE9C ; =MOD83_0223ADC8 - add r0, r6, #0 - add r3, r4, #0 - str r2, [sp] - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - nop + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r2, #2 + ldr r1, _0222FE9C ; =MOD83_0223ADC8 + add r0, r6, #0 + add r3, r4, #0 + str r2, [sp] + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + nop _0222FE98: .word 0x000015D4 _0222FE9C: .word MOD83_0223ADC8 - thumb_func_end MOD83_0222FE24 + thumb_func_end MOD83_0222FE24 - thumb_func_start MOD83_0222FEA0 + thumb_func_start MOD83_0222FEA0 MOD83_0222FEA0: ; 0x0222FEA0 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FF08 ; =0x000015D4 - mov r1, #4 - str r1, [r4, r0] - add r0, r4, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r5, r4, #0 - ldr r0, [r4, #0x48] - add r5, #0x48 - cmp r0, #0 - bne _0222FEE6 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, r5, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FF08 ; =0x000015D4 + mov r1, #4 + str r1, [r4, r0] + add r0, r4, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r5, r4, #0 + ldr r0, [r4, #0x48] + add r5, #0x48 + cmp r0, #0 + bne _0222FEE6 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, r5, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FEE6: - add r0, r5, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #0x4e - str r0, [sp] - ldr r1, _0222FF0C ; =MOD83_0223AD98 - add r0, r6, #0 - mov r2, #2 - add r3, r5, #0 - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r5, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #0x4e + str r0, [sp] + ldr r1, _0222FF0C ; =MOD83_0223AD98 + add r0, r6, #0 + mov r2, #2 + add r3, r5, #0 + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FF08: .word 0x000015D4 _0222FF0C: .word MOD83_0223AD98 - thumb_func_end MOD83_0222FEA0 + thumb_func_end MOD83_0222FEA0 - thumb_func_start MOD83_0222FF10 + thumb_func_start MOD83_0222FF10 MOD83_0222FF10: ; 0x0222FF10 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _0222FF78 ; =0x000015D4 - mov r1, #3 - str r1, [r4, r0] - add r0, r4, #0 - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r5, r4, #0 - ldr r0, [r4, #0x48] - add r5, #0x48 - cmp r0, #0 - bne _0222FF56 - mov r0, #0xa - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x6b - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, r5, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _0222FF78 ; =0x000015D4 + mov r1, #3 + str r1, [r4, r0] + add r0, r4, #0 + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r5, r4, #0 + ldr r0, [r4, #0x48] + add r5, #0x48 + cmp r0, #0 + bne _0222FF56 + mov r0, #0xa + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x6b + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, r5, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FF56: - add r0, r5, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #0x4d - str r0, [sp] - ldr r1, _0222FF7C ; =MOD83_0223ADA8 - add r0, r6, #0 - mov r2, #2 - add r3, r5, #0 - bl MOD83_022303B0 - mov r0, #5 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r5, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #0x4d + str r0, [sp] + ldr r1, _0222FF7C ; =MOD83_0223ADA8 + add r0, r6, #0 + mov r2, #2 + add r3, r5, #0 + bl MOD83_022303B0 + mov r0, #5 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _0222FF78: .word 0x000015D4 _0222FF7C: .word MOD83_0223ADA8 - thumb_func_end MOD83_0222FF10 + thumb_func_end MOD83_0222FF10 - thumb_func_start MOD83_0222FF80 + thumb_func_start MOD83_0222FF80 MOD83_0222FF80: ; 0x0222FF80 - push {r4, r5, lr} - sub sp, #0x14 - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r1, [r0, #0x48] - add r4, #0x48 - cmp r1, #0 - bne _0222FFB4 - mov r1, #0xa - str r1, [sp] - mov r1, #6 - str r1, [sp, #4] - mov r1, #4 - str r1, [sp, #8] - mov r2, #0 - mov r1, #0x6b - str r2, [sp, #0xc] - lsl r1, r1, #2 - str r1, [sp, #0x10] - ldr r0, [r0] - add r1, r4, #0 - mov r3, #0x17 - bl AddWindowParameterized + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r1, [r0, #0x48] + add r4, #0x48 + cmp r1, #0 + bne _0222FFB4 + mov r1, #0xa + str r1, [sp] + mov r1, #6 + str r1, [sp, #4] + mov r1, #4 + str r1, [sp, #8] + mov r2, #0 + mov r1, #0x6b + str r2, [sp, #0xc] + lsl r1, r1, #2 + str r1, [sp, #0x10] + ldr r0, [r0] + add r1, r4, #0 + mov r3, #0x17 + bl AddWindowParameterized _0222FFB4: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #4 - str r0, [sp] - ldr r1, _0222FFD4 ; =MOD83_0223ADB8 - add r0, r5, #0 - mov r2, #2 - add r3, r4, #0 - bl MOD83_022303B0 - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #4 + str r0, [sp] + ldr r1, _0222FFD4 ; =MOD83_0223ADB8 + add r0, r5, #0 + mov r2, #2 + add r3, r4, #0 + bl MOD83_022303B0 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 _0222FFD4: .word MOD83_0223ADB8 - thumb_func_end MOD83_0222FF80 + thumb_func_end MOD83_0222FF80 - thumb_func_start MOD83_0222FFD8 + thumb_func_start MOD83_0222FFD8 MOD83_0222FFD8: ; 0x0222FFD8 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - bl FUN_02033ED0 - ldr r0, _0223000C ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #1 - bne _02230004 - bl MOD83_0222F9DC + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + bl FUN_02033ED0 + ldr r0, _0223000C ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #1 + bne _02230004 + bl MOD83_0222F9DC _02230004: - add r0, r5, #0 - bl MOD83_02230118 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r5, #0 + bl MOD83_02230118 + pop {r3, r4, r5, pc} + .align 2, 0 _0223000C: .word 0x000015D4 - thumb_func_end MOD83_0222FFD8 + thumb_func_end MOD83_0222FFD8 - thumb_func_start MOD83_02230010 + thumb_func_start MOD83_02230010 MOD83_02230010: ; 0x02230010 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - ldr r0, _02230044 ; =MOD83_0223B888 - mov r1, #0x24 - str r1, [r0, #0x10] - mov r0, #0x20 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + ldr r0, _02230044 ; =MOD83_0223B888 + mov r1, #0x24 + str r1, [r0, #0x10] + mov r0, #0x20 + pop {r3, r4, r5, pc} + nop _02230044: .word MOD83_0223B888 - thumb_func_end MOD83_02230010 + thumb_func_end MOD83_02230010 - thumb_func_start MOD83_02230048 + thumb_func_start MOD83_02230048 MOD83_02230048: ; 0x02230048 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r0, #0x80 - ldr r0, [r0] - sub r0, r0, #2 - cmp r0, #2 - bhi _02230060 - mov r0, #0x30 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r0, #0x80 + ldr r0, [r0] + sub r0, r0, #2 + cmp r0, #2 + bhi _02230060 + mov r0, #0x30 + pop {r3, r4, r5, pc} _02230060: - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r4, #0x18 - add r0, r5, #0 - add r1, r4, #0 - mov r2, #7 - bl MOD83_0223050C - mov r0, #0x21 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_02230048 - - thumb_func_start MOD83_02230084 + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r4, #0x18 + add r0, r5, #0 + add r1, r4, #0 + mov r2, #7 + bl MOD83_0223050C + mov r0, #0x21 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_02230048 + + thumb_func_start MOD83_02230084 MOD83_02230084: ; 0x02230084 - push {r3, lr} - ldr r0, _022300A8 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x27 - beq _02230096 - cmp r0, #0x28 - beq _02230096 - cmp r0, #0x2f - bne _022300A4 + push {r3, lr} + ldr r0, _022300A8 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x27 + beq _02230096 + cmp r0, #0x28 + beq _02230096 + cmp r0, #0x2f + bne _022300A4 _02230096: - bl MOD83_02239A14 - cmp r0, #0 - beq _022300A4 - ldr r0, _022300A8 ; =MOD83_0223B888 - mov r1, #0x2a - str r1, [r0, #0x10] + bl MOD83_02239A14 + cmp r0, #0 + beq _022300A4 + ldr r0, _022300A8 ; =MOD83_0223B888 + mov r1, #0x2a + str r1, [r0, #0x10] _022300A4: - mov r0, #0x23 - pop {r3, pc} - .align 2, 0 + mov r0, #0x23 + pop {r3, pc} + .align 2, 0 _022300A8: .word MOD83_0223B888 - thumb_func_end MOD83_02230084 + thumb_func_end MOD83_02230084 - thumb_func_start MOD83_022300AC + thumb_func_start MOD83_022300AC MOD83_022300AC: ; 0x022300AC - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #3 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r1, #1 - ldr r0, _022300F0 ; =0x000015DC - lsl r1, r1, #0xc - str r1, [r4, r0] - ldr r0, _022300F4 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - mov r0, #0x1b - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #3 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r1, #1 + ldr r0, _022300F0 ; =0x000015DC + lsl r1, r1, #0xc + str r1, [r4, r0] + ldr r0, _022300F4 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + mov r0, #0x1b + pop {r3, r4, r5, pc} + nop _022300F0: .word 0x000015DC _022300F4: .word 0x00002620 - thumb_func_end MOD83_022300AC + thumb_func_end MOD83_022300AC - thumb_func_start MOD83_022300F8 + thumb_func_start MOD83_022300F8 MOD83_022300F8: ; 0x022300F8 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - add r0, #0x38 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022300F8 - - thumb_func_start MOD83_02230118 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + add r0, #0x38 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022300F8 + + thumb_func_start MOD83_02230118 MOD83_02230118: ; 0x02230118 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r6, r0, #0 - bl OverlayManager_GetData - add r5, r0, #0 - ldr r0, [r5, #4] - bl FUN_0202251C - ldr r0, _02230194 ; =0x000005C8 - ldr r1, [r5, r0] - cmp r1, #0x1e - bne _0223013E - mov r1, #1 - add r0, r0, #4 - str r1, [r5, r0] - add r0, r5, #0 - bl MOD83_022313E4 + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r0, #0 + bl OverlayManager_GetData + add r5, r0, #0 + ldr r0, [r5, #4] + bl FUN_0202251C + ldr r0, _02230194 ; =0x000005C8 + ldr r1, [r5, r0] + cmp r1, #0x1e + bne _0223013E + mov r1, #1 + add r0, r0, #4 + str r1, [r5, r0] + add r0, r5, #0 + bl MOD83_022313E4 _0223013E: - add r0, r5, #0 - add r0, #0x28 - mov r1, #0 - bl MOD83_0222FB44 - add r4, r5, #0 - ldr r0, [r5, #0x38] - add r4, #0x38 - cmp r0, #0 - bne _02230172 - mov r0, #9 - str r0, [sp] - mov r0, #0x10 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x49 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r5] - add r1, r4, #0 - mov r3, #0xf - bl AddWindowParameterized + add r0, r5, #0 + add r0, #0x28 + mov r1, #0 + bl MOD83_0222FB44 + add r4, r5, #0 + ldr r0, [r5, #0x38] + add r4, #0x38 + cmp r0, #0 + bne _02230172 + mov r0, #9 + str r0, [sp] + mov r0, #0x10 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x49 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r5] + add r1, r4, #0 + mov r3, #0xf + bl AddWindowParameterized _02230172: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - mov r0, #1 - str r0, [sp] - ldr r1, _02230198 ; =MOD83_0223AE20 - add r0, r6, #0 - mov r2, #4 - add r3, r4, #0 - bl MOD83_022303B0 - mov r0, #4 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + mov r0, #1 + str r0, [sp] + ldr r1, _02230198 ; =MOD83_0223AE20 + add r0, r6, #0 + mov r2, #4 + add r3, r4, #0 + bl MOD83_022303B0 + mov r0, #4 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 _02230194: .word 0x000005C8 _02230198: .word MOD83_0223AE20 - thumb_func_end MOD83_02230118 + thumb_func_end MOD83_02230118 - thumb_func_start MOD83_0223019C + thumb_func_start MOD83_0223019C MOD83_0223019C: ; 0x0223019C - push {r4, lr} - bl OverlayManager_GetData - ldr r1, _022301CC ; =0x000005C8 - add r4, r0, #0 - ldr r2, [r4, r1] - cmp r2, #0x1e - bne _022301B6 - mov r2, #1 - add r1, r1, #4 - str r2, [r4, r1] - bl MOD83_022313E4 + push {r4, lr} + bl OverlayManager_GetData + ldr r1, _022301CC ; =0x000005C8 + add r4, r0, #0 + ldr r2, [r4, r1] + cmp r2, #0x1e + bne _022301B6 + mov r2, #1 + add r1, r1, #4 + str r2, [r4, r1] + bl MOD83_022313E4 _022301B6: - ldr r2, _022301D0 ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x35 - mov r3, #2 - bl MOD83_0223886C - mov r0, #0 - mvn r0, r0 - pop {r4, pc} - nop + ldr r2, _022301D0 ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x35 + mov r3, #2 + bl MOD83_0223886C + mov r0, #0 + mvn r0, r0 + pop {r4, pc} + nop _022301CC: .word 0x000005C8 _022301D0: .word 0x000015D8 - thumb_func_end MOD83_0223019C + thumb_func_end MOD83_0223019C - thumb_func_start MOD83_022301D4 + thumb_func_start MOD83_022301D4 MOD83_022301D4: ; 0x022301D4 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, _02230204 ; =0x000005C8 - ldr r1, [r4, r0] - cmp r1, #0x1e - bne _022301EA - mov r1, #1 - add r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, _02230204 ; =0x000005C8 + ldr r1, [r4, r0] + cmp r1, #0x1e + bne _022301EA + mov r1, #1 + add r0, r0, #4 + str r1, [r4, r0] _022301EA: - mov r0, #1 - bl MOD83_02238860 - ldr r2, _02230208 ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x34 - mov r3, #2 - bl MOD83_0223886C - mov r0, #0 - mvn r0, r0 - pop {r4, pc} - .align 2, 0 + mov r0, #1 + bl MOD83_02238860 + ldr r2, _02230208 ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x34 + mov r3, #2 + bl MOD83_0223886C + mov r0, #0 + mvn r0, r0 + pop {r4, pc} + .align 2, 0 _02230204: .word 0x000005C8 _02230208: .word 0x000015D8 - thumb_func_end MOD83_022301D4 + thumb_func_end MOD83_022301D4 - thumb_func_start MOD83_0223020C + thumb_func_start MOD83_0223020C MOD83_0223020C: ; 0x0223020C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - add r5, r3, #0 - ldr r3, _02230254 ; =MOD83_0223A418 - add r7, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - add r2, sp, #0 - ldmia r3!, {r0, r1} - mov ip, r2 - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldr r0, [r3] - lsr r1, r6, #0xb - str r0, [r2] - add r0, sp, #0 - strb r1, [r0, #0x12] - lsr r1, r5, #0xe - strb r1, [r0, #0x13] - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - mov r2, ip - mov r3, #0 - bl InitBgFromTemplate - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - bl BgClearTilemapBufferAndCommit - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + add r5, r3, #0 + ldr r3, _02230254 ; =MOD83_0223A418 + add r7, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + add r2, sp, #0 + ldmia r3!, {r0, r1} + mov ip, r2 + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r3] + lsr r1, r6, #0xb + str r0, [r2] + add r0, sp, #0 + strb r1, [r0, #0x12] + lsr r1, r5, #0xe + strb r1, [r0, #0x13] + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + mov r2, ip + mov r3, #0 + bl InitBgFromTemplate + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + bl BgClearTilemapBufferAndCommit + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02230254: .word MOD83_0223A418 - thumb_func_end MOD83_0223020C + thumb_func_end MOD83_0223020C - thumb_func_start MOD83_02230258 + thumb_func_start MOD83_02230258 MOD83_02230258: ; 0x02230258 - push {r3, r4, r5, lr} - sub sp, #0x10 - ldr r5, _022302B0 ; =MOD83_0223A408 - add r3, sp, #0 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - mov r1, #0 - mov r2, #0xf - add r0, r4, #0 - lsl r2, r2, #0xc - add r3, r1, #0 - bl MOD83_0223020C - mov r1, #1 - mov r2, #0x3e - add r0, r4, #0 - lsl r2, r2, #0xa - lsl r3, r1, #0xf - bl MOD83_0223020C - mov r2, #0xe - add r0, r4, #0 - mov r1, #4 - lsl r2, r2, #0xa - mov r3, #0 - bl MOD83_0223020C - mov r2, #0x1e - mov r3, #1 - add r0, r4, #0 - mov r1, #5 - lsl r2, r2, #0xa - lsl r3, r3, #0xe - bl MOD83_0223020C - add sp, #0x10 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + sub sp, #0x10 + ldr r5, _022302B0 ; =MOD83_0223A408 + add r3, sp, #0 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + mov r1, #0 + mov r2, #0xf + add r0, r4, #0 + lsl r2, r2, #0xc + add r3, r1, #0 + bl MOD83_0223020C + mov r1, #1 + mov r2, #0x3e + add r0, r4, #0 + lsl r2, r2, #0xa + lsl r3, r1, #0xf + bl MOD83_0223020C + mov r2, #0xe + add r0, r4, #0 + mov r1, #4 + lsl r2, r2, #0xa + mov r3, #0 + bl MOD83_0223020C + mov r2, #0x1e + mov r3, #1 + add r0, r4, #0 + mov r1, #5 + lsl r2, r2, #0xa + lsl r3, r3, #0xe + bl MOD83_0223020C + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 _022302B0: .word MOD83_0223A408 - thumb_func_end MOD83_02230258 + thumb_func_end MOD83_02230258 - thumb_func_start MOD83_022302B4 + thumb_func_start MOD83_022302B4 MOD83_022302B4: ; 0x022302B4 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - mov r2, #4 - str r0, [sp] - mov r0, #0x56 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - add r2, r4, #0 - mov r3, #5 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #2 - add r2, r4, #0 - mov r3, #5 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #5 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #5 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022302B4 - - thumb_func_start MOD83_02230330 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + mov r2, #4 + str r0, [sp] + mov r0, #0x56 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + add r2, r4, #0 + mov r3, #5 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #2 + add r2, r4, #0 + mov r3, #5 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #5 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #5 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022302B4 + + thumb_func_start MOD83_02230330 MOD83_02230330: ; 0x02230330 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0x8c - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - add r2, r4, #0 - add r3, r1, #0 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x56 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #2 - add r2, r4, #0 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #8 - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #1 - bl BgCommitTilemapBufferToVram - add r0, r4, #0 - bl MOD83_022302B4 - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02230330 - - thumb_func_start MOD83_022303B0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0x8c + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + add r2, r4, #0 + add r3, r1, #0 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x56 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #2 + add r2, r4, #0 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #8 + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #1 + bl BgCommitTilemapBufferToVram + add r0, r4, #0 + bl MOD83_022302B4 + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02230330 + + thumb_func_start MOD83_022303B0 MOD83_022303B0: ; 0x022303B0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x28 - str r0, [sp] - add r5, r1, #0 - add r7, r2, #0 - str r3, [sp, #4] - bl OverlayManager_GetData - add r4, r0, #0 - ldr r0, [r4, #0x7c] - cmp r0, #0 - beq _022303CC - bl ListMenuItems_dtor + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x28 + str r0, [sp] + add r5, r1, #0 + add r7, r2, #0 + str r3, [sp, #4] + bl OverlayManager_GetData + add r4, r0, #0 + ldr r0, [r4, #0x7c] + cmp r0, #0 + beq _022303CC + bl ListMenuItems_dtor _022303CC: - add r0, r7, #0 - mov r1, #0x56 - bl ListMenuItems_ctor - str r0, [r4, #0x7c] - ldr r2, _0223045C ; =0x00000172 - mov r0, #0 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - mov r6, #0 - str r0, [r4, #0x10] - cmp r7, #0 - ble _022303FE + add r0, r7, #0 + mov r1, #0x56 + bl ListMenuItems_ctor + str r0, [r4, #0x7c] + ldr r2, _0223045C ; =0x00000172 + mov r0, #0 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + mov r6, #0 + str r0, [r4, #0x10] + cmp r7, #0 + ble _022303FE _022303EA: - ldr r0, [r4, #0x7c] - ldr r1, [r4, #0x10] - ldr r2, [r5] - ldr r3, [r5, #4] - bl ListMenuItems_AppendFromMsgData - add r6, r6, #1 - add r5, #8 - cmp r6, r7 - blt _022303EA + ldr r0, [r4, #0x7c] + ldr r1, [r4, #0x10] + ldr r2, [r5] + ldr r3, [r5, #4] + bl ListMenuItems_AppendFromMsgData + add r6, r6, #1 + add r5, #8 + cmp r6, r7 + blt _022303EA _022303FE: - ldr r0, [r4, #0x10] - bl DestroyMsgData - ldr r3, _02230460 ; =MOD83_0223AE00 - add r2, sp, #8 - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldmia r3!, {r0, r1} - stmia r2!, {r0, r1} - ldr r0, [r4, #0x7c] - str r0, [sp, #8] - add r0, sp, #8 - strh r7, [r0, #0x12] - ldrh r1, [r0, #0x12] - strh r1, [r0, #0x10] - ldr r0, [sp, #4] - str r0, [sp, #0x14] - ldr r0, [r4, #0x78] - cmp r0, #0 - beq _02230436 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, [r4, #0x10] + bl DestroyMsgData + ldr r3, _02230460 ; =MOD83_0223AE00 + add r2, sp, #8 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r4, #0x7c] + str r0, [sp, #8] + add r0, sp, #8 + strh r7, [r0, #0x12] + ldrh r1, [r0, #0x12] + strh r1, [r0, #0x10] + ldr r0, [sp, #4] + str r0, [sp, #0x14] + ldr r0, [r4, #0x78] + cmp r0, #0 + beq _02230436 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _02230436: - mov r1, #0 - add r0, sp, #8 - add r2, r1, #0 - mov r3, #0x56 - bl ListMenuInit - str r0, [r4, #0x78] - mov r0, #0 - ldr r2, [sp, #0x40] - mvn r0, r0 - cmp r2, r0 - beq _02230458 - add r4, #0x18 - ldr r0, [sp] - add r1, r4, #0 - bl MOD83_0223050C + mov r1, #0 + add r0, sp, #8 + add r2, r1, #0 + mov r3, #0x56 + bl ListMenuInit + str r0, [r4, #0x78] + mov r0, #0 + ldr r2, [sp, #0x40] + mvn r0, r0 + cmp r2, r0 + beq _02230458 + add r4, #0x18 + ldr r0, [sp] + add r1, r4, #0 + bl MOD83_0223050C _02230458: - add sp, #0x28 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add sp, #0x28 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0223045C: .word 0x00000172 _02230460: .word MOD83_0223AE00 - thumb_func_end MOD83_022303B0 + thumb_func_end MOD83_022303B0 - thumb_func_start MOD83_02230464 + thumb_func_start MOD83_02230464 MOD83_02230464: ; 0x02230464 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x40 - str r0, [sp, #0x14] - str r1, [sp, #0x1c] - str r2, [sp, #0x18] - bl OverlayManager_GetData - add r7, r0, #0 - ldr r0, [r7, #4] - mov r5, #0 - bl FUN_0202251C - ldr r1, _02230508 ; =MOD83_0223AD98 - add r4, r7, #0 - ldr r2, [r1, #0x50] - ldr r1, [r1, #0x54] - add r4, #0x28 - add r5, r5, #1 - str r2, [sp, #0x20] - str r1, [sp, #0x24] - bl FUN_0202AE70 - cmp r0, #0 - beq _022304A8 - lsl r6, r5, #3 - add r0, sp, #0x20 - add r1, r0, r6 - ldr r0, _02230508 ; =MOD83_0223AD98 - add r5, r5, #1 - ldr r3, [r0, #0x58] - ldr r2, [r0, #0x5c] - add r0, sp, #0x20 - str r3, [r0, r6] - str r2, [r1, #4] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x40 + str r0, [sp, #0x14] + str r1, [sp, #0x1c] + str r2, [sp, #0x18] + bl OverlayManager_GetData + add r7, r0, #0 + ldr r0, [r7, #4] + mov r5, #0 + bl FUN_0202251C + ldr r1, _02230508 ; =MOD83_0223AD98 + add r4, r7, #0 + ldr r2, [r1, #0x50] + ldr r1, [r1, #0x54] + add r4, #0x28 + add r5, r5, #1 + str r2, [sp, #0x20] + str r1, [sp, #0x24] + bl FUN_0202AE70 + cmp r0, #0 + beq _022304A8 + lsl r6, r5, #3 + add r0, sp, #0x20 + add r1, r0, r6 + ldr r0, _02230508 ; =MOD83_0223AD98 + add r5, r5, #1 + ldr r3, [r0, #0x58] + ldr r2, [r0, #0x5c] + add r0, sp, #0x20 + str r3, [r0, r6] + str r2, [r1, #4] _022304A8: - lsl r6, r5, #3 - add r0, sp, #0x20 - add r1, r0, r6 - ldr r0, _02230508 ; =MOD83_0223AD98 - ldr r3, [r0, #0x60] - ldr r2, [r0, #0x64] - add r0, sp, #0x20 - str r3, [r0, r6] - str r2, [r1, #4] - ldr r0, [r4] - cmp r0, #0 - bne _022304E6 - mov r0, #7 - str r0, [sp] - mov r0, #0x10 - str r0, [sp, #4] - add r0, r5, #1 - lsl r0, r0, #0x19 - lsr r0, r0, #0x18 - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - mov r2, #0 - lsl r0, r0, #0x10 - str r2, [sp, #0xc] - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, [r7] - add r1, r4, #0 - mov r3, #8 - bl AddWindowParameterized + lsl r6, r5, #3 + add r0, sp, #0x20 + add r1, r0, r6 + ldr r0, _02230508 ; =MOD83_0223AD98 + ldr r3, [r0, #0x60] + ldr r2, [r0, #0x64] + add r0, sp, #0x20 + str r3, [r0, r6] + str r2, [r1, #4] + ldr r0, [r4] + cmp r0, #0 + bne _022304E6 + mov r0, #7 + str r0, [sp] + mov r0, #0x10 + str r0, [sp, #4] + add r0, r5, #1 + lsl r0, r0, #0x19 + lsr r0, r0, #0x18 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + mov r2, #0 + lsl r0, r0, #0x10 + str r2, [sp, #0xc] + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, [r7] + add r1, r4, #0 + mov r3, #8 + bl AddWindowParameterized _022304E6: - add r0, r4, #0 - mov r1, #1 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - ldr r0, [sp, #0x18] - add r1, sp, #0x20 - str r0, [sp] - ldr r0, [sp, #0x14] - add r2, r5, #1 - add r3, r4, #0 - bl MOD83_022303B0 - add sp, #0x40 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r4, #0 + mov r1, #1 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + ldr r0, [sp, #0x18] + add r1, sp, #0x20 + str r0, [sp] + ldr r0, [sp, #0x14] + add r2, r5, #1 + add r3, r4, #0 + bl MOD83_022303B0 + add sp, #0x40 + pop {r3, r4, r5, r6, r7, pc} + nop _02230508: .word MOD83_0223AD98 - thumb_func_end MOD83_02230464 + thumb_func_end MOD83_02230464 - thumb_func_start MOD83_0223050C + thumb_func_start MOD83_0223050C MOD83_0223050C: ; 0x0223050C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r1, #0 - add r7, r2, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r2, _0223059C ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - str r0, [r4, #0x10] - mov r0, #0x56 - bl ScrStrBufs_new - str r0, [r4, #0xc] - mov r0, #1 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - ldr r6, [r4, #0x14] - cmp r6, #0 - bne _02230554 - ldr r0, [r4, #0xc] - ldr r1, [r4, #0x10] - add r2, r7, #0 - mov r3, #0x56 - bl ReadMsgData_ExpandPlaceholders - add r6, r0, #0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r1, #0 + add r7, r2, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r2, _0223059C ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + str r0, [r4, #0x10] + mov r0, #0x56 + bl ScrStrBufs_new + str r0, [r4, #0xc] + mov r0, #1 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + ldr r6, [r4, #0x14] + cmp r6, #0 + bne _02230554 + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x10] + add r2, r7, #0 + mov r3, #0x56 + bl ReadMsgData_ExpandPlaceholders + add r6, r0, #0 _02230554: - mov r3, #0 - str r3, [sp] - ldr r0, [r4, #0x68] - mov r1, #1 - str r0, [sp, #4] - ldr r0, _022305A0 ; =0x0001020F - add r2, r6, #0 - str r0, [sp, #8] - str r3, [sp, #0xc] - add r0, r5, #0 - bl AddTextPrinterParameterized2 - str r0, [r4, #0x6c] - ldr r0, [r4, #0x14] - cmp r0, #0 - bne _0223057A - add r0, r6, #0 - bl String_dtor + mov r3, #0 + str r3, [sp] + ldr r0, [r4, #0x68] + mov r1, #1 + str r0, [sp, #4] + ldr r0, _022305A0 ; =0x0001020F + add r2, r6, #0 + str r0, [sp, #8] + str r3, [sp, #0xc] + add r0, r5, #0 + bl AddTextPrinterParameterized2 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _0223057A + add r0, r6, #0 + bl String_dtor _0223057A: - add r0, r5, #0 - mov r1, #0 - mov r2, #1 - mov r3, #2 - bl FUN_0200D0BC - ldr r0, [r4, #0x10] - bl DestroyMsgData - ldr r0, [r4, #0xc] - bl ScrStrBufs_delete - mov r0, #0xff - str r0, [r4, #0x68] - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r5, #0 + mov r1, #0 + mov r2, #1 + mov r3, #2 + bl FUN_0200D0BC + ldr r0, [r4, #0x10] + bl DestroyMsgData + ldr r0, [r4, #0xc] + bl ScrStrBufs_delete + mov r0, #0xff + str r0, [r4, #0x68] + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _0223059C: .word 0x00000172 _022305A0: .word 0x0001020F - thumb_func_end MOD83_0223050C + thumb_func_end MOD83_0223050C - thumb_func_start MOD83_022305A4 + thumb_func_start MOD83_022305A4 MOD83_022305A4: ; 0x022305A4 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - mov r0, #0x25 - mov r1, #0x56 - bl String_ctor - add r1, r6, #0 - mov r2, #0x24 - add r4, r0, #0 - bl CopyU16ArrayToStringN - mov r0, #0 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - mov r1, #0 - str r1, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02230600 ; =0x0001020F - add r2, r4, #0 - str r0, [sp, #8] - add r0, r5, #0 - add r3, r1, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - mov r1, #0 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CCA4 - add r0, r4, #0 - bl String_dtor - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + mov r0, #0x25 + mov r1, #0x56 + bl String_ctor + add r1, r6, #0 + mov r2, #0x24 + add r4, r0, #0 + bl CopyU16ArrayToStringN + mov r0, #0 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02230600 ; =0x0001020F + add r2, r4, #0 + str r0, [sp, #8] + add r0, r5, #0 + add r3, r1, #0 + str r1, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + mov r1, #0 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CCA4 + add r0, r4, #0 + bl String_dtor + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02230600: .word 0x0001020F - thumb_func_end MOD83_022305A4 + thumb_func_end MOD83_022305A4 - thumb_func_start MOD83_02230604 + thumb_func_start MOD83_02230604 MOD83_02230604: ; 0x02230604 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - ldr r0, [r0, #0x78] - bl ListMenu_ProcessInput - add r4, r0, #0 - mov r0, #1 - mvn r0, r0 - cmp r4, r0 - beq _02230628 - add r0, r0, #1 - cmp r4, r0 - beq _0223065E - b _02230642 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + ldr r0, [r0, #0x78] + bl ListMenu_ProcessInput + add r4, r0, #0 + mov r0, #1 + mvn r0, r0 + cmp r4, r0 + beq _02230628 + add r0, r0, #1 + cmp r4, r0 + beq _0223065E + b _02230642 _02230628: - ldr r0, _02230660 ; =0x000005DC - bl PlaySE - cmp r6, #0 - beq _0223065E - add r0, r7, #0 - blx r6 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223065E - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02230660 ; =0x000005DC + bl PlaySE + cmp r6, #0 + beq _0223065E + add r0, r7, #0 + blx r6 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223065E + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _02230642: - ldr r0, _02230660 ; =0x000005DC - bl PlaySE - cmp r4, #0 - beq _0223065E - ldr r0, _02230664 ; =MOD83_0223B888 - str r4, [r0, #0xc] - add r0, r7, #0 - blx r4 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223065E - str r0, [r5] + ldr r0, _02230660 ; =0x000005DC + bl PlaySE + cmp r4, #0 + beq _0223065E + ldr r0, _02230664 ; =MOD83_0223B888 + str r4, [r0, #0xc] + add r0, r7, #0 + blx r4 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223065E + str r0, [r5] _0223065E: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02230660: .word 0x000005DC _02230664: .word MOD83_0223B888 - thumb_func_end MOD83_02230604 + thumb_func_end MOD83_02230604 - thumb_func_start MOD83_02230668 + thumb_func_start MOD83_02230668 MOD83_02230668: ; 0x02230668 - push {r4, r5, lr} - sub sp, #0x14 - add r5, r0, #0 - add r4, r1, #0 - bl FUN_0201BD5C - mov r0, #0 - add r1, r0, #0 - mov r2, #0x56 - bl FUN_02002ED0 - mov r0, #0 - mov r1, #0x20 - mov r2, #0x56 - bl FUN_02002ED0 - ldr r0, [r4, #8] - bl Options_GetFrame - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #1 - mov r3, #2 - bl FUN_0200CD68 - mov r0, #1 - str r0, [sp] - mov r0, #0x56 - str r0, [sp, #4] - ldr r0, [r4] - mov r1, #0 - mov r2, #0x1f - mov r3, #3 - bl FUN_0200CB00 - mov r0, #5 - ldr r1, _02230710 ; =0x00007D8C - lsl r0, r0, #0x18 - strh r1, [r0] - add r0, r4, #0 - add r0, #0x18 - bl WindowIsInUse - cmp r0, #0 - bne _022306EC - mov r0, #0x13 - str r0, [sp] - mov r0, #0x1b - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - add r1, r4, #0 - str r2, [sp, #0xc] - mov r0, #0x28 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x18 - mov r3, #2 - bl AddWindowParameterized + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + add r4, r1, #0 + bl FUN_0201BD5C + mov r0, #0 + add r1, r0, #0 + mov r2, #0x56 + bl FUN_02002ED0 + mov r0, #0 + mov r1, #0x20 + mov r2, #0x56 + bl FUN_02002ED0 + ldr r0, [r4, #8] + bl Options_GetFrame + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #1 + mov r3, #2 + bl FUN_0200CD68 + mov r0, #1 + str r0, [sp] + mov r0, #0x56 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #0 + mov r2, #0x1f + mov r3, #3 + bl FUN_0200CB00 + mov r0, #5 + ldr r1, _02230710 ; =0x00007D8C + lsl r0, r0, #0x18 + strh r1, [r0] + add r0, r4, #0 + add r0, #0x18 + bl WindowIsInUse + cmp r0, #0 + bne _022306EC + mov r0, #0x13 + str r0, [sp] + mov r0, #0x1b + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + add r1, r4, #0 + str r2, [sp, #0xc] + mov r0, #0x28 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x18 + mov r3, #2 + bl AddWindowParameterized _022306EC: - add r1, r4, #0 - add r0, r5, #0 - add r1, #0x18 - mov r2, #0 - bl MOD83_0223050C - add r0, r5, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - ldr r0, [r4] - bl MOD83_02230330 - mov r0, #1 - add sp, #0x14 - pop {r4, r5, pc} - nop + add r1, r4, #0 + add r0, r5, #0 + add r1, #0x18 + mov r2, #0 + bl MOD83_0223050C + add r0, r5, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + ldr r0, [r4] + bl MOD83_02230330 + mov r0, #1 + add sp, #0x14 + pop {r4, r5, pc} + nop _02230710: .word 0x00007D8C - thumb_func_end MOD83_02230668 + thumb_func_end MOD83_02230668 - thumb_func_start MOD83_02230714 + thumb_func_start MOD83_02230714 MOD83_02230714: ; 0x02230714 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - ldr r1, _022307A4 ; =0x000015DC - add r0, r6, #0 - add r1, r4, r1 - bl MOD83_02239F34 - cmp r0, #4 - bhi _022307A2 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + ldr r1, _022307A4 ; =0x000015DC + add r0, r6, #0 + add r1, r4, r1 + bl MOD83_02239F34 + cmp r0, #4 + bhi _022307A2 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223073A: ; jump table - .short _022307A2 - _0223073A - 2 ; case 0 - .short _02230744 - _0223073A - 2 ; case 1 - .short _02230768 - _0223073A - 2 ; case 2 - .short _02230768 - _0223073A - 2 ; case 3 - .short _02230776 - _0223073A - 2 ; case 4 + .short _022307A2 - _0223073A - 2 ; case 0 + .short _02230744 - _0223073A - 2 ; case 1 + .short _02230768 - _0223073A - 2 ; case 2 + .short _02230768 - _0223073A - 2 ; case 3 + .short _02230776 - _0223073A - 2 ; case 4 _02230744: - ldr r1, _022307A8 ; =0x000015FC - add r0, r4, #0 - mov r2, #0xea - add r0, #0x8c - add r1, r4, r1 - lsl r2, r2, #2 - bl memcpy - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x1b - add r4, #0x84 - str r0, [r4] - mov r0, #0x13 - str r0, [r5] - pop {r4, r5, r6, pc} + ldr r1, _022307A8 ; =0x000015FC + add r0, r4, #0 + mov r2, #0xea + add r0, #0x8c + add r1, r4, r1 + lsl r2, r2, #2 + bl memcpy + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x1b + add r4, #0x84 + str r0, [r4] + mov r0, #0x13 + str r0, [r5] + pop {r4, r5, r6, pc} _02230768: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x11 - str r0, [r5] - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x11 + str r0, [r5] + pop {r4, r5, r6, pc} _02230776: - ldr r0, _022307AC ; =0x00002624 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _022307AC ; =0x00002624 - add r0, r4, r0 - bl RemoveWindow - ldr r0, [r4] - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r0, _022307B0 ; =0x000005DC - bl PlaySE - add r0, r6, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - str r0, [r5] + ldr r0, _022307AC ; =0x00002624 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _022307AC ; =0x00002624 + add r0, r4, r0 + bl RemoveWindow + ldr r0, [r4] + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r0, _022307B0 ; =0x000005DC + bl PlaySE + add r0, r6, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + str r0, [r5] _022307A2: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _022307A4: .word 0x000015DC _022307A8: .word 0x000015FC _022307AC: .word 0x00002624 _022307B0: .word 0x000005DC - thumb_func_end MOD83_02230714 + thumb_func_end MOD83_02230714 - thumb_func_start MOD83_022307B4 + thumb_func_start MOD83_022307B4 MOD83_022307B4: ; 0x022307B4 - push {r3, r4, r5, r6, lr} - sub sp, #0x5c - add r5, r0, #0 - ldr r0, _0223083C ; =0x00002610 - ldr r4, [r5, r0] - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - bne _022307C8 - mov r4, #0xb + push {r3, r4, r5, r6, lr} + sub sp, #0x5c + add r5, r0, #0 + ldr r0, _0223083C ; =0x00002610 + ldr r4, [r5, r0] + mov r0, #0 + mvn r0, r0 + cmp r4, r0 + bne _022307C8 + mov r4, #0xb _022307C8: - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, [r5] - mov r1, #0 - bl BgClearTilemapBufferAndCommit - mov r0, #0x56 - bl ScrStrBufs_new - mov r1, #2 - str r1, [sp] - mov r1, #1 - str r1, [sp, #4] - ldr r2, _02230840 ; =0x00002614 - mov r1, #0 - ldr r2, [r5, r2] - mov r3, #5 - add r6, r0, #0 - bl BufferIntegerAsString - mov r0, #0x1f - ldr r1, _02230844 ; =0x00002624 - str r0, [sp] - mov r0, #3 - str r0, [sp, #4] - ldr r3, _02230848 ; =0x00000265 - add r0, sp, #8 - add r1, r5, r1 - mov r2, #1 - bl MOD83_022388E4 - add r0, sp, #8 - mov r1, #0x18 - mov r2, #0x10 - mov r3, #0x64 - bl MOD83_02238934 - add r0, sp, #8 - mov r1, #0 - mov r2, #1 - bl MOD83_0223893C - str r6, [sp, #0x1c] - str r4, [sp] - mov r2, #4 - ldr r0, [r5] - add r1, sp, #8 - add r3, r2, #0 - bl MOD83_02238A38 - add r0, r6, #0 - bl ScrStrBufs_delete - add sp, #0x5c - pop {r3, r4, r5, r6, pc} - nop + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, [r5] + mov r1, #0 + bl BgClearTilemapBufferAndCommit + mov r0, #0x56 + bl ScrStrBufs_new + mov r1, #2 + str r1, [sp] + mov r1, #1 + str r1, [sp, #4] + ldr r2, _02230840 ; =0x00002614 + mov r1, #0 + ldr r2, [r5, r2] + mov r3, #5 + add r6, r0, #0 + bl BufferIntegerAsString + mov r0, #0x1f + ldr r1, _02230844 ; =0x00002624 + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + ldr r3, _02230848 ; =0x00000265 + add r0, sp, #8 + add r1, r5, r1 + mov r2, #1 + bl MOD83_022388E4 + add r0, sp, #8 + mov r1, #0x18 + mov r2, #0x10 + mov r3, #0x64 + bl MOD83_02238934 + add r0, sp, #8 + mov r1, #0 + mov r2, #1 + bl MOD83_0223893C + str r6, [sp, #0x1c] + str r4, [sp] + mov r2, #4 + ldr r0, [r5] + add r1, sp, #8 + add r3, r2, #0 + bl MOD83_02238A38 + add r0, r6, #0 + bl ScrStrBufs_delete + add sp, #0x5c + pop {r3, r4, r5, r6, pc} + nop _0223083C: .word 0x00002610 _02230840: .word 0x00002614 _02230844: .word 0x00002624 _02230848: .word 0x00000265 - thumb_func_end MOD83_022307B4 + thumb_func_end MOD83_022307B4 - thumb_func_start MOD83_0223084C + thumb_func_start MOD83_0223084C MOD83_0223084C: ; 0x0223084C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r1, r0, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #3 - bne _02230862 - mov r4, #0x15 - b _0223088C + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r1, r0, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #3 + bne _02230862 + mov r4, #0x15 + b _0223088C _02230862: - cmp r0, #4 - bne _0223086A - mov r4, #0x19 - b _0223088C + cmp r0, #4 + bne _0223086A + mov r4, #0x19 + b _0223088C _0223086A: - cmp r0, #2 - bne _02230872 - mov r4, #0x16 - b _0223088C + cmp r0, #2 + bne _02230872 + mov r4, #0x16 + b _0223088C _02230872: - cmp r0, #1 - bne _0223087A - mov r4, #0x1b - b _0223088C + cmp r0, #1 + bne _0223087A + mov r4, #0x1b + b _0223088C _0223087A: - cmp r0, #5 - bne _0223088C - add r0, r5, #0 - add r1, #0x18 - mov r2, #9 - mov r3, #0x33 - bl MOD83_0223089C - pop {r3, r4, r5, pc} + cmp r0, #5 + bne _0223088C + add r0, r5, #0 + add r1, #0x18 + mov r2, #9 + mov r3, #0x33 + bl MOD83_0223089C + pop {r3, r4, r5, pc} _0223088C: - add r0, r5, #0 - add r1, #0x18 - add r2, r4, #0 - mov r3, #0x32 - bl MOD83_0223089C - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_0223084C - - thumb_func_start MOD83_0223089C + add r0, r5, #0 + add r1, #0x18 + add r2, r4, #0 + mov r3, #0x32 + bl MOD83_0223089C + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_0223084C + + thumb_func_start MOD83_0223089C MOD83_0223089C: ; 0x0223089C - push {r4, r5, r6, r7, lr} - sub sp, #0xc - str r0, [sp] - add r6, r1, #0 - add r5, r2, #0 - str r3, [sp, #4] - bl OverlayManager_GetData - add r4, r0, #0 - cmp r6, #0 - beq _022308F8 - cmp r5, #0 - beq _022308F8 - ldr r2, _02230920 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x56 - bl NewMsgDataFromNarc - add r7, r0, #0 - mov r0, #0x56 - bl ScrStrBufs_new - add r1, r7, #0 - add r2, r5, #0 - mov r3, #0x56 - str r0, [sp, #8] - bl ReadMsgData_ExpandPlaceholders - str r0, [r4, #0x14] - mov r0, #1 - str r0, [r4, #0x68] - ldr r0, [sp] - add r1, r6, #0 - add r2, r5, #0 - bl MOD83_0223050C - ldr r0, [sp, #4] - str r0, [r4, #0x74] - ldr r0, [sp, #8] - bl ScrStrBufs_delete - add r0, r7, #0 - bl DestroyMsgData - b _02230918 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + str r0, [sp] + add r6, r1, #0 + add r5, r2, #0 + str r3, [sp, #4] + bl OverlayManager_GetData + add r4, r0, #0 + cmp r6, #0 + beq _022308F8 + cmp r5, #0 + beq _022308F8 + ldr r2, _02230920 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x56 + bl NewMsgDataFromNarc + add r7, r0, #0 + mov r0, #0x56 + bl ScrStrBufs_new + add r1, r7, #0 + add r2, r5, #0 + mov r3, #0x56 + str r0, [sp, #8] + bl ReadMsgData_ExpandPlaceholders + str r0, [r4, #0x14] + mov r0, #1 + str r0, [r4, #0x68] + ldr r0, [sp] + add r1, r6, #0 + add r2, r5, #0 + bl MOD83_0223050C + ldr r0, [sp, #4] + str r0, [r4, #0x74] + ldr r0, [sp, #8] + bl ScrStrBufs_delete + add r0, r7, #0 + bl DestroyMsgData + b _02230918 _022308F8: - ldr r0, [r4, #0x6c] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _02230918 - ldr r0, [r4, #0x14] - bl String_dtor - mov r0, #0 - str r0, [r4, #0x14] - str r0, [r4, #0x68] - add sp, #0xc - ldr r0, [r4, #0x74] - pop {r4, r5, r6, r7, pc} + ldr r0, [r4, #0x6c] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _02230918 + ldr r0, [r4, #0x14] + bl String_dtor + mov r0, #0 + str r0, [r4, #0x14] + str r0, [r4, #0x68] + add sp, #0xc + ldr r0, [r4, #0x74] + pop {r4, r5, r6, r7, pc} _02230918: - mov r0, #0x31 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - nop + mov r0, #0x31 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + nop _02230920: .word 0x00000172 - thumb_func_end MOD83_0223089C + thumb_func_end MOD83_0223089C - thumb_func_start MOD83_02230924 + thumb_func_start MOD83_02230924 MOD83_02230924: ; 0x02230924 - push {r3, lr} - ldr r1, _02230950 ; =0x000015D4 - ldr r0, [r0, r1] - cmp r0, #4 - bhi _0223094C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r1, _02230950 ; =0x000015D4 + ldr r0, [r0, r1] + cmp r0, #4 + bhi _0223094C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223093A: ; jump table - .short _0223094C - _0223093A - 2 ; case 0 - .short _02230944 - _0223093A - 2 ; case 1 - .short _0223094C - _0223093A - 2 ; case 2 - .short _0223094C - _0223093A - 2 ; case 3 - .short _0223094C - _0223093A - 2 ; case 4 + .short _0223094C - _0223093A - 2 ; case 0 + .short _02230944 - _0223093A - 2 ; case 1 + .short _0223094C - _0223093A - 2 ; case 2 + .short _0223094C - _0223093A - 2 ; case 3 + .short _0223094C - _0223093A - 2 ; case 4 _02230944: - bl MOD83_0222F9DC - bl FUN_02033ED0 + bl MOD83_0222F9DC + bl FUN_02033ED0 _0223094C: - pop {r3, pc} - nop + pop {r3, pc} + nop _02230950: .word 0x000015D4 - thumb_func_end MOD83_02230924 + thumb_func_end MOD83_02230924 - thumb_func_start MOD83_02230954 + thumb_func_start MOD83_02230954 MOD83_02230954: ; 0x02230954 - push {r3, r4, r5, lr} - add r5, r0, #0 - bl MOD83_02231370 - mov r0, #3 - mov r1, #0x56 - lsl r2, r0, #0x10 - bl CreateHeap - ldr r1, _022309FC ; =0x00002998 - add r0, r5, #0 - mov r2, #0x56 - bl OverlayManager_CreateAndGetData - ldr r2, _022309FC ; =0x00002998 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x56 - bl BgConfig_Alloc - str r0, [r4] - bl GX_DisableEngineALayers - bl GX_DisableEngineBLayers - bl MOD83_022331C0 - ldr r0, [r4] - bl MOD83_02230258 - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - ldr r1, _02230A00 ; =0x00000496 - mov r0, #0xa - mov r2, #1 - bl FUN_0200433C - mov r0, #0x56 - bl MOD83_SetHeapId - bl MOD83_02238700 - cmp r0, #0 - beq _022309D0 - ldr r0, _02230A04 ; =0x000015D4 - mov r1, #2 - str r1, [r4, r0] - ldr r0, _02230A08 ; =gGameVersion - ldrb r0, [r0] - bl FUN_02016438 - mov r0, #1 - bl MOD83_02239450 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl MOD83_02231370 + mov r0, #3 + mov r1, #0x56 + lsl r2, r0, #0x10 + bl CreateHeap + ldr r1, _022309FC ; =0x00002998 + add r0, r5, #0 + mov r2, #0x56 + bl OverlayManager_CreateAndGetData + ldr r2, _022309FC ; =0x00002998 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x56 + bl BgConfig_Alloc + str r0, [r4] + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers + bl MOD83_022331C0 + ldr r0, [r4] + bl MOD83_02230258 + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + ldr r1, _02230A00 ; =0x00000496 + mov r0, #0xa + mov r2, #1 + bl FUN_0200433C + mov r0, #0x56 + bl MOD83_SetHeapId + bl MOD83_02238700 + cmp r0, #0 + beq _022309D0 + ldr r0, _02230A04 ; =0x000015D4 + mov r1, #2 + str r1, [r4, r0] + ldr r0, _02230A08 ; =gGameVersion + ldrb r0, [r0] + bl FUN_02016438 + mov r0, #1 + bl MOD83_02239450 _022309D0: - ldr r0, _02230A0C ; =0x000005C8 - mov r1, #0x1d - str r1, [r4, r0] - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #4] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #8] - mov r0, #0xff - mov r2, #3 - str r0, [r4, #0x68] - mov r0, #0 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - mov r0, #1 - pop {r3, r4, r5, pc} - nop + ldr r0, _02230A0C ; =0x000005C8 + mov r1, #0x1d + str r1, [r4, r0] + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #4] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #8] + mov r0, #0xff + mov r2, #3 + str r0, [r4, #0x68] + mov r0, #0 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + mov r0, #1 + pop {r3, r4, r5, pc} + nop _022309FC: .word 0x00002998 _02230A00: .word 0x00000496 _02230A04: .word 0x000015D4 _02230A08: .word gGameVersion _02230A0C: .word 0x000005C8 - thumb_func_end MOD83_02230954 + thumb_func_end MOD83_02230954 - thumb_func_start MOD83_02230A10 + thumb_func_start MOD83_02230A10 MOD83_02230A10: ; 0x02230A10 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r6, r0, #0 - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - bl CTRDG_IsExisting - ldr r0, _02230D5C ; =0x000005C8 - ldr r0, [r4, r0] - cmp r0, #0x1d - beq _02230A30 - add r0, r4, #0 - bl MOD83_022313E4 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + bl CTRDG_IsExisting + ldr r0, _02230D5C ; =0x000005C8 + ldr r0, [r4, r0] + cmp r0, #0x1d + beq _02230A30 + add r0, r4, #0 + bl MOD83_022313E4 _02230A30: - ldr r3, [r5] - cmp r3, #0x38 - bls _02230A3A - bl _02231334 + ldr r3, [r5] + cmp r3, #0x38 + bls _02230A3A + bl _02231334 _02230A3A: - add r0, r3, r3 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r3, r3 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02230A46: ; jump table - .short _02230AB8 - _02230A46 - 2 ; case 0 - .short _02230ACA - _02230A46 - 2 ; case 1 - .short _02230AE8 - _02230A46 - 2 ; case 2 - .short _02230AF2 - _02230A46 - 2 ; case 3 - .short _02230B00 - _02230A46 - 2 ; case 4 - .short _02230B0E - _02230A46 - 2 ; case 5 - .short _02231334 - _02230A46 - 2 ; case 6 - .short _02230CA0 - _02230A46 - 2 ; case 7 - .short _02230D50 - _02230A46 - 2 ; case 8 - .short _02230D8C - _02230A46 - 2 ; case 9 - .short _02230E4C - _02230A46 - 2 ; case 10 - .short _02230E9A - _02230A46 - 2 ; case 11 - .short _02230EBC - _02230A46 - 2 ; case 12 - .short _02230F4C - _02230A46 - 2 ; case 13 - .short _02230FA2 - _02230A46 - 2 ; case 14 - .short _02230FCE - _02230A46 - 2 ; case 15 - .short _0223100E - _02230A46 - 2 ; case 16 - .short _02231030 - _02230A46 - 2 ; case 17 - .short _0223105A - _02230A46 - 2 ; case 18 - .short _0223107A - _02230A46 - 2 ; case 19 - .short _0223110E - _02230A46 - 2 ; case 20 - .short _0223111A - _02230A46 - 2 ; case 21 - .short _0223113C - _02230A46 - 2 ; case 22 - .short _02231172 - _02230A46 - 2 ; case 23 - .short _0223118C - _02230A46 - 2 ; case 24 - .short _02231204 - _02230A46 - 2 ; case 25 - .short _02231334 - _02230A46 - 2 ; case 26 - .short _02230B1C - _02230A46 - 2 ; case 27 - .short _02231334 - _02230A46 - 2 ; case 28 - .short _02231334 - _02230A46 - 2 ; case 29 - .short _02231334 - _02230A46 - 2 ; case 30 - .short _02230BD6 - _02230A46 - 2 ; case 31 - .short _02230B28 - _02230A46 - 2 ; case 32 - .short _02230BE8 - _02230A46 - 2 ; case 33 - .short _02230C0A - _02230A46 - 2 ; case 34 - .short _02230C7C - _02230A46 - 2 ; case 35 - .short _02231334 - _02230A46 - 2 ; case 36 - .short _02231334 - _02230A46 - 2 ; case 37 - .short _02231334 - _02230A46 - 2 ; case 38 - .short _02231334 - _02230A46 - 2 ; case 39 - .short _02231334 - _02230A46 - 2 ; case 40 - .short _02231334 - _02230A46 - 2 ; case 41 - .short _02231334 - _02230A46 - 2 ; case 42 - .short _02231334 - _02230A46 - 2 ; case 43 - .short _02231334 - _02230A46 - 2 ; case 44 - .short _02231334 - _02230A46 - 2 ; case 45 - .short _02231334 - _02230A46 - 2 ; case 46 - .short _02231334 - _02230A46 - 2 ; case 47 - .short _02231220 - _02230A46 - 2 ; case 48 - .short _02231244 - _02230A46 - 2 ; case 49 - .short _02231252 - _02230A46 - 2 ; case 50 - .short _0223126E - _02230A46 - 2 ; case 51 - .short _02231284 - _02230A46 - 2 ; case 52 - .short _02231298 - _02230A46 - 2 ; case 53 - .short _022312AA - _02230A46 - 2 ; case 54 - .short _022312EC - _02230A46 - 2 ; case 55 - .short _0223132E - _02230A46 - 2 ; case 56 + .short _02230AB8 - _02230A46 - 2 ; case 0 + .short _02230ACA - _02230A46 - 2 ; case 1 + .short _02230AE8 - _02230A46 - 2 ; case 2 + .short _02230AF2 - _02230A46 - 2 ; case 3 + .short _02230B00 - _02230A46 - 2 ; case 4 + .short _02230B0E - _02230A46 - 2 ; case 5 + .short _02231334 - _02230A46 - 2 ; case 6 + .short _02230CA0 - _02230A46 - 2 ; case 7 + .short _02230D50 - _02230A46 - 2 ; case 8 + .short _02230D8C - _02230A46 - 2 ; case 9 + .short _02230E4C - _02230A46 - 2 ; case 10 + .short _02230E9A - _02230A46 - 2 ; case 11 + .short _02230EBC - _02230A46 - 2 ; case 12 + .short _02230F4C - _02230A46 - 2 ; case 13 + .short _02230FA2 - _02230A46 - 2 ; case 14 + .short _02230FCE - _02230A46 - 2 ; case 15 + .short _0223100E - _02230A46 - 2 ; case 16 + .short _02231030 - _02230A46 - 2 ; case 17 + .short _0223105A - _02230A46 - 2 ; case 18 + .short _0223107A - _02230A46 - 2 ; case 19 + .short _0223110E - _02230A46 - 2 ; case 20 + .short _0223111A - _02230A46 - 2 ; case 21 + .short _0223113C - _02230A46 - 2 ; case 22 + .short _02231172 - _02230A46 - 2 ; case 23 + .short _0223118C - _02230A46 - 2 ; case 24 + .short _02231204 - _02230A46 - 2 ; case 25 + .short _02231334 - _02230A46 - 2 ; case 26 + .short _02230B1C - _02230A46 - 2 ; case 27 + .short _02231334 - _02230A46 - 2 ; case 28 + .short _02231334 - _02230A46 - 2 ; case 29 + .short _02231334 - _02230A46 - 2 ; case 30 + .short _02230BD6 - _02230A46 - 2 ; case 31 + .short _02230B28 - _02230A46 - 2 ; case 32 + .short _02230BE8 - _02230A46 - 2 ; case 33 + .short _02230C0A - _02230A46 - 2 ; case 34 + .short _02230C7C - _02230A46 - 2 ; case 35 + .short _02231334 - _02230A46 - 2 ; case 36 + .short _02231334 - _02230A46 - 2 ; case 37 + .short _02231334 - _02230A46 - 2 ; case 38 + .short _02231334 - _02230A46 - 2 ; case 39 + .short _02231334 - _02230A46 - 2 ; case 40 + .short _02231334 - _02230A46 - 2 ; case 41 + .short _02231334 - _02230A46 - 2 ; case 42 + .short _02231334 - _02230A46 - 2 ; case 43 + .short _02231334 - _02230A46 - 2 ; case 44 + .short _02231334 - _02230A46 - 2 ; case 45 + .short _02231334 - _02230A46 - 2 ; case 46 + .short _02231334 - _02230A46 - 2 ; case 47 + .short _02231220 - _02230A46 - 2 ; case 48 + .short _02231244 - _02230A46 - 2 ; case 49 + .short _02231252 - _02230A46 - 2 ; case 50 + .short _0223126E - _02230A46 - 2 ; case 51 + .short _02231284 - _02230A46 - 2 ; case 52 + .short _02231298 - _02230A46 - 2 ; case 53 + .short _022312AA - _02230A46 - 2 ; case 54 + .short _022312EC - _02230A46 - 2 ; case 55 + .short _0223132E - _02230A46 - 2 ; case 56 _02230AB8: - mov r0, #0x56 - bl MOD83_02238770 - ldr r0, _02230D60 ; =0x000015D8 - str r5, [r4, r0] - mov r0, #1 - str r0, [r5] - bl _02231334 + mov r0, #0x56 + bl MOD83_02238770 + ldr r0, _02230D60 ; =0x000015D8 + str r5, [r4, r0] + mov r0, #1 + str r0, [r5] + bl _02231334 _02230ACA: - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_02230668 - add r0, r4, #0 - bl MOD83_0222FAE8 - mov r0, #1 - mov r1, #3 - add r2, r5, #0 - mov r3, #2 - bl MOD83_0223886C - bl _02231334 + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_02230668 + add r0, r4, #0 + bl MOD83_0222FAE8 + mov r0, #1 + mov r1, #3 + add r2, r5, #0 + mov r3, #2 + bl MOD83_0223886C + bl _02231334 _02230AE8: - add r0, r5, #0 - bl MOD83_022388CC - bl _02231334 + add r0, r5, #0 + bl MOD83_022388CC + bl _02231334 _02230AF2: - ldr r2, _02230D64 ; =MOD83_022301D4 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D64 ; =MOD83_022301D4 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B00: - ldr r2, _02230D68 ; =MOD83_022300F8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D68 ; =MOD83_022300F8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B0E: - ldr r2, _02230D6C ; =MOD83_0222FDE8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - bl _02231334 + ldr r2, _02230D6C ; =MOD83_0222FDE8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + bl _02231334 _02230B1C: - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230714 - bl _02231334 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230714 + bl _02231334 _02230B28: - add r0, r4, #0 - bl MOD83_022314B4 - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x2c - bne _02230BC0 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #1 - bne _02230B6C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x30 - str r0, [r5] - b _02230BC0 + add r0, r4, #0 + bl MOD83_022314B4 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x2c + bne _02230BC0 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #1 + bne _02230B6C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x30 + str r0, [r5] + b _02230BC0 _02230B6C: - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _02230B9A - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _02230B9A + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _02230B9A: - bl MOD83_02239DA0 - add r1, r4, #0 - add r2, r0, #0 - add r0, r6, #0 - add r1, #0x58 - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - bl MOD83_0222FF80 - mov r0, #0x1f - str r0, [r5] + bl MOD83_02239DA0 + add r1, r4, #0 + add r2, r0, #0 + add r0, r6, #0 + add r1, #0x58 + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + bl MOD83_0222FF80 + mov r0, #0x1f + str r0, [r5] _02230BC0: - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - sub r0, #0x2d - cmp r0, #1 - bls _02230BCC - b _02231334 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + sub r0, #0x2d + cmp r0, #1 + bls _02230BCC + b _02231334 _02230BCC: - bl MOD83_02231494 - mov r0, #0x11 - str r0, [r5] - b _02231334 + bl MOD83_02231494 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230BD6: - ldr r2, _02230D74 ; =MOD83_02230084 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - add r0, r4, #0 - bl MOD83_022314B4 - b _02231334 + ldr r2, _02230D74 ; =MOD83_02230084 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + add r0, r4, #0 + bl MOD83_022314B4 + b _02231334 _02230BE8: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0x22 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0x22 + str r0, [r5] + b _02231334 _02230C0A: - bl MOD83_02239574 - cmp r0, #4 - bne _02230C16 - bl MOD83_02239544 + bl MOD83_02239574 + cmp r0, #4 + bne _02230C16 + bl MOD83_02239544 _02230C16: - bl MOD83_02239574 - cmp r0, #2 - bne _02230C48 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - ldr r0, _02230D78 ; =0x00000624 - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #2 + bne _02230C48 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + ldr r0, _02230D78 ; =0x00000624 + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230C48: - bl MOD83_02239574 - cmp r0, #3 - bne _02230D38 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1a - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #3 + bne _02230D38 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1a + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230C7C: - add r0, r4, #0 - bl MOD83_022314B4 - ldr r0, _02230D70 ; =MOD83_0223B888 - ldr r1, [r0, #0x10] - add r0, r1, #0 - sub r0, #0x2c - cmp r0, #2 - bhi _02230D38 - cmp r1, #0x2e - bne _02230C96 - bl MOD83_02231494 + add r0, r4, #0 + bl MOD83_022314B4 + ldr r0, _02230D70 ; =MOD83_0223B888 + ldr r1, [r0, #0x10] + add r0, r1, #0 + sub r0, #0x2c + cmp r0, #2 + bhi _02230D38 + cmp r1, #0x2e + bne _02230C96 + bl MOD83_02231494 _02230C96: - add r0, r6, #0 - bl MOD83_0222FFD8 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FFD8 + str r0, [r5] + b _02231334 _02230CA0: - add r0, r4, #0 - bl MOD83_0222F950 - ldr r1, _02230D7C ; =0x00000438 - str r0, [r4, r1] - mov r0, #0 - ldr r1, [r4, r1] - mvn r0, r0 - cmp r1, r0 - beq _02230D20 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _02230CFA - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + bl MOD83_0222F950 + ldr r1, _02230D7C ; =0x00000438 + str r0, [r4, r1] + mov r0, #0 + ldr r1, [r4, r1] + mvn r0, r0 + cmp r1, r0 + beq _02230D20 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _02230CFA + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _02230CFA: - add r1, r4, #0 - add r2, r4, #0 - add r0, r6, #0 - add r1, #0x58 - add r2, #0x8c - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - mov r1, #0 - bl MOD83_0222FD84 - mov r0, #8 - str r0, [r5] + add r1, r4, #0 + add r2, r4, #0 + add r0, r6, #0 + add r1, #0x58 + add r2, #0x8c + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + mov r1, #0 + bl MOD83_0222FD84 + mov r0, #8 + str r0, [r5] _02230D20: - ldr r0, _02230D80 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _02230D3A - ldr r0, _02230D84 ; =0x00000434 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - beq _02230D3A + ldr r0, _02230D80 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _02230D3A + ldr r0, _02230D84 ; =0x00000434 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + beq _02230D3A _02230D38: - b _02231334 + b _02231334 _02230D3A: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r0, #0x11 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230D50: - ldr r2, _02230D88 ; =MOD83_0222FFD8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - b _02231334 - .align 2, 0 + ldr r2, _02230D88 ; =MOD83_0222FFD8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + b _02231334 + .align 2, 0 _02230D5C: .word 0x000005C8 _02230D60: .word 0x000015D8 _02230D64: .word MOD83_022301D4 @@ -6975,421 +6975,421 @@ _02230D80: .word gMain _02230D84: .word 0x00000434 _02230D88: .word MOD83_0222FFD8 _02230D8C: - bl FUN_02031190 - add r7, r0, #0 - beq _02230DE4 - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - beq _02230DE4 - mov r0, #0xab - bl FUN_020315D8 - cmp r0, #1 - bne _02230E14 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #1 - add r1, r0, #0 - bl FUN_020334E8 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #7 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - mov r1, #0x96 - ldr r0, _02231120 ; =0x00000434 - lsl r1, r1, #2 - str r1, [r4, r0] - mov r0, #0xa - str r0, [r5] - b _02230E14 + bl FUN_02031190 + add r7, r0, #0 + beq _02230DE4 + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + beq _02230DE4 + mov r0, #0xab + bl FUN_020315D8 + cmp r0, #1 + bne _02230E14 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #1 + add r1, r0, #0 + bl FUN_020334E8 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #7 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + mov r1, #0x96 + ldr r0, _02231120 ; =0x00000434 + lsl r1, r1, #2 + str r1, [r4, r0] + mov r0, #0xa + str r0, [r5] + b _02230E14 _02230DE4: - cmp r7, #0 - beq _02230E14 - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230E14 - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x10 - str r0, [r5] - b _02231334 + cmp r7, #0 + beq _02230E14 + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230E14 + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x10 + str r0, [r5] + b _02231334 _02230E14: - ldr r0, _02231124 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _02230E2C - ldr r0, _02231120 ; =0x00000434 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02230F1C + ldr r0, _02231124 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _02230E2C + ldr r0, _02231120 ; =0x00000434 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02230F1C _02230E2C: - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x11 - str r0, [r5] - b _02231334 + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230E4C: - bl MOD83_0222F9A0 - cmp r0, #0 - beq _02230E58 - mov r0, #0xb - str r0, [r5] + bl MOD83_0222F9A0 + cmp r0, #0 + beq _02230E58 + mov r0, #0xb + str r0, [r5] _02230E58: - bl FUN_02031190 - ldr r1, _02231124 ; =gMain - ldr r2, [r1, #0x48] - mov r1, #2 - tst r1, r2 - bne _02230E84 - ldr r1, _02231120 ; =0x00000434 - ldr r2, [r4, r1] - sub r2, r2, #1 - str r2, [r4, r1] - ldr r1, [r4, r1] - cmp r1, #0 - beq _02230E84 - cmp r0, #0 - beq _02230F1C - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230F1C + bl FUN_02031190 + ldr r1, _02231124 ; =gMain + ldr r2, [r1, #0x48] + mov r1, #2 + tst r1, r2 + bne _02230E84 + ldr r1, _02231120 ; =0x00000434 + ldr r2, [r4, r1] + sub r2, r2, #1 + str r2, [r4, r1] + ldr r1, [r4, r1] + cmp r1, #0 + beq _02230E84 + cmp r0, #0 + beq _02230F1C + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230F1C _02230E84: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - mov r0, #0x11 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + mov r0, #0x11 + str r0, [r5] + b _02231334 _02230E9A: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - mov r0, #0 - add r1, r0, #0 - bl FUN_020334E8 - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0xc - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + mov r0, #0 + add r1, r0, #0 + bl FUN_020334E8 + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0xc + str r0, [r5] + b _02231334 _02230EBC: - bl FUN_02031190 - cmp r0, #0 - beq _02230EFA - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0 - bne _02230EFA - bl MOD83_0222F9DC - ldr r0, _02231128 ; =0x00002990 - mov r1, #1 - str r1, [r4, r0] - bl MOD83_0223955C - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl FUN_02033ED0 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - mov r0, #0xe - str r0, [r5] - b _02231334 + bl FUN_02031190 + cmp r0, #0 + beq _02230EFA + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0 + bne _02230EFA + bl MOD83_0222F9DC + ldr r0, _02231128 ; =0x00002990 + mov r1, #1 + str r1, [r4, r0] + bl MOD83_0223955C + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl FUN_02033ED0 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + mov r0, #0xe + str r0, [r5] + b _02231334 _02230EFA: - bl MOD83_02239574 - cmp r0, #4 - bne _02230F14 - mov r0, #0x93 - bl FUN_02031588 - mov r0, #0xd - str r0, [r5] - ldr r0, _0223112C ; =0x0000043C - mov r1, #0x78 - str r1, [r4, r0] - b _02231334 + bl MOD83_02239574 + cmp r0, #4 + bne _02230F14 + mov r0, #0x93 + bl FUN_02031588 + mov r0, #0xd + str r0, [r5] + ldr r0, _0223112C ; =0x0000043C + mov r1, #0x78 + str r1, [r4, r0] + b _02231334 _02230F14: - bl MOD83_02239574 - cmp r0, #3 - beq _02230F1E + bl MOD83_02239574 + cmp r0, #3 + beq _02230F1E _02230F1C: - b _02231334 + b _02231334 _02230F1E: - bl MOD83_0223955C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x1a - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_0223955C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x1a + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230F4C: - mov r0, #0x93 - bl FUN_020315D8 - cmp r0, #1 - bne _02230F66 - bl MOD83_02239544 - ldr r0, _0223112C ; =0x0000043C - mov r1, #0xa - str r1, [r4, r0] - mov r0, #0xf - str r0, [r5] - b _02231334 + mov r0, #0x93 + bl FUN_020315D8 + cmp r0, #1 + bne _02230F66 + bl MOD83_02239544 + ldr r0, _0223112C ; =0x0000043C + mov r1, #0xa + str r1, [r4, r0] + mov r0, #0xf + str r0, [r5] + b _02231334 _02230F66: - ldr r0, _0223112C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231062 - bl MOD83_0223955C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x1a - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + ldr r0, _0223112C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231062 + bl MOD83_0223955C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x1a + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230FA2: - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1c - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1c + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02230FCE: - ldr r0, _0223112C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231062 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - bl MOD83_0222F9DC - bl FUN_02033ED0 - ldr r0, _02231130 ; =0x00000624 - bl PlaySE - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + ldr r0, _0223112C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231062 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + bl MOD83_0222F9DC + bl FUN_02033ED0 + ldr r0, _02231130 ; =0x00000624 + bl PlaySE + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _0223100E: - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x18 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - mov r0, #0x12 - str r0, [r5] - b _02231334 + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x18 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + mov r0, #0x12 + str r0, [r5] + b _02231334 _02231030: - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #0x17 - bl MOD83_0223050C - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - mov r0, #0x12 - str r0, [r5] - b _02231334 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #0x17 + bl MOD83_0223050C + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + mov r0, #0x12 + str r0, [r5] + b _02231334 _0223105A: - ldr r0, _02231124 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - bne _02231064 + ldr r0, _02231124 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + bne _02231064 _02231062: - b _02231334 + b _02231334 _02231064: - ldr r0, _02231134 ; =0x000005DC - bl PlaySE - add r0, r6, #0 - mov r1, #0xc4 - mov r2, #0 - bl MOD83_02230464 - mov r0, #3 - str r0, [r5] - b _02231334 + ldr r0, _02231134 ; =0x000005DC + bl PlaySE + add r0, r6, #0 + mov r1, #0xc4 + mov r2, #0 + bl MOD83_02230464 + mov r0, #3 + str r0, [r5] + b _02231334 _0223107A: - add r0, r4, #0 - add r0, #0x84 - ldr r0, [r0] - cmp r0, #0x1b - beq _02231090 - add r0, r4, #0 - mov r1, #0xea - add r0, #0x8c - lsl r1, r1, #2 - bl MOD83_02238728 + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0x1b + beq _02231090 + add r0, r4, #0 + mov r1, #0xea + add r0, #0x8c + lsl r1, r1, #2 + bl MOD83_02238728 _02231090: - add r1, r4, #0 - ldr r0, [r4, #4] - add r1, #0x8c - bl MOD83_022332B4 - add r1, r4, #0 - add r1, #0x80 - str r0, [r1] - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #1 - bne _022310B8 - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r0, #0x30 - str r0, [r5] - b _02231334 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x8c + bl MOD83_022332B4 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #1 + bne _022310B8 + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r0, #0x30 + str r0, [r5] + b _02231334 _022310B8: - add r0, r4, #0 - add r0, #0x58 - bl WindowIsInUse - cmp r0, #0 - bne _022310E6 - mov r0, #2 - str r0, [sp] - mov r0, #0x1a - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r2, #0 - mov r0, #0x71 - add r1, r4, #0 - str r2, [sp, #0xc] - lsl r0, r0, #2 - str r0, [sp, #0x10] - ldr r0, [r4] - add r1, #0x58 - mov r3, #3 - bl AddWindowParameterized + add r0, r4, #0 + add r0, #0x58 + bl WindowIsInUse + cmp r0, #0 + bne _022310E6 + mov r0, #2 + str r0, [sp] + mov r0, #0x1a + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r2, #0 + mov r0, #0x71 + add r1, r4, #0 + str r2, [sp, #0xc] + lsl r0, r0, #2 + str r0, [sp, #0x10] + ldr r0, [r4] + add r1, #0x58 + mov r3, #3 + bl AddWindowParameterized _022310E6: - add r1, r4, #0 - add r2, r4, #0 - add r0, r6, #0 - add r1, #0x58 - add r2, #0x8c - bl MOD83_022305A4 - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #4 - bl MOD83_0223050C - add r0, r6, #0 - mov r1, #0 - bl MOD83_0222FD84 - mov r0, #0x14 - str r0, [r5] - b _02231334 + add r1, r4, #0 + add r2, r4, #0 + add r0, r6, #0 + add r1, #0x58 + add r2, #0x8c + bl MOD83_022305A4 + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #4 + bl MOD83_0223050C + add r0, r6, #0 + mov r1, #0 + bl MOD83_0222FD84 + mov r0, #0x14 + str r0, [r5] + b _02231334 _0223110E: - ldr r2, _02231138 ; =MOD83_0222FFD8 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02230604 - b _02231334 + ldr r2, _02231138 ; =MOD83_0222FFD8 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02230604 + b _02231334 _0223111A: - mov r0, #0x16 - str r0, [r5] - b _02231334 - .align 2, 0 + mov r0, #0x16 + str r0, [r5] + b _02231334 + .align 2, 0 _02231120: .word 0x00000434 _02231124: .word gMain _02231128: .word 0x00002990 @@ -7398,1804 +7398,1804 @@ _02231130: .word 0x00000624 _02231134: .word 0x000005DC _02231138: .word MOD83_0222FFD8 _0223113C: - add r0, r6, #0 - bl MOD83_0222FC40 - add r1, r0, #0 - ldr r0, [r4] - bl MOD83_022391EC - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #7 - bl MOD83_0223050C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FB0C - add r0, r4, #0 - mov r1, #1 - bl MOD83_0222FA0C - ldr r0, _0223134C ; =0x0000043C - mov r1, #0x3c - str r1, [r4, r0] - mov r0, #0x17 - str r0, [r5] - b _02231334 + add r0, r6, #0 + bl MOD83_0222FC40 + add r1, r0, #0 + ldr r0, [r4] + bl MOD83_022391EC + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #7 + bl MOD83_0223050C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FB0C + add r0, r4, #0 + mov r1, #1 + bl MOD83_0222FA0C + ldr r0, _0223134C ; =0x0000043C + mov r1, #0x3c + str r1, [r4, r0] + mov r0, #0x17 + str r0, [r5] + b _02231334 _02231172: - ldr r0, _0223134C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231212 - add r0, r6, #0 - bl MOD83_0222FCE4 - mov r0, #0x18 - str r0, [r5] - b _02231334 + ldr r0, _0223134C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231212 + add r0, r6, #0 + bl MOD83_0222FCE4 + mov r0, #0x18 + str r0, [r5] + b _02231334 _0223118C: - bl MOD83_02239574 - cmp r0, #4 - bne _02231198 - bl MOD83_02239544 + bl MOD83_02239574 + cmp r0, #4 + bne _02231198 + bl MOD83_02239544 _02231198: - bl MOD83_02239574 - cmp r0, #2 - bne _022311D0 - ldr r0, _0223134C ; =0x0000043C - mov r1, #1 - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #0 - bl MOD83_0222FA0C - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - ldr r0, _02231350 ; =0x00000624 - bl PlaySE - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r2, #8 - mov r3, #0x19 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #2 + bne _022311D0 + ldr r0, _0223134C ; =0x0000043C + mov r1, #1 + str r1, [r4, r0] + add r0, r4, #0 + mov r1, #0 + bl MOD83_0222FA0C + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + ldr r0, _02231350 ; =0x00000624 + bl PlaySE + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r2, #8 + mov r3, #0x19 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _022311D0: - bl MOD83_02239574 - cmp r0, #3 - bne _02231212 - mov r1, #0 - add r0, r4, #0 - mvn r1, r1 - bl MOD83_0222FB0C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - mov r2, #0x1a - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - add r1, r4, #0 - add r0, r6, #0 - add r1, #0x18 - mov r3, #0x36 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + bl MOD83_02239574 + cmp r0, #3 + bne _02231212 + mov r1, #0 + add r0, r4, #0 + mvn r1, r1 + bl MOD83_0222FB0C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + mov r2, #0x1a + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + add r1, r4, #0 + add r0, r6, #0 + add r1, #0x18 + mov r3, #0x36 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02231204: - ldr r0, _0223134C ; =0x0000043C - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r1, [r4, r0] - cmp r1, #0 - beq _02231214 + ldr r0, _0223134C ; =0x0000043C + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r1, [r4, r0] + cmp r1, #0 + beq _02231214 _02231212: - b _02231334 + b _02231334 _02231214: - mov r1, #1 - lsl r1, r1, #0x10 - str r1, [r4, r0] - mov r0, #0x36 - str r0, [r5] - b _02231334 + mov r1, #1 + lsl r1, r1, #0x10 + str r1, [r4, r0] + mov r0, #0x36 + str r0, [r5] + b _02231334 _02231220: - add r0, r4, #0 - add r0, #0x80 - ldr r0, [r0] - cmp r0, #5 - beq _02231230 - add r0, r4, #0 - bl MOD83_02230924 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #5 + beq _02231230 + add r0, r4, #0 + bl MOD83_02230924 _02231230: - add r0, r6, #0 - bl MOD83_0223084C - str r0, [r5] - add r0, r4, #0 - add r0, #0x48 - mov r1, #0 - bl MOD83_0222FB44 - b _02231334 + add r0, r6, #0 + bl MOD83_0223084C + str r0, [r5] + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl MOD83_0222FB44 + b _02231334 _02231244: - mov r1, #0 - add r0, r6, #0 - add r2, r1, #0 - bl MOD83_0223089C - str r0, [r5] - b _02231334 + mov r1, #0 + add r0, r6, #0 + add r2, r1, #0 + bl MOD83_0223089C + str r0, [r5] + b _02231334 _02231252: - ldr r0, _02231354 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02231334 - add r0, r4, #0 - add r0, #0x58 - mov r1, #0 - bl MOD83_0222FB44 - add r0, r6, #0 - bl MOD83_022300F8 - str r0, [r5] - b _02231334 + ldr r0, _02231354 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02231334 + add r0, r4, #0 + add r0, #0x58 + mov r1, #0 + bl MOD83_0222FB44 + add r0, r6, #0 + bl MOD83_022300F8 + str r0, [r5] + b _02231334 _0223126E: - add r0, r6, #0 - mov r1, #1 - bl MOD83_0222FD84 - mov r0, #8 - str r0, [r5] - add r0, r4, #0 - mov r1, #0 - add r0, #0x80 - str r1, [r0] - b _02231334 + add r0, r6, #0 + mov r1, #1 + bl MOD83_0222FD84 + mov r0, #8 + str r0, [r5] + add r0, r4, #0 + mov r1, #0 + add r0, #0x80 + str r1, [r0] + b _02231334 _02231284: - add r0, r6, #0 - bl MOD83_0222FA4C - mov r0, #0x11 - mov r1, #0 - lsl r0, r0, #6 - str r1, [r4, r0] - add sp, #0x14 - mov r0, #1 - pop {r4, r5, r6, r7, pc} + add r0, r6, #0 + bl MOD83_0222FA4C + mov r0, #0x11 + mov r1, #0 + lsl r0, r0, #6 + str r1, [r4, r0] + add sp, #0x14 + mov r0, #1 + pop {r4, r5, r6, r7, pc} _02231298: - add r0, r6, #0 - bl MOD83_0222FA4C - mov r1, #0x11 - mov r0, #1 - lsl r1, r1, #6 - add sp, #0x14 - str r0, [r4, r1] - pop {r4, r5, r6, r7, pc} + add r0, r6, #0 + bl MOD83_0222FA4C + mov r1, #0x11 + mov r0, #1 + lsl r1, r1, #6 + add sp, #0x14 + str r0, [r4, r1] + pop {r4, r5, r6, r7, pc} _022312AA: - ldr r0, _02231354 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02231334 - ldr r0, _02231358 ; =0x000005DC - bl PlaySE - add r0, r4, #0 - add r0, #0xda - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - cmp r0, #1 - bne _022312D6 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x37 - mov r3, #2 - bl MOD83_0223886C - b _02231334 + ldr r0, _02231354 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02231334 + ldr r0, _02231358 ; =0x000005DC + bl PlaySE + add r0, r4, #0 + add r0, #0xda + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + cmp r0, #1 + bne _022312D6 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x37 + mov r3, #2 + bl MOD83_0223886C + b _02231334 _022312D6: - mov r0, #1 - bl MOD83_02238860 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #0 - ldr r2, [r4, r2] - mov r1, #0x38 - mov r3, #2 - bl MOD83_0223886C - b _02231334 + mov r0, #1 + bl MOD83_02238860 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #0 + ldr r2, [r4, r2] + mov r1, #0x38 + mov r3, #2 + bl MOD83_0223886C + b _02231334 _022312EC: - ldr r0, [r4] - bl MOD83_022302B4 - mov r0, #1 - mov r1, #0 - bl GX_EngineBToggleLayers - mov r0, #2 - mov r1, #1 - bl GX_EngineBToggleLayers - add r1, r4, #0 - ldr r0, [r4] - add r1, #0xdc - mov r2, #0x56 - bl MOD83_02233168 - ldr r2, _0223135C ; =0x000015D8 - mov r0, #1 - ldr r2, [r4, r2] - mov r1, #0x36 - mov r3, #2 - bl MOD83_0223886C - add r0, r4, #0 - add r0, #0xda - ldrb r1, [r0] - mov r0, #4 - bic r1, r0 - add r0, r4, #0 - add r0, #0xda - strb r1, [r0] - b _02231334 + ldr r0, [r4] + bl MOD83_022302B4 + mov r0, #1 + mov r1, #0 + bl GX_EngineBToggleLayers + mov r0, #2 + mov r1, #1 + bl GX_EngineBToggleLayers + add r1, r4, #0 + ldr r0, [r4] + add r1, #0xdc + mov r2, #0x56 + bl MOD83_02233168 + ldr r2, _0223135C ; =0x000015D8 + mov r0, #1 + ldr r2, [r4, r2] + mov r1, #0x36 + mov r3, #2 + bl MOD83_0223886C + add r0, r4, #0 + add r0, #0xda + ldrb r1, [r0] + mov r0, #4 + bic r1, r0 + add r0, r4, #0 + add r0, #0xda + strb r1, [r0] + b _02231334 _0223132E: - mov r0, #0 - bl OS_ResetSystem + mov r0, #0 + bl OS_ResetSystem _02231334: - ldr r0, _02231360 ; =0x0000298C - ldr r1, [r4, r0] - cmp r1, #0 - beq _02231340 - add r0, r4, #0 - blx r1 + ldr r0, _02231360 ; =0x0000298C + ldr r1, [r4, r0] + cmp r1, #0 + beq _02231340 + add r0, r4, #0 + blx r1 _02231340: - bl MOD83_02238D58 - mov r0, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - nop + bl MOD83_02238D58 + mov r0, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + nop _0223134C: .word 0x0000043C _02231350: .word 0x00000624 _02231354: .word gMain _02231358: .word 0x000005DC _0223135C: .word 0x000015D8 _02231360: .word 0x0000298C - thumb_func_end MOD83_02230A10 + thumb_func_end MOD83_02230A10 - thumb_func_start MOD83_02231364 + thumb_func_start MOD83_02231364 MOD83_02231364: ; 0x02231364 - ldr r0, _0223136C ; =MOD83_0223B888 - ldr r0, [r0, #4] - bx lr - nop + ldr r0, _0223136C ; =MOD83_0223B888 + ldr r0, [r0, #4] + bx lr + nop _0223136C: .word MOD83_0223B888 - thumb_func_end MOD83_02231364 + thumb_func_end MOD83_02231364 - thumb_func_start MOD83_02231370 + thumb_func_start MOD83_02231370 MOD83_02231370: ; 0x02231370 - ldr r1, _02231378 ; =MOD83_0223B888 - str r0, [r1, #4] - bx lr - nop + ldr r1, _02231378 ; =MOD83_0223B888 + str r0, [r1, #4] + bx lr + nop _02231378: .word MOD83_0223B888 - thumb_func_end MOD83_02231370 + thumb_func_end MOD83_02231370 - thumb_func_start MOD83_0223137C + thumb_func_start MOD83_0223137C MOD83_0223137C: ; 0x0223137C - push {r3, r4, r5, lr} - add r5, r0, #0 - bl OverlayManager_GetData - add r4, r0, #0 - mov r0, #0x11 - lsl r0, r0, #6 - ldr r0, [r4, r0] - cmp r0, #0 - bne _0223139A - ldr r0, _022313D0 ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _022313D4 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - b _022313A6 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OverlayManager_GetData + add r4, r0, #0 + mov r0, #0x11 + lsl r0, r0, #6 + ldr r0, [r4, r0] + cmp r0, #0 + bne _0223139A + ldr r0, _022313D0 ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _022313D4 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + b _022313A6 _0223139A: - cmp r0, #1 - bne _022313A6 - ldr r0, _022313D8 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _022313DC ; =MOD83_0223A444 - bl RegisterMainOverlay + cmp r0, #1 + bne _022313A6 + ldr r0, _022313D8 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _022313DC ; =MOD83_0223A444 + bl RegisterMainOverlay _022313A6: - mov r0, #0x5b - bl DestroyHeap - add r0, r5, #0 - bl OverlayManager_FreeData - mov r0, #0x56 - bl DestroyHeap - ldr r0, _022313E0 ; =0x000015D4 - ldr r0, [r4, r0] - cmp r0, #2 - bne _022313C6 - mov r0, #0 - bl FUN_02016438 + mov r0, #0x5b + bl DestroyHeap + add r0, r5, #0 + bl OverlayManager_FreeData + mov r0, #0x56 + bl DestroyHeap + ldr r0, _022313E0 ; =0x000015D4 + ldr r0, [r4, r0] + cmp r0, #2 + bne _022313C6 + mov r0, #0 + bl FUN_02016438 _022313C6: - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _022313D0: .word SDK_OVERLAY_MODULE_63_ID _022313D4: .word MOD63_021DBAB8 _022313D8: .word SDK_OVERLAY_MODULE_83_ID _022313DC: .word MOD83_0223A444 _022313E0: .word 0x000015D4 - thumb_func_end MOD83_0223137C + thumb_func_end MOD83_0223137C - thumb_func_start MOD83_022313E4 + thumb_func_start MOD83_022313E4 MOD83_022313E4: ; 0x022313E4 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02231438 ; =0x000005C8 - ldr r0, [r4, r0] - cmp r0, #0x1c - beq _022313FA - cmp r0, #0x1d - beq _02231436 - cmp r0, #0x1e - beq _0223140E - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldr r0, _02231438 ; =0x000005C8 + ldr r0, [r4, r0] + cmp r0, #0x1c + beq _022313FA + cmp r0, #0x1d + beq _02231436 + cmp r0, #0x1e + beq _0223140E + pop {r4, pc} _022313FA: - ldr r0, [r4, #4] - bl FUN_02032D44 - ldr r0, _0223143C ; =0x000005CC - mov r1, #0x78 - str r1, [r4, r0] - mov r1, #0x1e - sub r0, r0, #4 - str r1, [r4, r0] - pop {r4, pc} + ldr r0, [r4, #4] + bl FUN_02032D44 + ldr r0, _0223143C ; =0x000005CC + mov r1, #0x78 + str r1, [r4, r0] + mov r1, #0x1e + sub r0, r0, #4 + str r1, [r4, r0] + pop {r4, pc} _0223140E: - bl FUN_02032D9C - mov r1, #1 - tst r0, r1 - beq _0223141E - mov r0, #0x5d - lsl r0, r0, #4 - str r1, [r4, r0] + bl FUN_02032D9C + mov r1, #1 + tst r0, r1 + beq _0223141E + mov r0, #0x5d + lsl r0, r0, #4 + str r1, [r4, r0] _0223141E: - ldr r0, _0223143C ; =0x000005CC - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02231436 - bl FUN_02032D80 - ldr r0, _02231438 ; =0x000005C8 - mov r1, #0x1d - str r1, [r4, r0] + ldr r0, _0223143C ; =0x000005CC + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02231436 + bl FUN_02032D80 + ldr r0, _02231438 ; =0x000005C8 + mov r1, #0x1d + str r1, [r4, r0] _02231436: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02231438: .word 0x000005C8 _0223143C: .word 0x000005CC - thumb_func_end MOD83_022313E4 + thumb_func_end MOD83_022313E4 - thumb_func_start MOD83_02231440 + thumb_func_start MOD83_02231440 MOD83_02231440: ; 0x02231440 - cmp r0, #4 - bhi _0223148C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r0, #4 + bhi _0223148C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02231450: ; jump table - .short _0223145A - _02231450 - 2 ; case 0 - .short _02231462 - _02231450 - 2 ; case 1 - .short _0223146A - _02231450 - 2 ; case 2 - .short _02231472 - _02231450 - 2 ; case 3 - .short _02231486 - _02231450 - 2 ; case 4 + .short _0223145A - _02231450 - 2 ; case 0 + .short _02231462 - _02231450 - 2 ; case 1 + .short _0223146A - _02231450 - 2 ; case 2 + .short _02231472 - _02231450 - 2 ; case 3 + .short _02231486 - _02231450 - 2 ; case 4 _0223145A: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x27 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x27 + str r1, [r0, #0x10] + bx lr _02231462: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x28 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x28 + str r1, [r0, #0x10] + bx lr _0223146A: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x29 - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x29 + str r1, [r0, #0x10] + bx lr _02231472: - ldr r0, _02231490 ; =MOD83_0223B888 - ldr r1, [r0, #0x10] - cmp r1, #0x29 - bne _02231480 - mov r1, #0x2b - str r1, [r0, #0x10] - bx lr + ldr r0, _02231490 ; =MOD83_0223B888 + ldr r1, [r0, #0x10] + cmp r1, #0x29 + bne _02231480 + mov r1, #0x2b + str r1, [r0, #0x10] + bx lr _02231480: - mov r1, #0x2e - str r1, [r0, #0x10] - bx lr + mov r1, #0x2e + str r1, [r0, #0x10] + bx lr _02231486: - ldr r0, _02231490 ; =MOD83_0223B888 - mov r1, #0x2f - str r1, [r0, #0x10] + ldr r0, _02231490 ; =MOD83_0223B888 + mov r1, #0x2f + str r1, [r0, #0x10] _0223148C: - bx lr - nop + bx lr + nop _02231490: .word MOD83_0223B888 - thumb_func_end MOD83_02231440 + thumb_func_end MOD83_02231440 - thumb_func_start MOD83_02231494 + thumb_func_start MOD83_02231494 MOD83_02231494: ; 0x02231494 - push {r3, lr} - bl FUN_0202E4F0 - ldr r0, _022314B0 ; =MOD83_0223B888 - ldr r0, [r0, #8] - bl FreeToHeap - bl FUN_02033ED0 - ldr r0, _022314B0 ; =MOD83_0223B888 - mov r1, #0 - str r1, [r0, #8] - pop {r3, pc} - nop + push {r3, lr} + bl FUN_0202E4F0 + ldr r0, _022314B0 ; =MOD83_0223B888 + ldr r0, [r0, #8] + bl FreeToHeap + bl FUN_02033ED0 + ldr r0, _022314B0 ; =MOD83_0223B888 + mov r1, #0 + str r1, [r0, #8] + pop {r3, pc} + nop _022314B0: .word MOD83_0223B888 - thumb_func_end MOD83_02231494 + thumb_func_end MOD83_02231494 - thumb_func_start MOD83_022314B4 + thumb_func_start MOD83_022314B4 MOD83_022314B4: ; 0x022314B4 - push {r4, lr} - add r4, r0, #0 - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x2b - bne _022314DA - bl MOD83_02231494 - bl MOD83_02239CEC - cmp r0, #0 - beq _022314D4 - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2c - str r1, [r0, #0x10] - b _022314DA + push {r4, lr} + add r4, r0, #0 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x2b + bne _022314DA + bl MOD83_02231494 + bl MOD83_02239CEC + cmp r0, #0 + beq _022314D4 + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2c + str r1, [r0, #0x10] + b _022314DA _022314D4: - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2d - str r1, [r0, #0x10] + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2d + str r1, [r0, #0x10] _022314DA: - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - cmp r0, #0x24 - beq _022314F6 - cmp r0, #0x25 - beq _022314F6 - cmp r0, #0x26 - beq _022314F6 - cmp r0, #0x27 - beq _022314F6 - cmp r0, #0x28 - beq _022314F6 - cmp r0, #0x2a - bne _02231502 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + cmp r0, #0x24 + beq _022314F6 + cmp r0, #0x25 + beq _022314F6 + cmp r0, #0x26 + beq _022314F6 + cmp r0, #0x27 + beq _022314F6 + cmp r0, #0x28 + beq _022314F6 + cmp r0, #0x2a + bne _02231502 _022314F6: - bl WM_GetLinkLevel - mov r1, #3 - sub r0, r1, r0 - bl FUN_02033EEC + bl WM_GetLinkLevel + mov r1, #3 + sub r0, r1, r0 + bl FUN_02033EEC _02231502: - ldr r1, _022315C0 ; =MOD83_0223B888 - ldr r0, [r1, #0x10] - sub r0, #0x24 - cmp r0, #0xb - bhi _0223157C - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r1, _022315C0 ; =MOD83_0223B888 + ldr r0, [r1, #0x10] + sub r0, #0x24 + cmp r0, #0xb + bhi _0223157C + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02231518: ; jump table - .short _02231530 - _02231518 - 2 ; case 0 - .short _0223153C - _02231518 - 2 ; case 1 - .short _0223157C - _02231518 - 2 ; case 2 - .short _0223157C - _02231518 - 2 ; case 3 - .short _02231572 - _02231518 - 2 ; case 4 - .short _0223157C - _02231518 - 2 ; case 5 - .short _0223157C - _02231518 - 2 ; case 6 - .short _0223157C - _02231518 - 2 ; case 7 - .short _0223157C - _02231518 - 2 ; case 8 - .short _0223157C - _02231518 - 2 ; case 9 - .short _0223157A - _02231518 - 2 ; case 10 - .short _0223157C - _02231518 - 2 ; case 11 + .short _02231530 - _02231518 - 2 ; case 0 + .short _0223153C - _02231518 - 2 ; case 1 + .short _0223157C - _02231518 - 2 ; case 2 + .short _0223157C - _02231518 - 2 ; case 3 + .short _02231572 - _02231518 - 2 ; case 4 + .short _0223157C - _02231518 - 2 ; case 5 + .short _0223157C - _02231518 - 2 ; case 6 + .short _0223157C - _02231518 - 2 ; case 7 + .short _0223157C - _02231518 - 2 ; case 8 + .short _0223157C - _02231518 - 2 ; case 9 + .short _0223157A - _02231518 - 2 ; case 10 + .short _0223157C - _02231518 - 2 ; case 11 _02231530: - bl FUN_0202E49C - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x25 - str r1, [r0, #0x10] - b _0223157C + bl FUN_0202E49C + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x25 + str r1, [r0, #0x10] + b _0223157C _0223153C: - bl FUN_0202E4C8 - cmp r0, #1 - bne _0223157C - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0 - str r1, [r0] - bl MOD83_02239D98 - add r1, r0, #0 - mov r0, #0x56 - bl AllocFromHeap - add r2, r0, #0 - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r1, _022315C4 ; =MOD83_02231440 - str r2, [r0, #8] - ldr r0, _022315C8 ; =0x000005D4 - add r0, r4, r0 - bl MOD83_02239A98 - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x26 - str r1, [r0, #0x10] - bl FUN_02033E74 - b _0223157C + bl FUN_0202E4C8 + cmp r0, #1 + bne _0223157C + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0 + str r1, [r0] + bl MOD83_02239D98 + add r1, r0, #0 + mov r0, #0x56 + bl AllocFromHeap + add r2, r0, #0 + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r1, _022315C4 ; =MOD83_02231440 + str r2, [r0, #8] + ldr r0, _022315C8 ; =0x000005D4 + add r0, r4, r0 + bl MOD83_02239A98 + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x26 + str r1, [r0, #0x10] + bl FUN_02033E74 + b _0223157C _02231572: - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - b _0223157C + ldr r0, [r1] + add r0, r0, #1 + str r0, [r1] + b _0223157C _0223157A: - pop {r4, pc} + pop {r4, pc} _0223157C: - ldr r0, _022315CC ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _022315BC - ldr r0, _022315C0 ; =MOD83_0223B888 - ldr r0, [r0, #0x10] - sub r0, #0x27 - cmp r0, #8 - bhi _022315BC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, _022315CC ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _022315BC + ldr r0, _022315C0 ; =MOD83_0223B888 + ldr r0, [r0, #0x10] + sub r0, #0x27 + cmp r0, #8 + bhi _022315BC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223159C: ; jump table - .short _022315AE - _0223159C - 2 ; case 0 - .short _022315AE - _0223159C - 2 ; case 1 - .short _022315BC - _0223159C - 2 ; case 2 - .short _022315BC - _0223159C - 2 ; case 3 - .short _022315BC - _0223159C - 2 ; case 4 - .short _022315BC - _0223159C - 2 ; case 5 - .short _022315BC - _0223159C - 2 ; case 6 - .short _022315BC - _0223159C - 2 ; case 7 - .short _022315AE - _0223159C - 2 ; case 8 + .short _022315AE - _0223159C - 2 ; case 0 + .short _022315AE - _0223159C - 2 ; case 1 + .short _022315BC - _0223159C - 2 ; case 2 + .short _022315BC - _0223159C - 2 ; case 3 + .short _022315BC - _0223159C - 2 ; case 4 + .short _022315BC - _0223159C - 2 ; case 5 + .short _022315BC - _0223159C - 2 ; case 6 + .short _022315BC - _0223159C - 2 ; case 7 + .short _022315AE - _0223159C - 2 ; case 8 _022315AE: - bl MOD83_02239A14 - cmp r0, #0 - beq _022315BC - ldr r0, _022315C0 ; =MOD83_0223B888 - mov r1, #0x2a - str r1, [r0, #0x10] + bl MOD83_02239A14 + cmp r0, #0 + beq _022315BC + ldr r0, _022315C0 ; =MOD83_0223B888 + mov r1, #0x2a + str r1, [r0, #0x10] _022315BC: - pop {r4, pc} - nop + pop {r4, pc} + nop _022315C0: .word MOD83_0223B888 _022315C4: .word MOD83_02231440 _022315C8: .word 0x000005D4 _022315CC: .word gMain - thumb_func_end MOD83_022314B4 + thumb_func_end MOD83_022314B4 - thumb_func_start MOD83_022315D0 + thumb_func_start MOD83_022315D0 MOD83_022315D0: ; 0x022315D0 - push {r3, lr} - sub sp, #8 - bl MOD83_022315F8 - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0xd - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xf - mov r2, #0xc - mov r3, #0xe - bl MOD83_02238BC4 - add sp, #8 - pop {r3, pc} - thumb_func_end MOD83_022315D0 - - thumb_func_start MOD83_022315F8 + push {r3, lr} + sub sp, #8 + bl MOD83_022315F8 + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0xd + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xf + mov r2, #0xc + mov r3, #0xe + bl MOD83_02238BC4 + add sp, #8 + pop {r3, pc} + thumb_func_end MOD83_022315D0 + + thumb_func_start MOD83_022315F8 MOD83_022315F8: ; 0x022315F8 - push {r4, lr} - add r4, r0, #0 - ldr r0, _0223165C ; =0x00002D64 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231608 - bl FUN_0201FFC8 + push {r4, lr} + add r4, r0, #0 + ldr r0, _0223165C ; =0x00002D64 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231608 + bl FUN_0201FFC8 _02231608: - ldr r0, _02231660 ; =0x00002D68 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231614 - bl FUN_0201FFC8 + ldr r0, _02231660 ; =0x00002D68 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231614 + bl FUN_0201FFC8 _02231614: - ldr r0, _02231660 ; =0x00002D68 - mov r1, #0 - str r1, [r4, r0] - ldr r2, [r4, r0] - sub r1, r0, #4 - str r2, [r4, r1] - add r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #0 - beq _0223162C - bl FUN_0201FFC8 + ldr r0, _02231660 ; =0x00002D68 + mov r1, #0 + str r1, [r4, r0] + ldr r2, [r4, r0] + sub r1, r0, #4 + str r2, [r4, r1] + add r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _0223162C + bl FUN_0201FFC8 _0223162C: - ldr r0, _02231664 ; =0x00002D70 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231638 - bl FUN_0201FFC8 + ldr r0, _02231664 ; =0x00002D70 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231638 + bl FUN_0201FFC8 _02231638: - ldr r0, _02231668 ; =0x00002D74 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231644 - bl FUN_0201FFC8 + ldr r0, _02231668 ; =0x00002D74 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231644 + bl FUN_0201FFC8 _02231644: - ldr r1, _02231668 ; =0x00002D74 - mov r0, #0 - str r0, [r4, r1] - ldr r2, [r4, r1] - sub r0, r1, #4 - str r2, [r4, r0] - ldr r0, [r4, r0] - sub r1, #8 - str r0, [r4, r1] - bl MOD83_02238E48 - pop {r4, pc} - .align 2, 0 + ldr r1, _02231668 ; =0x00002D74 + mov r0, #0 + str r0, [r4, r1] + ldr r2, [r4, r1] + sub r0, r1, #4 + str r2, [r4, r0] + ldr r0, [r4, r0] + sub r1, #8 + str r0, [r4, r1] + bl MOD83_02238E48 + pop {r4, pc} + .align 2, 0 _0223165C: .word 0x00002D64 _02231660: .word 0x00002D68 _02231664: .word 0x00002D70 _02231668: .word 0x00002D74 - thumb_func_end MOD83_022315F8 + thumb_func_end MOD83_022315F8 - thumb_func_start MOD83_0223166C + thumb_func_start MOD83_0223166C MOD83_0223166C: ; 0x0223166C - push {r3, r4, lr} - sub sp, #4 - ldr r1, _022316B4 ; =0x00003CEC - add r4, r0, #0 - mov r0, #0 - str r0, [r4, r1] - mov r1, #1 - str r1, [sp] - ldr r1, _022316B8 ; =0x00002D64 - mov r2, #0x48 - ldr r1, [r4, r1] - mov r3, #0xa8 - bl MOD83_02238DBC - ldr r1, _022316B8 ; =0x00002D64 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_02020238 - mov r0, #0 - ldr r1, _022316BC ; =0x00002D68 - str r0, [sp] - ldr r1, [r4, r1] - mov r2, #0xb8 - mov r3, #0xa8 - bl MOD83_02238DBC - ldr r1, _022316BC ; =0x00002D68 - str r0, [r4, r1] - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_02020238 - add sp, #4 - pop {r3, r4, pc} - .align 2, 0 + push {r3, r4, lr} + sub sp, #4 + ldr r1, _022316B4 ; =0x00003CEC + add r4, r0, #0 + mov r0, #0 + str r0, [r4, r1] + mov r1, #1 + str r1, [sp] + ldr r1, _022316B8 ; =0x00002D64 + mov r2, #0x48 + ldr r1, [r4, r1] + mov r3, #0xa8 + bl MOD83_02238DBC + ldr r1, _022316B8 ; =0x00002D64 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_02020238 + mov r0, #0 + ldr r1, _022316BC ; =0x00002D68 + str r0, [sp] + ldr r1, [r4, r1] + mov r2, #0xb8 + mov r3, #0xa8 + bl MOD83_02238DBC + ldr r1, _022316BC ; =0x00002D68 + str r0, [r4, r1] + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_02020238 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 _022316B4: .word 0x00003CEC _022316B8: .word 0x00002D64 _022316BC: .word 0x00002D68 - thumb_func_end MOD83_0223166C + thumb_func_end MOD83_0223166C - thumb_func_start MOD83_022316C0 + thumb_func_start MOD83_022316C0 MOD83_022316C0: ; 0x022316C0 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _022316D6 - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200CCF8 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _022316D6 + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200CCF8 _022316D6: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022316C0 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022316C0 - thumb_func_start MOD83_022316D8 + thumb_func_start MOD83_022316D8 MOD83_022316D8: ; 0x022316D8 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl WindowIsInUse - cmp r0, #1 - bne _022316EE - add r0, r5, #0 - add r1, r4, #0 - bl FUN_0200D0E0 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl WindowIsInUse + cmp r0, #1 + bne _022316EE + add r0, r5, #0 + add r1, r4, #0 + bl FUN_0200D0E0 _022316EE: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022316D8 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022316D8 - thumb_func_start MOD83_022316F0 + thumb_func_start MOD83_022316F0 MOD83_022316F0: ; 0x022316F0 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r0, #0 - ldr r0, _02231794 ; =0x00002B6C - add r4, r1, #0 - ldr r0, [r5, r0] - add r7, r2, #0 - str r3, [sp] - cmp r0, #0 - beq _02231708 - bl ListMenuItems_dtor + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r0, #0 + ldr r0, _02231794 ; =0x00002B6C + add r4, r1, #0 + ldr r0, [r5, r0] + add r7, r2, #0 + str r3, [sp] + cmp r0, #0 + beq _02231708 + bl ListMenuItems_dtor _02231708: - ldr r0, _02231798 ; =0x00002B68 - ldr r0, [r5, r0] - cmp r0, #0 - beq _02231718 - mov r1, #0 - add r2, r1, #0 - bl DestroyListMenu + ldr r0, _02231798 ; =0x00002B68 + ldr r0, [r5, r0] + cmp r0, #0 + beq _02231718 + mov r1, #0 + add r2, r1, #0 + bl DestroyListMenu _02231718: - add r0, r7, #0 - mov r1, #0x57 - bl ListMenuItems_ctor - ldr r1, _02231794 ; =0x00002B6C - ldr r2, _0223179C ; =0x00000172 - str r0, [r5, r1] - mov r0, #0 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _022317A0 ; =0x000029A4 - mov r6, #0 - str r0, [r5, r1] - cmp r7, #0 - ble _02231752 + add r0, r7, #0 + mov r1, #0x57 + bl ListMenuItems_ctor + ldr r1, _02231794 ; =0x00002B6C + ldr r2, _0223179C ; =0x00000172 + str r0, [r5, r1] + mov r0, #0 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _022317A0 ; =0x000029A4 + mov r6, #0 + str r0, [r5, r1] + cmp r7, #0 + ble _02231752 _0223173A: - ldr r0, _02231794 ; =0x00002B6C - ldr r1, _022317A0 ; =0x000029A4 - ldr r0, [r5, r0] - ldr r1, [r5, r1] - ldr r2, [r4] - ldr r3, [r4, #4] - bl ListMenuItems_AppendFromMsgData - add r6, r6, #1 - add r4, #8 - cmp r6, r7 - blt _0223173A + ldr r0, _02231794 ; =0x00002B6C + ldr r1, _022317A0 ; =0x000029A4 + ldr r0, [r5, r0] + ldr r1, [r5, r1] + ldr r2, [r4] + ldr r3, [r4, #4] + bl ListMenuItems_AppendFromMsgData + add r6, r6, #1 + add r4, #8 + cmp r6, r7 + blt _0223173A _02231752: - ldr r0, _022317A0 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r4, _022317A4 ; =MOD83_0223AE90 - add r3, sp, #4 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, _02231794 ; =0x00002B6C - mov r1, #0 - ldr r0, [r5, r0] - mov r3, #0x57 - str r0, [sp, #4] - add r0, sp, #4 - strh r7, [r0, #0x10] - ldr r0, [sp] - str r0, [sp, #0x10] - add r0, r2, #0 - add r2, r1, #0 - bl ListMenuInit - ldr r1, _02231798 ; =0x00002B68 - str r0, [r5, r1] - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - nop + ldr r0, _022317A0 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r4, _022317A4 ; =MOD83_0223AE90 + add r3, sp, #4 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, _02231794 ; =0x00002B6C + mov r1, #0 + ldr r0, [r5, r0] + mov r3, #0x57 + str r0, [sp, #4] + add r0, sp, #4 + strh r7, [r0, #0x10] + ldr r0, [sp] + str r0, [sp, #0x10] + add r0, r2, #0 + add r2, r1, #0 + bl ListMenuInit + ldr r1, _02231798 ; =0x00002B68 + str r0, [r5, r1] + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop _02231794: .word 0x00002B6C _02231798: .word 0x00002B68 _0223179C: .word 0x00000172 _022317A0: .word 0x000029A4 _022317A4: .word MOD83_0223AE90 - thumb_func_end MOD83_022316F0 + thumb_func_end MOD83_022316F0 - thumb_func_start MOD83_022317A8 + thumb_func_start MOD83_022317A8 MOD83_022317A8: ; 0x022317A8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - ldr r2, _02231818 ; =0x00000172 - add r5, r0, #0 - add r7, r1, #0 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - add r4, r0, #0 - mov r0, #0x57 - bl ScrStrBufs_new - add r6, r0, #0 - mov r0, #1 - mov r1, #6 - bl GetFontAttribute - add r1, r0, #0 - add r0, r5, #0 - bl FillWindowPixelBuffer - add r0, r6, #0 - add r1, r4, #0 - add r2, r7, #0 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _0223181C ; =0x00010200 - mov r1, #1 - str r0, [sp, #8] - add r0, r5, #0 - add r2, r7, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r5, #0 - bl CopyWindowToVram - add r0, r7, #0 - bl String_dtor - add r0, r4, #0 - bl DestroyMsgData - add r0, r6, #0 - bl ScrStrBufs_delete - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + ldr r2, _02231818 ; =0x00000172 + add r5, r0, #0 + add r7, r1, #0 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + add r4, r0, #0 + mov r0, #0x57 + bl ScrStrBufs_new + add r6, r0, #0 + mov r0, #1 + mov r1, #6 + bl GetFontAttribute + add r1, r0, #0 + add r0, r5, #0 + bl FillWindowPixelBuffer + add r0, r6, #0 + add r1, r4, #0 + add r2, r7, #0 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _0223181C ; =0x00010200 + mov r1, #1 + str r0, [sp, #8] + add r0, r5, #0 + add r2, r7, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r5, #0 + bl CopyWindowToVram + add r0, r7, #0 + bl String_dtor + add r0, r4, #0 + bl DestroyMsgData + add r0, r6, #0 + bl ScrStrBufs_delete + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02231818: .word 0x00000172 _0223181C: .word 0x00010200 - thumb_func_end MOD83_022317A8 + thumb_func_end MOD83_022317A8 - thumb_func_start MOD83_02231820 + thumb_func_start MOD83_02231820 MOD83_02231820: ; 0x02231820 - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x57 - mov r3, #0x1e - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0xb - mov r2, #0 - lsl r3, r3, #4 - bl GfGfxLoader_GXLoadPal - mov r0, #0x20 - str r0, [sp] - mov r0, #0x57 - mov r3, #6 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x10 - mov r2, #0 - lsl r3, r3, #6 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #3 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x57 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #0x11 - add r2, r4, #0 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - mov r0, #0x57 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r1, #0x12 - add r2, r4, #0 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #0xc - mov r2, #0 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #1 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r4, #0 - mov r1, #1 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02231820 - - thumb_func_start MOD83_022318B0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x57 + mov r3, #0x1e + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0xb + mov r2, #0 + lsl r3, r3, #4 + bl GfGfxLoader_GXLoadPal + mov r0, #0x20 + str r0, [sp] + mov r0, #0x57 + mov r3, #6 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x10 + mov r2, #0 + lsl r3, r3, #6 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #3 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x57 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #0x11 + add r2, r4, #0 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + mov r0, #0x57 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r1, #0x12 + add r2, r4, #0 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #0xc + mov r2, #0 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r4, #0 + mov r1, #1 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02231820 + + thumb_func_start MOD83_022318B0 MOD83_022318B0: ; 0x022318B0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022318DC ; =0x00002B70 - mov r1, #0x2e - add r0, r4, r0 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #0xa - bl MOD83_02231F88 - mov r0, #0xd - pop {r4, pc} - .align 2, 0 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022318DC ; =0x00002B70 + mov r1, #0x2e + add r0, r4, r0 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #0xa + bl MOD83_02231F88 + mov r0, #0xd + pop {r4, pc} + .align 2, 0 _022318DC: .word 0x00002B70 - thumb_func_end MOD83_022318B0 + thumb_func_end MOD83_022318B0 - thumb_func_start MOD83_022318E0 + thumb_func_start MOD83_022318E0 MOD83_022318E0: ; 0x022318E0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r4, r1] - add r1, #0x20 - ldr r1, [r4, r1] - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #1 - ldr r0, _0223192C ; =0x00002B70 - bne _0223190C - add r0, r4, r0 - mov r1, #0x3e - bl MOD83_022317A8 - b _02231914 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r4, r1] + add r1, #0x20 + ldr r1, [r4, r1] + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #1 + ldr r0, _0223192C ; =0x00002B70 + bne _0223190C + add r0, r4, r0 + mov r1, #0x3e + bl MOD83_022317A8 + b _02231914 _0223190C: - add r0, r4, r0 - mov r1, #0x3d - bl MOD83_022317A8 + add r0, r4, r0 + mov r1, #0x3d + bl MOD83_022317A8 _02231914: - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #9 - bl MOD83_02231F88 - mov r0, #0xc - pop {r4, pc} - nop + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #9 + bl MOD83_02231F88 + mov r0, #0xc + pop {r4, pc} + nop _0223192C: .word 0x00002B70 - thumb_func_end MOD83_022318E0 + thumb_func_end MOD83_022318E0 - thumb_func_start MOD83_02231930 + thumb_func_start MOD83_02231930 MOD83_02231930: ; 0x02231930 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022319C0 ; =0x00002B70 - mov r1, #0x3f - add r0, r4, r0 - bl MOD83_022317A8 - ldr r0, _022319C0 ; =0x00002B70 - mov r1, #0x13 - add r0, r4, r0 - bl FUN_0200D858 - ldr r1, _022319C4 ; =0x00003CF0 - str r0, [r4, r1] - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r4, r1] - add r1, #0x20 - ldr r1, [r4, r1] - bl FUN_0202ADC8 - ldr r0, _022319C8 ; =0x00002B44 - ldr r0, [r4, r0] - bl FUN_02022720 - ldr r0, _022319C4 ; =0x00003CF0 - ldr r0, [r4, r0] - bl FUN_0200DBFC - mov r0, #0xad - lsl r0, r0, #6 - ldr r0, [r4, r0] - bl FUN_0202AE70 - cmp r0, #0 - bne _02231984 - mov r0, #0x1a - pop {r4, pc} + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022319C0 ; =0x00002B70 + mov r1, #0x3f + add r0, r4, r0 + bl MOD83_022317A8 + ldr r0, _022319C0 ; =0x00002B70 + mov r1, #0x13 + add r0, r4, r0 + bl FUN_0200D858 + ldr r1, _022319C4 ; =0x00003CF0 + str r0, [r4, r1] + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r4, r1] + add r1, #0x20 + ldr r1, [r4, r1] + bl FUN_0202ADC8 + ldr r0, _022319C8 ; =0x00002B44 + ldr r0, [r4, r0] + bl FUN_02022720 + ldr r0, _022319C4 ; =0x00003CF0 + ldr r0, [r4, r0] + bl FUN_0200DBFC + mov r0, #0xad + lsl r0, r0, #6 + ldr r0, [r4, r0] + bl FUN_0202AE70 + cmp r0, #0 + bne _02231984 + mov r0, #0x1a + pop {r4, pc} _02231984: - ldr r1, _022319CC ; =0x00002B60 - add r0, r4, #0 - ldr r1, [r4, r1] - mov r2, #1 - bl MOD83_022320A4 - ldr r1, _022319CC ; =0x00002B60 - str r0, [r4, r1] - add r1, #0x10 - add r0, r4, r1 - mov r1, #0x24 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #8 - bl MOD83_02231F88 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - mov r0, #5 - pop {r4, pc} - nop + ldr r1, _022319CC ; =0x00002B60 + add r0, r4, #0 + ldr r1, [r4, r1] + mov r2, #1 + bl MOD83_022320A4 + ldr r1, _022319CC ; =0x00002B60 + str r0, [r4, r1] + add r1, #0x10 + add r0, r4, r1 + mov r1, #0x24 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #8 + bl MOD83_02231F88 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + mov r0, #5 + pop {r4, pc} + nop _022319C0: .word 0x00002B70 _022319C4: .word 0x00003CF0 _022319C8: .word 0x00002B44 _022319CC: .word 0x00002B60 - thumb_func_end MOD83_02231930 + thumb_func_end MOD83_02231930 - thumb_func_start MOD83_022319D0 + thumb_func_start MOD83_022319D0 MOD83_022319D0: ; 0x022319D0 - push {r4, lr} - bl OverlayManager_GetData - add r4, r0, #0 - bl MOD83_02231A00 - ldr r0, _022319FC ; =0x00002B70 - mov r1, #0x24 - add r0, r4, r0 - bl MOD83_022317A8 - mov r3, #0xae - lsl r3, r3, #6 - add r1, r4, r3 - add r3, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - mov r2, #8 - bl MOD83_02231F88 - mov r0, #5 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + bl OverlayManager_GetData + add r4, r0, #0 + bl MOD83_02231A00 + ldr r0, _022319FC ; =0x00002B70 + mov r1, #0x24 + add r0, r4, r0 + bl MOD83_022317A8 + mov r3, #0xae + lsl r3, r3, #6 + add r1, r4, r3 + add r3, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + mov r2, #8 + bl MOD83_02231F88 + mov r0, #5 + pop {r4, pc} + .align 2, 0 _022319FC: .word 0x00002B70 - thumb_func_end MOD83_022319D0 + thumb_func_end MOD83_022319D0 - thumb_func_start MOD83_02231A00 + thumb_func_start MOD83_02231A00 MOD83_02231A00: ; 0x02231A00 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02231A40 ; =0x00002B6C - ldr r0, [r4, r0] - bl ListMenuItems_dtor - mov r1, #0 - ldr r0, _02231A40 ; =0x00002B6C - add r2, r1, #0 - str r1, [r4, r0] - sub r0, r0, #4 - ldr r0, [r4, r0] - bl DestroyListMenu - ldr r0, _02231A44 ; =0x00002B68 - mov r1, #0 - str r1, [r4, r0] - add r0, #0x18 - add r0, r4, r0 - bl MOD83_022316C0 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - bl RemoveWindow - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + ldr r0, _02231A40 ; =0x00002B6C + ldr r0, [r4, r0] + bl ListMenuItems_dtor + mov r1, #0 + ldr r0, _02231A40 ; =0x00002B6C + add r2, r1, #0 + str r1, [r4, r0] + sub r0, r0, #4 + ldr r0, [r4, r0] + bl DestroyListMenu + ldr r0, _02231A44 ; =0x00002B68 + mov r1, #0 + str r1, [r4, r0] + add r0, #0x18 + add r0, r4, r0 + bl MOD83_022316C0 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + bl RemoveWindow + pop {r4, pc} + .align 2, 0 _02231A40: .word 0x00002B6C _02231A44: .word 0x00002B68 - thumb_func_end MOD83_02231A00 + thumb_func_end MOD83_02231A00 - thumb_func_start MOD83_02231A48 + thumb_func_start MOD83_02231A48 MOD83_02231A48: ; 0x02231A48 - mov r0, #1 - bx lr - thumb_func_end MOD83_02231A48 + mov r0, #1 + bx lr + thumb_func_end MOD83_02231A48 - thumb_func_start MOD83_02231A4C + thumb_func_start MOD83_02231A4C MOD83_02231A4C: ; 0x02231A4C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r0, #0 - add r7, r1, #0 - ldr r1, [r5] - mov r0, #0x25 - add r4, r2, #0 - bl String_ctor - ldr r1, _02231A9C ; =0x00002B60 - add r6, r0, #0 - ldr r2, [r5, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r1] - mov r1, #0x41 - lsl r1, r1, #2 - add r1, r2, r1 - mov r2, #0x24 - bl CopyU16ArrayToStringN - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r4, [sp, #8] - add r0, r7, #0 - mov r1, #1 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - mov r0, #1 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r0, #0 + add r7, r1, #0 + ldr r1, [r5] + mov r0, #0x25 + add r4, r2, #0 + bl String_ctor + ldr r1, _02231A9C ; =0x00002B60 + add r6, r0, #0 + ldr r2, [r5, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r1] + mov r1, #0x41 + lsl r1, r1, #2 + add r1, r2, r1 + mov r2, #0x24 + bl CopyU16ArrayToStringN + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r4, [sp, #8] + add r0, r7, #0 + mov r1, #1 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r6, #0 + bl String_dtor + mov r0, #1 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _02231A9C: .word 0x00002B60 - thumb_func_end MOD83_02231A4C + thumb_func_end MOD83_02231A4C - thumb_func_start MOD83_02231AA0 + thumb_func_start MOD83_02231AA0 MOD83_02231AA0: ; 0x02231AA0 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r4, r0, #0 - ldr r0, _02231B10 ; =0x00002B60 - add r6, r1, #0 - ldr r1, [r4, r0] - add r5, r2, #0 - lsl r2, r1, #2 - add r3, r4, r2 - add r2, r0, #0 - sub r2, #0xc - ldr r3, [r3, r2] - ldr r2, _02231B14 ; =0x00000152 - ldrb r2, [r3, r2] - lsl r2, r2, #0x1c - lsr r2, r2, #0x1f - bne _02231AC6 - mov r2, #0x27 - b _02231ADE + push {r4, r5, r6, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, _02231B10 ; =0x00002B60 + add r6, r1, #0 + ldr r1, [r4, r0] + add r5, r2, #0 + lsl r2, r1, #2 + add r3, r4, r2 + add r2, r0, #0 + sub r2, #0xc + ldr r3, [r3, r2] + ldr r2, _02231B14 ; =0x00000152 + ldrb r2, [r3, r2] + lsl r2, r2, #0x1c + lsr r2, r2, #0x1f + bne _02231AC6 + mov r2, #0x27 + b _02231ADE _02231AC6: - sub r0, #0x20 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02231AD8 - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #1 - bne _02231ADC + sub r0, #0x20 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02231AD8 + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #1 + bne _02231ADC _02231AD8: - mov r2, #0x25 - b _02231ADE + mov r2, #0x25 + b _02231ADE _02231ADC: - mov r2, #0x26 + mov r2, #0x26 _02231ADE: - ldr r1, _02231B18 ; =0x000029A0 - ldr r3, [r4] - ldr r0, [r4, r1] - add r1, r1, #4 - ldr r1, [r4, r1] - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r5, [sp, #8] - add r0, r6, #0 - mov r1, #1 - add r2, r4, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl String_dtor - mov r0, #1 - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + ldr r1, _02231B18 ; =0x000029A0 + ldr r3, [r4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r5, [sp, #8] + add r0, r6, #0 + mov r1, #1 + add r2, r4, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl String_dtor + mov r0, #1 + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02231B10: .word 0x00002B60 _02231B14: .word 0x00000152 _02231B18: .word 0x000029A0 - thumb_func_end MOD83_02231AA0 + thumb_func_end MOD83_02231AA0 - thumb_func_start MOD83_02231B1C + thumb_func_start MOD83_02231B1C MOD83_02231B1C: ; 0x02231B1C - push {r4, lr} - sub sp, #0x18 - ldr r1, _02231B7C ; =0x00002B60 - add r4, r0, #0 - ldr r2, [r4, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r4, r2 - ldr r2, [r2, r1] - mov r1, #0xd5 - lsl r1, r1, #2 - ldr r1, [r2, r1] - add r0, sp, #8 - bl RTC_ConvertDayToDate - mov r0, #2 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231B80 ; =0x000029A0 - mov r2, #0x7d - ldr r3, [sp, #8] - lsl r2, r2, #4 - add r2, r3, r2 - ldr r0, [r4, r0] - mov r1, #0 - mov r3, #4 - bl BufferIntegerAsString - ldr r0, _02231B80 ; =0x000029A0 - ldr r2, [sp, #0xc] - ldr r0, [r4, r0] - mov r1, #1 - bl BufferMonthNameAbbr - mov r1, #2 - str r1, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231B80 ; =0x000029A0 - ldr r2, [sp, #0x10] - ldr r0, [r4, r0] - add r3, r1, #0 - bl BufferIntegerAsString - mov r0, #1 - add sp, #0x18 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x18 + ldr r1, _02231B7C ; =0x00002B60 + add r4, r0, #0 + ldr r2, [r4, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r4, r2 + ldr r2, [r2, r1] + mov r1, #0xd5 + lsl r1, r1, #2 + ldr r1, [r2, r1] + add r0, sp, #8 + bl RTC_ConvertDayToDate + mov r0, #2 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231B80 ; =0x000029A0 + mov r2, #0x7d + ldr r3, [sp, #8] + lsl r2, r2, #4 + add r2, r3, r2 + ldr r0, [r4, r0] + mov r1, #0 + mov r3, #4 + bl BufferIntegerAsString + ldr r0, _02231B80 ; =0x000029A0 + ldr r2, [sp, #0xc] + ldr r0, [r4, r0] + mov r1, #1 + bl BufferMonthNameAbbr + mov r1, #2 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231B80 ; =0x000029A0 + ldr r2, [sp, #0x10] + ldr r0, [r4, r0] + add r3, r1, #0 + bl BufferIntegerAsString + mov r0, #1 + add sp, #0x18 + pop {r4, pc} + .align 2, 0 _02231B7C: .word 0x00002B60 _02231B80: .word 0x000029A0 - thumb_func_end MOD83_02231B1C + thumb_func_end MOD83_02231B1C - thumb_func_start MOD83_02231B84 + thumb_func_start MOD83_02231B84 MOD83_02231B84: ; 0x02231B84 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r5, r0, #0 - add r7, r1, #0 - mov r0, #0xfb - mov r1, #0x57 - add r4, r2, #0 - bl String_ctor - ldr r1, _02231BD4 ; =0x00002B60 - add r6, r0, #0 - ldr r2, [r5, r1] - sub r1, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r1] - mov r1, #0x55 - lsl r1, r1, #2 - add r1, r2, r1 - mov r2, #0xfa - bl CopyU16ArrayToStringN - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r4, [sp, #8] - add r0, r7, #0 - mov r1, #1 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - mov r0, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r0, #0 + add r7, r1, #0 + mov r0, #0xfb + mov r1, #0x57 + add r4, r2, #0 + bl String_ctor + ldr r1, _02231BD4 ; =0x00002B60 + add r6, r0, #0 + ldr r2, [r5, r1] + sub r1, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r1] + mov r1, #0x55 + lsl r1, r1, #2 + add r1, r2, r1 + mov r2, #0xfa + bl CopyU16ArrayToStringN + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r4, [sp, #8] + add r0, r7, #0 + mov r1, #1 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r6, #0 + bl String_dtor + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop _02231BD4: .word 0x00002B60 - thumb_func_end MOD83_02231B84 + thumb_func_end MOD83_02231B84 - thumb_func_start MOD83_02231BD8 + thumb_func_start MOD83_02231BD8 MOD83_02231BD8: ; 0x02231BD8 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r3, r0, #0 - ldr r0, _02231C50 ; =0x00002B60 - add r6, r1, #0 - ldr r1, [r3, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r3, r1 - ldr r1, [r1, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - add r5, r2, #0 - ldrb r2, [r1, r0] - cmp r2, #0xff - bne _02231C2C - ldr r1, _02231C54 ; =0x000029A0 - mov r2, #0x33 - ldr r0, [r3, r1] - add r1, r1, #4 - ldr r1, [r3, r1] - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - str r5, [sp, #8] - add r0, r6, #0 - mov r1, #1 - add r2, r4, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl String_dtor - add sp, #0x10 - mov r0, #0 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #0x10 + add r3, r0, #0 + ldr r0, _02231C50 ; =0x00002B60 + add r6, r1, #0 + ldr r1, [r3, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r3, r1 + ldr r1, [r1, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + add r5, r2, #0 + ldrb r2, [r1, r0] + cmp r2, #0xff + bne _02231C2C + ldr r1, _02231C54 ; =0x000029A0 + mov r2, #0x33 + ldr r0, [r3, r1] + add r1, r1, #4 + ldr r1, [r3, r1] + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r5, [sp, #8] + add r0, r6, #0 + mov r1, #1 + add r2, r4, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl String_dtor + add sp, #0x10 + mov r0, #0 + pop {r4, r5, r6, pc} _02231C2C: - cmp r2, #0 - beq _02231C48 - mov r1, #0 - str r1, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, _02231C54 ; =0x000029A0 - ldr r0, [r3, r0] - mov r3, #3 - bl BufferIntegerAsString - add sp, #0x10 - mov r0, #1 - pop {r4, r5, r6, pc} + cmp r2, #0 + beq _02231C48 + mov r1, #0 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02231C54 ; =0x000029A0 + ldr r0, [r3, r0] + mov r3, #3 + bl BufferIntegerAsString + add sp, #0x10 + mov r0, #1 + pop {r4, r5, r6, pc} _02231C48: - mov r0, #0 - add sp, #0x10 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #0x10 + pop {r4, r5, r6, pc} + nop _02231C50: .word 0x00002B60 _02231C54: .word 0x000029A0 - thumb_func_end MOD83_02231BD8 + thumb_func_end MOD83_02231BD8 - thumb_func_start MOD83_02231C58 + thumb_func_start MOD83_02231C58 MOD83_02231C58: ; 0x02231C58 - push {r4, r5, r6, r7, lr} - sub sp, #0x34 - add r5, r0, #0 - mov r0, #0 - add r7, r1, #0 - add r1, r0, #1 - ldr r0, _02231D38 ; =MOD83_0223AE40 - ldr r2, _02231D38 ; =MOD83_0223AE40 - ldr r0, [r0, #0x30] - ldr r2, [r2, #0x34] - str r0, [sp, #0x14] - ldr r0, _02231D3C ; =0x00002B60 - str r2, [sp, #0x18] - ldr r2, [r5, r0] - sub r0, #0xc - lsl r2, r2, #2 - add r2, r5, r2 - ldr r2, [r2, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - ldrb r0, [r2, r0] - add r4, r1, #0 - add r6, sp, #0x14 - cmp r0, #0 - beq _02231C9C - ldr r0, _02231D38 ; =MOD83_0223AE40 - ldr r2, _02231D38 ; =MOD83_0223AE40 - ldr r0, [r0, #0x38] - add r4, r1, #1 - lsl r1, r1, #3 - ldr r2, [r2, #0x3c] - add r3, r6, r1 - str r0, [r6, r1] - str r2, [r3, #4] + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + add r5, r0, #0 + mov r0, #0 + add r7, r1, #0 + add r1, r0, #1 + ldr r0, _02231D38 ; =MOD83_0223AE40 + ldr r2, _02231D38 ; =MOD83_0223AE40 + ldr r0, [r0, #0x30] + ldr r2, [r2, #0x34] + str r0, [sp, #0x14] + ldr r0, _02231D3C ; =0x00002B60 + str r2, [sp, #0x18] + ldr r2, [r5, r0] + sub r0, #0xc + lsl r2, r2, #2 + add r2, r5, r2 + ldr r2, [r2, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + ldrb r0, [r2, r0] + add r4, r1, #0 + add r6, sp, #0x14 + cmp r0, #0 + beq _02231C9C + ldr r0, _02231D38 ; =MOD83_0223AE40 + ldr r2, _02231D38 ; =MOD83_0223AE40 + ldr r0, [r0, #0x38] + add r4, r1, #1 + lsl r1, r1, #3 + ldr r2, [r2, #0x3c] + add r3, r6, r1 + str r0, [r6, r1] + str r2, [r3, #4] _02231C9C: - mov r1, #0xad - lsl r1, r1, #6 - ldr r0, [r5, r1] - add r1, #0x20 - ldr r1, [r5, r1] - add r1, r1, #1 - bl FUN_0202AE90 - cmp r0, #0 - bne _02231CC2 - ldr r2, _02231D38 ; =MOD83_0223AE40 - lsl r1, r4, #3 - ldr r0, [r2, #0x40] - add r6, sp, #0x14 - ldr r2, [r2, #0x44] - add r3, r6, r1 - str r0, [r6, r1] - add r4, r4, #1 - str r2, [r3, #4] + mov r1, #0xad + lsl r1, r1, #6 + ldr r0, [r5, r1] + add r1, #0x20 + ldr r1, [r5, r1] + add r1, r1, #1 + bl FUN_0202AE90 + cmp r0, #0 + bne _02231CC2 + ldr r2, _02231D38 ; =MOD83_0223AE40 + lsl r1, r4, #3 + ldr r0, [r2, #0x40] + add r6, sp, #0x14 + ldr r2, [r2, #0x44] + add r3, r6, r1 + str r0, [r6, r1] + add r4, r4, #1 + str r2, [r3, #4] _02231CC2: - ldr r2, _02231D38 ; =MOD83_0223AE40 - lsl r1, r4, #3 - ldr r0, [r2, #0x48] - add r6, sp, #0x14 - str r0, [r6, r1] - ldr r2, [r2, #0x4c] - add r3, r6, r1 - ldr r0, _02231D40 ; =0x00002B3C - str r2, [r3, #4] - ldr r6, [r5, r0] - add r0, r7, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r7, #0 - bl RemoveWindow - add r1, r4, #1 - mov r0, #4 - sub r0, r0, r1 - ldr r1, [r6, #8] - lsl r0, r0, #1 - add r1, r1, r0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp] - ldr r1, [r6, #0xc] - mov r2, #2 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #4] - ldr r1, [r6, #0x10] - sub r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - ldr r0, _02231D44 ; =0x00002B38 - add r1, r7, #0 - ldr r0, [r5, r0] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02231D48 ; =0x0000299C - ldr r3, [r6, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized - add r0, r5, #0 - add r1, sp, #0x14 - add r2, r4, #1 - add r3, r7, #0 - bl MOD83_022316F0 - mov r0, #1 - add sp, #0x34 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, _02231D38 ; =MOD83_0223AE40 + lsl r1, r4, #3 + ldr r0, [r2, #0x48] + add r6, sp, #0x14 + str r0, [r6, r1] + ldr r2, [r2, #0x4c] + add r3, r6, r1 + ldr r0, _02231D40 ; =0x00002B3C + str r2, [r3, #4] + ldr r6, [r5, r0] + add r0, r7, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r7, #0 + bl RemoveWindow + add r1, r4, #1 + mov r0, #4 + sub r0, r0, r1 + ldr r1, [r6, #8] + lsl r0, r0, #1 + add r1, r1, r0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp] + ldr r1, [r6, #0xc] + mov r2, #2 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #4] + ldr r1, [r6, #0x10] + sub r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + ldr r0, _02231D44 ; =0x00002B38 + add r1, r7, #0 + ldr r0, [r5, r0] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02231D48 ; =0x0000299C + ldr r3, [r6, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized + add r0, r5, #0 + add r1, sp, #0x14 + add r2, r4, #1 + add r3, r7, #0 + bl MOD83_022316F0 + mov r0, #1 + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02231D38: .word MOD83_0223AE40 _02231D3C: .word 0x00002B60 _02231D40: .word 0x00002B3C _02231D44: .word 0x00002B38 _02231D48: .word 0x0000299C - thumb_func_end MOD83_02231C58 + thumb_func_end MOD83_02231C58 - thumb_func_start MOD83_02231D4C + thumb_func_start MOD83_02231D4C MOD83_02231D4C: ; 0x02231D4C - push {r3, lr} - add r3, r1, #0 - ldr r1, _02231D5C ; =MOD83_0223AE40 - mov r2, #2 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + add r3, r1, #0 + ldr r1, _02231D5C ; =MOD83_0223AE40 + mov r2, #2 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02231D5C: .word MOD83_0223AE40 - thumb_func_end MOD83_02231D4C + thumb_func_end MOD83_02231D4C - thumb_func_start MOD83_02231D60 + thumb_func_start MOD83_02231D60 MOD83_02231D60: ; 0x02231D60 - push {r3, lr} - add r3, r1, #0 - ldr r1, _02231D70 ; =MOD83_0223AE60 - mov r2, #2 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + add r3, r1, #0 + ldr r1, _02231D70 ; =MOD83_0223AE60 + mov r2, #2 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02231D70: .word MOD83_0223AE60 - thumb_func_end MOD83_02231D60 + thumb_func_end MOD83_02231D60 - thumb_func_start MOD83_02231D74 + thumb_func_start MOD83_02231D74 MOD83_02231D74: ; 0x02231D74 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, _02231D94 ; =0x00002B70 - add r4, r1, #0 - add r0, r5, r0 - mov r1, #2 - bl MOD83_022317A8 - ldr r1, _02231D98 ; =MOD83_0223AE50 - add r0, r5, #0 - mov r2, #2 - add r3, r4, #0 - bl MOD83_022316F0 - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _02231D94 ; =0x00002B70 + add r4, r1, #0 + add r0, r5, r0 + mov r1, #2 + bl MOD83_022317A8 + ldr r1, _02231D98 ; =MOD83_0223AE50 + add r0, r5, #0 + mov r2, #2 + add r3, r4, #0 + bl MOD83_022316F0 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _02231D94: .word 0x00002B70 _02231D98: .word MOD83_0223AE50 - thumb_func_end MOD83_02231D74 + thumb_func_end MOD83_02231D74 - thumb_func_start MOD83_02231D9C + thumb_func_start MOD83_02231D9C MOD83_02231D9C: ; 0x02231D9C - push {r3, lr} - sub sp, #8 - mov r3, #1 - str r3, [sp] - ldr r1, _02231DB8 ; =0x000029A0 - str r3, [sp, #4] - ldr r0, [r0, r1] - mov r1, #0 - add r2, r1, #0 - bl BufferIntegerAsString - mov r0, #1 - add sp, #8 - pop {r3, pc} - .align 2, 0 + push {r3, lr} + sub sp, #8 + mov r3, #1 + str r3, [sp] + ldr r1, _02231DB8 ; =0x000029A0 + str r3, [sp, #4] + ldr r0, [r0, r1] + mov r1, #0 + add r2, r1, #0 + bl BufferIntegerAsString + mov r0, #1 + add sp, #8 + pop {r3, pc} + .align 2, 0 _02231DB8: .word 0x000029A0 - thumb_func_end MOD83_02231D9C + thumb_func_end MOD83_02231D9C - thumb_func_start MOD83_02231DBC + thumb_func_start MOD83_02231DBC MOD83_02231DBC: ; 0x02231DBC - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x57 - str r0, [sp, #8] - add r6, r2, #0 - mov r0, #0 - add r4, r3, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02231DE4 - mov r0, #0x1b - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x57 + str r0, [sp, #8] + add r6, r2, #0 + mov r0, #0 + add r4, r3, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02231DE4 + mov r0, #0x1b + str r0, [r4] _02231DE4: - ldr r0, _02231DEC ; =0x00002BE0 - str r6, [r5, r0] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 + ldr r0, _02231DEC ; =0x00002BE0 + str r6, [r5, r0] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 _02231DEC: .word 0x00002BE0 - thumb_func_end MOD83_02231DBC + thumb_func_end MOD83_02231DBC - thumb_func_start MOD83_02231DF0 + thumb_func_start MOD83_02231DF0 MOD83_02231DF0: ; 0x02231DF0 - push {r4, r5, r6, r7, lr} - sub sp, #0x34 - add r5, r0, #0 - str r2, [sp, #0x14] - ldr r2, _02231F68 ; =0x00000172 - ldr r3, [r5] - mov r0, #1 - mov r1, #0x1a - ldr r4, _02231F6C ; =MOD83_0223AEB0 - bl NewMsgDataFromNarc - ldr r1, _02231F70 ; =0x000029A4 - str r0, [r5, r1] - ldr r0, [r5] - bl ScrStrBufs_new - ldr r1, _02231F74 ; =0x000029A0 - str r0, [r5, r1] - ldr r1, _02231F78 ; =0x00002B64 - ldr r0, [sp, #0x14] - str r0, [r5, r1] - ldr r1, [sp, #0x14] - add r0, r5, #0 - bl MOD83_02232118 - mov r0, #0 - str r0, [sp, #0x2c] - ldr r0, _02231F7C ; =0x000029A8 - add r7, r4, #0 - str r5, [sp, #0x1c] - add r6, r5, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + add r5, r0, #0 + str r2, [sp, #0x14] + ldr r2, _02231F68 ; =0x00000172 + ldr r3, [r5] + mov r0, #1 + mov r1, #0x1a + ldr r4, _02231F6C ; =MOD83_0223AEB0 + bl NewMsgDataFromNarc + ldr r1, _02231F70 ; =0x000029A4 + str r0, [r5, r1] + ldr r0, [r5] + bl ScrStrBufs_new + ldr r1, _02231F74 ; =0x000029A0 + str r0, [r5, r1] + ldr r1, _02231F78 ; =0x00002B64 + ldr r0, [sp, #0x14] + str r0, [r5, r1] + ldr r1, [sp, #0x14] + add r0, r5, #0 + bl MOD83_02232118 + mov r0, #0 + str r0, [sp, #0x2c] + ldr r0, _02231F7C ; =0x000029A8 + add r7, r4, #0 + str r5, [sp, #0x1c] + add r6, r5, r0 _02231E2E: - ldr r1, [r7] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _02231E50 - cmp r1, #2 - beq _02231E50 - ldr r1, [sp, #0x1c] - ldr r0, _02231F7C ; =0x000029A8 - ldr r0, [r1, r0] - cmp r0, #0 - beq _02231E50 - add r0, r6, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r6, #0 - bl RemoveWindow + ldr r1, [r7] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _02231E50 + cmp r1, #2 + beq _02231E50 + ldr r1, [sp, #0x1c] + ldr r0, _02231F7C ; =0x000029A8 + ldr r0, [r1, r0] + cmp r0, #0 + beq _02231E50 + add r0, r6, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r6, #0 + bl RemoveWindow _02231E50: - ldr r0, [sp, #0x1c] - add r7, #0x30 - add r0, #0x10 - str r0, [sp, #0x1c] - ldr r0, [sp, #0x2c] - add r6, #0x10 - add r0, r0, #1 - str r0, [sp, #0x2c] - cmp r0, #0x13 - blo _02231E2E - mov r0, #0 - str r0, [sp, #0x18] - ldr r0, _02231F7C ; =0x000029A8 - mov r7, #0x31 - str r5, [sp, #0x24] - str r5, [sp, #0x20] - add r6, r5, r0 + ldr r0, [sp, #0x1c] + add r7, #0x30 + add r0, #0x10 + str r0, [sp, #0x1c] + ldr r0, [sp, #0x2c] + add r6, #0x10 + add r0, r0, #1 + str r0, [sp, #0x2c] + cmp r0, #0x13 + blo _02231E2E + mov r0, #0 + str r0, [sp, #0x18] + ldr r0, _02231F7C ; =0x000029A8 + mov r7, #0x31 + str r5, [sp, #0x24] + str r5, [sp, #0x20] + add r6, r5, r0 _02231E72: - ldr r1, [r4] - ldr r0, [sp, #0x14] - cmp r0, r1 - bne _02231F2E - ldr r1, [sp, #0x24] - ldr r0, _02231F7C ; =0x000029A8 - ldr r0, [r1, r0] - cmp r0, #0 - bne _02231EBE - ldr r1, [sp, #0x20] - ldr r0, _02231F80 ; =0x00002AE8 - mov r2, #0 - str r7, [r1, r0] - ldr r0, [r4, #8] - add r1, r6, #0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4, #0xc] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #4] - ldr r0, [r4, #0x10] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02231F84 ; =0x0000299C - ldr r3, [r4, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + ldr r1, [r4] + ldr r0, [sp, #0x14] + cmp r0, r1 + bne _02231F2E + ldr r1, [sp, #0x24] + ldr r0, _02231F7C ; =0x000029A8 + ldr r0, [r1, r0] + cmp r0, #0 + bne _02231EBE + ldr r1, [sp, #0x20] + ldr r0, _02231F80 ; =0x00002AE8 + mov r2, #0 + str r7, [r1, r0] + ldr r0, [r4, #8] + add r1, r6, #0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4, #0xc] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + ldr r0, [r4, #0x10] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02231F84 ; =0x0000299C + ldr r3, [r4, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02231EBE: - ldr r0, [r4, #0x14] - ldr r1, [r4, #0x1c] - lsl r0, r0, #0x18 - lsl r1, r1, #0x18 - lsr r0, r0, #0x18 - lsr r1, r1, #0x18 - bl GetFontAttribute - add r1, r0, #0 - add r0, r6, #0 - bl FillWindowPixelBuffer - ldr r0, [r4, #0x18] - ldr r3, [r4, #0x24] - str r0, [sp, #0x28] - ldr r2, [sp, #0x28] - add r0, r5, #0 - add r1, r6, #0 - blx r3 - cmp r0, #1 - bne _02231F20 - ldr r2, [r4, #0x20] - cmp r2, #0 - beq _02231F20 - ldr r0, _02231F74 ; =0x000029A0 - ldr r1, _02231F70 ; =0x000029A4 - ldr r0, [r5, r0] - ldr r1, [r5, r1] - ldr r3, [r5] - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x30] - ldr r0, [r4, #0x2c] - ldr r2, [sp, #0x30] - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [sp, #0x28] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r1, [r4, #0x14] - ldr r3, [r4, #0x28] - add r0, r6, #0 - bl AddTextPrinterParameterized2 - ldr r0, [sp, #0x30] - bl String_dtor + ldr r0, [r4, #0x14] + ldr r1, [r4, #0x1c] + lsl r0, r0, #0x18 + lsl r1, r1, #0x18 + lsr r0, r0, #0x18 + lsr r1, r1, #0x18 + bl GetFontAttribute + add r1, r0, #0 + add r0, r6, #0 + bl FillWindowPixelBuffer + ldr r0, [r4, #0x18] + ldr r3, [r4, #0x24] + str r0, [sp, #0x28] + ldr r2, [sp, #0x28] + add r0, r5, #0 + add r1, r6, #0 + blx r3 + cmp r0, #1 + bne _02231F20 + ldr r2, [r4, #0x20] + cmp r2, #0 + beq _02231F20 + ldr r0, _02231F74 ; =0x000029A0 + ldr r1, _02231F70 ; =0x000029A4 + ldr r0, [r5, r0] + ldr r1, [r5, r1] + ldr r3, [r5] + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x30] + ldr r0, [r4, #0x2c] + ldr r2, [sp, #0x30] + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [sp, #0x28] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r1, [r4, #0x14] + ldr r3, [r4, #0x28] + add r0, r6, #0 + bl AddTextPrinterParameterized2 + ldr r0, [sp, #0x30] + bl String_dtor _02231F20: - add r0, r6, #0 - bl CopyWindowToVram - ldr r1, [r4, #0xc] - ldr r0, [r4, #0x10] - mul r0, r1 - add r7, r7, r0 + add r0, r6, #0 + bl CopyWindowToVram + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x10] + mul r0, r1 + add r7, r7, r0 _02231F2E: - ldr r0, [sp, #0x24] - add r4, #0x30 - add r0, #0x10 - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - add r6, #0x10 - add r0, r0, #4 - str r0, [sp, #0x20] - ldr r0, [sp, #0x18] - add r0, r0, #1 - str r0, [sp, #0x18] - cmp r0, #0x13 - blo _02231E72 - ldr r0, _02231F70 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _02231F74 ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _02231F64 - add r0, r5, #0 - bl MOD83_0223227C + ldr r0, [sp, #0x24] + add r4, #0x30 + add r0, #0x10 + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + add r6, #0x10 + add r0, r0, #4 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + add r0, r0, #1 + str r0, [sp, #0x18] + cmp r0, #0x13 + blo _02231E72 + ldr r0, _02231F70 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _02231F74 ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _02231F64 + add r0, r5, #0 + bl MOD83_0223227C _02231F64: - add sp, #0x34 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02231F68: .word 0x00000172 _02231F6C: .word MOD83_0223AEB0 _02231F70: .word 0x000029A4 @@ -9204,130 +9204,130 @@ _02231F78: .word 0x00002B64 _02231F7C: .word 0x000029A8 _02231F80: .word 0x00002AE8 _02231F84: .word 0x0000299C - thumb_func_end MOD83_02231DF0 + thumb_func_end MOD83_02231DF0 - thumb_func_start MOD83_02231F88 + thumb_func_start MOD83_02231F88 MOD83_02231F88: ; 0x02231F88 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r5, r0, #0 - add r7, r3, #0 - mov r3, #0x30 - ldr r0, _02232084 ; =MOD83_0223AEB0 - mul r3, r2 - add r6, r1, #0 - add r4, r0, r3 - ldr r0, [r6] - cmp r0, #0 - bne _02231FD2 - ldr r0, [r4, #8] - mov r2, #2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - ldr r0, [r4, #0xc] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #4] - ldr r0, [r4, #0x10] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - mov r0, #0xf - str r0, [sp, #0xc] - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - ldr r0, _02232088 ; =0x0000299C - ldr r3, [r4, #4] - ldr r0, [r5, r0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + add r7, r3, #0 + mov r3, #0x30 + ldr r0, _02232084 ; =MOD83_0223AEB0 + mul r3, r2 + add r6, r1, #0 + add r4, r0, r3 + ldr r0, [r6] + cmp r0, #0 + bne _02231FD2 + ldr r0, [r4, #8] + mov r2, #2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldr r0, [r4, #0xc] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + ldr r0, [r4, #0x10] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r0, #0xf + str r0, [sp, #0xc] + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldr r0, _02232088 ; =0x0000299C + ldr r3, [r4, #4] + ldr r0, [r5, r0] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02231FD2: - ldr r1, [r4, #0x1c] - add r0, r6, #0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FillWindowPixelBuffer - ldr r0, [r4, #0x20] - cmp r0, #0 - beq _02231FFE - ldr r2, _0223208C ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _02232090 ; =0x000029A4 - str r0, [r5, r1] - mov r0, #0x57 - bl ScrStrBufs_new - ldr r1, _02232094 ; =0x000029A0 - str r0, [r5, r1] + ldr r1, [r4, #0x1c] + add r0, r6, #0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + bl FillWindowPixelBuffer + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _02231FFE + ldr r2, _0223208C ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _02232090 ; =0x000029A4 + str r0, [r5, r1] + mov r0, #0x57 + bl ScrStrBufs_new + ldr r1, _02232094 ; =0x000029A0 + str r0, [r5, r1] _02231FFE: - ldr r0, _02232098 ; =0x00002B38 - ldr r2, _0223209C ; =0x00010200 - str r7, [r5, r0] - add r0, r0, #4 - str r4, [r5, r0] - ldr r3, [r4, #0x24] - add r0, r5, #0 - add r1, r6, #0 - blx r3 - ldr r2, [r4, #0x20] - cmp r2, #0 - beq _02232054 - ldr r1, _02232094 ; =0x000029A0 - mov r3, #0x57 - ldr r0, [r5, r1] - add r1, r1, #4 - ldr r1, [r5, r1] - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x14] - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, [r4, #0x18] - ldr r2, [sp, #0x14] - str r0, [sp, #8] - str r3, [sp, #0xc] - ldr r1, [r4, #0x14] - add r0, r6, #0 - bl AddTextPrinterParameterized2 - ldr r0, [sp, #0x14] - bl String_dtor - ldr r0, _02232090 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _02232094 ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete + ldr r0, _02232098 ; =0x00002B38 + ldr r2, _0223209C ; =0x00010200 + str r7, [r5, r0] + add r0, r0, #4 + str r4, [r5, r0] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r1, r6, #0 + blx r3 + ldr r2, [r4, #0x20] + cmp r2, #0 + beq _02232054 + ldr r1, _02232094 ; =0x000029A0 + mov r3, #0x57 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x14] + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, [r4, #0x18] + ldr r2, [sp, #0x14] + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r1, [r4, #0x14] + add r0, r6, #0 + bl AddTextPrinterParameterized2 + ldr r0, [sp, #0x14] + bl String_dtor + ldr r0, _02232090 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _02232094 ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete _02232054: - ldr r0, _022320A0 ; =0x00002B70 - add r0, r5, r0 - cmp r6, r0 - bne _0223206A - add r0, r6, #0 - mov r1, #0 - mov r2, #0x13 - mov r3, #0xa - bl FUN_0200D0BC - b _02232076 + ldr r0, _022320A0 ; =0x00002B70 + add r0, r5, r0 + cmp r6, r0 + bne _0223206A + add r0, r6, #0 + mov r1, #0 + mov r2, #0x13 + mov r3, #0xa + bl FUN_0200D0BC + b _02232076 _0223206A: - add r0, r6, #0 - mov r1, #0 - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CCA4 + add r0, r6, #0 + mov r1, #0 + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CCA4 _02232076: - ldr r1, [r4, #0xc] - ldr r0, [r4, #0x10] - mul r0, r1 - add r0, r7, r0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x10] + mul r0, r1 + add r0, r7, r0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop _02232084: .word MOD83_0223AEB0 _02232088: .word 0x0000299C _0223208C: .word 0x00000172 @@ -9336,880 +9336,880 @@ _02232094: .word 0x000029A0 _02232098: .word 0x00002B38 _0223209C: .word 0x00010200 _022320A0: .word 0x00002B70 - thumb_func_end MOD83_02231F88 + thumb_func_end MOD83_02231F88 - thumb_func_start MOD83_022320A4 + thumb_func_start MOD83_022320A4 MOD83_022320A4: ; 0x022320A4 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - add r6, r2, #0 - add r7, r4, #0 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r5, r0, #0 + add r6, r2, #0 + add r7, r4, #0 _022320AE: - add r4, r4, r6 - cmp r4, #3 - bne _022320B6 - mov r4, #0 + add r4, r4, r6 + cmp r4, #3 + bne _022320B6 + mov r4, #0 _022320B6: - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - bne _022320C0 - mov r4, #2 + mov r0, #0 + mvn r0, r0 + cmp r4, r0 + bne _022320C0 + mov r4, #2 _022320C0: - cmp r7, r4 - beq _022320D4 - mov r0, #0xad - lsl r0, r0, #6 - ldr r0, [r5, r0] - add r1, r4, #0 - bl FUN_0202AE4C - cmp r0, #0 - beq _022320AE + cmp r7, r4 + beq _022320D4 + mov r0, #0xad + lsl r0, r0, #6 + ldr r0, [r5, r0] + add r1, r4, #0 + bl FUN_0202AE4C + cmp r0, #0 + beq _022320AE _022320D4: - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022320A4 + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022320A4 - thumb_func_start MOD83_022320D8 + thumb_func_start MOD83_022320D8 MOD83_022320D8: ; 0x022320D8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r4, r2, #0 - mov r2, #1 - add r5, r0, #0 - str r2, [sp] - add r6, r3, #0 - ldr r3, [r5] - mov r0, #0x74 - bl GfGfxLoader_LoadFromNarc - add r1, sp, #4 - add r7, r0, #0 - bl NNS_G2dGetUnpackedScreenData - ldr r0, _02232114 ; =0x0000299C - ldr r2, [sp, #4] - lsl r1, r4, #0x18 - ldr r0, [r5, r0] - lsr r1, r1, #0x18 - add r2, #0xc - add r3, r6, #0 - bl BG_LoadScreenTilemapData - add r0, r7, #0 - bl FreeToHeap - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r4, r2, #0 + mov r2, #1 + add r5, r0, #0 + str r2, [sp] + add r6, r3, #0 + ldr r3, [r5] + mov r0, #0x74 + bl GfGfxLoader_LoadFromNarc + add r1, sp, #4 + add r7, r0, #0 + bl NNS_G2dGetUnpackedScreenData + ldr r0, _02232114 ; =0x0000299C + ldr r2, [sp, #4] + lsl r1, r4, #0x18 + ldr r0, [r5, r0] + lsr r1, r1, #0x18 + add r2, #0xc + add r3, r6, #0 + bl BG_LoadScreenTilemapData + add r0, r7, #0 + bl FreeToHeap + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _02232114: .word 0x0000299C - thumb_func_end MOD83_022320D8 + thumb_func_end MOD83_022320D8 - thumb_func_start MOD83_02232118 + thumb_func_start MOD83_02232118 MOD83_02232118: ; 0x02232118 - push {r3, r4, r5, lr} - sub sp, #0x10 - add r5, r0, #0 - mov r0, #1 - lsl r0, r0, #8 - str r0, [sp] - ldr r0, [r5] - mov r2, #0 - add r4, r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #3 - add r3, r2, #0 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #3 - lsl r0, r0, #0xc - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #6 - bl GfGfxLoader_LoadCharData - cmp r4, #0 - beq _0223215E - cmp r4, #1 - beq _0223217E - b _0223219C + push {r3, r4, r5, lr} + sub sp, #0x10 + add r5, r0, #0 + mov r0, #1 + lsl r0, r0, #8 + str r0, [sp] + ldr r0, [r5] + mov r2, #0 + add r4, r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #3 + add r3, r2, #0 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #3 + lsl r0, r0, #0xc + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #6 + bl GfGfxLoader_LoadCharData + cmp r4, #0 + beq _0223215E + cmp r4, #1 + beq _0223217E + b _0223219C _0223215E: - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #4 - bl GfGfxLoader_LoadScrnData - b _0223219C + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #4 + bl GfGfxLoader_LoadScrnData + b _0223219C _0223217E: - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r3, #1 - str r3, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r1, #5 - bl GfGfxLoader_LoadScrnData + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r3, #1 + str r3, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r1, #5 + bl GfGfxLoader_LoadScrnData _0223219C: - mov r0, #0x20 - str r0, [sp] - ldr r0, [r5] - mov r1, #0 - str r0, [sp, #4] - mov r0, #0x74 - add r3, r0, #0 - add r2, r1, #0 - add r3, #0xec - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #2 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r1, #1 - str r1, [sp, #8] - ldr r0, [r5] - ldr r2, _02232204 ; =0x0000299C - str r0, [sp, #0xc] - ldr r2, [r5, r2] - mov r0, #0x74 - mov r3, #3 - bl GfGfxLoader_LoadCharData - mov r2, #3 - add r0, r5, #0 - mov r1, #2 - lsl r3, r2, #9 - bl MOD83_022320D8 - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r0, #0xb - str r0, [sp, #8] - ldr r0, _02232204 ; =0x0000299C - mov r2, #0 - ldr r0, [r5, r0] - mov r1, #3 - add r3, r2, #0 - bl BgTilemapRectChangePalette - ldr r0, _02232204 ; =0x0000299C - mov r1, #3 - ldr r0, [r5, r0] - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0x20 + str r0, [sp] + ldr r0, [r5] + mov r1, #0 + str r0, [sp, #4] + mov r0, #0x74 + add r3, r0, #0 + add r2, r1, #0 + add r3, #0xec + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #2 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + ldr r0, [r5] + ldr r2, _02232204 ; =0x0000299C + str r0, [sp, #0xc] + ldr r2, [r5, r2] + mov r0, #0x74 + mov r3, #3 + bl GfGfxLoader_LoadCharData + mov r2, #3 + add r0, r5, #0 + mov r1, #2 + lsl r3, r2, #9 + bl MOD83_022320D8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r0, #0xb + str r0, [sp, #8] + ldr r0, _02232204 ; =0x0000299C + mov r2, #0 + ldr r0, [r5, r0] + mov r1, #3 + add r3, r2, #0 + bl BgTilemapRectChangePalette + ldr r0, _02232204 ; =0x0000299C + mov r1, #3 + ldr r0, [r5, r0] + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 _02232204: .word 0x0000299C - thumb_func_end MOD83_02232118 + thumb_func_end MOD83_02232118 - thumb_func_start MOD83_02232208 + thumb_func_start MOD83_02232208 MOD83_02232208: ; 0x02232208 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r5, r1, #0 - add r6, r2, #0 - bl OverlayManager_GetData - ldr r1, _02232270 ; =0x00002B68 - ldr r0, [r0, r1] - bl ListMenu_ProcessInput - add r4, r0, #0 - mov r0, #1 - mvn r0, r0 - cmp r4, r0 - beq _0223222E - add r0, r0, #1 - cmp r4, r0 - beq _0223226C - b _02232248 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r5, r1, #0 + add r6, r2, #0 + bl OverlayManager_GetData + ldr r1, _02232270 ; =0x00002B68 + ldr r0, [r0, r1] + bl ListMenu_ProcessInput + add r4, r0, #0 + mov r0, #1 + mvn r0, r0 + cmp r4, r0 + beq _0223222E + add r0, r0, #1 + cmp r4, r0 + beq _0223226C + b _02232248 _0223222E: - ldr r0, _02232274 ; =0x000005DC - bl PlaySE - cmp r6, #0 - beq _0223226C - add r0, r7, #0 - blx r6 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223226C - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02232274 ; =0x000005DC + bl PlaySE + cmp r6, #0 + beq _0223226C + add r0, r7, #0 + blx r6 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223226C + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _02232248: - ldr r0, _02232274 ; =0x000005DC - bl PlaySE - cmp r4, #0 - beq _0223226C - cmp r4, #0x1e - bhs _0223225A - str r4, [r5] - pop {r3, r4, r5, r6, r7, pc} + ldr r0, _02232274 ; =0x000005DC + bl PlaySE + cmp r4, #0 + beq _0223226C + cmp r4, #0x1e + bhs _0223225A + str r4, [r5] + pop {r3, r4, r5, r6, r7, pc} _0223225A: - ldr r0, _02232278 ; =MOD83_0223B89C - str r4, [r0] - add r0, r7, #0 - blx r4 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _0223226C - str r0, [r5] + ldr r0, _02232278 ; =MOD83_0223B89C + str r4, [r0] + add r0, r7, #0 + blx r4 + mov r1, #0 + mvn r1, r1 + cmp r0, r1 + beq _0223226C + str r0, [r5] _0223226C: - pop {r3, r4, r5, r6, r7, pc} - nop + pop {r3, r4, r5, r6, r7, pc} + nop _02232270: .word 0x00002B68 _02232274: .word 0x000005DC _02232278: .word MOD83_0223B89C - thumb_func_end MOD83_02232208 + thumb_func_end MOD83_02232208 - thumb_func_start MOD83_0223227C + thumb_func_start MOD83_0223227C MOD83_0223227C: ; 0x0223227C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - ldr r1, _02232398 ; =0x00002D6C - add r5, r0, #0 - ldr r0, [r5, r1] - cmp r0, #0 - bne _022322DC - add r0, r1, #4 - ldr r0, [r5, r0] - cmp r0, #0 - bne _022322DC - add r1, #8 - ldr r0, [r5, r1] - cmp r0, #0 - bne _022322DC - bl MOD83_02238B38 - cmp r0, #1 - bne _022322A8 - add r0, r5, #0 - bl MOD83_022315F8 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + ldr r1, _02232398 ; =0x00002D6C + add r5, r0, #0 + ldr r0, [r5, r1] + cmp r0, #0 + bne _022322DC + add r0, r1, #4 + ldr r0, [r5, r0] + cmp r0, #0 + bne _022322DC + add r1, #8 + ldr r0, [r5, r1] + cmp r0, #0 + bne _022322DC + bl MOD83_02238B38 + cmp r0, #1 + bne _022322A8 + add r0, r5, #0 + bl MOD83_022315F8 _022322A8: - bl MOD83_02238AFC - bl MOD83_02238B4C - mov r0, #0x18 - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x1a - mov r2, #0x17 - mov r3, #0x19 - bl MOD83_02238BC4 - bl FUN_0206B888 - add r1, r0, #0 - mov r0, #0 - str r0, [sp] - ldr r0, [r5] - mov r2, #1 - str r0, [sp, #4] - mov r0, #0x13 - mov r3, #0x60 - bl GfGfxLoader_GXLoadPal + bl MOD83_02238AFC + bl MOD83_02238B4C + mov r0, #0x18 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x1a + mov r2, #0x17 + mov r3, #0x19 + bl MOD83_02238BC4 + bl FUN_0206B888 + add r1, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, [r5] + mov r2, #1 + str r0, [sp, #4] + mov r0, #0x13 + mov r3, #0x60 + bl GfGfxLoader_GXLoadPal _022322DC: - mov r0, #0xb2 - mov r6, #0 - str r0, [sp, #0x10] - str r6, [sp, #8] - add r4, r5, #0 - mov r7, #0x64 + mov r0, #0xb2 + mov r6, #0 + str r0, [sp, #0x10] + str r6, [sp, #8] + add r4, r5, #0 + mov r7, #0x64 _022322E8: - ldr r0, _0223239C ; =0x00002B60 - ldr r0, [r5, r0] - lsl r0, r0, #2 - add r1, r5, r0 - ldr r0, _022323A0 ; =0x00002B54 - ldr r1, [r1, r0] - ldr r0, [sp, #8] - add r1, r1, r0 - ldr r0, _022323A4 ; =0x0000034A - ldrh r0, [r1, r0] - str r0, [sp, #0xc] - cmp r0, #0 - bne _02232312 - ldr r0, _02232398 ; =0x00002D6C - ldr r0, [r4, r0] - cmp r0, #0 - beq _0223237C - mov r1, #0 - bl FUN_020200A0 - b _0223237C + ldr r0, _0223239C ; =0x00002B60 + ldr r0, [r5, r0] + lsl r0, r0, #2 + add r1, r5, r0 + ldr r0, _022323A0 ; =0x00002B54 + ldr r1, [r1, r0] + ldr r0, [sp, #8] + add r1, r1, r0 + ldr r0, _022323A4 ; =0x0000034A + ldrh r0, [r1, r0] + str r0, [sp, #0xc] + cmp r0, #0 + bne _02232312 + ldr r0, _02232398 ; =0x00002D6C + ldr r0, [r4, r0] + cmp r0, #0 + beq _0223237C + mov r1, #0 + bl FUN_020200A0 + b _0223237C _02232312: - add r0, r6, #0 - add r0, #0xa - str r0, [sp] - ldr r1, _02232398 ; =0x00002D6C - ldr r2, [sp, #0x10] - ldr r1, [r4, r1] - mov r0, #0 - mov r3, #0x10 - bl MOD83_02238DBC - ldr r1, _02232398 ; =0x00002D6C - str r0, [r4, r1] - mov r1, #0 - ldr r0, [sp, #0xc] - add r2, r1, #0 - bl FUN_0206B6D4 - add r1, r0, #0 - ldr r0, [r5] - mov r2, #0 - str r0, [sp] - mov r0, #0x13 - add r3, sp, #0x18 - bl GfGfxLoader_GetCharData - str r0, [sp, #0x14] - ldr r0, [sp, #0x18] - mov r1, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #8 - bl DC_FlushRange - ldr r0, [sp, #0x18] - mov r2, #2 - ldr r0, [r0, #0x14] - lsl r1, r7, #5 - lsl r2, r2, #8 - bl GX_LoadOBJ - mov r1, #0 - ldr r0, [sp, #0xc] - add r2, r1, #0 - bl FUN_0206B7BC - add r1, r0, #0 - ldr r0, _02232398 ; =0x00002D6C - add r1, r1, #3 - ldr r0, [r4, r0] - bl FUN_02020248 - ldr r0, [sp, #0x14] - bl FreeToHeap + add r0, r6, #0 + add r0, #0xa + str r0, [sp] + ldr r1, _02232398 ; =0x00002D6C + ldr r2, [sp, #0x10] + ldr r1, [r4, r1] + mov r0, #0 + mov r3, #0x10 + bl MOD83_02238DBC + ldr r1, _02232398 ; =0x00002D6C + str r0, [r4, r1] + mov r1, #0 + ldr r0, [sp, #0xc] + add r2, r1, #0 + bl FUN_0206B6D4 + add r1, r0, #0 + ldr r0, [r5] + mov r2, #0 + str r0, [sp] + mov r0, #0x13 + add r3, sp, #0x18 + bl GfGfxLoader_GetCharData + str r0, [sp, #0x14] + ldr r0, [sp, #0x18] + mov r1, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #8 + bl DC_FlushRange + ldr r0, [sp, #0x18] + mov r2, #2 + ldr r0, [r0, #0x14] + lsl r1, r7, #5 + lsl r2, r2, #8 + bl GX_LoadOBJ + mov r1, #0 + ldr r0, [sp, #0xc] + add r2, r1, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, _02232398 ; =0x00002D6C + add r1, r1, #3 + ldr r0, [r4, r0] + bl FUN_02020248 + ldr r0, [sp, #0x14] + bl FreeToHeap _0223237C: - ldr r0, [sp, #8] - add r6, r6, #1 - add r0, r0, #2 - str r0, [sp, #8] - ldr r0, [sp, #0x10] - add r4, r4, #4 - add r0, #0x19 - add r7, #0x10 - str r0, [sp, #0x10] - cmp r6, #3 - blt _022322E8 - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + ldr r0, [sp, #8] + add r6, r6, #1 + add r0, r0, #2 + str r0, [sp, #8] + ldr r0, [sp, #0x10] + add r4, r4, #4 + add r0, #0x19 + add r7, #0x10 + str r0, [sp, #0x10] + cmp r6, #3 + blt _022322E8 + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _02232398: .word 0x00002D6C _0223239C: .word 0x00002B60 _022323A0: .word 0x00002B54 _022323A4: .word 0x0000034A - thumb_func_end MOD83_0223227C + thumb_func_end MOD83_0223227C - thumb_func_start MOD83_022323A8 + thumb_func_start MOD83_022323A8 MOD83_022323A8: ; 0x022323A8 - push {r4, lr} - mov r2, #2 - add r4, r0, #0 - mov r0, #3 - mov r1, #0x57 - lsl r2, r2, #0x10 - bl CreateHeap - ldr r1, _0223240C ; =0x00003CF4 - add r0, r4, #0 - mov r2, #0x57 - bl OverlayManager_CreateAndGetData - ldr r2, _0223240C ; =0x00003CF4 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x57 - bl BgConfig_Alloc - ldr r1, _02232410 ; =0x0000299C - str r0, [r4, r1] - mov r0, #0x57 - str r0, [r4] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - ldr r0, _02232414 ; =0x00002B60 - mov r1, #2 - str r1, [r4, r0] - mov r1, #1 - add r0, #0x7c - str r1, [r4, r0] - mov r0, #0x57 - bl MOD83_02238770 - mov r2, #3 - mov r0, #0 - mov r1, #0x5b - lsl r2, r2, #8 - bl CreateHeap - mov r0, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + mov r2, #2 + add r4, r0, #0 + mov r0, #3 + mov r1, #0x57 + lsl r2, r2, #0x10 + bl CreateHeap + ldr r1, _0223240C ; =0x00003CF4 + add r0, r4, #0 + mov r2, #0x57 + bl OverlayManager_CreateAndGetData + ldr r2, _0223240C ; =0x00003CF4 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x57 + bl BgConfig_Alloc + ldr r1, _02232410 ; =0x0000299C + str r0, [r4, r1] + mov r0, #0x57 + str r0, [r4] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + ldr r0, _02232414 ; =0x00002B60 + mov r1, #2 + str r1, [r4, r0] + mov r1, #1 + add r0, #0x7c + str r1, [r4, r0] + mov r0, #0x57 + bl MOD83_02238770 + mov r2, #3 + mov r0, #0 + mov r1, #0x5b + lsl r2, r2, #8 + bl CreateHeap + mov r0, #1 + pop {r4, pc} + .align 2, 0 _0223240C: .word 0x00003CF4 _02232410: .word 0x0000299C _02232414: .word 0x00002B60 - thumb_func_end MOD83_022323A8 + thumb_func_end MOD83_022323A8 - thumb_func_start MOD83_02232418 + thumb_func_start MOD83_02232418 MOD83_02232418: ; 0x02232418 - push {r4, lr} - add r4, r1, #0 - bl FUN_020129C8 - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_0201299C - ldr r1, _02232438 ; =0x04000010 - mov r2, #8 - mov r3, #1 - bl FUN_020129D8 - pop {r4, pc} - nop + push {r4, lr} + add r4, r1, #0 + bl FUN_020129C8 + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_0201299C + ldr r1, _02232438 ; =0x04000010 + mov r2, #8 + mov r3, #1 + bl FUN_020129D8 + pop {r4, pc} + nop _02232438: .word 0x04000010 - thumb_func_end MOD83_02232418 + thumb_func_end MOD83_02232418 - thumb_func_start MOD83_0223243C + thumb_func_start MOD83_0223243C MOD83_0223243C: ; 0x0223243C - push {r3, r4, r5, lr} - ldr r4, _02232490 ; =0x000030D0 - ldr r5, _02232494 ; =0x00000C14 - add r4, r0, r4 - add r0, r5, #0 - str r1, [r4, r5] - sub r0, #0xc - str r2, [r4, r0] - add r0, r5, #0 - sub r0, #8 - sub r5, #0x14 - str r3, [r4, r0] - ldr r0, [r4, r5] - cmp r0, #0 - bne _0223246E - mov r2, #6 - lsl r2, r2, #8 - mov r0, #0x57 - add r1, r4, #0 - add r2, r4, r2 - bl FUN_02012944 - mov r1, #3 - lsl r1, r1, #0xa - str r0, [r4, r1] + push {r3, r4, r5, lr} + ldr r4, _02232490 ; =0x000030D0 + ldr r5, _02232494 ; =0x00000C14 + add r4, r0, r4 + add r0, r5, #0 + str r1, [r4, r5] + sub r0, #0xc + str r2, [r4, r0] + add r0, r5, #0 + sub r0, #8 + sub r5, #0x14 + str r3, [r4, r0] + ldr r0, [r4, r5] + cmp r0, #0 + bne _0223246E + mov r2, #6 + lsl r2, r2, #8 + mov r0, #0x57 + add r1, r4, #0 + add r2, r4, r2 + bl FUN_02012944 + mov r1, #3 + lsl r1, r1, #0xa + str r0, [r4, r1] _0223246E: - ldr r0, _02232498 ; =0x00000C04 - ldr r0, [r4, r0] - cmp r0, #0 - bne _02232486 - mov r2, #1 - ldr r0, _0223249C ; =MOD83_02232418 - add r1, r4, #0 - lsl r2, r2, #0xa - bl FUN_0200CA60 - ldr r1, _02232498 ; =0x00000C04 - str r0, [r4, r1] + ldr r0, _02232498 ; =0x00000C04 + ldr r0, [r4, r0] + cmp r0, #0 + bne _02232486 + mov r2, #1 + ldr r0, _0223249C ; =MOD83_02232418 + add r1, r4, #0 + lsl r2, r2, #0xa + bl FUN_0200CA60 + ldr r1, _02232498 ; =0x00000C04 + str r0, [r4, r1] _02232486: - mov r0, #0xc1 - mov r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0xc1 + mov r1, #1 + lsl r0, r0, #4 + str r1, [r4, r0] + pop {r3, r4, r5, pc} + .align 2, 0 _02232490: .word 0x000030D0 _02232494: .word 0x00000C14 _02232498: .word 0x00000C04 _0223249C: .word MOD83_02232418 - thumb_func_end MOD83_0223243C + thumb_func_end MOD83_0223243C - thumb_func_start MOD83_022324A0 + thumb_func_start MOD83_022324A0 MOD83_022324A0: ; 0x022324A0 - push {r4, lr} - ldr r1, _022324D4 ; =0x000030D0 - add r4, r0, r1 - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - cmp r0, #0 - beq _022324B4 - bl FUN_02012974 + push {r4, lr} + ldr r1, _022324D4 ; =0x000030D0 + add r4, r0, r1 + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + cmp r0, #0 + beq _022324B4 + bl FUN_02012974 _022324B4: - ldr r0, _022324D8 ; =0x00000C04 - ldr r0, [r4, r0] - cmp r0, #0 - beq _022324C0 - bl FUN_0200CAB4 + ldr r0, _022324D8 ; =0x00000C04 + ldr r0, [r4, r0] + cmp r0, #0 + beq _022324C0 + bl FUN_0200CAB4 _022324C0: - mov r0, #3 - mov r1, #0 - lsl r0, r0, #0xa - str r1, [r4, r0] - add r0, r0, #4 - str r1, [r4, r0] - bl FUN_020129C8 - pop {r4, pc} - nop + mov r0, #3 + mov r1, #0 + lsl r0, r0, #0xa + str r1, [r4, r0] + add r0, r0, #4 + str r1, [r4, r0] + bl FUN_020129C8 + pop {r4, pc} + nop _022324D4: .word 0x000030D0 _022324D8: .word 0x00000C04 - thumb_func_end MOD83_022324A0 + thumb_func_end MOD83_022324A0 - thumb_func_start MOD83_022324DC + thumb_func_start MOD83_022324DC MOD83_022324DC: ; 0x022324DC - push {r3, r4, r5, r6, r7, lr} - ldr r1, _022325E4 ; =0x000030D0 - mov r5, #0x15 - add r4, r0, r1 - mov r0, #0xc1 - lsl r0, r0, #4 - ldr r1, [r4, r0] - lsl r5, r5, #0xe - cmp r1, #0 - bne _022324F4 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + ldr r1, _022325E4 ; =0x000030D0 + mov r5, #0x15 + add r4, r0, r1 + mov r0, #0xc1 + lsl r0, r0, #4 + ldr r1, [r4, r0] + lsl r5, r5, #0xe + cmp r1, #0 + bne _022324F4 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022324F4: - add r1, r0, #4 - ldr r1, [r4, r1] - cmp r1, #1 - bne _02232542 - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - sub r1, r0, #4 - ldr r1, [r4, r1] - add r2, r2, r1 - add r1, r0, #0 - sub r1, #8 - str r2, [r4, r1] - sub r1, r0, #4 - ldr r2, [r4, r1] - add r1, r2, #0 - add r2, r2, r1 - sub r1, r0, #4 - str r2, [r4, r1] - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - asr r1, r2, #0xb - lsr r1, r1, #0x14 - add r1, r2, r1 - asr r2, r1, #0xc - mov r1, #0xfa - lsl r1, r1, #2 - cmp r2, r1 - ble _0223257C - mov r2, #0 - add r1, r0, #0 - str r2, [r4, r0] - sub r1, #8 - str r2, [r4, r1] - sub r0, r0, #4 - mov r5, #0xa8 - str r2, [r4, r0] - b _0223257C + add r1, r0, #4 + ldr r1, [r4, r1] + cmp r1, #1 + bne _02232542 + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + sub r1, r0, #4 + ldr r1, [r4, r1] + add r2, r2, r1 + add r1, r0, #0 + sub r1, #8 + str r2, [r4, r1] + sub r1, r0, #4 + ldr r2, [r4, r1] + add r1, r2, #0 + add r2, r2, r1 + sub r1, r0, #4 + str r2, [r4, r1] + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + asr r1, r2, #0xb + lsr r1, r1, #0x14 + add r1, r2, r1 + asr r2, r1, #0xc + mov r1, #0xfa + lsl r1, r1, #2 + cmp r2, r1 + ble _0223257C + mov r2, #0 + add r1, r0, #0 + str r2, [r4, r0] + sub r1, #8 + str r2, [r4, r1] + sub r0, r0, #4 + mov r5, #0xa8 + str r2, [r4, r0] + b _0223257C _02232542: - add r1, r0, #0 - sub r1, #8 - ldr r2, [r4, r1] - sub r1, r0, #4 - ldr r1, [r4, r1] - sub r2, r2, r1 - add r1, r0, #0 - sub r1, #8 - str r2, [r4, r1] - sub r1, r0, #4 - ldr r2, [r4, r1] - lsr r1, r2, #0x1f - add r1, r2, r1 - asr r2, r1, #1 - sub r1, r0, #4 - str r2, [r4, r1] - mov r2, #1 - ldr r1, [r4, r1] - lsl r2, r2, #0xa - cmp r1, r2 - bge _0223257C - mov r1, #0 - lsl r3, r2, #2 - add r2, r0, #0 - str r1, [r4, r0] - sub r2, #8 - str r3, [r4, r2] - sub r0, r0, #4 - str r1, [r4, r0] + add r1, r0, #0 + sub r1, #8 + ldr r2, [r4, r1] + sub r1, r0, #4 + ldr r1, [r4, r1] + sub r2, r2, r1 + add r1, r0, #0 + sub r1, #8 + str r2, [r4, r1] + sub r1, r0, #4 + ldr r2, [r4, r1] + lsr r1, r2, #0x1f + add r1, r2, r1 + asr r2, r1, #1 + sub r1, r0, #4 + str r2, [r4, r1] + mov r2, #1 + ldr r1, [r4, r1] + lsl r2, r2, #0xa + cmp r1, r2 + bge _0223257C + mov r1, #0 + lsl r3, r2, #2 + add r2, r0, #0 + str r1, [r4, r0] + sub r2, #8 + str r3, [r4, r2] + sub r0, r0, #4 + str r1, [r4, r0] _0223257C: - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_02012988 - add r2, r0, #0 - mov r0, #0x54 - add r3, r0, #0 - add r3, #0xfc + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_02012988 + add r2, r0, #0 + mov r0, #0x54 + add r3, r0, #0 + add r3, #0xfc _0223258E: - asr r1, r5, #0xb - lsr r1, r1, #0x14 - add r1, r5, r1 - asr r1, r1, #0xc - bpl _0223259A - mov r1, #0 + asr r1, r5, #0xb + lsr r1, r1, #0x14 + add r1, r5, r1 + asr r1, r1, #0xc + bpl _0223259A + mov r1, #0 _0223259A: - cmp r1, #0xa8 - ble _022325A0 - mov r1, #0xa8 + cmp r1, #0xa8 + ble _022325A0 + mov r1, #0xa8 _022325A0: - lsl r6, r3, #1 - add r7, r2, r6 - sub r6, r1, r0 - strh r6, [r7, #6] - ldrh r6, [r7, #6] - sub r1, r0, r1 - add r3, r3, #4 - strh r6, [r7, #2] - mov r6, #0xa8 - sub r6, r6, r0 - lsl r6, r6, #3 - add r6, r2, r6 - strh r1, [r6, #6] - ldrh r1, [r6, #6] - add r0, r0, #1 - strh r1, [r6, #2] - ldr r1, _022325E8 ; =0x00000C08 - ldr r1, [r4, r1] - add r5, r5, r1 - cmp r0, #0xa8 - blt _0223258E - mov r1, #6 - add r0, r2, #0 - lsl r1, r1, #8 - bl DC_FlushRange - mov r0, #3 - lsl r0, r0, #0xa - ldr r0, [r4, r0] - bl FUN_020129B4 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r6, r3, #1 + add r7, r2, r6 + sub r6, r1, r0 + strh r6, [r7, #6] + ldrh r6, [r7, #6] + sub r1, r0, r1 + add r3, r3, #4 + strh r6, [r7, #2] + mov r6, #0xa8 + sub r6, r6, r0 + lsl r6, r6, #3 + add r6, r2, r6 + strh r1, [r6, #6] + ldrh r1, [r6, #6] + add r0, r0, #1 + strh r1, [r6, #2] + ldr r1, _022325E8 ; =0x00000C08 + ldr r1, [r4, r1] + add r5, r5, r1 + cmp r0, #0xa8 + blt _0223258E + mov r1, #6 + add r0, r2, #0 + lsl r1, r1, #8 + bl DC_FlushRange + mov r0, #3 + lsl r0, r0, #0xa + ldr r0, [r4, r0] + bl FUN_020129B4 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop _022325E4: .word 0x000030D0 _022325E8: .word 0x00000C08 - thumb_func_end MOD83_022324DC + thumb_func_end MOD83_022324DC - thumb_func_start MOD83_022325EC + thumb_func_start MOD83_022325EC MOD83_022325EC: ; 0x022325EC - push {r4, lr} - add r4, r0, #0 - bl MOD83_022394CC - sub r0, r0, #2 - cmp r0, #1 - bhi _02232606 - ldr r0, _02232608 ; =0x0000061B - bl PlaySE - ldr r0, _0223260C ; =0x00003CE8 - mov r1, #0 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + bl MOD83_022394CC + sub r0, r0, #2 + cmp r0, #1 + bhi _02232606 + ldr r0, _02232608 ; =0x0000061B + bl PlaySE + ldr r0, _0223260C ; =0x00003CE8 + mov r1, #0 + str r1, [r4, r0] _02232606: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02232608: .word 0x0000061B _0223260C: .word 0x00003CE8 - thumb_func_end MOD83_022325EC + thumb_func_end MOD83_022325EC - thumb_func_start MOD83_02232610 + thumb_func_start MOD83_02232610 MOD83_02232610: ; 0x02232610 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02232658 ; =0x00002B60 - ldr r1, [r4, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r4, r1 - ldr r2, [r1, r0] - mov r0, #0x35 - lsl r0, r0, #4 - ldrb r1, [r2, r0] - cmp r1, #0xff - beq _0223262E - add r1, r1, #1 - strb r1, [r2, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _02232658 ; =0x00002B60 + ldr r1, [r4, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r4, r1 + ldr r2, [r1, r0] + mov r0, #0x35 + lsl r0, r0, #4 + ldrb r1, [r2, r0] + cmp r1, #0xff + beq _0223262E + add r1, r1, #1 + strb r1, [r2, r0] _0223262E: - ldr r0, _02232658 ; =0x00002B60 - ldr r1, [r4, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r4, r1 - ldr r2, [r1, r0] - mov r0, #0xd2 - lsl r0, r0, #2 - ldrb r1, [r2, r0] - cmp r1, #0xff - beq _02232648 - sub r1, r1, #1 - strb r1, [r2, r0] + ldr r0, _02232658 ; =0x00002B60 + ldr r1, [r4, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r4, r1 + ldr r2, [r1, r0] + mov r0, #0xd2 + lsl r0, r0, #2 + ldrb r1, [r2, r0] + cmp r1, #0xff + beq _02232648 + sub r1, r1, #1 + strb r1, [r2, r0] _02232648: - ldr r0, _0223265C ; =0x00002B44 - ldr r0, [r4, r0] - bl MOD83_022394BC - ldr r1, _02232660 ; =MOD83_022325EC - ldr r0, _02232664 ; =0x00003CE8 - str r1, [r4, r0] - pop {r4, pc} - .align 2, 0 + ldr r0, _0223265C ; =0x00002B44 + ldr r0, [r4, r0] + bl MOD83_022394BC + ldr r1, _02232660 ; =MOD83_022325EC + ldr r0, _02232664 ; =0x00003CE8 + str r1, [r4, r0] + pop {r4, pc} + .align 2, 0 _02232658: .word 0x00002B60 _0223265C: .word 0x00002B44 _02232660: .word MOD83_022325EC _02232664: .word 0x00003CE8 - thumb_func_end MOD83_02232610 + thumb_func_end MOD83_02232610 - thumb_func_start MOD83_02232668 + thumb_func_start MOD83_02232668 MOD83_02232668: ; 0x02232668 - push {r3, r4, r5, r6, r7, lr} - add r7, r2, #0 - ldr r2, _02232768 ; =gMain - add r6, r1, #0 - ldr r3, [r2, #0x48] - ldr r1, _0223276C ; =0x00003CEC - add r5, r0, #0 - mov r2, #0x10 - ldr r0, [r5, r1] - tst r2, r3 - beq _02232686 - cmp r0, #1 - beq _02232686 - mov r2, #1 - str r2, [r5, r1] + push {r3, r4, r5, r6, r7, lr} + add r7, r2, #0 + ldr r2, _02232768 ; =gMain + add r6, r1, #0 + ldr r3, [r2, #0x48] + ldr r1, _0223276C ; =0x00003CEC + add r5, r0, #0 + mov r2, #0x10 + ldr r0, [r5, r1] + tst r2, r3 + beq _02232686 + cmp r0, #1 + beq _02232686 + mov r2, #1 + str r2, [r5, r1] _02232686: - ldr r1, _02232768 ; =gMain - ldr r2, [r1, #0x48] - mov r1, #0x20 - tst r1, r2 - beq _0223269C - ldr r1, _0223276C ; =0x00003CEC - ldr r2, [r5, r1] - cmp r2, #0 - beq _0223269C - mov r2, #0 - str r2, [r5, r1] + ldr r1, _02232768 ; =gMain + ldr r2, [r1, #0x48] + mov r1, #0x20 + tst r1, r2 + beq _0223269C + ldr r1, _0223276C ; =0x00003CEC + ldr r2, [r5, r1] + cmp r2, #0 + beq _0223269C + mov r2, #0 + str r2, [r5, r1] _0223269C: - ldr r1, _0223276C ; =0x00003CEC - ldr r1, [r5, r1] - cmp r0, r1 - beq _022326CC - cmp r1, #0 - bne _022326AC - mov r1, #1 - b _022326AE + ldr r1, _0223276C ; =0x00003CEC + ldr r1, [r5, r1] + cmp r0, r1 + beq _022326CC + cmp r1, #0 + bne _022326AC + mov r1, #1 + b _022326AE _022326AC: - mov r1, #0 + mov r1, #0 _022326AE: - ldr r0, _02232770 ; =0x00002D64 - ldr r0, [r5, r0] - bl FUN_02020130 - ldr r0, _0223276C ; =0x00003CEC - ldr r0, [r5, r0] - cmp r0, #0 - beq _022326C2 - mov r1, #1 - b _022326C4 + ldr r0, _02232770 ; =0x00002D64 + ldr r0, [r5, r0] + bl FUN_02020130 + ldr r0, _0223276C ; =0x00003CEC + ldr r0, [r5, r0] + cmp r0, #0 + beq _022326C2 + mov r1, #1 + b _022326C4 _022326C2: - mov r1, #0 + mov r1, #0 _022326C4: - ldr r0, _02232774 ; =0x00002D68 - ldr r0, [r5, r0] - bl FUN_02020130 + ldr r0, _02232774 ; =0x00002D68 + ldr r0, [r5, r0] + bl FUN_02020130 _022326CC: - ldr r0, _02232768 ; =gMain - mov r4, #0 - ldr r1, [r0, #0x48] - mov r0, #2 - add r2, r1, #0 - tst r2, r0 - beq _022326DE - add r4, r0, #0 - b _0223270E + ldr r0, _02232768 ; =gMain + mov r4, #0 + ldr r1, [r0, #0x48] + mov r0, #2 + add r2, r1, #0 + tst r2, r0 + beq _022326DE + add r4, r0, #0 + b _0223270E _022326DE: - mov r0, #1 - and r1, r0 - beq _022326F4 - cmp r6, #0 - beq _022326F4 - ldr r2, _0223276C ; =0x00003CEC - ldr r2, [r5, r2] - cmp r2, #0 - bne _022326F4 - add r4, r0, #0 - b _0223270E + mov r0, #1 + and r1, r0 + beq _022326F4 + cmp r6, #0 + beq _022326F4 + ldr r2, _0223276C ; =0x00003CEC + ldr r2, [r5, r2] + cmp r2, #0 + bne _022326F4 + add r4, r0, #0 + b _0223270E _022326F4: - cmp r1, #0 - beq _02232704 - ldr r0, _0223276C ; =0x00003CEC - ldr r0, [r5, r0] - cmp r0, #1 - bne _02232704 - mov r4, #2 - b _0223270E + cmp r1, #0 + beq _02232704 + ldr r0, _0223276C ; =0x00003CEC + ldr r0, [r5, r0] + cmp r0, #1 + bne _02232704 + mov r4, #2 + b _0223270E _02232704: - cmp r1, #0 - beq _0223270E - cmp r6, #0 - bne _0223270E - mov r4, #3 + cmp r1, #0 + beq _0223270E + cmp r6, #0 + bne _0223270E + mov r4, #3 _0223270E: - cmp r4, #1 - bne _02232746 - ldr r0, _02232778 ; =0x000005DC - bl PlaySE - mov r0, #0xab - bl FUN_02031588 - mov r3, #0xa - ldr r1, _0223277C ; =0x00002BD4 - mov r0, #1 - str r0, [r5, r1] - mov r0, #0x15 - sub r1, #0x64 - str r0, [r7] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x11 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r0, _02232780 ; =0x00002B70 - mov r1, #0x13 - add r0, r5, r0 - bl FUN_0200D858 - ldr r1, _02232784 ; =0x00003CF0 - str r0, [r5, r1] + cmp r4, #1 + bne _02232746 + ldr r0, _02232778 ; =0x000005DC + bl PlaySE + mov r0, #0xab + bl FUN_02031588 + mov r3, #0xa + ldr r1, _0223277C ; =0x00002BD4 + mov r0, #1 + str r0, [r5, r1] + mov r0, #0x15 + sub r1, #0x64 + str r0, [r7] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x11 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r0, _02232780 ; =0x00002B70 + mov r1, #0x13 + add r0, r5, r0 + bl FUN_0200D858 + ldr r1, _02232784 ; =0x00003CF0 + str r0, [r5, r1] _02232746: - cmp r4, #2 - bne _0223275A - ldr r0, _02232778 ; =0x000005DC - bl PlaySE - add r0, r5, #0 - add r1, r7, #0 - mov r2, #0x13 - bl MOD83_02233084 + cmp r4, #2 + bne _0223275A + ldr r0, _02232778 ; =0x000005DC + bl PlaySE + add r0, r5, #0 + add r1, r7, #0 + mov r2, #0x13 + bl MOD83_02233084 _0223275A: - cmp r4, #3 - bne _02232764 - ldr r0, _02232778 ; =0x000005DC - bl PlaySE + cmp r4, #3 + bne _02232764 + ldr r0, _02232778 ; =0x000005DC + bl PlaySE _02232764: - pop {r3, r4, r5, r6, r7, pc} - nop + pop {r3, r4, r5, r6, r7, pc} + nop _02232768: .word gMain _0223276C: .word 0x00003CEC _02232770: .word 0x00002D64 @@ -10218,453 +10218,453 @@ _02232778: .word 0x000005DC _0223277C: .word 0x00002BD4 _02232780: .word 0x00002B70 _02232784: .word 0x00003CF0 - thumb_func_end MOD83_02232668 + thumb_func_end MOD83_02232668 - thumb_func_start MOD83_02232788 + thumb_func_start MOD83_02232788 MOD83_02232788: ; 0x02232788 - push {r4, r5, r6, lr} - sub sp, #8 - add r5, r1, #0 - add r6, r0, #0 - bl OverlayManager_GetData - ldr r1, [r5] - add r4, r0, #0 - cmp r1, #0x1d - bls _0223279E - b _02232CF4 + push {r4, r5, r6, lr} + sub sp, #8 + add r5, r1, #0 + add r6, r0, #0 + bl OverlayManager_GetData + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #0x1d + bls _0223279E + b _02232CF4 _0223279E: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _022327AA: ; jump table - .short _022327E6 - _022327AA - 2 ; case 0 - .short _02232854 - _022327AA - 2 ; case 1 - .short _02232866 - _022327AA - 2 ; case 2 - .short _022328DC - _022327AA - 2 ; case 3 - .short _02232956 - _022327AA - 2 ; case 4 - .short _0223297E - _022327AA - 2 ; case 5 - .short _0223299E - _022327AA - 2 ; case 6 - .short _022329D6 - _022327AA - 2 ; case 7 - .short _022329FA - _022327AA - 2 ; case 8 - .short _02232A20 - _022327AA - 2 ; case 9 - .short _02232A4C - _022327AA - 2 ; case 10 - .short _02232A88 - _022327AA - 2 ; case 11 - .short _02232AAC - _022327AA - 2 ; case 12 - .short _02232AB8 - _022327AA - 2 ; case 13 - .short _02232AC4 - _022327AA - 2 ; case 14 - .short _02232AD6 - _022327AA - 2 ; case 15 - .short _02232AE2 - _022327AA - 2 ; case 16 - .short _02232B24 - _022327AA - 2 ; case 17 - .short _02232B3A - _022327AA - 2 ; case 18 - .short _02232BDC - _022327AA - 2 ; case 19 - .short _02232BE8 - _022327AA - 2 ; case 20 - .short _02232C36 - _022327AA - 2 ; case 21 - .short _02232C26 - _022327AA - 2 ; case 22 - .short _02232C6A - _022327AA - 2 ; case 23 - .short _02232C7E - _022327AA - 2 ; case 24 - .short _02232CB8 - _022327AA - 2 ; case 25 - .short _02232CC8 - _022327AA - 2 ; case 26 - .short _02232CD4 - _022327AA - 2 ; case 27 - .short _02232CE4 - _022327AA - 2 ; case 28 - .short _02232CF4 - _022327AA - 2 ; case 29 + .short _022327E6 - _022327AA - 2 ; case 0 + .short _02232854 - _022327AA - 2 ; case 1 + .short _02232866 - _022327AA - 2 ; case 2 + .short _022328DC - _022327AA - 2 ; case 3 + .short _02232956 - _022327AA - 2 ; case 4 + .short _0223297E - _022327AA - 2 ; case 5 + .short _0223299E - _022327AA - 2 ; case 6 + .short _022329D6 - _022327AA - 2 ; case 7 + .short _022329FA - _022327AA - 2 ; case 8 + .short _02232A20 - _022327AA - 2 ; case 9 + .short _02232A4C - _022327AA - 2 ; case 10 + .short _02232A88 - _022327AA - 2 ; case 11 + .short _02232AAC - _022327AA - 2 ; case 12 + .short _02232AB8 - _022327AA - 2 ; case 13 + .short _02232AC4 - _022327AA - 2 ; case 14 + .short _02232AD6 - _022327AA - 2 ; case 15 + .short _02232AE2 - _022327AA - 2 ; case 16 + .short _02232B24 - _022327AA - 2 ; case 17 + .short _02232B3A - _022327AA - 2 ; case 18 + .short _02232BDC - _022327AA - 2 ; case 19 + .short _02232BE8 - _022327AA - 2 ; case 20 + .short _02232C36 - _022327AA - 2 ; case 21 + .short _02232C26 - _022327AA - 2 ; case 22 + .short _02232C6A - _022327AA - 2 ; case 23 + .short _02232C7E - _022327AA - 2 ; case 24 + .short _02232CB8 - _022327AA - 2 ; case 25 + .short _02232CC8 - _022327AA - 2 ; case 26 + .short _02232CD4 - _022327AA - 2 ; case 27 + .short _02232CE4 - _022327AA - 2 ; case 28 + .short _02232CF4 - _022327AA - 2 ; case 29 _022327E6: - add r0, r6, #0 - bl OverlayManager_GetField18 - ldr r1, [r0, #8] - ldr r0, _02232B54 ; =0x00002B44 - str r1, [r4, r0] - ldr r0, [r4, r0] - bl FUN_0202251C - mov r1, #0xad - lsl r1, r1, #6 - str r0, [r4, r1] - add r0, r1, #4 - ldr r0, [r4, r0] - bl Sav2_PlayerData_GetOptionsAddr - ldr r1, _02232B58 ; =0x00002B48 - str r0, [r4, r1] - ldr r0, [r4, r1] - bl Options_GetFrame - ldr r1, _02232B5C ; =0x00002B4C - str r0, [r4, r1] - sub r1, #0xc - ldr r0, [r4, r1] - mov r1, #0 - bl FUN_0202AC64 - ldr r1, _02232B60 ; =0x00002B54 - str r0, [r4, r1] - sub r1, #0x14 - ldr r0, [r4, r1] - mov r1, #1 - bl FUN_0202AC64 - ldr r1, _02232B64 ; =0x00002B58 - str r0, [r4, r1] - sub r1, #0x18 - ldr r0, [r4, r1] - mov r1, #2 - bl FUN_0202AC64 - ldr r1, _02232B68 ; =0x00002B5C - mov r2, #1 - str r0, [r4, r1] - add r1, r1, #4 - ldr r1, [r4, r1] - add r0, r4, #0 - bl MOD83_022320A4 - ldr r1, _02232B6C ; =0x00002B60 - str r0, [r4, r1] - mov r0, #1 - str r0, [r5] - b _02232CF4 + add r0, r6, #0 + bl OverlayManager_GetField18 + ldr r1, [r0, #8] + ldr r0, _02232B54 ; =0x00002B44 + str r1, [r4, r0] + ldr r0, [r4, r0] + bl FUN_0202251C + mov r1, #0xad + lsl r1, r1, #6 + str r0, [r4, r1] + add r0, r1, #4 + ldr r0, [r4, r0] + bl Sav2_PlayerData_GetOptionsAddr + ldr r1, _02232B58 ; =0x00002B48 + str r0, [r4, r1] + ldr r0, [r4, r1] + bl Options_GetFrame + ldr r1, _02232B5C ; =0x00002B4C + str r0, [r4, r1] + sub r1, #0xc + ldr r0, [r4, r1] + mov r1, #0 + bl FUN_0202AC64 + ldr r1, _02232B60 ; =0x00002B54 + str r0, [r4, r1] + sub r1, #0x14 + ldr r0, [r4, r1] + mov r1, #1 + bl FUN_0202AC64 + ldr r1, _02232B64 ; =0x00002B58 + str r0, [r4, r1] + sub r1, #0x18 + ldr r0, [r4, r1] + mov r1, #2 + bl FUN_0202AC64 + ldr r1, _02232B68 ; =0x00002B5C + mov r2, #1 + str r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + add r0, r4, #0 + bl MOD83_022320A4 + ldr r1, _02232B6C ; =0x00002B60 + str r0, [r4, r1] + mov r0, #1 + str r0, [r5] + b _02232CF4 _02232854: - bl MOD83_022331C0 - ldr r0, _02232B70 ; =0x0000299C - ldr r0, [r4, r0] - bl MOD83_022331E0 - mov r0, #2 - str r0, [r5] - b _02232CF4 + bl MOD83_022331C0 + ldr r0, _02232B70 ; =0x0000299C + ldr r0, [r4, r0] + bl MOD83_022331E0 + mov r0, #2 + str r0, [r5] + b _02232CF4 _02232866: - bl FUN_0201BD5C - add r0, r4, #0 - mov r1, #0 - bl MOD83_02232118 - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x57 - bl FUN_02002ED0 - mov r1, #0 - str r1, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r2, #1 - ldr r0, [r4, r0] - mov r3, #0xd - bl FUN_0200CB00 - mov r0, #1 - str r0, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r1, #0 - ldr r0, [r4, r0] - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, _02232B5C ; =0x00002B4C - mov r1, #0 - ldr r0, [r4, r0] - mov r2, #0x13 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x57 - str r0, [sp, #4] - ldr r0, _02232B70 ; =0x0000299C - mov r3, #0xa - ldr r0, [r4, r0] - bl FUN_0200CD68 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - add r0, r4, #0 - mov r1, #1 - mov r2, #3 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl FUN_0201BD5C + add r0, r4, #0 + mov r1, #0 + bl MOD83_02232118 + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x57 + bl FUN_02002ED0 + mov r1, #0 + str r1, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r2, #1 + ldr r0, [r4, r0] + mov r3, #0xd + bl FUN_0200CB00 + mov r0, #1 + str r0, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r1, #0 + ldr r0, [r4, r0] + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, _02232B5C ; =0x00002B4C + mov r1, #0 + ldr r0, [r4, r0] + mov r2, #0x13 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x57 + str r0, [sp, #4] + ldr r0, _02232B70 ; =0x0000299C + mov r3, #0xa + ldr r0, [r4, r0] + bl FUN_0200CD68 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + add r0, r4, #0 + mov r1, #1 + mov r2, #3 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _022328DC: - ldr r1, _02232B6C ; =0x00002B60 - mov r2, #0x40 - ldr r6, [r4, r1] - ldr r1, _02232B74 ; =gMain - ldr r1, [r1, #0x48] - add r3, r1, #0 - tst r3, r2 - beq _022328F8 - add r1, r6, #0 - sub r2, #0x41 - bl MOD83_022320A4 - add r6, r0, #0 - b _02232934 + ldr r1, _02232B6C ; =0x00002B60 + mov r2, #0x40 + ldr r6, [r4, r1] + ldr r1, _02232B74 ; =gMain + ldr r1, [r1, #0x48] + add r3, r1, #0 + tst r3, r2 + beq _022328F8 + add r1, r6, #0 + sub r2, #0x41 + bl MOD83_022320A4 + add r6, r0, #0 + b _02232934 _022328F8: - mov r2, #0x80 - tst r2, r1 - beq _0223290A - add r1, r6, #0 - mov r2, #1 - bl MOD83_022320A4 - add r6, r0, #0 - b _02232934 + mov r2, #0x80 + tst r2, r1 + beq _0223290A + add r1, r6, #0 + mov r2, #1 + bl MOD83_022320A4 + add r6, r0, #0 + b _02232934 _0223290A: - mov r0, #2 - tst r0, r1 - beq _02232924 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - add r0, r4, #0 - mov r1, #0 - mov r2, #0x1c - add r3, r5, #0 - bl MOD83_02231DBC - b _02232934 + mov r0, #2 + tst r0, r1 + beq _02232924 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + add r0, r4, #0 + mov r1, #0 + mov r2, #0x1c + add r3, r5, #0 + bl MOD83_02231DBC + b _02232934 _02232924: - mov r0, #1 - tst r0, r1 - beq _02232934 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - mov r0, #4 - str r0, [r5] + mov r0, #1 + tst r0, r1 + beq _02232934 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + mov r0, #4 + str r0, [r5] _02232934: - ldr r0, _02232B6C ; =0x00002B60 - ldr r0, [r4, r0] - cmp r0, r6 - bne _0223293E - b _02232CF4 + ldr r0, _02232B6C ; =0x00002B60 + ldr r0, [r4, r0] + cmp r0, r6 + bne _0223293E + b _02232CF4 _0223293E: - mov r0, #6 - lsl r0, r0, #8 - bl PlaySE - ldr r0, _02232B6C ; =0x00002B60 - mov r1, #1 - str r6, [r4, r0] - add r0, r4, #0 - mov r2, #0 - bl MOD83_02231DF0 - b _02232CF4 + mov r0, #6 + lsl r0, r0, #8 + bl PlaySE + ldr r0, _02232B6C ; =0x00002B60 + mov r1, #1 + str r6, [r4, r0] + add r0, r4, #0 + mov r2, #0 + bl MOD83_02231DF0 + b _02232CF4 _02232956: - ldr r1, _02232B7C ; =0x00002B70 - mov r3, #0xa - add r1, r4, r1 - mov r2, #7 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r3, _02232B80 ; =0x00002B90 - mov r2, #8 - add r1, r3, #0 - str r0, [r4, r3] - sub r1, #0x10 - ldr r3, [r4, r3] - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02231F88 - mov r0, #5 - str r0, [r5] - b _02232CF4 + ldr r1, _02232B7C ; =0x00002B70 + mov r3, #0xa + add r1, r4, r1 + mov r2, #7 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r3, _02232B80 ; =0x00002B90 + mov r2, #8 + add r1, r3, #0 + str r0, [r4, r3] + sub r1, #0x10 + ldr r3, [r4, r3] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02231F88 + mov r0, #5 + str r0, [r5] + b _02232CF4 _0223297E: - add r0, r6, #0 - add r1, r5, #0 - mov r2, #0 - bl MOD83_02232208 - ldr r0, _02232B74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _02232A54 - ldr r0, _02232B78 ; =0x000005DC - bl PlaySE - mov r0, #0xb - str r0, [r5] - b _02232CF4 + add r0, r6, #0 + add r1, r5, #0 + mov r2, #0 + bl MOD83_02232208 + ldr r0, _02232B74 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _02232A54 + ldr r0, _02232B78 ; =0x000005DC + bl PlaySE + mov r0, #0xb + str r0, [r5] + b _02232CF4 _0223299E: - mov r0, #6 - lsl r0, r0, #8 - bl PlaySE - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - bl MOD83_022316C0 - mov r1, #1 - add r0, r4, #0 - lsl r2, r1, #0xc - mov r3, #0x66 - bl MOD83_0223243C - mov r0, #7 - str r0, [r5] - b _02232CF4 + mov r0, #6 + lsl r0, r0, #8 + bl PlaySE + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + bl MOD83_022316C0 + mov r1, #1 + add r0, r4, #0 + lsl r2, r1, #0xc + mov r3, #0x66 + bl MOD83_0223243C + mov r0, #7 + str r0, [r5] + b _02232CF4 _022329D6: - bl MOD83_022324DC - cmp r0, #0 - beq _02232A54 - mov r1, #1 - add r0, r4, #0 - add r2, r1, #0 - bl MOD83_02231DF0 - ldr r2, _02232B84 ; =0x00708000 - add r0, r4, #0 - mov r1, #0 - lsr r3, r2, #1 - bl MOD83_0223243C - mov r0, #8 - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + cmp r0, #0 + beq _02232A54 + mov r1, #1 + add r0, r4, #0 + add r2, r1, #0 + bl MOD83_02231DF0 + ldr r2, _02232B84 ; =0x00708000 + add r0, r4, #0 + mov r1, #0 + lsr r3, r2, #1 + bl MOD83_0223243C + mov r0, #8 + str r0, [r5] + b _02232CF4 _022329FA: - bl MOD83_022324DC - ldr r0, _02232B74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r1, r0 - beq _02232A54 - lsl r0, r0, #9 - bl PlaySE - mov r1, #1 - add r0, r4, #0 - lsl r2, r1, #0xc - mov r3, #0x66 - bl MOD83_0223243C - mov r0, #9 - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + ldr r0, _02232B74 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r1, r0 + beq _02232A54 + lsl r0, r0, #9 + bl PlaySE + mov r1, #1 + add r0, r4, #0 + lsl r2, r1, #0xc + mov r3, #0x66 + bl MOD83_0223243C + mov r0, #9 + str r0, [r5] + b _02232CF4 _02232A20: - bl MOD83_022324DC - cmp r0, #0 - beq _02232A54 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - ldr r2, _02232B84 ; =0x00708000 - add r0, r4, #0 - mov r1, #0 - lsr r3, r2, #1 - bl MOD83_0223243C - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r0, #0xa - str r0, [r5] - b _02232CF4 + bl MOD83_022324DC + cmp r0, #0 + beq _02232A54 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + ldr r2, _02232B84 ; =0x00708000 + add r0, r4, #0 + mov r1, #0 + lsr r3, r2, #1 + bl MOD83_0223243C + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r0, #0xa + str r0, [r5] + b _02232CF4 _02232A4C: - bl MOD83_022324DC - cmp r0, #0 - bne _02232A56 + bl MOD83_022324DC + cmp r0, #0 + bne _02232A56 _02232A54: - b _02232CF4 + b _02232CF4 _02232A56: - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - mov r2, #0x13 - mov r3, #0xa - bl FUN_0200D0BC - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - mov r2, #0xa - mov r3, #0xe - bl FUN_0200CCA4 - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add r0, r4, #0 - bl MOD83_022324A0 - mov r0, #5 - str r0, [r5] - b _02232CF4 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + mov r2, #0x13 + mov r3, #0xa + bl FUN_0200D0BC + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + mov r2, #0xa + mov r3, #0xe + bl FUN_0200CCA4 + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add r0, r4, #0 + bl MOD83_022324A0 + mov r0, #5 + str r0, [r5] + b _02232CF4 _02232A88: - bl MOD83_02231A00 - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl RemoveWindow - mov r0, #3 - str r0, [r5] - b _02232CF4 + bl MOD83_02231A00 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl RemoveWindow + mov r0, #3 + str r0, [r5] + b _02232CF4 _02232AAC: - ldr r2, _02232B88 ; =MOD83_022319D0 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02232208 - b _02232CF4 + ldr r2, _02232B88 ; =MOD83_022319D0 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02232208 + b _02232CF4 _02232AB8: - ldr r2, _02232B88 ; =MOD83_022319D0 - add r0, r6, #0 - add r1, r5, #0 - bl MOD83_02232208 - b _02232CF4 + ldr r2, _02232B88 ; =MOD83_022319D0 + add r0, r6, #0 + add r1, r5, #0 + bl MOD83_02232208 + b _02232CF4 _02232AC4: - mov r1, #0xae - lsl r1, r1, #6 - ldr r2, _02232B8C ; =0x00010200 - add r1, r4, r1 - bl MOD83_02231D74 - mov r0, #0xd - str r0, [r5] - b _02232CF4 + mov r1, #0xae + lsl r1, r1, #6 + ldr r2, _02232B8C ; =0x00010200 + add r1, r4, r1 + bl MOD83_02231D74 + mov r0, #0xd + str r0, [r5] + b _02232CF4 _02232AD6: - mov r1, #0 - mov r2, #0x10 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x10 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232AE2: - bl MOD83_02231A00 - ldr r0, _02232B7C ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02232B7C ; =0x00002B70 - add r0, r4, r0 - bl RemoveWindow - add r0, r4, #0 - mov r1, #0 - mov r2, #3 - bl MOD83_02231DF0 - ldr r0, _02232B70 ; =0x0000299C - ldr r0, [r4, r0] - bl MOD83_02231820 - add r0, r4, #0 - bl MOD83_022315D0 - add r0, r4, #0 - bl MOD83_0223166C - mov r0, #0x11 - str r0, [r5] - b _02232CF4 + bl MOD83_02231A00 + ldr r0, _02232B7C ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02232B7C ; =0x00002B70 + add r0, r4, r0 + bl RemoveWindow + add r0, r4, #0 + mov r1, #0 + mov r2, #3 + bl MOD83_02231DF0 + ldr r0, _02232B70 ; =0x0000299C + ldr r0, [r4, r0] + bl MOD83_02231820 + add r0, r4, #0 + bl MOD83_022315D0 + add r0, r4, #0 + bl MOD83_0223166C + mov r0, #0x11 + str r0, [r5] + b _02232CF4 _02232B24: - bl MOD83_02232D44 - bl FUN_02033E74 - add r0, r4, #0 - mov r1, #1 - mov r2, #0x12 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl MOD83_02232D44 + bl FUN_02033E74 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x12 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232B3A: - mov r6, #0 - add r0, r6, #0 - bl FUN_02030E7C - cmp r0, #0 - beq _02232BD0 - add r0, r4, #0 - add r0, #0x90 - bl FUN_0202F10C - ldr r1, _02232B90 ; =0x00002AA8 - b _02232B94 - nop + mov r6, #0 + add r0, r6, #0 + bl FUN_02030E7C + cmp r0, #0 + beq _02232BD0 + add r0, r4, #0 + add r0, #0x90 + bl FUN_0202F10C + ldr r1, _02232B90 ; =0x00002AA8 + b _02232B94 + nop _02232B54: .word 0x00002B44 _02232B58: .word 0x00002B48 _02232B5C: .word 0x00002B4C @@ -10682,186 +10682,186 @@ _02232B88: .word MOD83_022319D0 _02232B8C: .word 0x00010200 _02232B90: .word 0x00002AA8 _02232B94: - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02232E0C - add r6, r0, #0 - bne _02232BC0 - ldr r0, _02232D18 ; =0x00002BD0 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232BC0 - ldr r0, _02232D1C ; =0x00002AA8 - mov r1, #0 - add r0, r4, r0 - bl FillWindowPixelBuffer - ldr r0, _02232D1C ; =0x00002AA8 - add r0, r4, r0 - bl CopyWindowToVram - ldr r0, _02232D18 ; =0x00002BD0 - mov r1, #0 - str r1, [r4, r0] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02232E0C + add r6, r0, #0 + bne _02232BC0 + ldr r0, _02232D18 ; =0x00002BD0 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232BC0 + ldr r0, _02232D1C ; =0x00002AA8 + mov r1, #0 + add r0, r4, r0 + bl FillWindowPixelBuffer + ldr r0, _02232D1C ; =0x00002AA8 + add r0, r4, r0 + bl CopyWindowToVram + ldr r0, _02232D18 ; =0x00002BD0 + mov r1, #0 + str r1, [r4, r0] _02232BC0: - ldr r1, _02232D20 ; =0x00002A98 - add r0, r4, #0 - add r1, r4, r1 - add r2, r6, #0 - bl MOD83_02232FE4 - ldr r0, _02232D18 ; =0x00002BD0 - str r6, [r4, r0] + ldr r1, _02232D20 ; =0x00002A98 + add r0, r4, #0 + add r1, r4, r1 + add r2, r6, #0 + bl MOD83_02232FE4 + ldr r0, _02232D18 ; =0x00002BD0 + str r6, [r4, r0] _02232BD0: - add r0, r4, #0 - add r1, r6, #0 - add r2, r5, #0 - bl MOD83_02232668 - b _02232CF4 + add r0, r4, #0 + add r1, r6, #0 + add r2, r5, #0 + bl MOD83_02232668 + b _02232CF4 _02232BDC: - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232BE8: - bl MOD83_022315F8 - ldr r0, _02232D24 ; =0x00002B70 - mov r1, #0 - add r0, r4, r0 - bl MOD83_022316D8 - mov r0, #0xae - lsl r0, r0, #6 - add r0, r4, r0 - mov r1, #0 - bl MOD83_022316C0 - add r0, r4, #0 - mov r1, #1 - mov r2, #0 - bl MOD83_02231DF0 - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x57 - bl FUN_02002ED0 - add r0, r4, #0 - mov r1, #1 - mov r2, #4 - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + bl MOD83_022315F8 + ldr r0, _02232D24 ; =0x00002B70 + mov r1, #0 + add r0, r4, r0 + bl MOD83_022316D8 + mov r0, #0xae + lsl r0, r0, #6 + add r0, r4, r0 + mov r1, #0 + bl MOD83_022316C0 + add r0, r4, #0 + mov r1, #1 + mov r2, #0 + bl MOD83_02231DF0 + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x57 + bl FUN_02002ED0 + add r0, r4, #0 + mov r1, #1 + mov r2, #4 + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232C26: - bl FUN_02031810 - cmp r0, #0 - bne _02232CF4 - ldr r0, _02232D28 ; =0x00002BE0 - ldr r0, [r4, r0] - str r0, [r5] - b _02232CF4 + bl FUN_02031810 + cmp r0, #0 + bne _02232CF4 + ldr r0, _02232D28 ; =0x00002BE0 + ldr r0, [r4, r0] + str r0, [r5] + b _02232CF4 _02232C36: - ldr r0, _02232D2C ; =0x00002BD4 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02232CF4 - ldr r1, _02232D30 ; =0x00002D78 - add r0, r4, #0 - ldr r2, [r4] - add r0, #0x90 - add r1, r4, r1 - bl MOD83_022392EC - ldr r0, _02232D30 ; =0x00002D78 - mov r1, #0xd6 - add r0, r4, r0 - lsl r1, r1, #2 - bl MOD83_0222F8F0 - add r0, r4, #0 - bl MOD83_02232610 - mov r0, #0x17 - str r0, [r5] - b _02232CF4 + ldr r0, _02232D2C ; =0x00002BD4 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02232CF4 + ldr r1, _02232D30 ; =0x00002D78 + add r0, r4, #0 + ldr r2, [r4] + add r0, #0x90 + add r1, r4, r1 + bl MOD83_022392EC + ldr r0, _02232D30 ; =0x00002D78 + mov r1, #0xd6 + add r0, r4, r0 + lsl r1, r1, #2 + bl MOD83_0222F8F0 + add r0, r4, #0 + bl MOD83_02232610 + mov r0, #0x17 + str r0, [r5] + b _02232CF4 _02232C6A: - bl MOD83_02239574 - cmp r0, #4 - bne _02232CF4 - mov r0, #0x93 - bl FUN_02031588 - mov r0, #0x18 - str r0, [r5] - b _02232CF4 + bl MOD83_02239574 + cmp r0, #4 + bne _02232CF4 + mov r0, #0x93 + bl FUN_02031588 + mov r0, #0x18 + str r0, [r5] + b _02232CF4 _02232C7E: - bl MOD83_02232DF0 - cmp r0, #0 - beq _02232C90 - mov r0, #0x93 - bl FUN_020315D8 - cmp r0, #1 - bne _02232CF4 + bl MOD83_02232DF0 + cmp r0, #0 + beq _02232C90 + mov r0, #0x93 + bl FUN_020315D8 + cmp r0, #1 + bne _02232CF4 _02232C90: - bl MOD83_02239544 - ldr r1, _02232D24 ; =0x00002B70 - mov r3, #0xa - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0x12 - lsl r3, r3, #6 - bl MOD83_02231F88 - ldr r0, _02232D34 ; =0x00003CF0 - ldr r0, [r4, r0] - bl FUN_0200DBFC - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x19 - bl MOD83_02233084 - b _02232CF4 + bl MOD83_02239544 + ldr r1, _02232D24 ; =0x00002B70 + mov r3, #0xa + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0x12 + lsl r3, r3, #6 + bl MOD83_02231F88 + ldr r0, _02232D34 ; =0x00003CF0 + ldr r0, [r4, r0] + bl FUN_0200DBFC + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x19 + bl MOD83_02233084 + b _02232CF4 _02232CB8: - ldr r0, _02232D38 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #3 - tst r0, r1 - beq _02232CF4 - mov r0, #0x13 - str r0, [r5] - b _02232CF4 + ldr r0, _02232D38 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #3 + tst r0, r1 + beq _02232CF4 + mov r0, #0x13 + str r0, [r5] + b _02232CF4 _02232CC8: - mov r1, #0 - mov r2, #0x1c - add r3, r5, #0 - bl MOD83_02231DBC - b _02232CF4 + mov r1, #0 + mov r2, #0x1c + add r3, r5, #0 + bl MOD83_02231DBC + b _02232CF4 _02232CD4: - bl FUN_0200E308 - cmp r0, #0 - beq _02232CF4 - ldr r0, _02232D28 ; =0x00002BE0 - ldr r0, [r4, r0] - str r0, [r5] - b _02232CF4 + bl FUN_0200E308 + cmp r0, #0 + beq _02232CF4 + ldr r0, _02232D28 ; =0x00002BE0 + ldr r0, [r4, r0] + str r0, [r5] + b _02232CF4 _02232CE4: - bl MOD83_022315F8 - add r0, r4, #0 - bl MOD83_022324A0 - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + bl MOD83_022315F8 + add r0, r4, #0 + bl MOD83_022324A0 + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _02232CF4: - ldr r0, _02232D3C ; =0x00002BE4 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232D00 - bl FUN_0201FDEC + ldr r0, _02232D3C ; =0x00002BE4 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232D00 + bl FUN_0201FDEC _02232D00: - bl MOD83_02238D58 - ldr r0, _02232D40 ; =0x00003CE8 - ldr r1, [r4, r0] - cmp r1, #0 - beq _02232D10 - add r0, r4, #0 - blx r1 + bl MOD83_02238D58 + ldr r0, _02232D40 ; =0x00003CE8 + ldr r1, [r4, r0] + cmp r1, #0 + beq _02232D10 + add r0, r4, #0 + blx r1 _02232D10: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #8 + pop {r4, r5, r6, pc} + nop _02232D18: .word 0x00002BD0 _02232D1C: .word 0x00002AA8 _02232D20: .word 0x00002A98 @@ -10873,8099 +10873,8099 @@ _02232D34: .word 0x00003CF0 _02232D38: .word gMain _02232D3C: .word 0x00002BE4 _02232D40: .word 0x00003CE8 - thumb_func_end MOD83_02232788 + thumb_func_end MOD83_02232788 - thumb_func_start MOD83_02232D44 + thumb_func_start MOD83_02232D44 MOD83_02232D44: ; 0x02232D44 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, _02232DA8 ; =0x00002B60 - mov r2, #0xd6 - ldr r1, [r5, r0] - sub r0, #0xc - lsl r1, r1, #2 - add r1, r5, r1 - ldr r4, [r1, r0] - add r0, r5, #0 - add r0, #0xe0 - add r1, r4, #0 - lsl r2, r2, #2 - bl memcpy - mov r1, #0x41 - add r0, r5, #0 - lsl r1, r1, #2 - add r0, #0x90 - add r1, r4, r1 - mov r2, #0x50 - bl memcpy - ldr r0, _02232DAC ; =0x00000428 - mov r1, #0 - strb r1, [r5, r0] - add r0, r5, #0 - add r0, #0xde - ldrb r1, [r0] - mov r0, #0x10 - mov r2, #0xf - bic r1, r0 - add r0, r5, #0 - add r0, #0xde - strb r1, [r0] - add r0, r5, #0 - add r0, #0xde - ldrb r1, [r0] - mov r0, #0x20 - orr r1, r0 - add r0, r5, #0 - add r0, #0xde - strb r1, [r0] - ldr r1, _02232DB0 ; =0x00002B44 - add r0, r5, #4 - ldr r1, [r5, r1] - bl MOD83_0222F8C4 - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _02232DA8 ; =0x00002B60 + mov r2, #0xd6 + ldr r1, [r5, r0] + sub r0, #0xc + lsl r1, r1, #2 + add r1, r5, r1 + ldr r4, [r1, r0] + add r0, r5, #0 + add r0, #0xe0 + add r1, r4, #0 + lsl r2, r2, #2 + bl memcpy + mov r1, #0x41 + add r0, r5, #0 + lsl r1, r1, #2 + add r0, #0x90 + add r1, r4, r1 + mov r2, #0x50 + bl memcpy + ldr r0, _02232DAC ; =0x00000428 + mov r1, #0 + strb r1, [r5, r0] + add r0, r5, #0 + add r0, #0xde + ldrb r1, [r0] + mov r0, #0x10 + mov r2, #0xf + bic r1, r0 + add r0, r5, #0 + add r0, #0xde + strb r1, [r0] + add r0, r5, #0 + add r0, #0xde + ldrb r1, [r0] + mov r0, #0x20 + orr r1, r0 + add r0, r5, #0 + add r0, #0xde + strb r1, [r0] + ldr r1, _02232DB0 ; =0x00002B44 + add r0, r5, #4 + ldr r1, [r5, r1] + bl MOD83_0222F8C4 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02232DA8: .word 0x00002B60 _02232DAC: .word 0x00000428 _02232DB0: .word 0x00002B44 - thumb_func_end MOD83_02232D44 + thumb_func_end MOD83_02232D44 - thumb_func_start MOD83_02232DB4 + thumb_func_start MOD83_02232DB4 MOD83_02232DB4: ; 0x02232DB4 - push {r3, r4} - ldr r3, [r0] - ldr r1, [r0, #4] - add r2, r0, #0 - mov r4, #0 - cmp r1, r3 - bge _02232DC8 - add r3, r1, #0 - mov r4, #1 - add r2, r0, #4 + push {r3, r4} + ldr r3, [r0] + ldr r1, [r0, #4] + add r2, r0, #0 + mov r4, #0 + cmp r1, r3 + bge _02232DC8 + add r3, r1, #0 + mov r4, #1 + add r2, r0, #4 _02232DC8: - ldr r1, [r0, #8] - cmp r1, r3 - bge _02232DD6 - add r2, r0, #0 - add r3, r1, #0 - mov r4, #2 - add r2, #8 + ldr r1, [r0, #8] + cmp r1, r3 + bge _02232DD6 + add r2, r0, #0 + add r3, r1, #0 + mov r4, #2 + add r2, #8 _02232DD6: - ldr r1, [r0, #0xc] - cmp r1, r3 - bge _02232DE2 - add r2, r0, #0 - mov r4, #3 - add r2, #0xc + ldr r1, [r0, #0xc] + cmp r1, r3 + bge _02232DE2 + add r2, r0, #0 + mov r4, #3 + add r2, #0xc _02232DE2: - ldr r0, _02232DEC ; =0x3FFF0001 - str r0, [r2] - add r0, r4, #1 - pop {r3, r4} - bx lr - .align 2, 0 + ldr r0, _02232DEC ; =0x3FFF0001 + str r0, [r2] + add r0, r4, #1 + pop {r3, r4} + bx lr + .align 2, 0 _02232DEC: .word 0x3FFF0001 - thumb_func_end MOD83_02232DB4 + thumb_func_end MOD83_02232DB4 - thumb_func_start MOD83_02232DF0 + thumb_func_start MOD83_02232DF0 MOD83_02232DF0: ; 0x02232DF0 - push {r3, r4, r5, lr} - mov r5, #0 - mov r4, #1 + push {r3, r4, r5, lr} + mov r5, #0 + mov r4, #1 _02232DF6: - add r0, r4, #0 - bl FUN_0202DFA4 - cmp r0, #0 - beq _02232E02 - add r5, r5, #1 + add r0, r4, #0 + bl FUN_0202DFA4 + cmp r0, #0 + beq _02232E02 + add r5, r5, #1 _02232E02: - add r4, r4, #1 - cmp r4, #5 - blt _02232DF6 - add r0, r5, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02232DF0 - - thumb_func_start MOD83_02232E0C + add r4, r4, #1 + cmp r4, #5 + blt _02232DF6 + add r0, r5, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02232DF0 + + thumb_func_start MOD83_02232E0C MOD83_02232E0C: ; 0x02232E0C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x48 - add r5, r0, #0 - mov r6, #0 - mov r0, #1 - str r1, [sp, #0x10] - add r7, r6, #0 - str r0, [sp, #0x24] - add r4, r5, #4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x48 + add r5, r0, #0 + mov r6, #0 + mov r0, #1 + str r1, [sp, #0x10] + add r7, r6, #0 + str r0, [sp, #0x24] + add r4, r5, #4 _02232E1E: - ldr r0, [sp, #0x24] - bl FUN_0202DFA4 - cmp r0, #0 - bne _02232E40 - ldr r0, _02232FCC ; =0x00002BA8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02232E32 - add r7, r7, #1 + ldr r0, [sp, #0x24] + bl FUN_0202DFA4 + cmp r0, #0 + bne _02232E40 + ldr r0, _02232FCC ; =0x00002BA8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02232E32 + add r7, r7, #1 _02232E32: - ldr r0, _02232FCC ; =0x00002BA8 - mov r1, #0 - str r1, [r4, r0] - ldr r1, _02232FD0 ; =0x3FFF0001 - add r0, #0x14 - str r1, [r4, r0] - b _02232E68 + ldr r0, _02232FCC ; =0x00002BA8 + mov r1, #0 + str r1, [r4, r0] + ldr r1, _02232FD0 ; =0x3FFF0001 + add r0, #0x14 + str r1, [r4, r0] + b _02232E68 _02232E40: - ldr r1, _02232FCC ; =0x00002BA8 - ldr r1, [r4, r1] - cmp r1, r0 - beq _02232E66 - ldr r1, _02232FCC ; =0x00002BA8 - add r7, r7, #1 - str r0, [r4, r1] - add r0, r1, #0 - add r1, #0x34 - ldr r1, [r5, r1] - add r0, #0x34 - add r2, r1, #1 - ldr r0, [r5, r0] - ldr r1, _02232FD4 ; =0x00002BDC - add r6, r6, #1 - str r2, [r5, r1] - sub r1, #0x20 - str r0, [r4, r1] - b _02232E68 + ldr r1, _02232FCC ; =0x00002BA8 + ldr r1, [r4, r1] + cmp r1, r0 + beq _02232E66 + ldr r1, _02232FCC ; =0x00002BA8 + add r7, r7, #1 + str r0, [r4, r1] + add r0, r1, #0 + add r1, #0x34 + ldr r1, [r5, r1] + add r0, #0x34 + add r2, r1, #1 + ldr r0, [r5, r0] + ldr r1, _02232FD4 ; =0x00002BDC + add r6, r6, #1 + str r2, [r5, r1] + sub r1, #0x20 + str r0, [r4, r1] + b _02232E68 _02232E66: - add r6, r6, #1 + add r6, r6, #1 _02232E68: - ldr r0, [sp, #0x24] - add r4, r4, #4 - add r0, r0, #1 - str r0, [sp, #0x24] - cmp r0, #5 - blt _02232E1E - cmp r7, #0 - bne _02232E7E - add sp, #0x48 - add r0, r6, #0 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [sp, #0x24] + add r4, r4, #4 + add r0, r0, #1 + str r0, [sp, #0x24] + cmp r0, #5 + blt _02232E1E + cmp r7, #0 + bne _02232E7E + add sp, #0x48 + add r0, r6, #0 + pop {r3, r4, r5, r6, r7, pc} _02232E7E: - mov r1, #0xaf - lsl r1, r1, #6 - ldr r0, [r5, r1] - str r0, [sp, #0x38] - add r0, r1, #4 - ldr r0, [r5, r0] - str r0, [sp, #0x3c] - add r0, r1, #0 - add r0, #8 - ldr r0, [r5, r0] - add r1, #0xc - str r0, [sp, #0x40] - ldr r0, [r5, r1] - str r0, [sp, #0x44] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x28] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x2c] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x30] - add r0, sp, #0x38 - bl MOD83_02232DB4 - str r0, [sp, #0x34] - mov r0, #0x57 - bl ScrStrBufs_new - add r4, r0, #0 - ldr r2, _02232FD8 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - str r0, [sp, #0x1c] - mov r5, #0 - ldr r0, [sp, #0x10] - add r1, r5, #0 - bl FillWindowPixelBuffer - add r0, r5, #0 - str r0, [sp, #0x14] - cmp r6, #0 - ble _02232FAE - add r0, sp, #0x28 - str r0, [sp, #0x18] + mov r1, #0xaf + lsl r1, r1, #6 + ldr r0, [r5, r1] + str r0, [sp, #0x38] + add r0, r1, #4 + ldr r0, [r5, r0] + str r0, [sp, #0x3c] + add r0, r1, #0 + add r0, #8 + ldr r0, [r5, r0] + add r1, #0xc + str r0, [sp, #0x40] + ldr r0, [r5, r1] + str r0, [sp, #0x44] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x28] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x2c] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x30] + add r0, sp, #0x38 + bl MOD83_02232DB4 + str r0, [sp, #0x34] + mov r0, #0x57 + bl ScrStrBufs_new + add r4, r0, #0 + ldr r2, _02232FD8 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + str r0, [sp, #0x1c] + mov r5, #0 + ldr r0, [sp, #0x10] + add r1, r5, #0 + bl FillWindowPixelBuffer + add r0, r5, #0 + str r0, [sp, #0x14] + cmp r6, #0 + ble _02232FAE + add r0, sp, #0x28 + str r0, [sp, #0x18] _02232EE6: - ldr r0, [sp, #0x18] - ldr r0, [r0] - bl FUN_0202DFA4 - add r7, r0, #0 - beq _02232F9E - add r0, r4, #0 - mov r1, #0 - add r2, r7, #0 - bl BufferPlayersName - ldr r1, [sp, #0x1c] - add r0, r4, #0 - mov r2, #0x35 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x20] - add r0, r7, #0 - bl PlayerProfile_GetTrainerGender - cmp r0, #0 - str r5, [sp] - bne _02232F30 - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02232FDC ; =0x00050600 - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x20] - add r3, r1, #0 - bl AddTextPrinterParameterized2 - b _02232F4A + ldr r0, [sp, #0x18] + ldr r0, [r0] + bl FUN_0202DFA4 + add r7, r0, #0 + beq _02232F9E + add r0, r4, #0 + mov r1, #0 + add r2, r7, #0 + bl BufferPlayersName + ldr r1, [sp, #0x1c] + add r0, r4, #0 + mov r2, #0x35 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x20] + add r0, r7, #0 + bl PlayerProfile_GetTrainerGender + cmp r0, #0 + str r5, [sp] + bne _02232F30 + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02232FDC ; =0x00050600 + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x20] + add r3, r1, #0 + bl AddTextPrinterParameterized2 + b _02232F4A _02232F30: - mov r0, #0xff - str r0, [sp, #4] - mov r0, #0xc1 - lsl r0, r0, #0xa - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - mov r1, #0 - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x20] - add r3, r1, #0 - bl AddTextPrinterParameterized2 + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0xc1 + lsl r0, r0, #0xa + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + mov r1, #0 + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x20] + add r3, r1, #0 + bl AddTextPrinterParameterized2 _02232F4A: - ldr r0, [sp, #0x20] - bl String_dtor - add r0, r7, #0 - bl PlayerProfile_GetTrainerID - add r2, r0, #0 - mov r0, #2 - str r0, [sp] - mov r0, #1 - lsl r2, r2, #0x10 - str r0, [sp, #4] - add r0, r4, #0 - mov r1, #0 - lsr r2, r2, #0x10 - mov r3, #5 - bl BufferIntegerAsString - ldr r1, [sp, #0x1c] - add r0, r4, #0 - mov r2, #0x36 - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r7, r0, #0 - str r5, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02232FE0 ; =0x000E0F00 - mov r1, #0 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x10] - add r2, r7, #0 - mov r3, #0x50 - bl AddTextPrinterParameterized2 - add r0, r7, #0 - bl String_dtor - add r5, #0x18 + ldr r0, [sp, #0x20] + bl String_dtor + add r0, r7, #0 + bl PlayerProfile_GetTrainerID + add r2, r0, #0 + mov r0, #2 + str r0, [sp] + mov r0, #1 + lsl r2, r2, #0x10 + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0 + lsr r2, r2, #0x10 + mov r3, #5 + bl BufferIntegerAsString + ldr r1, [sp, #0x1c] + add r0, r4, #0 + mov r2, #0x36 + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r7, r0, #0 + str r5, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02232FE0 ; =0x000E0F00 + mov r1, #0 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + add r2, r7, #0 + mov r3, #0x50 + bl AddTextPrinterParameterized2 + add r0, r7, #0 + bl String_dtor + add r5, #0x18 _02232F9E: - ldr r0, [sp, #0x18] - add r0, r0, #4 - str r0, [sp, #0x18] - ldr r0, [sp, #0x14] - add r0, r0, #1 - str r0, [sp, #0x14] - cmp r0, r6 - blt _02232EE6 + ldr r0, [sp, #0x18] + add r0, r0, #4 + str r0, [sp, #0x18] + ldr r0, [sp, #0x14] + add r0, r0, #1 + str r0, [sp, #0x14] + cmp r0, r6 + blt _02232EE6 _02232FAE: - cmp r6, #0 - beq _02232FB8 - ldr r0, [sp, #0x10] - bl CopyWindowToVram + cmp r6, #0 + beq _02232FB8 + ldr r0, [sp, #0x10] + bl CopyWindowToVram _02232FB8: - ldr r0, [sp, #0x1c] - bl DestroyMsgData - add r0, r4, #0 - bl ScrStrBufs_delete - add r0, r6, #0 - add sp, #0x48 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, [sp, #0x1c] + bl DestroyMsgData + add r0, r4, #0 + bl ScrStrBufs_delete + add r0, r6, #0 + add sp, #0x48 + pop {r3, r4, r5, r6, r7, pc} + nop _02232FCC: .word 0x00002BA8 _02232FD0: .word 0x3FFF0001 _02232FD4: .word 0x00002BDC _02232FD8: .word 0x00000172 _02232FDC: .word 0x00050600 _02232FE0: .word 0x000E0F00 - thumb_func_end MOD83_02232E0C + thumb_func_end MOD83_02232E0C - thumb_func_start MOD83_02232FE4 + thumb_func_start MOD83_02232FE4 MOD83_02232FE4: ; 0x02232FE4 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r0, #0 - ldr r0, _02233070 ; =0x00002B94 - add r4, r1, #0 - str r2, [r5, r0] - ldr r2, _02233074 ; =0x00000172 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x57 - bl NewMsgDataFromNarc - ldr r1, _02233078 ; =0x000029A4 - str r0, [r5, r1] - mov r0, #0x57 - bl ScrStrBufs_new - ldr r1, _0223307C ; =0x000029A0 - str r0, [r5, r1] - add r0, r4, #0 - mov r1, #0 - bl FillWindowPixelBuffer - mov r3, #1 - str r3, [sp] - ldr r0, _0223307C ; =0x000029A0 - str r3, [sp, #4] - ldr r2, _02233070 ; =0x00002B94 - ldr r0, [r5, r0] - ldr r2, [r5, r2] - mov r1, #0 - bl BufferIntegerAsString - ldr r1, _0223307C ; =0x000029A0 - mov r2, #0x38 - ldr r0, [r5, r1] - add r1, r1, #4 - ldr r1, [r5, r1] - mov r3, #0x57 - bl ReadMsgData_ExpandPlaceholders - add r6, r0, #0 - mov r3, #0 - str r3, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r0, _02233080 ; =0x00010200 - mov r1, #1 - str r0, [sp, #8] - add r0, r4, #0 - add r2, r6, #0 - str r3, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r4, #0 - bl CopyWindowToVram - add r0, r6, #0 - bl String_dtor - ldr r0, _02233078 ; =0x000029A4 - ldr r0, [r5, r0] - bl DestroyMsgData - ldr r0, _0223307C ; =0x000029A0 - ldr r0, [r5, r0] - bl ScrStrBufs_delete - add sp, #0x10 - pop {r4, r5, r6, pc} - .align 2, 0 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r5, r0, #0 + ldr r0, _02233070 ; =0x00002B94 + add r4, r1, #0 + str r2, [r5, r0] + ldr r2, _02233074 ; =0x00000172 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x57 + bl NewMsgDataFromNarc + ldr r1, _02233078 ; =0x000029A4 + str r0, [r5, r1] + mov r0, #0x57 + bl ScrStrBufs_new + ldr r1, _0223307C ; =0x000029A0 + str r0, [r5, r1] + add r0, r4, #0 + mov r1, #0 + bl FillWindowPixelBuffer + mov r3, #1 + str r3, [sp] + ldr r0, _0223307C ; =0x000029A0 + str r3, [sp, #4] + ldr r2, _02233070 ; =0x00002B94 + ldr r0, [r5, r0] + ldr r2, [r5, r2] + mov r1, #0 + bl BufferIntegerAsString + ldr r1, _0223307C ; =0x000029A0 + mov r2, #0x38 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + mov r3, #0x57 + bl ReadMsgData_ExpandPlaceholders + add r6, r0, #0 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02233080 ; =0x00010200 + mov r1, #1 + str r0, [sp, #8] + add r0, r4, #0 + add r2, r6, #0 + str r3, [sp, #0xc] + bl AddTextPrinterParameterized2 + add r0, r4, #0 + bl CopyWindowToVram + add r0, r6, #0 + bl String_dtor + ldr r0, _02233078 ; =0x000029A4 + ldr r0, [r5, r0] + bl DestroyMsgData + ldr r0, _0223307C ; =0x000029A0 + ldr r0, [r5, r0] + bl ScrStrBufs_delete + add sp, #0x10 + pop {r4, r5, r6, pc} + .align 2, 0 _02233070: .word 0x00002B94 _02233074: .word 0x00000172 _02233078: .word 0x000029A4 _0223307C: .word 0x000029A0 _02233080: .word 0x00010200 - thumb_func_end MOD83_02232FE4 + thumb_func_end MOD83_02232FE4 - thumb_func_start MOD83_02233084 + thumb_func_start MOD83_02233084 MOD83_02233084: ; 0x02233084 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl MOD83_0222F9DC - bl FUN_02033ED0 - ldr r0, _022330A0 ; =0x00002BE0 - str r6, [r5, r0] - mov r0, #0x16 - str r0, [r4] - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl MOD83_0222F9DC + bl FUN_02033ED0 + ldr r0, _022330A0 ; =0x00002BE0 + str r6, [r5, r0] + mov r0, #0x16 + str r0, [r4] + pop {r4, r5, r6, pc} + nop _022330A0: .word 0x00002BE0 - thumb_func_end MOD83_02233084 + thumb_func_end MOD83_02233084 - thumb_func_start MOD83_022330A4 + thumb_func_start MOD83_022330A4 MOD83_022330A4: ; 0x022330A4 - push {r3, r4, r5, r6, r7, lr} - str r0, [sp] - bl OverlayManager_GetData - add r7, r0, #0 - ldr r0, _02233154 ; =0x000029A8 - mov r6, #0 - add r4, r7, #0 - add r5, r7, r0 + push {r3, r4, r5, r6, r7, lr} + str r0, [sp] + bl OverlayManager_GetData + add r7, r0, #0 + ldr r0, _02233154 ; =0x000029A8 + mov r6, #0 + add r4, r7, #0 + add r5, r7, r0 _022330B6: - ldr r0, _02233154 ; =0x000029A8 - ldr r0, [r4, r0] - cmp r0, #0 - beq _022330CA - add r0, r5, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r5, #0 - bl RemoveWindow + ldr r0, _02233154 ; =0x000029A8 + ldr r0, [r4, r0] + cmp r0, #0 + beq _022330CA + add r0, r5, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r5, #0 + bl RemoveWindow _022330CA: - add r6, r6, #1 - add r4, #0x10 - add r5, #0x10 - cmp r6, #0x13 - blo _022330B6 - ldr r0, _02233158 ; =0x00002B70 - ldr r1, [r7, r0] - cmp r1, #0 - beq _022330EA - add r0, r7, r0 - bl ClearWindowTilemapAndCopyToVram - ldr r0, _02233158 ; =0x00002B70 - add r0, r7, r0 - bl RemoveWindow + add r6, r6, #1 + add r4, #0x10 + add r5, #0x10 + cmp r6, #0x13 + blo _022330B6 + ldr r0, _02233158 ; =0x00002B70 + ldr r1, [r7, r0] + cmp r1, #0 + beq _022330EA + add r0, r7, r0 + bl ClearWindowTilemapAndCopyToVram + ldr r0, _02233158 ; =0x00002B70 + add r0, r7, r0 + bl RemoveWindow _022330EA: - mov r0, #0xae - lsl r0, r0, #6 - ldr r1, [r7, r0] - cmp r1, #0 - beq _02233104 - add r0, r7, r0 - bl ClearWindowTilemapAndCopyToVram - mov r0, #0xae - lsl r0, r0, #6 - add r0, r7, r0 - bl RemoveWindow + mov r0, #0xae + lsl r0, r0, #6 + ldr r1, [r7, r0] + cmp r1, #0 + beq _02233104 + add r0, r7, r0 + bl ClearWindowTilemapAndCopyToVram + mov r0, #0xae + lsl r0, r0, #6 + add r0, r7, r0 + bl RemoveWindow _02233104: - ldr r0, _0223315C ; =0x0000299C - mov r1, #0 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #1 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #2 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - mov r1, #3 - ldr r0, [r7, r0] - bl FreeBgTilemapBuffer - ldr r0, _0223315C ; =0x0000299C - ldr r0, [r7, r0] - bl FreeToHeap - ldr r0, _02233160 ; =SDK_OVERLAY_MODULE_83_ID - ldr r1, _02233164 ; =MOD83_0223A434 - bl RegisterMainOverlay - mov r0, #0x5b - bl DestroyHeap - ldr r0, [sp] - bl OverlayManager_FreeData - mov r0, #0x57 - bl DestroyHeap - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, _0223315C ; =0x0000299C + mov r1, #0 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #1 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #2 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + mov r1, #3 + ldr r0, [r7, r0] + bl FreeBgTilemapBuffer + ldr r0, _0223315C ; =0x0000299C + ldr r0, [r7, r0] + bl FreeToHeap + ldr r0, _02233160 ; =SDK_OVERLAY_MODULE_83_ID + ldr r1, _02233164 ; =MOD83_0223A434 + bl RegisterMainOverlay + mov r0, #0x5b + bl DestroyHeap + ldr r0, [sp] + bl OverlayManager_FreeData + mov r0, #0x57 + bl DestroyHeap + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + nop _02233154: .word 0x000029A8 _02233158: .word 0x00002B70 _0223315C: .word 0x0000299C _02233160: .word SDK_OVERLAY_MODULE_83_ID _02233164: .word MOD83_0223A434 - thumb_func_end MOD83_022330A4 + thumb_func_end MOD83_022330A4 - thumb_func_start MOD83_02233168 + thumb_func_start MOD83_02233168 MOD83_02233168: ; 0x02233168 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - add r7, r1, #0 - add r5, r2, #0 - bl MOD83_022331E0 - ldr r1, _022331B4 ; =0x00003CF4 - add r0, r5, #0 - bl AllocFromHeapAtEnd - ldr r2, _022331B4 ; =0x00003CF4 - mov r1, #0 - add r4, r0, #0 - bl memset - ldr r0, _022331B8 ; =0x0000299C - mov r1, #0x1e - str r6, [r4, r0] - mov r0, #0 - lsl r1, r1, #4 - add r2, r5, #0 - str r5, [r4] - bl FUN_02002ED0 - ldr r0, _022331BC ; =0x00002B54 - mov r2, #0 - str r7, [r4, r0] - add r0, #0xc - str r2, [r4, r0] - add r0, r4, #0 - mov r1, #1 - bl MOD83_02231DF0 - add r0, r4, #0 - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + add r7, r1, #0 + add r5, r2, #0 + bl MOD83_022331E0 + ldr r1, _022331B4 ; =0x00003CF4 + add r0, r5, #0 + bl AllocFromHeapAtEnd + ldr r2, _022331B4 ; =0x00003CF4 + mov r1, #0 + add r4, r0, #0 + bl memset + ldr r0, _022331B8 ; =0x0000299C + mov r1, #0x1e + str r6, [r4, r0] + mov r0, #0 + lsl r1, r1, #4 + add r2, r5, #0 + str r5, [r4] + bl FUN_02002ED0 + ldr r0, _022331BC ; =0x00002B54 + mov r2, #0 + str r7, [r4, r0] + add r0, #0xc + str r2, [r4, r0] + add r0, r4, #0 + mov r1, #1 + bl MOD83_02231DF0 + add r0, r4, #0 + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + nop _022331B4: .word 0x00003CF4 _022331B8: .word 0x0000299C _022331BC: .word 0x00002B54 - thumb_func_end MOD83_02233168 + thumb_func_end MOD83_02233168 - thumb_func_start MOD83_022331C0 + thumb_func_start MOD83_022331C0 MOD83_022331C0: ; 0x022331C0 - push {r4, lr} - sub sp, #0x28 - ldr r4, _022331DC ; =MOD83_0223A4D4 - add r3, sp, #0 - mov r2, #5 + push {r4, lr} + sub sp, #0x28 + ldr r4, _022331DC ; =MOD83_0223A4D4 + add r3, sp, #0 + mov r2, #5 _022331CA: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _022331CA - add r0, sp, #0 - bl GX_SetBanks - add sp, #0x28 - pop {r4, pc} - .align 2, 0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _022331CA + add r0, sp, #0 + bl GX_SetBanks + add sp, #0x28 + pop {r4, pc} + .align 2, 0 _022331DC: .word MOD83_0223A4D4 - thumb_func_end MOD83_022331C0 + thumb_func_end MOD83_022331C0 - thumb_func_start MOD83_022331E0 + thumb_func_start MOD83_022331E0 MOD83_022331E0: ; 0x022331E0 - push {r3, r4, r5, lr} - sub sp, #0x80 - ldr r5, _022332A0 ; =MOD83_0223A454 - add r3, sp, #0x70 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - ldr r5, _022332A4 ; =MOD83_0223A480 - add r3, sp, #0x54 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - add r0, r4, #0 - add r3, r1, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332A8 ; =MOD83_0223A4B8 - add r3, sp, #0x38 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #1 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332AC ; =MOD83_0223A49C - add r3, sp, #0x1c - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #2 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #2 - bl BgClearTilemapBufferAndCommit - ldr r5, _022332B0 ; =MOD83_0223A464 - add r3, sp, #0 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #3 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #3 - bl BgClearTilemapBufferAndCommit - add sp, #0x80 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x80 + ldr r5, _022332A0 ; =MOD83_0223A454 + add r3, sp, #0x70 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + ldr r5, _022332A4 ; =MOD83_0223A480 + add r3, sp, #0x54 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #0 + str r0, [r3] + add r0, r4, #0 + add r3, r1, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332A8 ; =MOD83_0223A4B8 + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332AC ; =MOD83_0223A49C + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #2 + bl BgClearTilemapBufferAndCommit + ldr r5, _022332B0 ; =MOD83_0223A464 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #3 + bl BgClearTilemapBufferAndCommit + add sp, #0x80 + pop {r3, r4, r5, pc} + nop _022332A0: .word MOD83_0223A454 _022332A4: .word MOD83_0223A480 _022332A8: .word MOD83_0223A4B8 _022332AC: .word MOD83_0223A49C _022332B0: .word MOD83_0223A464 - thumb_func_end MOD83_022331E0 + thumb_func_end MOD83_022331E0 - thumb_func_start MOD83_022332B4 + thumb_func_start MOD83_022332B4 MOD83_022332B4: ; 0x022332B4 - push {r3, r4, r5, r6, r7, lr} - add r5, r1, #0 - add r7, r0, #0 - bl FUN_0202251C - mov r1, #0 - ldr r4, [r5, #0x48] - mvn r1, r1 - add r6, r0, #0 - cmp r4, r1 - bne _022332E8 - add r2, r5, #0 - add r2, #0x4c - ldrh r2, [r2] - lsr r1, r1, #0x10 - cmp r2, r1 - bne _022332E8 - bl FUN_0202AC28 - add r0, r7, #0 - mov r1, #0 - bl FUN_020227A0 - mov r0, #0 - bl OS_ResetSystem + push {r3, r4, r5, r6, r7, lr} + add r5, r1, #0 + add r7, r0, #0 + bl FUN_0202251C + mov r1, #0 + ldr r4, [r5, #0x48] + mvn r1, r1 + add r6, r0, #0 + cmp r4, r1 + bne _022332E8 + add r2, r5, #0 + add r2, #0x4c + ldrh r2, [r2] + lsr r1, r1, #0x10 + cmp r2, r1 + bne _022332E8 + bl FUN_0202AC28 + add r0, r7, #0 + mov r1, #0 + bl FUN_020227A0 + mov r0, #0 + bl OS_ResetSystem _022332E8: - cmp r4, #0 - bne _022332F0 - mov r4, #0 - mvn r4, r4 + cmp r4, #0 + bne _022332F0 + mov r4, #0 + mvn r4, r4 _022332F0: - .ifdef DIAMOND - mov r0, #1 - .else - mov r0, #2 - .endif - lsl r0, r0, #0xa - tst r0, r4 - bne _022332FC - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + .ifdef DIAMOND + mov r0, #1 + .else + mov r0, #2 + .endif + lsl r0, r0, #0xa + tst r0, r4 + bne _022332FC + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022332FC: - add r0, r5, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - cmp r0, #1 - bne _0223331E - add r1, r5, #0 - add r1, #0x4c - ldrh r1, [r1] - add r0, r6, #0 - bl FUN_0202AEF4 - cmp r0, #1 - bne _0223331E - mov r0, #2 - pop {r3, r4, r5, r6, r7, pc} + add r0, r5, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + cmp r0, #1 + bne _0223331E + add r1, r5, #0 + add r1, #0x4c + ldrh r1, [r1] + add r0, r6, #0 + bl FUN_0202AEF4 + cmp r0, #1 + bne _0223331E + mov r0, #2 + pop {r3, r4, r5, r6, r7, pc} _0223331E: - add r0, r5, #0 - add r0, #0x4e - ldrb r0, [r0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - cmp r0, #1 - bne _0223333A - add r0, r6, #0 - bl FUN_0202AE0C - cmp r0, #0 - bne _0223333A - mov r0, #4 - pop {r3, r4, r5, r6, r7, pc} + add r0, r5, #0 + add r0, #0x4e + ldrb r0, [r0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + cmp r0, #1 + bne _0223333A + add r0, r6, #0 + bl FUN_0202AE0C + cmp r0, #0 + bne _0223333A + mov r0, #4 + pop {r3, r4, r5, r6, r7, pc} _0223333A: - add r0, r6, #0 - bl FUN_0202ADF0 - cmp r0, #0 - bne _02233348 - mov r0, #3 - pop {r3, r4, r5, r6, r7, pc} + add r0, r6, #0 + bl FUN_0202ADF0 + cmp r0, #0 + bne _02233348 + mov r0, #3 + pop {r3, r4, r5, r6, r7, pc} _02233348: - add r5, #0x4e - ldrb r0, [r5] - lsl r0, r0, #0x1a - lsr r0, r0, #0x1f - cmp r0, #1 - bne _02233358 - mov r0, #5 - pop {r3, r4, r5, r6, r7, pc} + add r5, #0x4e + ldrb r0, [r5] + lsl r0, r0, #0x1a + lsr r0, r0, #0x1f + cmp r0, #1 + bne _02233358 + mov r0, #5 + pop {r3, r4, r5, r6, r7, pc} _02233358: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022332B4 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022332B4 - thumb_func_start MOD83_0223335C + thumb_func_start MOD83_0223335C MOD83_0223335C: ; 0x0223335C - push {r3, lr} - mov r0, #4 - bl MOD83_02234580 - bl MOD83_02234C34 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223335C - - thumb_func_start MOD83_0223336C + push {r3, lr} + mov r0, #4 + bl MOD83_02234580 + bl MOD83_02234C34 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223335C + + thumb_func_start MOD83_0223336C MOD83_0223336C: ; 0x0223336C - push {r3, lr} - bl MOD83_02234704 - str r0, [sp] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223336C - - thumb_func_start MOD83_02233378 + push {r3, lr} + bl MOD83_02234704 + str r0, [sp] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223336C + + thumb_func_start MOD83_02233378 MOD83_02233378: ; 0x02233378 - push {r3, lr} - bl MOD83_02234724 - add r1, sp, #0 - strh r0, [r1] - mov r0, #0 - ldrsh r0, [r1, r0] - pop {r3, pc} - thumb_func_end MOD83_02233378 - - thumb_func_start MOD83_02233388 + push {r3, lr} + bl MOD83_02234724 + add r1, sp, #0 + strh r0, [r1] + mov r0, #0 + ldrsh r0, [r1, r0] + pop {r3, pc} + thumb_func_end MOD83_02233378 + + thumb_func_start MOD83_02233388 MOD83_02233388: ; 0x02233388 - push {r4, lr} - bl MOD83_0223458C - cmp r0, #0xc - bne _022333AA - bl MOD83_0223456C - add r4, r0, #0 - ldr r0, [r4, #0x1c] - cmp r0, #0 - bne _022333A6 - bl MOD83_02234C34 - mov r0, #1 - str r0, [r4, #0x1c] + push {r4, lr} + bl MOD83_0223458C + cmp r0, #0xc + bne _022333AA + bl MOD83_0223456C + add r4, r0, #0 + ldr r0, [r4, #0x1c] + cmp r0, #0 + bne _022333A6 + bl MOD83_02234C34 + mov r0, #1 + str r0, [r4, #0x1c] _022333A6: - mov r0, #1 - pop {r4, pc} + mov r0, #1 + pop {r4, pc} _022333AA: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233388 + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233388 - thumb_func_start MOD83_022333B0 + thumb_func_start MOD83_022333B0 MOD83_022333B0: ; 0x022333B0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223466C - mov r3, #0 - add r1, r3, #0 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223466C + mov r3, #0 + add r1, r3, #0 _022333BC: - ldr r2, [r0] - cmp r2, #0 - beq _022333CC - ldrh r2, [r0, #6] - cmp r4, r2 - bne _022333CC - strb r1, [r0, #8] - strb r1, [r0, #0xa] + ldr r2, [r0] + cmp r2, #0 + beq _022333CC + ldrh r2, [r0, #6] + cmp r4, r2 + bne _022333CC + strb r1, [r0, #8] + strb r1, [r0, #0xa] _022333CC: - add r3, r3, #1 - add r0, #0xc - cmp r3, #8 - blt _022333BC - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_022333B0 - - thumb_func_start MOD83_022333D8 + add r3, r3, #1 + add r0, #0xc + cmp r3, #8 + blt _022333BC + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_022333B0 + + thumb_func_start MOD83_022333D8 MOD83_022333D8: ; 0x022333D8 - push {r3, lr} - bl MOD83_0223466C - add r1, r0, #0 - add r1, #0x62 - ldrh r3, [r1] - mov r2, #1 - add r1, r3, #0 - tst r1, r2 - beq _022333FE - add r1, r0, #0 - add r1, #0x62 - ldrh r3, [r1] - mov r1, #1 - add r0, #0x62 - bic r3, r1 - strh r3, [r0] - add r0, r2, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_0223466C + add r1, r0, #0 + add r1, #0x62 + ldrh r3, [r1] + mov r2, #1 + add r1, r3, #0 + tst r1, r2 + beq _022333FE + add r1, r0, #0 + add r1, #0x62 + ldrh r3, [r1] + mov r1, #1 + add r0, #0x62 + bic r3, r1 + strh r3, [r0] + add r0, r2, #0 + pop {r3, pc} _022333FE: - mov r1, #0x40 - add r2, r3, #0 - tst r2, r1 - beq _02233418 - add r1, r0, #0 - add r1, #0x62 - ldrh r2, [r1] - mov r1, #0x40 - add r0, #0x62 - bic r2, r1 - strh r2, [r0] - mov r0, #7 - pop {r3, pc} + mov r1, #0x40 + add r2, r3, #0 + tst r2, r1 + beq _02233418 + add r1, r0, #0 + add r1, #0x62 + ldrh r2, [r1] + mov r1, #0x40 + add r0, #0x62 + bic r2, r1 + strh r2, [r0] + mov r0, #7 + pop {r3, pc} _02233418: - lsl r1, r1, #6 - tst r1, r3 - beq _02233430 - add r1, r0, #0 - add r1, #0x62 - ldrh r2, [r1] - ldr r1, _02233434 ; =0xFFFFEFFF - add r0, #0x62 - and r1, r2 - strh r1, [r0] - mov r0, #0xd - pop {r3, pc} + lsl r1, r1, #6 + tst r1, r3 + beq _02233430 + add r1, r0, #0 + add r1, #0x62 + ldrh r2, [r1] + ldr r1, _02233434 ; =0xFFFFEFFF + add r0, #0x62 + and r1, r2 + strh r1, [r0] + mov r0, #0xd + pop {r3, pc} _02233430: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _02233434: .word 0xFFFFEFFF - thumb_func_end MOD83_022333D8 + thumb_func_end MOD83_022333D8 - thumb_func_start MOD83_02233438 + thumb_func_start MOD83_02233438 MOD83_02233438: ; 0x02233438 - push {r4, lr} - bl MOD83_0223466C - add r4, r0, #0 - mov r1, #1 - add r0, #0x60 - strb r1, [r0] - bl WM_GetAllowedChannel - add r1, r4, #0 - add r1, #0x62 - strh r0, [r1] - add r0, r4, #0 - add r0, #0x62 - ldrh r1, [r0] - cmp r1, #0 - beq _02233462 - mov r0, #2 - lsl r0, r0, #0xe - cmp r1, r0 - bne _02233466 + push {r4, lr} + bl MOD83_0223466C + add r4, r0, #0 + mov r1, #1 + add r0, #0x60 + strb r1, [r0] + bl WM_GetAllowedChannel + add r1, r4, #0 + add r1, #0x62 + strh r0, [r1] + add r0, r4, #0 + add r0, #0x62 + ldrh r1, [r0] + cmp r1, #0 + beq _02233462 + mov r0, #2 + lsl r0, r0, #0xe + cmp r1, r0 + bne _02233466 _02233462: - mov r0, #0 - pop {r4, pc} + mov r0, #0 + pop {r4, pc} _02233466: - add r0, r4, #0 - mov r1, #0x66 - add r0, #0x61 - strb r1, [r0] - mov r0, #0 - add r4, #0x64 - strb r0, [r4] - mov r0, #1 - pop {r4, pc} - thumb_func_end MOD83_02233438 - - thumb_func_start MOD83_02233478 + add r0, r4, #0 + mov r1, #0x66 + add r0, #0x61 + strb r1, [r0] + mov r0, #0 + add r4, #0x64 + strb r0, [r4] + mov r0, #1 + pop {r4, pc} + thumb_func_end MOD83_02233438 + + thumb_func_start MOD83_02233478 MOD83_02233478: ; 0x02233478 - push {r4, lr} - bl MOD83_02234564 - add r4, r0, #0 - bl WM_GetDispersionBeaconPeriod - strh r0, [r4, #0x18] - bl WM_GetNextTgid - strh r0, [r4, #0xc] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233478 - - thumb_func_start MOD83_02233490 + push {r4, lr} + bl MOD83_02234564 + add r4, r0, #0 + bl WM_GetDispersionBeaconPeriod + strh r0, [r4, #0x18] + bl WM_GetNextTgid + strh r0, [r4, #0xc] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233478 + + thumb_func_start MOD83_02233490 MOD83_02233490: ; 0x02233490 - push {r4, lr} - bl MOD83_022345D4 - add r4, r0, #0 - bl MOD83_02234610 - str r0, [r4] - bl MOD83_02234564 - ldrh r0, [r0, #0x32] - strh r0, [r4, #4] - bl WM_GetDispersionScanPeriod - strh r0, [r4, #6] - mov r0, #0xff - strb r0, [r4, #8] - strb r0, [r4, #9] - strb r0, [r4, #0xa] - strb r0, [r4, #0xb] - strb r0, [r4, #0xc] - strb r0, [r4, #0xd] - pop {r4, pc} - thumb_func_end MOD83_02233490 - - thumb_func_start MOD83_022334BC + push {r4, lr} + bl MOD83_022345D4 + add r4, r0, #0 + bl MOD83_02234610 + str r0, [r4] + bl MOD83_02234564 + ldrh r0, [r0, #0x32] + strh r0, [r4, #4] + bl WM_GetDispersionScanPeriod + strh r0, [r4, #6] + mov r0, #0xff + strb r0, [r4, #8] + strb r0, [r4, #9] + strb r0, [r4, #0xa] + strb r0, [r4, #0xb] + strb r0, [r4, #0xc] + strb r0, [r4, #0xd] + pop {r4, pc} + thumb_func_end MOD83_02233490 + + thumb_func_start MOD83_022334BC MOD83_022334BC: ; 0x022334BC - push {r3, r4, r5, r6, r7, lr} - bl MOD83_022345D4 - add r7, r0, #0 - bl WM_GetAllowedChannel - add r3, r0, #0 - beq _02233508 - ldrh r2, [r7, #4] - mov r1, #0 - mov r0, #1 - mov ip, r2 - mov r4, #0x1c + push {r3, r4, r5, r6, r7, lr} + bl MOD83_022345D4 + add r7, r0, #0 + bl WM_GetAllowedChannel + add r3, r0, #0 + beq _02233508 + ldrh r2, [r7, #4] + mov r1, #0 + mov r0, #1 + mov ip, r2 + mov r4, #0x1c _022334D6: - lsr r6, r2, #0x1f - lsl r5, r2, #0x1c - sub r5, r5, r6 - ror r5, r4 - add r5, r6, r5 - add r6, r0, #0 - lsl r6, r5 - add r5, r3, #0 - tst r5, r6 - beq _02233500 - mov r0, ip - add r0, r0, r1 - lsr r2, r0, #0x1f - lsl r1, r0, #0x1c - sub r1, r1, r2 - mov r0, #0x1c - ror r1, r0 - add r0, r2, r1 - add r0, r0, #1 - strh r0, [r7, #4] - pop {r3, r4, r5, r6, r7, pc} + lsr r6, r2, #0x1f + lsl r5, r2, #0x1c + sub r5, r5, r6 + ror r5, r4 + add r5, r6, r5 + add r6, r0, #0 + lsl r6, r5 + add r5, r3, #0 + tst r5, r6 + beq _02233500 + mov r0, ip + add r0, r0, r1 + lsr r2, r0, #0x1f + lsl r1, r0, #0x1c + sub r1, r1, r2 + mov r0, #0x1c + ror r1, r0 + add r0, r2, r1 + add r0, r0, #1 + strh r0, [r7, #4] + pop {r3, r4, r5, r6, r7, pc} _02233500: - add r1, r1, #1 - add r2, r2, #1 - cmp r1, #0x10 - blt _022334D6 + add r1, r1, #1 + add r2, r2, #1 + cmp r1, #0x10 + blt _022334D6 _02233508: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_022334BC + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_022334BC - thumb_func_start MOD83_0223350C + thumb_func_start MOD83_0223350C MOD83_0223350C: ; 0x0223350C - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #8 - bne _02233524 - bl MOD83_02234958 - bl MOD83_0223335C + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #8 + bne _02233524 + bl MOD83_02234958 + bl MOD83_0223335C _02233524: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_0223350C + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_0223350C - thumb_func_start MOD83_02233528 + thumb_func_start MOD83_02233528 MOD83_02233528: ; 0x02233528 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - beq _0223353C - bl MOD83_02234958 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + beq _0223353C + bl MOD83_02234958 _0223353C: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02233528 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02233528 - thumb_func_start MOD83_02233540 + thumb_func_start MOD83_02233540 MOD83_02233540: ; 0x02233540 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233576 - mov r0, #2 - bl MOD83_02234580 - bl MOD83_0223458C - cmp r0, #0xc - bne _02233562 - bl MOD83_022349CC - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233576 + mov r0, #2 + bl MOD83_02234580 + bl MOD83_0223458C + cmp r0, #0xc + bne _02233562 + bl MOD83_022349CC + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233562: - bl MOD83_02234BF8 - cmp r0, #0 - bne _0223357E - bl MOD83_022349CC - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + bl MOD83_02234BF8 + cmp r0, #0 + bne _0223357E + bl MOD83_022349CC + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233576: - bl MOD83_02234958 - bl MOD83_022349CC + bl MOD83_02234958 + bl MOD83_022349CC _0223357E: - pop {r3, pc} - thumb_func_end MOD83_02233540 + pop {r3, pc} + thumb_func_end MOD83_02233540 - thumb_func_start MOD83_02233580 + thumb_func_start MOD83_02233580 MOD83_02233580: ; 0x02233580 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _022335AA - bl MOD83_0223458C - cmp r0, #0xc - bne _022335A2 - bl WM_Finish - mov r0, #0xc - bl MOD83_02234580 - mov r0, #1 - bl MOD83_0223464C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _022335AA + bl MOD83_0223458C + cmp r0, #0xc + bne _022335A2 + bl WM_Finish + mov r0, #0xc + bl MOD83_02234580 + mov r0, #1 + bl MOD83_0223464C + pop {r3, pc} _022335A2: - mov r0, #1 - bl MOD83_02234580 - pop {r3, pc} + mov r0, #1 + bl MOD83_02234580 + pop {r3, pc} _022335AA: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233580 - - thumb_func_start MOD83_022335B8 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233580 + + thumb_func_start MOD83_022335B8 MOD83_022335B8: ; 0x022335B8 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldrh r0, [r5, #2] - cmp r0, #0 - bne _02233616 - bl MOD83_0223466C - add r4, r0, #0 - add r0, #0x61 - ldrh r1, [r5, #0xa] - ldrb r0, [r0] - cmp r0, r1 - ble _022335E0 - add r0, r4, #0 - add r0, #0x61 - strb r1, [r0] - add r0, r4, #0 - ldrh r1, [r5, #8] - add r0, #0x64 - strb r1, [r0] + push {r3, r4, r5, lr} + add r5, r0, #0 + ldrh r0, [r5, #2] + cmp r0, #0 + bne _02233616 + bl MOD83_0223466C + add r4, r0, #0 + add r0, #0x61 + ldrh r1, [r5, #0xa] + ldrb r0, [r0] + cmp r0, r1 + ble _022335E0 + add r0, r4, #0 + add r0, #0x61 + strb r1, [r0] + add r0, r4, #0 + ldrh r1, [r5, #8] + add r0, #0x64 + strb r1, [r0] _022335E0: - bl MOD83_022333D8 - cmp r0, #0 - beq _022335F6 - bl MOD83_022349EC - cmp r0, #0 - bne _0223361E - bl MOD83_0223335C - pop {r3, r4, r5, pc} + bl MOD83_022333D8 + cmp r0, #0 + beq _022335F6 + bl MOD83_022349EC + cmp r0, #0 + bne _0223361E + bl MOD83_0223335C + pop {r3, r4, r5, pc} _022335F6: - add r4, #0x61 - ldrb r0, [r4] - cmp r0, #0x66 - bhs _02233610 - bl MOD83_02233478 - bl MOD83_02234A18 - cmp r0, #0 - bne _0223361E - bl MOD83_0223335C - pop {r3, r4, r5, pc} + add r4, #0x61 + ldrb r0, [r4] + cmp r0, #0x66 + bhs _02233610 + bl MOD83_02233478 + bl MOD83_02234A18 + cmp r0, #0 + bne _0223361E + bl MOD83_0223335C + pop {r3, r4, r5, pc} _02233610: - bl MOD83_0223335C - pop {r3, r4, r5, pc} + bl MOD83_0223335C + pop {r3, r4, r5, pc} _02233616: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _0223361E: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022335B8 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022335B8 - thumb_func_start MOD83_02233620 + thumb_func_start MOD83_02233620 MOD83_02233620: ; 0x02233620 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _0223363E - bl MOD83_02233388 - cmp r0, #0 - bne _02233646 - bl MOD83_02234A54 - cmp r0, #0 - bne _02233646 - bl MOD83_0223335C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _0223363E + bl MOD83_02233388 + cmp r0, #0 + bne _02233646 + bl MOD83_02234A54 + cmp r0, #0 + bne _02233646 + bl MOD83_0223335C + pop {r3, pc} _0223363E: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233646: - pop {r3, pc} - thumb_func_end MOD83_02233620 + pop {r3, pc} + thumb_func_end MOD83_02233620 - thumb_func_start MOD83_02233648 + thumb_func_start MOD83_02233648 MOD83_02233648: ; 0x02233648 - push {r4, r5, lr} - sub sp, #0xc - add r5, r0, #0 - ldrh r0, [r5, #8] - bl MOD83_0223495C - ldrh r0, [r5, #2] - cmp r0, #0 - beq _0223365C - b _0223376E + push {r4, r5, lr} + sub sp, #0xc + add r5, r0, #0 + ldrh r0, [r5, #8] + bl MOD83_0223495C + ldrh r0, [r5, #2] + cmp r0, #0 + beq _0223365C + b _0223376E _0223365C: - bl MOD83_0223466C - add r4, r0, #0 - mov r0, #8 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - beq _02233672 - b _02233776 + bl MOD83_0223466C + add r4, r0, #0 + mov r0, #8 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + beq _02233672 + b _02233776 _02233672: - add r0, r4, #0 - add r0, #0x60 - ldrb r0, [r0] - cmp r0, #1 - bne _02233684 - add r0, r4, #0 - mov r1, #2 - add r0, #0x60 - strb r1, [r0] + add r0, r4, #0 + add r0, #0x60 + ldrb r0, [r0] + cmp r0, #1 + bne _02233684 + add r0, r4, #0 + mov r1, #2 + add r0, #0x60 + strb r1, [r0] _02233684: - ldrh r0, [r5, #8] - cmp r0, #7 - bgt _0223369C - bge _022336BE - cmp r0, #2 - bgt _02233776 - cmp r0, #0 - blt _02233776 - beq _022336A4 - add sp, #0xc - cmp r0, #2 - pop {r4, r5, pc} + ldrh r0, [r5, #8] + cmp r0, #7 + bgt _0223369C + bge _022336BE + cmp r0, #2 + bgt _02233776 + cmp r0, #0 + blt _02233776 + beq _022336A4 + add sp, #0xc + cmp r0, #2 + pop {r4, r5, pc} _0223369C: - cmp r0, #9 - beq _02233764 - add sp, #0xc - pop {r4, r5, pc} + cmp r0, #9 + beq _02233764 + add sp, #0xc + pop {r4, r5, pc} _022336A4: - bl MOD83_02234B80 - cmp r0, #0 - bne _022336B4 - bl MOD83_0223335C - add sp, #0xc - pop {r4, r5, pc} + bl MOD83_02234B80 + cmp r0, #0 + bne _022336B4 + bl MOD83_0223335C + add sp, #0xc + pop {r4, r5, pc} _022336B4: - mov r0, #0 - bl MOD83_0223461C - add sp, #0xc - pop {r4, r5, pc} + mov r0, #0 + bl MOD83_0223461C + add sp, #0xc + pop {r4, r5, pc} _022336BE: - bl MOD83_0223466C - bl MOD83_02234968 - add r4, #0x60 - ldrb r0, [r4] - cmp r0, #2 - bne _02233776 - add r4, r5, #0 - add r4, #0x14 - bl MOD83_022346BC - ldr r1, [r5, #0x14] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233776 - bl MOD83_022346CC - ldr r1, [r4] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233776 - bl MOD83_022346DC - ldr r1, [r4, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02233776 - bl MOD83_0223466C - add r4, r0, #0 - add r0, r5, #0 - add r0, #0xa - bl MOD83_0223336C - str r0, [sp, #4] - str r0, [sp, #8] - add r0, r5, #0 - add r0, #0xa - bl MOD83_02233378 - add r1, sp, #0 - strh r0, [r1] - ldrh r0, [r1] - ldr r2, [sp, #8] - add r3, r4, #0 - strh r0, [r1, #2] - mov r0, #0 + bl MOD83_0223466C + bl MOD83_02234968 + add r4, #0x60 + ldrb r0, [r4] + cmp r0, #2 + bne _02233776 + add r4, r5, #0 + add r4, #0x14 + bl MOD83_022346BC + ldr r1, [r5, #0x14] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233776 + bl MOD83_022346CC + ldr r1, [r4] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233776 + bl MOD83_022346DC + ldr r1, [r4, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02233776 + bl MOD83_0223466C + add r4, r0, #0 + add r0, r5, #0 + add r0, #0xa + bl MOD83_0223336C + str r0, [sp, #4] + str r0, [sp, #8] + add r0, r5, #0 + add r0, #0xa + bl MOD83_02233378 + add r1, sp, #0 + strh r0, [r1] + ldrh r0, [r1] + ldr r2, [sp, #8] + add r3, r4, #0 + strh r0, [r1, #2] + mov r0, #0 _02233722: - ldr r1, [r3] - cmp r1, r2 - bne _0223373A - mov r1, #0xc - mul r1, r0 - ldrh r0, [r5, #0x10] - add r1, r4, r1 - add sp, #0xc - strh r0, [r1, #6] - mov r0, #1 - strb r0, [r1, #0xa] - pop {r4, r5, pc} + ldr r1, [r3] + cmp r1, r2 + bne _0223373A + mov r1, #0xc + mul r1, r0 + ldrh r0, [r5, #0x10] + add r1, r4, r1 + add sp, #0xc + strh r0, [r1, #6] + mov r0, #1 + strb r0, [r1, #0xa] + pop {r4, r5, pc} _0223373A: - cmp r1, #0 - bne _02233758 - mov r1, #0xc - mul r1, r0 - str r2, [r4, r1] - add r0, sp, #0 - ldrh r0, [r0, #2] - add r1, r4, r1 - add sp, #0xc - strh r0, [r1, #4] - ldrh r0, [r5, #0x10] - strh r0, [r1, #6] - mov r0, #1 - strb r0, [r1, #0xa] - pop {r4, r5, pc} + cmp r1, #0 + bne _02233758 + mov r1, #0xc + mul r1, r0 + str r2, [r4, r1] + add r0, sp, #0 + ldrh r0, [r0, #2] + add r1, r4, r1 + add sp, #0xc + strh r0, [r1, #4] + ldrh r0, [r5, #0x10] + strh r0, [r1, #6] + mov r0, #1 + strb r0, [r1, #0xa] + pop {r4, r5, pc} _02233758: - add r0, r0, #1 - add r3, #0xc - cmp r0, #8 - blt _02233722 - add sp, #0xc - pop {r4, r5, pc} + add r0, r0, #1 + add r3, #0xc + cmp r0, #8 + blt _02233722 + add sp, #0xc + pop {r4, r5, pc} _02233764: - ldrh r0, [r5, #0x10] - bl MOD83_022333B0 - add sp, #0xc - pop {r4, r5, pc} + ldrh r0, [r5, #0x10] + bl MOD83_022333B0 + add sp, #0xc + pop {r4, r5, pc} _0223376E: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233776: - add sp, #0xc - pop {r4, r5, pc} - .align 2, 0 - thumb_func_end MOD83_02233648 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 + thumb_func_end MOD83_02233648 - thumb_func_start MOD83_0223377C + thumb_func_start MOD83_0223377C MOD83_0223377C: ; 0x0223377C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r4, r1, #0 - str r0, [sp] - bl MOD83_02234664 - add r7, r0, #0 - add r0, r4, #4 - bl MOD83_0223336C - str r0, [sp, #8] - str r0, [sp, #0xc] - add r0, r4, #4 - bl MOD83_02233378 - add r2, sp, #4 - strh r0, [r2] - ldrh r0, [r2] - ldr r6, [sp, #0xc] - add r1, r7, #0 - strh r0, [r2, #2] - ldrh r3, [r2, #2] - mov r0, #0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r4, r1, #0 + str r0, [sp] + bl MOD83_02234664 + add r7, r0, #0 + add r0, r4, #4 + bl MOD83_0223336C + str r0, [sp, #8] + str r0, [sp, #0xc] + add r0, r4, #4 + bl MOD83_02233378 + add r2, sp, #4 + strh r0, [r2] + ldrh r0, [r2] + ldr r6, [sp, #0xc] + add r1, r7, #0 + strh r0, [r2, #2] + ldrh r3, [r2, #2] + mov r0, #0 _022337AA: - ldr r2, [r1] - add r5, r1, #0 - add r5, #0x34 - cmp r2, r6 - bne _022337C0 - ldrh r5, [r5] - cmp r5, r3 - bne _022337C0 - add sp, #0x10 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r2, [r1] + add r5, r1, #0 + add r5, #0x34 + cmp r2, r6 + bne _022337C0 + ldrh r5, [r5] + cmp r5, r3 + bne _022337C0 + add sp, #0x10 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022337C0: - cmp r2, #0 - bne _0223380C - mov r1, #0x38 - mul r1, r0 - ldr r0, [sp, #0xc] - add r5, r4, #0 - str r0, [r7, r1] - add r0, r7, r1 - add r5, #0x58 - add r3, r0, #4 - mov r2, #0xc + cmp r2, #0 + bne _0223380C + mov r1, #0x38 + mul r1, r0 + ldr r0, [sp, #0xc] + add r5, r4, #0 + str r0, [r7, r1] + add r0, r7, r1 + add r5, #0x58 + add r3, r0, #4 + mov r2, #0xc _022337D6: - ldrh r0, [r5] - add r5, r5, #2 - strh r0, [r3] - add r3, r3, #2 - sub r2, r2, #1 - bne _022337D6 - add r3, r7, r1 - add r4, #0x70 - add r3, #0x1c - mov r2, #0xc + ldrh r0, [r5] + add r5, r5, #2 + strh r0, [r3] + add r3, r3, #2 + sub r2, r2, #1 + bne _022337D6 + add r3, r7, r1 + add r4, #0x70 + add r3, #0x1c + mov r2, #0xc _022337EA: - ldrh r0, [r4] - add r4, r4, #2 - strh r0, [r3] - add r3, r3, #2 - sub r2, r2, #1 - bne _022337EA - add r0, sp, #4 - ldrh r0, [r0, #2] - add r1, r7, r1 - strh r0, [r1, #0x34] - ldr r0, [sp] - add r1, #0x36 - ldrh r0, [r0, #0x12] - add sp, #0x10 - strb r0, [r1] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + add r4, r4, #2 + strh r0, [r3] + add r3, r3, #2 + sub r2, r2, #1 + bne _022337EA + add r0, sp, #4 + ldrh r0, [r0, #2] + add r1, r7, r1 + strh r0, [r1, #0x34] + ldr r0, [sp] + add r1, #0x36 + ldrh r0, [r0, #0x12] + add sp, #0x10 + strb r0, [r1] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0223380C: - add r0, r0, #1 - add r1, #0x38 - cmp r0, #8 - blt _022337AA - mov r0, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_0223377C - - thumb_func_start MOD83_0223381C + add r0, r0, #1 + add r1, #0x38 + cmp r0, #8 + blt _022337AA + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_0223377C + + thumb_func_start MOD83_0223381C MOD83_0223381C: ; 0x0223381C - push {r3, lr} - bl MOD83_022334BC - bl MOD83_02234A70 - cmp r0, #0 - bne _0223382E - bl MOD83_0223335C + push {r3, lr} + bl MOD83_022334BC + bl MOD83_02234A70 + cmp r0, #0 + bne _0223382E + bl MOD83_0223335C _0223382E: - pop {r3, pc} - thumb_func_end MOD83_0223381C + pop {r3, pc} + thumb_func_end MOD83_0223381C - thumb_func_start MOD83_02233830 + thumb_func_start MOD83_02233830 MOD83_02233830: ; 0x02233830 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234610 - add r4, r0, #0 - bl MOD83_02234664 - add r5, r0, #0 - bl MOD83_02233388 - cmp r0, #0 - beq _0223384C - mov r0, #1 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234610 + add r4, r0, #0 + bl MOD83_02234664 + add r5, r0, #0 + bl MOD83_02233388 + cmp r0, #0 + beq _0223384C + mov r0, #1 + pop {r4, r5, r6, pc} _0223384C: - mov r1, #0 - add r2, r1, #0 - add r3, r5, #0 + mov r1, #0 + add r2, r1, #0 + add r3, r5, #0 _02233852: - ldr r0, [r3] - cmp r0, #0 - beq _0223385C - mov r1, #1 - b _02233864 + ldr r0, [r3] + cmp r0, #0 + beq _0223385C + mov r1, #1 + b _02233864 _0223385C: - add r2, r2, #1 - add r3, #0x38 - cmp r2, #8 - blt _02233852 + add r2, r2, #1 + add r3, #0x38 + cmp r2, #8 + blt _02233852 _02233864: - cmp r1, #0 - beq _02233882 - mov r0, #7 - lsl r0, r0, #6 - ldrh r0, [r5, r0] - cmp r0, #0 - bne _02233882 - bl MOD83_02234B2C - cmp r0, #0 - bne _0223387E - bl MOD83_0223335C + cmp r1, #0 + beq _02233882 + mov r0, #7 + lsl r0, r0, #6 + ldrh r0, [r5, r0] + cmp r0, #0 + bne _02233882 + bl MOD83_02234B2C + cmp r0, #0 + bne _0223387E + bl MOD83_0223335C _0223387E: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _02233882: - add r0, r4, #0 - mov r1, #0xc0 - bl DC_InvalidateRange - bl MOD83_02234664 - bl MOD83_02234964 - ldrh r0, [r6, #0x36] - cmp r0, #8 - blo _0223390C - bl MOD83_022346B0 - ldr r1, [r4, #0x44] - cmp r1, r0 - bne _0223390C - add r5, r4, #0 - add r5, #0x50 - bl MOD83_022346BC - ldr r1, [r4, #0x50] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _0223390C - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _0223390C - bl MOD83_022346DC - ldr r1, [r5, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _0223390C - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_0223377C - cmp r0, #0 - beq _022338FC - bl MOD83_02234664 - ldr r1, _02233910 ; =0x000001C2 - ldrb r2, [r0, r1] - add r2, r2, #1 - strb r2, [r0, r1] - ldrb r0, [r0, r1] - cmp r0, #0x1c - bls _0223390C - bl MOD83_02234B2C - cmp r0, #0 - bne _0223390C - bl MOD83_0223335C - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #0xc0 + bl DC_InvalidateRange + bl MOD83_02234664 + bl MOD83_02234964 + ldrh r0, [r6, #0x36] + cmp r0, #8 + blo _0223390C + bl MOD83_022346B0 + ldr r1, [r4, #0x44] + cmp r1, r0 + bne _0223390C + add r5, r4, #0 + add r5, #0x50 + bl MOD83_022346BC + ldr r1, [r4, #0x50] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _0223390C + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _0223390C + bl MOD83_022346DC + ldr r1, [r5, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _0223390C + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_0223377C + cmp r0, #0 + beq _022338FC + bl MOD83_02234664 + ldr r1, _02233910 ; =0x000001C2 + ldrb r2, [r0, r1] + add r2, r2, #1 + strb r2, [r0, r1] + ldrb r0, [r0, r1] + cmp r0, #0x1c + bls _0223390C + bl MOD83_02234B2C + cmp r0, #0 + bne _0223390C + bl MOD83_0223335C + mov r0, #1 + pop {r4, r5, r6, pc} _022338FC: - bl MOD83_02234B2C - cmp r0, #0 - bne _02233908 - bl MOD83_0223335C + bl MOD83_02234B2C + cmp r0, #0 + bne _02233908 + bl MOD83_0223335C _02233908: - mov r0, #1 - pop {r4, r5, r6, pc} + mov r0, #1 + pop {r4, r5, r6, pc} _0223390C: - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 _02233910: .word 0x000001C2 - thumb_func_end MOD83_02233830 + thumb_func_end MOD83_02233830 - thumb_func_start MOD83_02233914 + thumb_func_start MOD83_02233914 MOD83_02233914: ; 0x02233914 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _0223397A - bl MOD83_02234610 - bl MOD83_02234960 - mov r0, #6 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233982 - bl MOD83_022345A4 - cmp r0, #1 - bne _02233954 - bl MOD83_02234664 - ldr r2, _02233984 ; =0x000001C3 - mov r1, #0xf0 - ldrb r3, [r0, r2] - bic r3, r1 - mov r1, #0x10 - orr r1, r3 - strb r1, [r0, r2] + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _0223397A + bl MOD83_02234610 + bl MOD83_02234960 + mov r0, #6 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233982 + bl MOD83_022345A4 + cmp r0, #1 + bne _02233954 + bl MOD83_02234664 + ldr r2, _02233984 ; =0x000001C3 + mov r1, #0xf0 + ldrb r3, [r0, r2] + bic r3, r1 + mov r1, #0x10 + orr r1, r3 + strb r1, [r0, r2] _02233954: - ldrh r0, [r4, #8] - cmp r0, #4 - beq _02233968 - cmp r0, #5 - bne _0223396E - add r0, r4, #0 - bl MOD83_02233830 - cmp r0, #0 - bne _02233982 + ldrh r0, [r4, #8] + cmp r0, #4 + beq _02233968 + cmp r0, #5 + bne _0223396E + add r0, r4, #0 + bl MOD83_02233830 + cmp r0, #0 + bne _02233982 _02233968: - bl MOD83_0223381C - pop {r4, pc} + bl MOD83_0223381C + pop {r4, pc} _0223396E: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _0223397A: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233982: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02233984: .word 0x000001C3 - thumb_func_end MOD83_02233914 + thumb_func_end MOD83_02233914 - thumb_func_start MOD83_02233988 + thumb_func_start MOD83_02233988 MOD83_02233988: ; 0x02233988 - push {r4, r5, r6, lr} - sub sp, #8 - bl MOD83_02234610 - add r4, r0, #0 - bl MOD83_02234664 - add r6, r0, #0 - bl MOD83_02234564 - bl MOD83_02233388 - cmp r0, #0 - beq _022339AA - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #8 + bl MOD83_02234610 + add r4, r0, #0 + bl MOD83_02234664 + add r6, r0, #0 + bl MOD83_02234564 + bl MOD83_02233388 + cmp r0, #0 + beq _022339AA + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _022339AA: - add r0, r4, #0 - mov r1, #0xc0 - bl DC_InvalidateRange - bl MOD83_02234664 - bl MOD83_02234964 - ldrh r0, [r4, #0x3c] - cmp r0, #8 - blo _02233A24 - bl MOD83_022346B0 - ldr r1, [r4, #0x44] - cmp r1, r0 - bne _02233A24 - add r5, r4, #0 - add r5, #0x50 - bl MOD83_022346BC - ldr r1, [r4, #0x50] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233A24 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233A24 - bl MOD83_022346DC - ldr r1, [r5, #4] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02233A24 - add r0, r4, #4 - bl MOD83_0223336C - ldr r1, _02233A2C ; =0x000001C3 - str r0, [sp] - ldrb r1, [r6, r1] - str r0, [sp, #4] - lsl r1, r1, #0x1c - lsr r2, r1, #0x1c - mov r1, #0x38 - mul r1, r2 - ldr r1, [r6, r1] - cmp r1, r0 - bne _02233A24 - bl MOD83_02234B2C - cmp r0, #0 - bne _02233A1E - bl MOD83_0223335C + add r0, r4, #0 + mov r1, #0xc0 + bl DC_InvalidateRange + bl MOD83_02234664 + bl MOD83_02234964 + ldrh r0, [r4, #0x3c] + cmp r0, #8 + blo _02233A24 + bl MOD83_022346B0 + ldr r1, [r4, #0x44] + cmp r1, r0 + bne _02233A24 + add r5, r4, #0 + add r5, #0x50 + bl MOD83_022346BC + ldr r1, [r4, #0x50] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233A24 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233A24 + bl MOD83_022346DC + ldr r1, [r5, #4] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02233A24 + add r0, r4, #4 + bl MOD83_0223336C + ldr r1, _02233A2C ; =0x000001C3 + str r0, [sp] + ldrb r1, [r6, r1] + str r0, [sp, #4] + lsl r1, r1, #0x1c + lsr r2, r1, #0x1c + mov r1, #0x38 + mul r1, r2 + ldr r1, [r6, r1] + cmp r1, r0 + bne _02233A24 + bl MOD83_02234B2C + cmp r0, #0 + bne _02233A1E + bl MOD83_0223335C _02233A1E: - add sp, #8 - mov r0, #1 - pop {r4, r5, r6, pc} + add sp, #8 + mov r0, #1 + pop {r4, r5, r6, pc} _02233A24: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + add sp, #8 + pop {r4, r5, r6, pc} + nop _02233A2C: .word 0x000001C3 - thumb_func_end MOD83_02233988 + thumb_func_end MOD83_02233988 - thumb_func_start MOD83_02233A30 + thumb_func_start MOD83_02233A30 MOD83_02233A30: ; 0x02233A30 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233A90 - bl MOD83_02234664 - ldr r2, _02233A9C ; =0x000001C3 - mov r1, #0xf0 - ldrb r3, [r0, r2] - bic r3, r1 - mov r1, #0x20 - orr r1, r3 - strb r1, [r0, r2] - mov r0, #6 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233A98 - ldrh r0, [r4, #8] - cmp r0, #4 - beq _02233A72 - cmp r0, #5 - bne _02233A84 - bl MOD83_02233988 - cmp r0, #0 - bne _02233A98 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233A90 + bl MOD83_02234664 + ldr r2, _02233A9C ; =0x000001C3 + mov r1, #0xf0 + ldrb r3, [r0, r2] + bic r3, r1 + mov r1, #0x20 + orr r1, r3 + strb r1, [r0, r2] + mov r0, #6 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233A98 + ldrh r0, [r4, #8] + cmp r0, #4 + beq _02233A72 + cmp r0, #5 + bne _02233A84 + bl MOD83_02233988 + cmp r0, #0 + bne _02233A98 _02233A72: - bl MOD83_022334BC - bl MOD83_02234A94 - cmp r0, #0 - bne _02233A98 - bl MOD83_0223335C - pop {r4, pc} + bl MOD83_022334BC + bl MOD83_02234A94 + cmp r0, #0 + bne _02233A98 + bl MOD83_0223335C + pop {r4, pc} _02233A84: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _02233A90: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233A98: - pop {r4, pc} - nop + pop {r4, pc} + nop _02233A9C: .word 0x000001C3 - thumb_func_end MOD83_02233A30 + thumb_func_end MOD83_02233A30 - thumb_func_start MOD83_02233AA0 + thumb_func_start MOD83_02233AA0 MOD83_02233AA0: ; 0x02233AA0 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233AE4 - mov r0, #7 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233AEC - bl MOD83_022345A4 - cmp r0, #1 - bne _02233AEC - bl MOD83_02234664 - ldr r1, _02233AF0 ; =0x000001C3 - ldrb r0, [r0, r1] - lsl r0, r0, #0x18 - lsr r0, r0, #0x1c - cmp r0, #2 - bne _02233AEC - bl MOD83_02234B48 - cmp r0, #0 - bne _02233ADC - bl MOD83_0223335C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233AE4 + mov r0, #7 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233AEC + bl MOD83_022345A4 + cmp r0, #1 + bne _02233AEC + bl MOD83_02234664 + ldr r1, _02233AF0 ; =0x000001C3 + ldrb r0, [r0, r1] + lsl r0, r0, #0x18 + lsr r0, r0, #0x1c + cmp r0, #2 + bne _02233AEC + bl MOD83_02234B48 + cmp r0, #0 + bne _02233ADC + bl MOD83_0223335C + pop {r3, pc} _02233ADC: - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233AE4: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233AEC: - pop {r3, pc} - nop + pop {r3, pc} + nop _02233AF0: .word 0x000001C3 - thumb_func_end MOD83_02233AA0 + thumb_func_end MOD83_02233AA0 - thumb_func_start MOD83_02233AF4 + thumb_func_start MOD83_02233AF4 MOD83_02233AF4: ; 0x02233AF4 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #8] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233B7A - mov r0, #9 - bl MOD83_02234580 - bl MOD83_02233388 - cmp r0, #0 - bne _02233B82 - ldrh r0, [r4, #8] - cmp r0, #9 - bhi _02233B6E - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #8] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233B7A + mov r0, #9 + bl MOD83_02234580 + bl MOD83_02233388 + cmp r0, #0 + bne _02233B82 + ldrh r0, [r4, #8] + cmp r0, #9 + bhi _02233B6E + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02233B24: ; jump table - .short _02233B6E - _02233B24 - 2 ; case 0 - .short _02233B6E - _02233B24 - 2 ; case 1 - .short _02233B6E - _02233B24 - 2 ; case 2 - .short _02233B6E - _02233B24 - 2 ; case 3 - .short _02233B6E - _02233B24 - 2 ; case 4 - .short _02233B6E - _02233B24 - 2 ; case 5 - .short _02233B82 - _02233B24 - 2 ; case 6 - .short _02233B38 - _02233B24 - 2 ; case 7 - .short _02233B82 - _02233B24 - 2 ; case 8 - .short _02233B58 - _02233B24 - 2 ; case 9 + .short _02233B6E - _02233B24 - 2 ; case 0 + .short _02233B6E - _02233B24 - 2 ; case 1 + .short _02233B6E - _02233B24 - 2 ; case 2 + .short _02233B6E - _02233B24 - 2 ; case 3 + .short _02233B6E - _02233B24 - 2 ; case 4 + .short _02233B6E - _02233B24 - 2 ; case 5 + .short _02233B82 - _02233B24 - 2 ; case 6 + .short _02233B38 - _02233B24 - 2 ; case 7 + .short _02233B82 - _02233B24 - 2 ; case 8 + .short _02233B58 - _02233B24 - 2 ; case 9 _02233B38: - ldrh r0, [r4, #0xa] - bl MOD83_0223461C - mov r0, #1 - bl MOD83_02234634 - mov r0, #0 - bl MOD83_02234640 - bl MOD83_02234B80 - cmp r0, #0 - bne _02233B82 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #0xa] + bl MOD83_0223461C + mov r0, #1 + bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234640 + bl MOD83_02234B80 + cmp r0, #0 + bne _02233B82 + bl MOD83_0223335C + pop {r4, pc} _02233B58: - bl MOD83_02234628 - cmp r0, #0 - beq _02233B66 - mov r0, #1 - bl MOD83_02234640 + bl MOD83_02234628 + cmp r0, #0 + beq _02233B66 + mov r0, #1 + bl MOD83_02234640 _02233B66: - mov r0, #0 - bl MOD83_02234634 - pop {r4, pc} + mov r0, #0 + bl MOD83_02234634 + pop {r4, pc} _02233B6E: - ldrh r0, [r4, #2] - bl MOD83_02234958 - bl MOD83_0223335C - pop {r4, pc} + ldrh r0, [r4, #2] + bl MOD83_02234958 + bl MOD83_0223335C + pop {r4, pc} _02233B7A: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233B82: - pop {r4, pc} - thumb_func_end MOD83_02233AF4 + pop {r4, pc} + thumb_func_end MOD83_02233AF4 - thumb_func_start MOD83_02233B84 + thumb_func_start MOD83_02233B84 MOD83_02233B84: ; 0x02233B84 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _02233BBE - cmp r0, #2 - bne _02233BD6 - bl MOD83_02233438 - cmp r0, #0 - beq _02233BB8 - bl MOD83_022333D8 - bl MOD83_022349EC - cmp r0, #0 - beq _02233BB8 - bl MOD83_0223466C - mov r1, #1 - add r0, #0x60 - strb r1, [r0] - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _02233BBE + cmp r0, #2 + bne _02233BD6 + bl MOD83_02233438 + cmp r0, #0 + beq _02233BB8 + bl MOD83_022333D8 + bl MOD83_022349EC + cmp r0, #0 + beq _02233BB8 + bl MOD83_0223466C + mov r1, #1 + add r0, #0x60 + strb r1, [r0] + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233BB8: - bl MOD83_0223335C - pop {r3, pc} + bl MOD83_0223335C + pop {r3, pc} _02233BBE: - bl MOD83_02233490 - bl MOD83_02234A70 - cmp r0, #0 - bne _02233BD0 - bl MOD83_0223335C - pop {r3, pc} + bl MOD83_02233490 + bl MOD83_02234A70 + cmp r0, #0 + bne _02233BD0 + bl MOD83_0223335C + pop {r3, pc} _02233BD0: - mov r0, #3 - bl MOD83_02234580 + mov r0, #3 + bl MOD83_02234580 _02233BD6: - pop {r3, pc} - thumb_func_end MOD83_02233B84 + pop {r3, pc} + thumb_func_end MOD83_02233B84 - thumb_func_start MOD83_02233BD8 + thumb_func_start MOD83_02233BD8 MOD83_02233BD8: ; 0x02233BD8 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233C12 - ldrh r0, [r4] - cmp r0, #0xe - bne _02233BF6 - bl MOD83_02233388 - cmp r0, #0 - bne _02233C22 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233C12 + ldrh r0, [r4] + cmp r0, #0xe + bne _02233BF6 + bl MOD83_02233388 + cmp r0, #0 + bne _02233C22 _02233BF6: - bl MOD83_022345A4 - cmp r0, #1 - beq _02233C0A - cmp r0, #2 - bne _02233C22 - mov r0, #0xa - bl MOD83_02234580 - pop {r4, pc} + bl MOD83_022345A4 + cmp r0, #1 + beq _02233C0A + cmp r0, #2 + bne _02233C22 + mov r0, #0xa + bl MOD83_02234580 + pop {r4, pc} _02233C0A: - mov r0, #0xb - bl MOD83_02234580 - pop {r4, pc} + mov r0, #0xb + bl MOD83_02234580 + pop {r4, pc} _02233C12: - cmp r0, #9 - beq _02233C22 - cmp r0, #0xd - beq _02233C22 - cmp r0, #0xf - beq _02233C22 - bl MOD83_0223335C + cmp r0, #9 + beq _02233C22 + cmp r0, #0xd + beq _02233C22 + cmp r0, #0xf + beq _02233C22 + bl MOD83_0223335C _02233C22: - pop {r4, pc} - thumb_func_end MOD83_02233BD8 + pop {r4, pc} + thumb_func_end MOD83_02233BD8 - thumb_func_start MOD83_02233C24 + thumb_func_start MOD83_02233C24 MOD83_02233C24: ; 0x02233C24 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #1 - bne _02233C9A - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233C9A - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233C9A - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - ldrb r0, [r4, #0x1c] - cmp r1, r0 - bne _02233C9A - ldr r0, [r4, #0xc] - bl MOD83_0223496C - ldr r0, [r4, #0xc] - bl MOD83_02234934 - cmp r0, #0 - beq _02233C96 - ldr r0, [r5, #8] - lsl r0, r0, #0x10 - lsr r0, r0, #0x18 - cmp r0, #1 - beq _02233C96 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #1 + bne _02233C9A + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233C9A + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233C9A + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + ldrb r0, [r4, #0x1c] + cmp r1, r0 + bne _02233C9A + ldr r0, [r4, #0xc] + bl MOD83_0223496C + ldr r0, [r4, #0xc] + bl MOD83_02234934 + cmp r0, #0 + beq _02233C96 + ldr r0, [r5, #8] + lsl r0, r0, #0x10 + lsr r0, r0, #0x18 + cmp r0, #1 + beq _02233C96 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r4, r5, r6, pc} _02233C96: - mov r0, #0 - strb r0, [r4, #0x19] + mov r0, #0 + strb r0, [r4, #0x19] _02233C9A: - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02233C24 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02233C24 - thumb_func_start MOD83_02233C9C + thumb_func_start MOD83_02233C9C MOD83_02233C9C: ; 0x02233C9C - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #2 - bne _02233D24 - ldrb r0, [r4, #0x19] - cmp r0, #2 - beq _02233D24 - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233D24 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233D24 - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, #0xfd - bne _02233D24 - bl MOD83_0223466C - ldrh r5, [r6, #0x12] - mov r2, #0 - add r3, r0, #0 + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #2 + bne _02233D24 + ldrb r0, [r4, #0x19] + cmp r0, #2 + beq _02233D24 + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233D24 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233D24 + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r0, #0xfd + bne _02233D24 + bl MOD83_0223466C + ldrh r5, [r6, #0x12] + mov r2, #0 + add r3, r0, #0 _02233CFE: - ldrh r1, [r3, #6] - cmp r5, r1 - bne _02233D1C - mov r1, #0xc - mul r1, r2 - add r1, r0, r1 - mov r2, #1 - strb r2, [r1, #8] - mov r0, #3 - strb r0, [r1, #9] - mov r0, #0xb4 - strb r0, [r4, #0x1a] - mov r0, #0 - strb r0, [r4, #0x19] - pop {r4, r5, r6, pc} + ldrh r1, [r3, #6] + cmp r5, r1 + bne _02233D1C + mov r1, #0xc + mul r1, r2 + add r1, r0, r1 + mov r2, #1 + strb r2, [r1, #8] + mov r0, #3 + strb r0, [r1, #9] + mov r0, #0xb4 + strb r0, [r4, #0x1a] + mov r0, #0 + strb r0, [r4, #0x19] + pop {r4, r5, r6, pc} _02233D1C: - add r2, r2, #1 - add r3, #0xc - cmp r2, #8 - blt _02233CFE + add r2, r2, #1 + add r3, #0xc + cmp r2, #8 + blt _02233CFE _02233D24: - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02233C9C + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02233C9C - thumb_func_start MOD83_02233D28 + thumb_func_start MOD83_02233D28 MOD83_02233D28: ; 0x02233D28 - push {r4, r5, r6, lr} - add r6, r0, #0 - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x1c] - cmp r0, #0xfd - bne _02233D40 - add r0, r6, #0 - bl MOD83_02233C9C - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + add r6, r0, #0 + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x1c] + cmp r0, #0xfd + bne _02233D40 + add r0, r6, #0 + bl MOD83_02233C9C + pop {r4, r5, r6, pc} _02233D40: - ldrb r0, [r4, #0x19] - cmp r0, #1 - beq _02233D4C - ldrb r0, [r4, #0x19] - cmp r0, #3 - bne _02233DE8 + ldrb r0, [r4, #0x19] + cmp r0, #1 + beq _02233D4C + ldrb r0, [r4, #0x19] + cmp r0, #3 + bne _02233DE8 _02233D4C: - ldrb r0, [r4, #0x1b] - cmp r0, #0 - bne _02233DE8 - ldrh r1, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r5, [r4, #0xc] - bl DC_FlushRange - ldrh r2, [r6, #0x10] - ldr r0, [r6, #0xc] - ldr r1, [r4, #0xc] - bl MI_CpuCopy8 - bl MOD83_022346BC - ldr r1, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - cmp r1, r0 - bne _02233DE8 - bl MOD83_022346CC - ldr r1, [r5] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - cmp r1, r0 - bhi _02233DE8 - ldr r0, [r4, #0xc] - bl MOD83_02234900 - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - ldrb r0, [r4, #0x1c] - cmp r1, r0 - bne _02233DE8 - ldr r0, [r4, #0xc] - bl MOD83_0223496C - mov r0, #0 - strb r0, [r4, #0x19] - ldr r0, [r4, #0xc] - bl MOD83_02234934 - cmp r0, #0 - beq _02233DDA - ldr r0, [r5, #8] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, #0xfd - bne _02233DBA - add r0, r6, #0 - bl MOD83_02233C9C - b _02233DCC + ldrb r0, [r4, #0x1b] + cmp r0, #0 + bne _02233DE8 + ldrh r1, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r5, [r4, #0xc] + bl DC_FlushRange + ldrh r2, [r6, #0x10] + ldr r0, [r6, #0xc] + ldr r1, [r4, #0xc] + bl MI_CpuCopy8 + bl MOD83_022346BC + ldr r1, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + cmp r1, r0 + bne _02233DE8 + bl MOD83_022346CC + ldr r1, [r5] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + cmp r1, r0 + bhi _02233DE8 + ldr r0, [r4, #0xc] + bl MOD83_02234900 + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + ldrb r0, [r4, #0x1c] + cmp r1, r0 + bne _02233DE8 + ldr r0, [r4, #0xc] + bl MOD83_0223496C + mov r0, #0 + strb r0, [r4, #0x19] + ldr r0, [r4, #0xc] + bl MOD83_02234934 + cmp r0, #0 + beq _02233DDA + ldr r0, [r5, #8] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r0, #0xfd + bne _02233DBA + add r0, r6, #0 + bl MOD83_02233C9C + b _02233DCC _02233DBA: - ldr r2, [r5, #0xc] - ldr r1, [r4, #0xc] - lsl r0, r2, #0x18 - lsr r0, r0, #0x18 - add r0, r1, r0 - ldr r1, [r4, #4] - lsr r2, r2, #8 - bl MI_CpuCopy8 + ldr r2, [r5, #0xc] + ldr r1, [r4, #0xc] + lsl r0, r2, #0x18 + lsr r0, r0, #0x18 + add r0, r1, r0 + ldr r1, [r4, #4] + lsr r2, r2, #8 + bl MI_CpuCopy8 _02233DCC: - ldr r1, [r5, #8] - ldr r0, _02233DEC ; =0xFFFF00FF - and r0, r1 - str r0, [r5, #8] - mov r0, #4 - strb r0, [r4, #0x1b] - pop {r4, r5, r6, pc} + ldr r1, [r5, #8] + ldr r0, _02233DEC ; =0xFFFF00FF + and r0, r1 + str r0, [r5, #8] + mov r0, #4 + strb r0, [r4, #0x1b] + pop {r4, r5, r6, pc} _02233DDA: - ldr r1, [r5, #8] - ldr r0, _02233DEC ; =0xFFFF00FF - and r1, r0 - mov r0, #1 - lsl r0, r0, #8 - orr r0, r1 - str r0, [r5, #8] + ldr r1, [r5, #8] + ldr r0, _02233DEC ; =0xFFFF00FF + and r1, r0 + mov r0, #1 + lsl r0, r0, #8 + orr r0, r1 + str r0, [r5, #8] _02233DE8: - pop {r4, r5, r6, pc} - nop + pop {r4, r5, r6, pc} + nop _02233DEC: .word 0xFFFF00FF - thumb_func_end MOD83_02233D28 + thumb_func_end MOD83_02233D28 - thumb_func_start MOD83_02233DF0 + thumb_func_start MOD83_02233DF0 MOD83_02233DF0: ; 0x02233DF0 - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #4] - bl MOD83_0223495C - ldrh r0, [r4, #2] - cmp r0, #0 - bne _02233E72 - ldrh r0, [r4, #4] - cmp r0, #7 - beq _02233E3A - cmp r0, #9 - beq _02233E48 - cmp r0, #0x15 - bne _02233E72 - bl MOD83_02234574 - cmp r0, #0xa - beq _02233E1A - cmp r0, #0xb - bne _02233E72 + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #4] + bl MOD83_0223495C + ldrh r0, [r4, #2] + cmp r0, #0 + bne _02233E72 + ldrh r0, [r4, #4] + cmp r0, #7 + beq _02233E3A + cmp r0, #9 + beq _02233E48 + cmp r0, #0x15 + bne _02233E72 + bl MOD83_02234574 + cmp r0, #0xa + beq _02233E1A + cmp r0, #0xb + bne _02233E72 _02233E1A: - bl MOD83_02234694 - ldrb r0, [r0, #0x18] - cmp r0, #1 - beq _02233E2A - cmp r0, #2 - beq _02233E32 - pop {r4, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x18] + cmp r0, #1 + beq _02233E2A + cmp r0, #2 + beq _02233E32 + pop {r4, pc} _02233E2A: - add r0, r4, #0 - bl MOD83_02233C24 - pop {r4, pc} + add r0, r4, #0 + bl MOD83_02233C24 + pop {r4, pc} _02233E32: - add r0, r4, #0 - bl MOD83_02233D28 - pop {r4, pc} + add r0, r4, #0 + bl MOD83_02233D28 + pop {r4, pc} _02233E3A: - mov r0, #1 - bl MOD83_02234634 - mov r0, #0 - bl MOD83_02234640 - pop {r4, pc} + mov r0, #1 + bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234640 + pop {r4, pc} _02233E48: - bl MOD83_02234628 - cmp r0, #0 - beq _02233E56 - mov r0, #1 - bl MOD83_02234640 + bl MOD83_02234628 + cmp r0, #0 + beq _02233E56 + mov r0, #1 + bl MOD83_02234640 _02233E56: - bl MOD83_02234574 - cmp r0, #0xa - beq _02233E64 - cmp r0, #0xb - beq _02233E6C - pop {r4, pc} + bl MOD83_02234574 + cmp r0, #0xa + beq _02233E64 + cmp r0, #0xb + beq _02233E6C + pop {r4, pc} _02233E64: - ldrh r0, [r4, #0x12] - bl MOD83_022333B0 - pop {r4, pc} + ldrh r0, [r4, #0x12] + bl MOD83_022333B0 + pop {r4, pc} _02233E6C: - mov r0, #0 - bl MOD83_02234634 + mov r0, #0 + bl MOD83_02234634 _02233E72: - pop {r4, pc} - thumb_func_end MOD83_02233DF0 + pop {r4, pc} + thumb_func_end MOD83_02233DF0 - thumb_func_start MOD83_02233E74 + thumb_func_start MOD83_02233E74 MOD83_02233E74: ; 0x02233E74 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233E8A - bl MOD83_02233388 - cmp r0, #0 - bne _02233E94 - bl MOD83_02233B84 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233E8A + bl MOD83_02233388 + cmp r0, #0 + bne _02233E94 + bl MOD83_02233B84 + pop {r3, pc} _02233E8A: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 _02233E94: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233E74 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233E74 - thumb_func_start MOD83_02233E98 + thumb_func_start MOD83_02233E98 MOD83_02233E98: ; 0x02233E98 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233EB0 - bl MOD83_022349CC - cmp r0, #0 - beq _02233EB8 - mov r0, #2 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233EB0 + bl MOD83_022349CC + cmp r0, #0 + beq _02233EB8 + mov r0, #2 + bl MOD83_02234580 + pop {r3, pc} _02233EB0: - bl MOD83_02234958 - bl MOD83_0223335C + bl MOD83_02234958 + bl MOD83_0223335C _02233EB8: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233E98 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233E98 - thumb_func_start MOD83_02233EBC + thumb_func_start MOD83_02233EBC MOD83_02233EBC: ; 0x02233EBC - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233EF2 - mov r0, #0 - bl MOD83_0223461C - bl MOD83_0223458C - cmp r0, #0xc - bne _02233EE2 - bl MOD83_02234C54 - cmp r0, #0 - beq _02233EFC - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233EF2 + mov r0, #0 + bl MOD83_0223461C + bl MOD83_0223458C + cmp r0, #0xc + bne _02233EE2 + bl MOD83_02234C54 + cmp r0, #0 + beq _02233EFC + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233EE2: - bl MOD83_02234C14 - cmp r0, #0 - beq _02233EFC - mov r0, #3 - bl MOD83_02234580 - pop {r3, pc} + bl MOD83_02234C14 + cmp r0, #0 + beq _02233EFC + mov r0, #3 + bl MOD83_02234580 + pop {r3, pc} _02233EF2: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 _02233EFC: - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233EBC + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233EBC - thumb_func_start MOD83_02233F00 + thumb_func_start MOD83_02233F00 MOD83_02233F00: ; 0x02233F00 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - bne _02233F16 - mov r0, #0xc - bl MOD83_02234580 - mov r0, #1 - bl MOD83_0223464C - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + bne _02233F16 + mov r0, #0xc + bl MOD83_02234580 + mov r0, #1 + bl MOD83_0223464C + pop {r3, pc} _02233F16: - bl MOD83_02234958 - mov r0, #4 - bl MOD83_02234580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02233F00 - - thumb_func_start MOD83_02233F24 + bl MOD83_02234958 + mov r0, #4 + bl MOD83_02234580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02233F00 + + thumb_func_start MOD83_02233F24 MOD83_02233F24: ; 0x02233F24 - push {r3, lr} - ldr r0, _02233F40 ; =MOD83_0223350C - bl WM_SetIndCallback - cmp r0, #0 - beq _02233F3A - mov r0, #4 - bl MOD83_02234580 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02233F40 ; =MOD83_0223350C + bl WM_SetIndCallback + cmp r0, #0 + beq _02233F3A + mov r0, #4 + bl MOD83_02234580 + mov r0, #0 + pop {r3, pc} _02233F3A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02233F40: .word MOD83_0223350C - thumb_func_end MOD83_02233F24 + thumb_func_end MOD83_02233F24 - thumb_func_start MOD83_02233F44 + thumb_func_start MOD83_02233F44 MOD83_02233F44: ; 0x02233F44 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0 - beq _02233F56 - cmp r0, #1 - beq _02233F56 - cmp r0, #2 - bne _02233F5A + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0 + beq _02233F56 + cmp r0, #1 + beq _02233F56 + cmp r0, #2 + bne _02233F5A _02233F56: - bl MOD83_022349B0 + bl MOD83_022349B0 _02233F5A: - pop {r3, pc} - thumb_func_end MOD83_02233F44 + pop {r3, pc} + thumb_func_end MOD83_02233F44 - thumb_func_start MOD83_02233F5C + thumb_func_start MOD83_02233F5C MOD83_02233F5C: ; 0x02233F5C - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r1, #0 - add r6, r2, #0 - bl MOD83_02234564 - ldrh r0, [r0, #0x34] - cmp r4, r0 - bhi _02233F80 - add r0, r5, #0 - add r1, r4, #0 - bl DC_FlushRange - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02234970 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + bl MOD83_02234564 + ldrh r0, [r0, #0x34] + cmp r4, r0 + bhi _02233F80 + add r0, r5, #0 + add r1, r4, #0 + bl DC_FlushRange + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02234970 _02233F80: - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02233F5C + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02233F5C - thumb_func_start MOD83_02233F84 + thumb_func_start MOD83_02233F84 MOD83_02233F84: ; 0x02233F84 - mov r0, #0x17 - lsl r0, r0, #6 - bx lr - .align 2, 0 - thumb_func_end MOD83_02233F84 + mov r0, #0x17 + lsl r0, r0, #6 + bx lr + .align 2, 0 + thumb_func_end MOD83_02233F84 - thumb_func_start MOD83_02233F8C + thumb_func_start MOD83_02233F8C MOD83_02233F8C: ; 0x02233F8C - mov r0, #0x17 - lsl r0, r0, #6 - bx lr - .align 2, 0 - thumb_func_end MOD83_02233F8C + mov r0, #0x17 + lsl r0, r0, #6 + bx lr + .align 2, 0 + thumb_func_end MOD83_02233F8C - thumb_func_start MOD83_02233F94 + thumb_func_start MOD83_02233F94 MOD83_02233F94: ; 0x02233F94 - push {r3, r4, r5, r6, r7, lr} - add r7, r1, #0 - add r5, r0, #0 - bl MOD83_02234564 - bl MOD83_0223456C - add r4, r0, #0 - mov r0, #0x1f - add r1, r7, #0 - and r1, r0 - beq _02233FB2 - mov r0, #0x20 - sub r0, r0, r1 - add r7, r7, r0 + push {r3, r4, r5, r6, r7, lr} + add r7, r1, #0 + add r5, r0, #0 + bl MOD83_02234564 + bl MOD83_0223456C + add r4, r0, #0 + mov r0, #0x1f + add r1, r7, #0 + and r1, r0 + beq _02233FB2 + mov r0, #0x20 + sub r0, r0, r1 + add r7, r7, r0 _02233FB2: - mov r1, #0 - strb r1, [r4] - strb r1, [r4, #1] - strb r1, [r4, #2] - mov r0, #4 - strb r0, [r4, #3] - ldr r0, _022340B8 ; =0x00400131 - str r0, [r4, #4] - mov r0, #0xf - strh r1, [r4, #0xc] - lsl r0, r0, #8 - str r7, [r4, #0x34] - add r7, r7, r0 - str r7, [r4, #0x38] - bl MOD83_02233F84 - str r0, [r4, #0x2c] - add r7, r7, r0 - str r7, [r4, #0x3c] - bl MOD83_02233F8C - add r7, r7, r0 - str r0, [r4, #0x30] - add r0, r7, #0 - str r7, [r4, #0x28] - add r0, #0xc0 - str r0, [r4, #0x24] - ldr r0, [r4, #0x34] - mov r1, #2 - add r7, #0xe0 - bl WM_Init - bl MOD83_02233F24 - str r0, [r4, #0x10] - mov r2, #0 - str r2, [r4, #0x14] - str r2, [r4, #0x18] - str r2, [r4, #0x1c] - str r2, [r4, #0x20] - ldr r0, [r4, #0x40] - mov r6, #0xff - bic r0, r6 - add r3, r0, #0 - mov r1, #0xf - orr r3, r1 - ldr r0, _022340BC ; =0xFFFFF0FF - add r1, #0xf1 - and r0, r3 - orr r1, r0 - ldr r0, _022340C0 ; =0xFFFF0FFF - and r1, r0 - mov r0, #1 - lsl r0, r0, #0xc - orr r0, r1 - str r0, [r4, #0x40] - ldr r3, [r5] - ldr r1, [r4, #0x44] - lsl r3, r3, #0x18 - lsr r3, r3, #0x18 - lsl r3, r3, #0x18 - add r0, r4, #0 - bic r1, r6 - lsr r3, r3, #0x18 - orr r3, r1 - ldr r1, _022340BC ; =0xFFFFF0FF - str r3, [r4, #0x44] - and r1, r3 - ldr r3, [r5] - add r0, #0x44 - lsl r3, r3, #0x14 - lsr r3, r3, #0x1c - lsl r3, r3, #0x1c - lsr r3, r3, #0x14 - orr r3, r1 - ldr r1, _022340C0 ; =0xFFFF0FFF - str r3, [r4, #0x44] - and r1, r3 - ldr r3, [r5] - lsl r3, r3, #0x10 - lsr r3, r3, #0x1c - lsl r3, r3, #0x1c - lsr r3, r3, #0x10 - orr r1, r3 - str r1, [r4, #0x44] - ldr r1, [r0] - ldr r3, [r5] - lsl r1, r1, #0x10 - lsr r3, r3, #0x10 - lsr r1, r1, #0x10 - lsl r3, r3, #0x10 - orr r1, r3 - str r1, [r0] - ldr r0, [r5, #8] - ldr r1, [r5, #4] - add r3, r4, #0 - b _0223408C + mov r1, #0 + strb r1, [r4] + strb r1, [r4, #1] + strb r1, [r4, #2] + mov r0, #4 + strb r0, [r4, #3] + ldr r0, _022340B8 ; =0x00400131 + str r0, [r4, #4] + mov r0, #0xf + strh r1, [r4, #0xc] + lsl r0, r0, #8 + str r7, [r4, #0x34] + add r7, r7, r0 + str r7, [r4, #0x38] + bl MOD83_02233F84 + str r0, [r4, #0x2c] + add r7, r7, r0 + str r7, [r4, #0x3c] + bl MOD83_02233F8C + add r7, r7, r0 + str r0, [r4, #0x30] + add r0, r7, #0 + str r7, [r4, #0x28] + add r0, #0xc0 + str r0, [r4, #0x24] + ldr r0, [r4, #0x34] + mov r1, #2 + add r7, #0xe0 + bl WM_Init + bl MOD83_02233F24 + str r0, [r4, #0x10] + mov r2, #0 + str r2, [r4, #0x14] + str r2, [r4, #0x18] + str r2, [r4, #0x1c] + str r2, [r4, #0x20] + ldr r0, [r4, #0x40] + mov r6, #0xff + bic r0, r6 + add r3, r0, #0 + mov r1, #0xf + orr r3, r1 + ldr r0, _022340BC ; =0xFFFFF0FF + add r1, #0xf1 + and r0, r3 + orr r1, r0 + ldr r0, _022340C0 ; =0xFFFF0FFF + and r1, r0 + mov r0, #1 + lsl r0, r0, #0xc + orr r0, r1 + str r0, [r4, #0x40] + ldr r3, [r5] + ldr r1, [r4, #0x44] + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + lsl r3, r3, #0x18 + add r0, r4, #0 + bic r1, r6 + lsr r3, r3, #0x18 + orr r3, r1 + ldr r1, _022340BC ; =0xFFFFF0FF + str r3, [r4, #0x44] + and r1, r3 + ldr r3, [r5] + add r0, #0x44 + lsl r3, r3, #0x14 + lsr r3, r3, #0x1c + lsl r3, r3, #0x1c + lsr r3, r3, #0x14 + orr r3, r1 + ldr r1, _022340C0 ; =0xFFFF0FFF + str r3, [r4, #0x44] + and r1, r3 + ldr r3, [r5] + lsl r3, r3, #0x10 + lsr r3, r3, #0x1c + lsl r3, r3, #0x1c + lsr r3, r3, #0x10 + orr r1, r3 + str r1, [r4, #0x44] + ldr r1, [r0] + ldr r3, [r5] + lsl r1, r1, #0x10 + lsr r3, r3, #0x10 + lsr r1, r1, #0x10 + lsl r3, r3, #0x10 + orr r1, r3 + str r1, [r0] + ldr r0, [r5, #8] + ldr r1, [r5, #4] + add r3, r4, #0 + b _0223408C _02234074: - ldrh r6, [r0] - add r5, r3, #0 - add r5, #0x48 - strh r6, [r5] - add r5, r3, #0 - ldrh r6, [r1] - add r5, #0x60 - add r3, r3, #2 - strh r6, [r5] - add r2, r2, #1 - add r0, r0, #2 - add r1, r1, #2 + ldrh r6, [r0] + add r5, r3, #0 + add r5, #0x48 + strh r6, [r5] + add r5, r3, #0 + ldrh r6, [r1] + add r5, #0x60 + add r3, r3, #2 + strh r6, [r5] + add r2, r2, #1 + add r0, r0, #2 + add r1, r1, #2 _0223408C: - cmp r0, #0 - beq _02234094 - cmp r2, #0xc - blo _02234074 + cmp r0, #0 + beq _02234094 + cmp r2, #0xc + blo _02234074 _02234094: - ldr r1, [r4, #0x40] - ldr r0, [r4, #0x44] - str r1, [r4, #0x78] - str r0, [r4, #0x7c] - bl MOD83_022346A4 - bl MOD83_02234694 - str r7, [r0, #8] - ldr r0, [r4, #0x2c] - add r7, r7, r0 - bl MOD83_02234694 - str r7, [r0, #0xc] - bl WM_GetNextTgid - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r1, [r4, #0x40] + ldr r0, [r4, #0x44] + str r1, [r4, #0x78] + str r0, [r4, #0x7c] + bl MOD83_022346A4 + bl MOD83_02234694 + str r7, [r0, #8] + ldr r0, [r4, #0x2c] + add r7, r7, r0 + bl MOD83_02234694 + str r7, [r0, #0xc] + bl WM_GetNextTgid + pop {r3, r4, r5, r6, r7, pc} + nop _022340B8: .word 0x00400131 _022340BC: .word 0xFFFFF0FF _022340C0: .word 0xFFFF0FFF - thumb_func_end MOD83_02233F94 + thumb_func_end MOD83_02233F94 - thumb_func_start MOD83_022340C4 + thumb_func_start MOD83_022340C4 MOD83_022340C4: ; 0x022340C4 - push {r3, r4, r5, lr} - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #1 - bne _022340E2 - ldrb r0, [r4, #0x1a] - sub r0, r0, #1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0x1a] - cmp r0, #0 - bne _02234118 - mov r0, #0 - strb r0, [r4, #0x19] + push {r3, r4, r5, lr} + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #1 + bne _022340E2 + ldrb r0, [r4, #0x1a] + sub r0, r0, #1 + strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x1a] + cmp r0, #0 + bne _02234118 + mov r0, #0 + strb r0, [r4, #0x19] _022340E2: - ldrb r0, [r4, #0x19] - cmp r0, #0 - bne _02234118 - bl MOD83_02234770 - mov r1, #0x40 - sub r5, r1, r0 - ldrb r0, [r4, #0x1c] - add r2, r5, #0 - mov r3, #3 - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - ldr r2, _0223411C ; =0x0000FFFF - add r1, r5, r1 - bl MOD83_02233F5C - mov r0, #1 - strb r0, [r4, #0x19] - mov r0, #0x3c - strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x19] + cmp r0, #0 + bne _02234118 + bl MOD83_02234770 + mov r1, #0x40 + sub r5, r1, r0 + ldrb r0, [r4, #0x1c] + add r2, r5, #0 + mov r3, #3 + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + ldr r2, _0223411C ; =0x0000FFFF + add r1, r5, r1 + bl MOD83_02233F5C + mov r0, #1 + strb r0, [r4, #0x19] + mov r0, #0x3c + strb r0, [r4, #0x1a] _02234118: - pop {r3, r4, r5, pc} - nop + pop {r3, r4, r5, pc} + nop _0223411C: .word 0x0000FFFF - thumb_func_end MOD83_022340C4 + thumb_func_end MOD83_022340C4 - thumb_func_start MOD83_02234120 + thumb_func_start MOD83_02234120 MOD83_02234120: ; 0x02234120 - push {r3, r4, r5, r6, r7, lr} - bl MOD83_02234694 - add r4, r0, #0 - ldrb r0, [r4, #0x19] - cmp r0, #0 - bne _022341D6 - ldrb r0, [r4, #0x1c] - cmp r0, #0xfd - bne _02234198 - bl MOD83_0223466C - add r5, r0, #0 - mov r1, #0 - add r2, r5, #0 + push {r3, r4, r5, r6, r7, lr} + bl MOD83_02234694 + add r4, r0, #0 + ldrb r0, [r4, #0x19] + cmp r0, #0 + bne _022341D6 + ldrb r0, [r4, #0x1c] + cmp r0, #0xfd + bne _02234198 + bl MOD83_0223466C + add r5, r0, #0 + mov r1, #0 + add r2, r5, #0 _0223413E: - ldrb r0, [r2, #9] - cmp r0, #0 - beq _0223417E - add r6, r1, #0 - mov r0, #0xc - mul r6, r0 - add r0, r5, r6 - ldrh r0, [r0, #6] - mov r1, #1 - mov r2, #0 - lsl r1, r0 - lsl r0, r1, #0x10 - lsr r7, r0, #0x10 - mov r0, #0xfd - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - add r3, r2, #0 - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - add r2, r7, #0 - bl MOD83_02233F5C - add r5, #9 - ldrb r0, [r5, r6] - sub r0, r0, #1 - strb r0, [r5, r6] - pop {r3, r4, r5, r6, r7, pc} + ldrb r0, [r2, #9] + cmp r0, #0 + beq _0223417E + add r6, r1, #0 + mov r0, #0xc + mul r6, r0 + add r0, r5, r6 + ldrh r0, [r0, #6] + mov r1, #1 + mov r2, #0 + lsl r1, r0 + lsl r0, r1, #0x10 + lsr r7, r0, #0x10 + mov r0, #0xfd + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + add r3, r2, #0 + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + add r2, r7, #0 + bl MOD83_02233F5C + add r5, #9 + ldrb r0, [r5, r6] + sub r0, r0, #1 + strb r0, [r5, r6] + pop {r3, r4, r5, r6, r7, pc} _0223417E: - add r1, r1, #1 - add r2, #0xc - cmp r1, #8 - blt _0223413E - ldrb r0, [r4, #0x1a] - sub r0, r0, #1 - strb r0, [r4, #0x1a] - ldrb r0, [r4, #0x1a] - cmp r0, #0 - bne _022341D6 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r3, r4, r5, r6, r7, pc} + add r1, r1, #1 + add r2, #0xc + cmp r1, #8 + blt _0223413E + ldrb r0, [r4, #0x1a] + sub r0, r0, #1 + strb r0, [r4, #0x1a] + ldrb r0, [r4, #0x1a] + cmp r0, #0 + bne _022341D6 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r3, r4, r5, r6, r7, pc} _02234198: - bl MOD83_02234770 - bl MOD83_02233F84 - ldr r0, [r4, #0xc] - ldr r0, [r0, #8] - lsl r0, r0, #0x10 - lsr r3, r0, #0x18 - bne _022341BA - ldrb r0, [r4, #0x1b] - cmp r0, #0 - bne _022341B6 - mov r0, #2 - strb r0, [r4, #0x19] - pop {r3, r4, r5, r6, r7, pc} + bl MOD83_02234770 + bl MOD83_02233F84 + ldr r0, [r4, #0xc] + ldr r0, [r0, #8] + lsl r0, r0, #0x10 + lsr r3, r0, #0x18 + bne _022341BA + ldrb r0, [r4, #0x1b] + cmp r0, #0 + bne _022341B6 + mov r0, #2 + strb r0, [r4, #0x19] + pop {r3, r4, r5, r6, r7, pc} _022341B6: - sub r0, r0, #1 - strb r0, [r4, #0x1b] + sub r0, r0, #1 + strb r0, [r4, #0x1b] _022341BA: - ldrb r0, [r4, #0x1c] - mov r2, #0 - str r0, [sp] - ldr r0, [r4, #8] - ldr r1, [r4, #4] - bl MOD83_022347D0 - bl MOD83_02234770 - add r1, r0, #0 - ldr r0, [r4, #8] - ldr r2, _022341D8 ; =0x0000FFFF - bl MOD83_02233F5C + ldrb r0, [r4, #0x1c] + mov r2, #0 + str r0, [sp] + ldr r0, [r4, #8] + ldr r1, [r4, #4] + bl MOD83_022347D0 + bl MOD83_02234770 + add r1, r0, #0 + ldr r0, [r4, #8] + ldr r2, _022341D8 ; =0x0000FFFF + bl MOD83_02233F5C _022341D6: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022341D8: .word 0x0000FFFF - thumb_func_end MOD83_02234120 + thumb_func_end MOD83_02234120 - thumb_func_start MOD83_022341DC + thumb_func_start MOD83_022341DC MOD83_022341DC: ; 0x022341DC - push {r3, lr} - bl MOD83_02234694 - ldrb r0, [r0, #0x18] - cmp r0, #1 - beq _022341EE - cmp r0, #2 - beq _022341F4 - pop {r3, pc} + push {r3, lr} + bl MOD83_02234694 + ldrb r0, [r0, #0x18] + cmp r0, #1 + beq _022341EE + cmp r0, #2 + beq _022341F4 + pop {r3, pc} _022341EE: - bl MOD83_022340C4 - pop {r3, pc} + bl MOD83_022340C4 + pop {r3, pc} _022341F4: - bl MOD83_02234120 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022341DC + bl MOD83_02234120 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022341DC - thumb_func_start MOD83_022341FC + thumb_func_start MOD83_022341FC MOD83_022341FC: ; 0x022341FC - push {r4, lr} - bl MOD83_02234664 - add r4, r0, #0 - bl MOD83_02234574 - cmp r0, #6 - beq _02234212 - cmp r0, #0xb - beq _02234222 - pop {r4, pc} + push {r4, lr} + bl MOD83_02234664 + add r4, r0, #0 + bl MOD83_02234574 + cmp r0, #6 + beq _02234212 + cmp r0, #0xb + beq _02234222 + pop {r4, pc} _02234212: - mov r0, #7 - lsl r0, r0, #6 - ldrh r1, [r4, r0] - cmp r1, #0 - beq _02234226 - sub r1, r1, #1 - strh r1, [r4, r0] - pop {r4, pc} + mov r0, #7 + lsl r0, r0, #6 + ldrh r1, [r4, r0] + cmp r1, #0 + beq _02234226 + sub r1, r1, #1 + strh r1, [r4, r0] + pop {r4, pc} _02234222: - bl MOD83_022341DC + bl MOD83_022341DC _02234226: - pop {r4, pc} - thumb_func_end MOD83_022341FC + pop {r4, pc} + thumb_func_end MOD83_022341FC - thumb_func_start MOD83_02234228 + thumb_func_start MOD83_02234228 MOD83_02234228: ; 0x02234228 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0xa - bne _02234236 - bl MOD83_022341DC + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0xa + bne _02234236 + bl MOD83_022341DC _02234236: - pop {r3, pc} - thumb_func_end MOD83_02234228 + pop {r3, pc} + thumb_func_end MOD83_02234228 - thumb_func_start MOD83_02234238 + thumb_func_start MOD83_02234238 MOD83_02234238: ; 0x02234238 - push {r3, lr} - bl MOD83_02234574 - cmp r0, #0xc - beq _0223427A - bl MOD83_0223458C - cmp r0, #0xc - bne _02234258 - bl MOD83_02234574 - cmp r0, #7 - bne _0223427A - bl MOD83_02234C34 - pop {r3, pc} + push {r3, lr} + bl MOD83_02234574 + cmp r0, #0xc + beq _0223427A + bl MOD83_0223458C + cmp r0, #0xc + bne _02234258 + bl MOD83_02234574 + cmp r0, #7 + bne _0223427A + bl MOD83_02234C34 + pop {r3, pc} _02234258: - bl MOD83_022345A4 - cmp r0, #1 - beq _02234266 - cmp r0, #2 - beq _0223426C - b _02234272 + bl MOD83_022345A4 + cmp r0, #1 + beq _02234266 + cmp r0, #2 + beq _0223426C + b _02234272 _02234266: - bl MOD83_022341FC - pop {r3, pc} + bl MOD83_022341FC + pop {r3, pc} _0223426C: - bl MOD83_02234228 - pop {r3, pc} + bl MOD83_02234228 + pop {r3, pc} _02234272: - bl MOD83_0223456C - bl MOD83_02234574 + bl MOD83_0223456C + bl MOD83_02234574 _0223427A: - pop {r3, pc} - thumb_func_end MOD83_02234238 + pop {r3, pc} + thumb_func_end MOD83_02234238 - thumb_func_start MOD83_0223427C + thumb_func_start MOD83_0223427C MOD83_0223427C: ; 0x0223427C - push {r3, lr} - bl MOD83_02234674 - mov r0, #1 - bl MOD83_022345B0 - bl MOD83_02233F44 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223427C - - thumb_func_start MOD83_02234290 + push {r3, lr} + bl MOD83_02234674 + mov r0, #1 + bl MOD83_022345B0 + bl MOD83_02233F44 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223427C + + thumb_func_start MOD83_02234290 MOD83_02234290: ; 0x02234290 - push {r4, lr} - bl MOD83_022345A4 - mov r4, #0 - cmp r0, #1 - bne _022342BE - bl MOD83_02234664 - ldr r1, _022342C4 ; =0x000001C3 - ldrb r1, [r0, r1] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _022342BE - add r2, r4, #0 + push {r4, lr} + bl MOD83_022345A4 + mov r4, #0 + cmp r0, #1 + bne _022342BE + bl MOD83_02234664 + ldr r1, _022342C4 ; =0x000001C3 + ldrb r1, [r0, r1] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _022342BE + add r2, r4, #0 _022342AE: - ldr r1, [r0] - cmp r1, #0 - beq _022342B6 - add r4, r4, #1 + ldr r1, [r0] + cmp r1, #0 + beq _022342B6 + add r4, r4, #1 _022342B6: - add r2, r2, #1 - add r0, #0x38 - cmp r2, #8 - blo _022342AE + add r2, r2, #1 + add r0, #0x38 + cmp r2, #8 + blo _022342AE _022342BE: - add r0, r4, #0 - pop {r4, pc} - nop + add r0, r4, #0 + pop {r4, pc} + nop _022342C4: .word 0x000001C3 - thumb_func_end MOD83_02234290 + thumb_func_end MOD83_02234290 - thumb_func_start MOD83_022342C8 + thumb_func_start MOD83_022342C8 MOD83_022342C8: ; 0x022342C8 - push {r4, lr} - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _022342FA - bl MOD83_02234574 - cmp r0, #7 - bne _022342FA - bl MOD83_02234664 - ldr r1, _02234300 ; =0x000001C3 - ldrb r1, [r0, r1] - lsl r1, r1, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _022342FA - mov r1, #0x38 - mul r1, r4 - ldr r0, [r0, r1] - cmp r0, #0 - beq _022342FA - mov r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _022342FA + bl MOD83_02234574 + cmp r0, #7 + bne _022342FA + bl MOD83_02234664 + ldr r1, _02234300 ; =0x000001C3 + ldrb r1, [r0, r1] + lsl r1, r1, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _022342FA + mov r1, #0x38 + mul r1, r4 + ldr r0, [r0, r1] + cmp r0, #0 + beq _022342FA + mov r0, #1 + pop {r4, pc} _022342FA: - mov r0, #0 - pop {r4, pc} - nop + mov r0, #0 + pop {r4, pc} + nop _02234300: .word 0x000001C3 - thumb_func_end MOD83_022342C8 + thumb_func_end MOD83_022342C8 - thumb_func_start MOD83_02234304 + thumb_func_start MOD83_02234304 MOD83_02234304: ; 0x02234304 - push {r3, r4, r5, lr} - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _0223434E - bl MOD83_02234574 - cmp r0, #7 - bne _0223434E - bl MOD83_02234664 - ldr r2, _02234350 ; =0x000001C3 - ldrb r3, [r0, r2] - lsl r1, r3, #0x18 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _0223434E - mov r1, #0x38 - add r5, r4, #0 - mul r5, r1 - ldr r5, [r0, r5] - cmp r5, #0 - beq _0223434E - mov r5, #0xf - lsl r4, r4, #0x18 - bic r3, r5 - lsr r5, r4, #0x18 - mov r4, #0xf - and r4, r5 - orr r3, r4 - strb r3, [r0, r2] - mov r2, #0x78 - lsl r1, r1, #3 - strh r2, [r0, r1] - bl MOD83_02234A94 + push {r3, r4, r5, lr} + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _0223434E + bl MOD83_02234574 + cmp r0, #7 + bne _0223434E + bl MOD83_02234664 + ldr r2, _02234350 ; =0x000001C3 + ldrb r3, [r0, r2] + lsl r1, r3, #0x18 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _0223434E + mov r1, #0x38 + add r5, r4, #0 + mul r5, r1 + ldr r5, [r0, r5] + cmp r5, #0 + beq _0223434E + mov r5, #0xf + lsl r4, r4, #0x18 + bic r3, r5 + lsr r5, r4, #0x18 + mov r4, #0xf + and r4, r5 + orr r3, r4 + strb r3, [r0, r2] + mov r2, #0x78 + lsl r1, r1, #3 + strh r2, [r0, r1] + bl MOD83_02234A94 _0223434E: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _02234350: .word 0x000001C3 - thumb_func_end MOD83_02234304 + thumb_func_end MOD83_02234304 - thumb_func_start MOD83_02234354 + thumb_func_start MOD83_02234354 MOD83_02234354: ; 0x02234354 - push {r4, lr} - bl MOD83_022345A4 - mov r4, #0 - cmp r0, #2 - bne _02234386 - bl MOD83_0223466C - add r1, r0, #0 - add r1, #0x60 - ldrb r1, [r1] - cmp r1, #2 - bne _02234386 - add r2, r4, #0 + push {r4, lr} + bl MOD83_022345A4 + mov r4, #0 + cmp r0, #2 + bne _02234386 + bl MOD83_0223466C + add r1, r0, #0 + add r1, #0x60 + ldrb r1, [r1] + cmp r1, #2 + bne _02234386 + add r2, r4, #0 _02234370: - ldr r1, [r0] - cmp r1, #0 - beq _0223437E - ldrb r1, [r0, #0xa] - cmp r1, #0 - beq _0223437E - add r4, r4, #1 + ldr r1, [r0] + cmp r1, #0 + beq _0223437E + ldrb r1, [r0, #0xa] + cmp r1, #0 + beq _0223437E + add r4, r4, #1 _0223437E: - add r2, r2, #1 - add r0, #0xc - cmp r2, #8 - blo _02234370 + add r2, r2, #1 + add r0, #0xc + cmp r2, #8 + blo _02234370 _02234386: - add r0, r4, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234354 + add r0, r4, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234354 - thumb_func_start MOD83_0223438C + thumb_func_start MOD83_0223438C MOD83_0223438C: ; 0x0223438C - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x20] - cmp r0, #0 - beq _0223439C - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x20] + cmp r0, #0 + beq _0223439C + mov r0, #0 + pop {r3, pc} _0223439C: - bl WM_GetLinkLevel - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223438C + bl WM_GetLinkLevel + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223438C - thumb_func_start MOD83_022343A4 + thumb_func_start MOD83_022343A4 MOD83_022343A4: ; 0x022343A4 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _022343B4 - cmp r0, #2 - beq _022343BA - b _022343C0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _022343B4 + cmp r0, #2 + beq _022343BA + b _022343C0 _022343B4: - bl MOD83_02234290 - pop {r3, pc} + bl MOD83_02234290 + pop {r3, pc} _022343BA: - bl MOD83_02234354 - pop {r3, pc} + bl MOD83_02234354 + pop {r3, pc} _022343C0: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_022343A4 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_022343A4 - thumb_func_start MOD83_022343C4 + thumb_func_start MOD83_022343C4 MOD83_022343C4: ; 0x022343C4 - push {r3, r4, r5, lr} - bl MOD83_02234694 - add r5, r0, #0 - bl MOD83_022346EC - add r4, r0, #0 - bl MOD83_022345A4 - cmp r0, #1 - bne _022343F6 - mov r0, #1 - strb r0, [r5, #0x18] - mov r1, #0 - strb r1, [r5, #0x19] - add r4, #8 - str r4, [r5] - str r4, [r5, #4] - str r1, [r5, #0x10] - str r1, [r5, #0x14] - mov r0, #0x78 - strb r0, [r5, #0x1a] - strb r1, [r5, #0x1b] - mov r0, #0xfd - strb r0, [r5, #0x1c] + push {r3, r4, r5, lr} + bl MOD83_02234694 + add r5, r0, #0 + bl MOD83_022346EC + add r4, r0, #0 + bl MOD83_022345A4 + cmp r0, #1 + bne _022343F6 + mov r0, #1 + strb r0, [r5, #0x18] + mov r1, #0 + strb r1, [r5, #0x19] + add r4, #8 + str r4, [r5] + str r4, [r5, #4] + str r1, [r5, #0x10] + str r1, [r5, #0x14] + mov r0, #0x78 + strb r0, [r5, #0x1a] + strb r1, [r5, #0x1b] + mov r0, #0xfd + strb r0, [r5, #0x1c] _022343F6: - pop {r3, r4, r5, pc} - thumb_func_end MOD83_022343C4 + pop {r3, r4, r5, pc} + thumb_func_end MOD83_022343C4 - thumb_func_start MOD83_022343F8 + thumb_func_start MOD83_022343F8 MOD83_022343F8: ; 0x022343F8 - push {r4, lr} - bl MOD83_02234694 - add r4, r0, #0 - bl MOD83_022346EC - mov r1, #1 - strb r1, [r4, #0x18] - mov r1, #0 - strb r1, [r4, #0x19] - add r0, #8 - str r0, [r4] - str r0, [r4, #4] - mov r0, #0x30 - str r0, [r4, #0x10] - str r0, [r4, #0x14] - mov r0, #0x78 - strb r0, [r4, #0x1a] - strb r1, [r4, #0x1b] - mov r0, #0xfe - strb r0, [r4, #0x1c] - pop {r4, pc} - thumb_func_end MOD83_022343F8 - - thumb_func_start MOD83_02234424 + push {r4, lr} + bl MOD83_02234694 + add r4, r0, #0 + bl MOD83_022346EC + mov r1, #1 + strb r1, [r4, #0x18] + mov r1, #0 + strb r1, [r4, #0x19] + add r0, #8 + str r0, [r4] + str r0, [r4, #4] + mov r0, #0x30 + str r0, [r4, #0x10] + str r0, [r4, #0x14] + mov r0, #0x78 + strb r0, [r4, #0x1a] + strb r1, [r4, #0x1b] + mov r0, #0xfe + strb r0, [r4, #0x1c] + pop {r4, pc} + thumb_func_end MOD83_022343F8 + + thumb_func_start MOD83_02234424 MOD83_02234424: ; 0x02234424 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - add r4, r2, #0 - bl MOD83_02234694 - cmp r4, #0xf0 - bgt _0223444E - mov r1, #2 - strb r1, [r0, #0x18] - mov r1, #3 - strb r1, [r0, #0x19] - str r5, [r0] - str r5, [r0, #4] - str r6, [r0, #0x10] - mov r2, #0 - str r2, [r0, #0x14] - mov r1, #0x78 - strb r1, [r0, #0x1a] - strb r2, [r0, #0x1b] - strb r4, [r0, #0x1c] + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + add r4, r2, #0 + bl MOD83_02234694 + cmp r4, #0xf0 + bgt _0223444E + mov r1, #2 + strb r1, [r0, #0x18] + mov r1, #3 + strb r1, [r0, #0x19] + str r5, [r0] + str r5, [r0, #4] + str r6, [r0, #0x10] + mov r2, #0 + str r2, [r0, #0x14] + mov r1, #0x78 + strb r1, [r0, #0x1a] + strb r2, [r0, #0x1b] + strb r4, [r0, #0x1c] _0223444E: - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02234424 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02234424 - thumb_func_start MOD83_02234450 + thumb_func_start MOD83_02234450 MOD83_02234450: ; 0x02234450 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _0223445E - cmp r0, #2 - bne _02234478 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _0223445E + cmp r0, #2 + bne _02234478 _0223445E: - bl MOD83_02234574 - cmp r0, #0xa - beq _0223446A - cmp r0, #0xb - bne _02234478 + bl MOD83_02234574 + cmp r0, #0xa + beq _0223446A + cmp r0, #0xb + bne _02234478 _0223446A: - bl MOD83_02234694 - ldrb r0, [r0, #0x19] - cmp r0, #2 - bne _02234478 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x19] + cmp r0, #2 + bne _02234478 + mov r0, #1 + pop {r3, pc} _02234478: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_02234450 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_02234450 - thumb_func_start MOD83_0223447C + thumb_func_start MOD83_0223447C MOD83_0223447C: ; 0x0223447C - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _0223448A - cmp r0, #2 - bne _022344A4 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _0223448A + cmp r0, #2 + bne _022344A4 _0223448A: - bl MOD83_02234574 - cmp r0, #0xa - beq _02234496 - cmp r0, #0xb - bne _022344A4 + bl MOD83_02234574 + cmp r0, #0xa + beq _02234496 + cmp r0, #0xb + bne _022344A4 _02234496: - bl MOD83_02234694 - ldrb r0, [r0, #0x19] - cmp r0, #2 - bne _022344A4 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r0, [r0, #0x19] + cmp r0, #2 + bne _022344A4 + mov r0, #1 + pop {r3, pc} _022344A4: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_0223447C + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_0223447C - thumb_func_start MOD83_022344A8 + thumb_func_start MOD83_022344A8 MOD83_022344A8: ; 0x022344A8 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #1 - beq _022344B6 - cmp r0, #2 - bne _022344E0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #1 + beq _022344B6 + cmp r0, #2 + bne _022344E0 _022344B6: - bl MOD83_02234574 - cmp r0, #0xa - beq _022344C2 - cmp r0, #0xb - bne _022344E0 + bl MOD83_02234574 + cmp r0, #0xa + beq _022344C2 + cmp r0, #0xb + bne _022344E0 _022344C2: - bl MOD83_02234694 - ldrb r1, [r0, #0x19] - cmp r1, #0 - bne _022344E0 - ldr r1, [r0, #0xc] - ldr r1, [r1, #8] - lsl r1, r1, #0x10 - lsr r1, r1, #0x18 - bne _022344E0 - ldrb r0, [r0, #0x1b] - cmp r0, #4 - bhs _022344E0 - mov r0, #1 - pop {r3, pc} + bl MOD83_02234694 + ldrb r1, [r0, #0x19] + cmp r1, #0 + bne _022344E0 + ldr r1, [r0, #0xc] + ldr r1, [r1, #8] + lsl r1, r1, #0x10 + lsr r1, r1, #0x18 + bne _022344E0 + ldrb r0, [r0, #0x1b] + cmp r0, #4 + bhs _022344E0 + mov r0, #1 + pop {r3, pc} _022344E0: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_022344A8 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_022344A8 - thumb_func_start MOD83_022344E4 + thumb_func_start MOD83_022344E4 MOD83_022344E4: ; 0x022344E4 - push {r3, lr} - bl MOD83_022345A4 - cmp r0, #2 - bne _02234510 - bl MOD83_0223466C - mov r2, #0 + push {r3, lr} + bl MOD83_022345A4 + cmp r0, #2 + bne _02234510 + bl MOD83_0223466C + mov r2, #0 _022344F4: - ldr r1, [r0] - cmp r1, #0 - beq _02234504 - ldrb r1, [r0, #0xa] - cmp r1, #0 - beq _02234504 - mov r0, #1 - pop {r3, pc} + ldr r1, [r0] + cmp r1, #0 + beq _02234504 + ldrb r1, [r0, #0xa] + cmp r1, #0 + beq _02234504 + mov r0, #1 + pop {r3, pc} _02234504: - add r2, r2, #1 - add r0, #0xc - cmp r2, #8 - blt _022344F4 - mov r0, #0 - pop {r3, pc} + add r2, r2, #1 + add r0, #0xc + cmp r2, #8 + blt _022344F4 + mov r0, #0 + pop {r3, pc} _02234510: - bl MOD83_02234628 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022344E4 + bl MOD83_02234628 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022344E4 - thumb_func_start MOD83_02234518 + thumb_func_start MOD83_02234518 MOD83_02234518: ; 0x02234518 - push {r4, lr} - mov r0, #0xc - bl MOD83_02234598 - bl MOD83_02234574 - cmp r0, #0 - beq _02234532 - cmp r0, #1 - beq _02234532 - cmp r0, #9 - beq _0223453E - pop {r4, pc} + push {r4, lr} + mov r0, #0xc + bl MOD83_02234598 + bl MOD83_02234574 + cmp r0, #0 + beq _02234532 + cmp r0, #1 + beq _02234532 + cmp r0, #9 + beq _0223453E + pop {r4, pc} _02234532: - bl WM_Finish - mov r0, #1 - bl MOD83_0223464C - pop {r4, pc} + bl WM_Finish + mov r0, #1 + bl MOD83_0223464C + pop {r4, pc} _0223453E: - bl MOD83_02234628 - cmp r0, #0 - bne _02234554 - bl MOD83_0223456C - add r4, r0, #0 - bl MOD83_02234C34 - mov r0, #1 - str r0, [r4, #0x1c] + bl MOD83_02234628 + cmp r0, #0 + bne _02234554 + bl MOD83_0223456C + add r4, r0, #0 + bl MOD83_02234C34 + mov r0, #1 + str r0, [r4, #0x1c] _02234554: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234518 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234518 - thumb_func_start MOD83_02234558 + thumb_func_start MOD83_02234558 MOD83_02234558: ; 0x02234558 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x20] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234558 - - thumb_func_start MOD83_02234564 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x20] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234558 + + thumb_func_start MOD83_02234564 MOD83_02234564: ; 0x02234564 - ldr r0, _02234568 ; =MOD83_0223B240 - bx lr - .align 2, 0 + ldr r0, _02234568 ; =MOD83_0223B240 + bx lr + .align 2, 0 _02234568: .word MOD83_0223B240 - thumb_func_end MOD83_02234564 + thumb_func_end MOD83_02234564 - thumb_func_start MOD83_0223456C + thumb_func_start MOD83_0223456C MOD83_0223456C: ; 0x0223456C - ldr r0, _02234570 ; =MOD83_0223B8A0 - bx lr - .align 2, 0 + ldr r0, _02234570 ; =MOD83_0223B8A0 + bx lr + .align 2, 0 _02234570: .word MOD83_0223B8A0 - thumb_func_end MOD83_0223456C + thumb_func_end MOD83_0223456C - thumb_func_start MOD83_02234574 + thumb_func_start MOD83_02234574 MOD83_02234574: ; 0x02234574 - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234574 - - thumb_func_start MOD83_02234580 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234574 + + thumb_func_start MOD83_02234580 MOD83_02234580: ; 0x02234580 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0] - pop {r4, pc} - thumb_func_end MOD83_02234580 - - thumb_func_start MOD83_0223458C + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0] + pop {r4, pc} + thumb_func_end MOD83_02234580 + + thumb_func_start MOD83_0223458C MOD83_0223458C: ; 0x0223458C - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #1] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_0223458C - - thumb_func_start MOD83_02234598 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #1] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_0223458C + + thumb_func_start MOD83_02234598 MOD83_02234598: ; 0x02234598 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0, #1] - pop {r4, pc} - thumb_func_end MOD83_02234598 - - thumb_func_start MOD83_022345A4 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0, #1] + pop {r4, pc} + thumb_func_end MOD83_02234598 + + thumb_func_start MOD83_022345A4 MOD83_022345A4: ; 0x022345A4 - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #2] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345A4 - - thumb_func_start MOD83_022345B0 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #2] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345A4 + + thumb_func_start MOD83_022345B0 MOD83_022345B0: ; 0x022345B0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strb r4, [r0, #2] - pop {r4, pc} - thumb_func_end MOD83_022345B0 - - thumb_func_start MOD83_022345BC + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strb r4, [r0, #2] + pop {r4, pc} + thumb_func_end MOD83_022345B0 + + thumb_func_start MOD83_022345BC MOD83_022345BC: ; 0x022345BC - push {r3, lr} - bl MOD83_0223456C - ldrb r0, [r0, #3] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345BC - - thumb_func_start MOD83_022345C8 + push {r3, lr} + bl MOD83_0223456C + ldrb r0, [r0, #3] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345BC + + thumb_func_start MOD83_022345C8 MOD83_022345C8: ; 0x022345C8 - push {r4, lr} - add r4, r0, #0 - bl MOD83_02234564 - strh r4, [r0, #0x32] - pop {r4, pc} - thumb_func_end MOD83_022345C8 - - thumb_func_start MOD83_022345D4 + push {r4, lr} + add r4, r0, #0 + bl MOD83_02234564 + strh r4, [r0, #0x32] + pop {r4, pc} + thumb_func_end MOD83_022345C8 + + thumb_func_start MOD83_022345D4 MOD83_022345D4: ; 0x022345D4 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x24] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345D4 - - thumb_func_start MOD83_022345E0 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x24] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345D4 + + thumb_func_start MOD83_022345E0 MOD83_022345E0: ; 0x022345E0 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x2c] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345E0 - - thumb_func_start MOD83_022345EC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x2c] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345E0 + + thumb_func_start MOD83_022345EC MOD83_022345EC: ; 0x022345EC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x30] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345EC - - thumb_func_start MOD83_022345F8 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x30] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345EC + + thumb_func_start MOD83_022345F8 MOD83_022345F8: ; 0x022345F8 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x38] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022345F8 - - thumb_func_start MOD83_02234604 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x38] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022345F8 + + thumb_func_start MOD83_02234604 MOD83_02234604: ; 0x02234604 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x3c] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234604 - - thumb_func_start MOD83_02234610 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x3c] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234604 + + thumb_func_start MOD83_02234610 MOD83_02234610: ; 0x02234610 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x28] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234610 - - thumb_func_start MOD83_0223461C + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x28] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234610 + + thumb_func_start MOD83_0223461C MOD83_0223461C: ; 0x0223461C - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - strh r4, [r0, #0xc] - pop {r4, pc} - thumb_func_end MOD83_0223461C - - thumb_func_start MOD83_02234628 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + strh r4, [r0, #0xc] + pop {r4, pc} + thumb_func_end MOD83_0223461C + + thumb_func_start MOD83_02234628 MOD83_02234628: ; 0x02234628 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x14] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234628 - - thumb_func_start MOD83_02234634 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x14] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234628 + + thumb_func_start MOD83_02234634 MOD83_02234634: ; 0x02234634 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x14] - pop {r4, pc} - thumb_func_end MOD83_02234634 - - thumb_func_start MOD83_02234640 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x14] + pop {r4, pc} + thumb_func_end MOD83_02234634 + + thumb_func_start MOD83_02234640 MOD83_02234640: ; 0x02234640 - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x18] - pop {r4, pc} - thumb_func_end MOD83_02234640 - - thumb_func_start MOD83_0223464C + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x18] + pop {r4, pc} + thumb_func_end MOD83_02234640 + + thumb_func_start MOD83_0223464C MOD83_0223464C: ; 0x0223464C - push {r4, lr} - add r4, r0, #0 - bl MOD83_0223456C - str r4, [r0, #0x20] - pop {r4, pc} - thumb_func_end MOD83_0223464C - - thumb_func_start MOD83_02234658 + push {r4, lr} + add r4, r0, #0 + bl MOD83_0223456C + str r4, [r0, #0x20] + pop {r4, pc} + thumb_func_end MOD83_0223464C + + thumb_func_start MOD83_02234658 MOD83_02234658: ; 0x02234658 - push {r3, lr} - bl MOD83_0223456C - add r0, #0x90 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234658 - - thumb_func_start MOD83_02234664 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x90 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234658 + + thumb_func_start MOD83_02234664 MOD83_02234664: ; 0x02234664 - ldr r3, _02234668 ; =MOD83_02234658 - bx r3 - .align 2, 0 + ldr r3, _02234668 ; =MOD83_02234658 + bx r3 + .align 2, 0 _02234668: .word MOD83_02234658 - thumb_func_end MOD83_02234664 + thumb_func_end MOD83_02234664 - thumb_func_start MOD83_0223466C + thumb_func_start MOD83_0223466C MOD83_0223466C: ; 0x0223466C - ldr r3, _02234670 ; =MOD83_02234658 - bx r3 - .align 2, 0 + ldr r3, _02234670 ; =MOD83_02234658 + bx r3 + .align 2, 0 _02234670: .word MOD83_02234658 - thumb_func_end MOD83_0223466C + thumb_func_end MOD83_0223466C - thumb_func_start MOD83_02234674 + thumb_func_start MOD83_02234674 MOD83_02234674: ; 0x02234674 - push {r4, lr} - bl MOD83_02234664 - mov r2, #0x71 - mov r1, #0 - lsl r2, r2, #2 - add r4, r0, #0 - bl MI_CpuFill8 - mov r1, #0x46 - lsl r1, r1, #2 - add r0, r1, #0 - add r0, #0xa8 - strh r1, [r4, r0] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234674 - - thumb_func_start MOD83_02234694 + push {r4, lr} + bl MOD83_02234664 + mov r2, #0x71 + mov r1, #0 + lsl r2, r2, #2 + add r4, r0, #0 + bl MI_CpuFill8 + mov r1, #0x46 + lsl r1, r1, #2 + add r0, r1, #0 + add r0, #0xa8 + strh r1, [r4, r0] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234674 + + thumb_func_start MOD83_02234694 MOD83_02234694: ; 0x02234694 - push {r3, lr} - bl MOD83_0223456C - mov r1, #0x95 - lsl r1, r1, #2 - add r0, r0, r1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_02234694 - - thumb_func_start MOD83_022346A4 + push {r3, lr} + bl MOD83_0223456C + mov r1, #0x95 + lsl r1, r1, #2 + add r0, r0, r1 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_02234694 + + thumb_func_start MOD83_022346A4 MOD83_022346A4: ; 0x022346A4 - push {r3, lr} - bl MOD83_02234694 - mov r1, #0 - strb r1, [r0, #0x18] - pop {r3, pc} - thumb_func_end MOD83_022346A4 - - thumb_func_start MOD83_022346B0 + push {r3, lr} + bl MOD83_02234694 + mov r1, #0 + strb r1, [r0, #0x18] + pop {r3, pc} + thumb_func_end MOD83_022346A4 + + thumb_func_start MOD83_022346B0 MOD83_022346B0: ; 0x022346B0 - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #4] - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346B0 - - thumb_func_start MOD83_022346BC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #4] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346B0 + + thumb_func_start MOD83_022346BC MOD83_022346BC: ; 0x022346BC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x40] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346BC - - thumb_func_start MOD83_022346CC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x40] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346BC + + thumb_func_start MOD83_022346CC MOD83_022346CC: ; 0x022346CC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x40] - lsl r0, r0, #0x14 - lsr r0, r0, #0x1c - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346CC - - thumb_func_start MOD83_022346DC + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x40] + lsl r0, r0, #0x14 + lsr r0, r0, #0x1c + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346CC + + thumb_func_start MOD83_022346DC MOD83_022346DC: ; 0x022346DC - push {r3, lr} - bl MOD83_0223456C - ldr r0, [r0, #0x44] - lsr r0, r0, #0x10 - pop {r3, pc} - thumb_func_end MOD83_022346DC - - thumb_func_start MOD83_022346E8 + push {r3, lr} + bl MOD83_0223456C + ldr r0, [r0, #0x44] + lsr r0, r0, #0x10 + pop {r3, pc} + thumb_func_end MOD83_022346DC + + thumb_func_start MOD83_022346E8 MOD83_022346E8: ; 0x022346E8 - mov r0, #0x38 - bx lr - thumb_func_end MOD83_022346E8 + mov r0, #0x38 + bx lr + thumb_func_end MOD83_022346E8 - thumb_func_start MOD83_022346EC + thumb_func_start MOD83_022346EC MOD83_022346EC: ; 0x022346EC - push {r3, lr} - bl MOD83_0223456C - add r0, #0x40 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346EC - - thumb_func_start MOD83_022346F8 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x40 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346EC + + thumb_func_start MOD83_022346F8 MOD83_022346F8: ; 0x022346F8 - push {r3, lr} - bl MOD83_0223456C - add r0, #0x78 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022346F8 - - thumb_func_start MOD83_02234704 + push {r3, lr} + bl MOD83_0223456C + add r0, #0x78 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022346F8 + + thumb_func_start MOD83_02234704 MOD83_02234704: ; 0x02234704 - push {r3} - sub sp, #4 - mov r2, #0 - str r2, [sp] - add r3, sp, #0 + push {r3} + sub sp, #4 + mov r2, #0 + str r2, [sp] + add r3, sp, #0 _0223470E: - add r1, r0, r2 - ldrb r1, [r1, #2] - add r2, r2, #1 - strb r1, [r3] - add r3, r3, #1 - cmp r2, #4 - blo _0223470E - ldr r0, [sp] - add sp, #4 - pop {r3} - bx lr - thumb_func_end MOD83_02234704 - - thumb_func_start MOD83_02234724 + add r1, r0, r2 + ldrb r1, [r1, #2] + add r2, r2, #1 + strb r1, [r3] + add r3, r3, #1 + cmp r2, #4 + blo _0223470E + ldr r0, [sp] + add sp, #4 + pop {r3} + bx lr + thumb_func_end MOD83_02234704 + + thumb_func_start MOD83_02234724 MOD83_02234724: ; 0x02234724 - push {r3} - sub sp, #4 - mov r2, #0 - add r1, sp, #0 - strh r2, [r1] - add r3, sp, #0 + push {r3} + sub sp, #4 + mov r2, #0 + add r1, sp, #0 + strh r2, [r1] + add r3, sp, #0 _02234730: - ldrb r1, [r0, r2] - add r2, r2, #1 - strb r1, [r3] - add r3, r3, #1 - cmp r2, #2 - blo _02234730 - add r1, sp, #0 - mov r0, #0 - ldrsh r0, [r1, r0] - add sp, #4 - pop {r3} - bx lr - thumb_func_end MOD83_02234724 - - thumb_func_start MOD83_02234748 + ldrb r1, [r0, r2] + add r2, r2, #1 + strb r1, [r3] + add r3, r3, #1 + cmp r2, #2 + blo _02234730 + add r1, sp, #0 + mov r0, #0 + ldrsh r0, [r1, r0] + add sp, #4 + pop {r3} + bx lr + thumb_func_end MOD83_02234724 + + thumb_func_start MOD83_02234748 MOD83_02234748: ; 0x02234748 - push {r4, r5, r6, lr} - add r5, r1, #0 - ldr r1, _0223476C ; =0x00002710 - add r6, r0, #0 - add r4, r2, #0 - bl _u32_div_f - str r1, [r5] - ldr r1, _0223476C ; =0x00002710 - add r0, r6, #0 - bl _u32_div_f - ldr r1, _0223476C ; =0x00002710 - bl _u32_div_f - str r1, [r4] - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r1, #0 + ldr r1, _0223476C ; =0x00002710 + add r6, r0, #0 + add r4, r2, #0 + bl _u32_div_f + str r1, [r5] + ldr r1, _0223476C ; =0x00002710 + add r0, r6, #0 + bl _u32_div_f + ldr r1, _0223476C ; =0x00002710 + bl _u32_div_f + str r1, [r4] + pop {r4, r5, r6, pc} + nop _0223476C: .word 0x00002710 - thumb_func_end MOD83_02234748 + thumb_func_end MOD83_02234748 - thumb_func_start MOD83_02234770 + thumb_func_start MOD83_02234770 MOD83_02234770: ; 0x02234770 - mov r0, #0x10 - bx lr - thumb_func_end MOD83_02234770 + mov r0, #0x10 + bx lr + thumb_func_end MOD83_02234770 - thumb_func_start MOD83_02234774 + thumb_func_start MOD83_02234774 MOD83_02234774: ; 0x02234774 - push {r4, lr} - ldr r0, _02234788 ; =0x04000006 - ldrh r4, [r0] - bl OS_GetTick - add r1, r0, r4 - mov r0, #1 - bic r1, r0 - add r0, r1, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + ldr r0, _02234788 ; =0x04000006 + ldrh r4, [r0] + bl OS_GetTick + add r1, r0, r4 + mov r0, #1 + bic r1, r0 + add r0, r1, #1 + pop {r4, pc} + .align 2, 0 _02234788: .word 0x04000006 - thumb_func_end MOD83_02234774 + thumb_func_end MOD83_02234774 - thumb_func_start MOD83_0223478C + thumb_func_start MOD83_0223478C MOD83_0223478C: ; 0x0223478C - push {r4, r5, r6, r7} - add r3, r0, #0 - mov r0, #0 - lsr r1, r1, #2 - beq _022347C2 - ldr r4, _022347C8 ; =0x00269EC3 + push {r4, r5, r6, r7} + add r3, r0, #0 + mov r0, #0 + lsr r1, r1, #2 + beq _022347C2 + ldr r4, _022347C8 ; =0x00269EC3 _02234798: - ldr r5, _022347CC ; =0x5D588B65 - ldr r6, _022347CC ; =0x5D588B65 - mul r5, r3 - ldr r3, _022347C8 ; =0x00269EC3 - add r0, r0, #1 - add r3, r5, r3 - lsr r5, r3, #0x10 - mul r6, r3 - add r3, r6, r4 - lsl r5, r5, #0x10 - lsr r7, r3, #0x10 - lsr r5, r5, #0x10 - lsl r7, r7, #0x10 - ldr r6, [r2] - lsl r5, r5, #0x10 - lsr r7, r7, #0x10 - orr r5, r7 - eor r5, r6 - stmia r2!, {r5} - cmp r0, r1 - blo _02234798 + ldr r5, _022347CC ; =0x5D588B65 + ldr r6, _022347CC ; =0x5D588B65 + mul r5, r3 + ldr r3, _022347C8 ; =0x00269EC3 + add r0, r0, #1 + add r3, r5, r3 + lsr r5, r3, #0x10 + mul r6, r3 + add r3, r6, r4 + lsl r5, r5, #0x10 + lsr r7, r3, #0x10 + lsr r5, r5, #0x10 + lsl r7, r7, #0x10 + ldr r6, [r2] + lsl r5, r5, #0x10 + lsr r7, r7, #0x10 + orr r5, r7 + eor r5, r6 + stmia r2!, {r5} + cmp r0, r1 + blo _02234798 _022347C2: - add r0, r3, #0 - pop {r4, r5, r6, r7} - bx lr - .align 2, 0 + add r0, r3, #0 + pop {r4, r5, r6, r7} + bx lr + .align 2, 0 _022347C8: .word 0x00269EC3 _022347CC: .word 0x5D588B65 - thumb_func_end MOD83_0223478C + thumb_func_end MOD83_0223478C - thumb_func_start MOD83_022347D0 + thumb_func_start MOD83_022347D0 MOD83_022347D0: ; 0x022347D0 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r7, r1, #0 - add r6, r2, #0 - str r3, [sp] - bl MOD83_022346EC - add r4, r0, #0 - ldr r0, [r5] - mov r1, #0xff - bic r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - orr r1, r0 - ldr r0, _022348F4 ; =0xFFFFF0FF - str r1, [r5] - and r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x14 - lsr r1, r1, #0x1c - lsl r1, r1, #0x1c - lsr r1, r1, #0x14 - orr r1, r0 - ldr r0, _022348F8 ; =0xFFFF0FFF - str r1, [r5] - and r0, r1 - ldr r1, [r4] - lsl r1, r1, #0x10 - lsr r1, r1, #0x1c - lsl r1, r1, #0x1c - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5] - bl MOD83_02234774 - ldr r1, [r5] - lsl r0, r0, #0x10 - lsl r1, r1, #0x10 - lsr r0, r0, #0x10 - lsr r1, r1, #0x10 - lsl r0, r0, #0x10 - orr r0, r1 - str r0, [r5] - ldr r2, [r4, #4] - ldr r1, [r5, #4] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - mov r0, #0xff - lsl r2, r2, #0x18 - bic r1, r0 - lsr r2, r2, #0x18 - orr r2, r1 - ldr r1, _022348F4 ; =0xFFFFF0FF - str r2, [r5, #4] - and r1, r2 - ldr r2, [r4, #4] - lsl r2, r2, #0x14 - lsr r2, r2, #0x1c - lsl r2, r2, #0x1c - lsr r2, r2, #0x14 - orr r2, r1 - ldr r1, _022348F8 ; =0xFFFF0FFF - str r2, [r5, #4] - and r1, r2 - ldr r2, [r4, #4] - lsl r2, r2, #0x10 - lsr r2, r2, #0x1c - lsl r2, r2, #0x1c - lsr r2, r2, #0x10 - orr r1, r2 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - str r1, [r5, #4] - ldr r1, [r5, #8] - bic r1, r0 - ldr r0, [sp, #0x18] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - orr r1, r0 - ldr r0, _022348FC ; =0xFFFF00FF - and r0, r1 - ldr r1, [sp] - lsl r1, r1, #0x18 - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5, #8] - mov r0, #0 - add r1, r7, #0 - add r2, r6, #0 - bl SVC_GetCRC16 - ldr r1, [r5, #8] - lsl r0, r0, #0x10 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - orr r0, r1 - str r0, [r5, #8] - bl MOD83_02234770 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - lsl r0, r0, #0x18 - ldr r1, [r5, #0xc] - mov r2, #0xff - bic r1, r2 - lsr r0, r0, #0x18 - orr r0, r1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - lsl r0, r6, #8 - orr r0, r1 - str r0, [r5, #0xc] - cmp r6, #0 - beq _022348CE - ldr r1, [r5, #0xc] - add r0, r7, #0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r1, r5, r1 - add r2, r6, #0 - bl MI_CpuCopy8 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r7, r1, #0 + add r6, r2, #0 + str r3, [sp] + bl MOD83_022346EC + add r4, r0, #0 + ldr r0, [r5] + mov r1, #0xff + bic r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + orr r1, r0 + ldr r0, _022348F4 ; =0xFFFFF0FF + str r1, [r5] + and r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x14 + lsr r1, r1, #0x1c + lsl r1, r1, #0x1c + lsr r1, r1, #0x14 + orr r1, r0 + ldr r0, _022348F8 ; =0xFFFF0FFF + str r1, [r5] + and r0, r1 + ldr r1, [r4] + lsl r1, r1, #0x10 + lsr r1, r1, #0x1c + lsl r1, r1, #0x1c + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5] + bl MOD83_02234774 + ldr r1, [r5] + lsl r0, r0, #0x10 + lsl r1, r1, #0x10 + lsr r0, r0, #0x10 + lsr r1, r1, #0x10 + lsl r0, r0, #0x10 + orr r0, r1 + str r0, [r5] + ldr r2, [r4, #4] + ldr r1, [r5, #4] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + mov r0, #0xff + lsl r2, r2, #0x18 + bic r1, r0 + lsr r2, r2, #0x18 + orr r2, r1 + ldr r1, _022348F4 ; =0xFFFFF0FF + str r2, [r5, #4] + and r1, r2 + ldr r2, [r4, #4] + lsl r2, r2, #0x14 + lsr r2, r2, #0x1c + lsl r2, r2, #0x1c + lsr r2, r2, #0x14 + orr r2, r1 + ldr r1, _022348F8 ; =0xFFFF0FFF + str r2, [r5, #4] + and r1, r2 + ldr r2, [r4, #4] + lsl r2, r2, #0x10 + lsr r2, r2, #0x1c + lsl r2, r2, #0x1c + lsr r2, r2, #0x10 + orr r1, r2 + lsl r1, r1, #0x10 + lsr r1, r1, #0x10 + str r1, [r5, #4] + ldr r1, [r5, #8] + bic r1, r0 + ldr r0, [sp, #0x18] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + orr r1, r0 + ldr r0, _022348FC ; =0xFFFF00FF + and r0, r1 + ldr r1, [sp] + lsl r1, r1, #0x18 + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5, #8] + mov r0, #0 + add r1, r7, #0 + add r2, r6, #0 + bl SVC_GetCRC16 + ldr r1, [r5, #8] + lsl r0, r0, #0x10 + lsl r1, r1, #0x10 + lsr r1, r1, #0x10 + orr r0, r1 + str r0, [r5, #8] + bl MOD83_02234770 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + lsl r0, r0, #0x18 + ldr r1, [r5, #0xc] + mov r2, #0xff + bic r1, r2 + lsr r0, r0, #0x18 + orr r0, r1 + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + lsl r0, r6, #8 + orr r0, r1 + str r0, [r5, #0xc] + cmp r6, #0 + beq _022348CE + ldr r1, [r5, #0xc] + add r0, r7, #0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r5, r1 + add r2, r6, #0 + bl MI_CpuCopy8 _022348CE: - add r0, r5, #0 - bl MOD83_0223496C - ldr r0, [r4] - lsl r0, r0, #0x10 - lsr r0, r0, #0x1c - cmp r0, #1 - bne _022348F2 - ldr r1, [r5, #0xc] - ldr r0, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r1, r6, r1 - lsr r0, r0, #0x10 - sub r1, r1, #4 - add r2, r5, #4 - bl MOD83_0223478C + add r0, r5, #0 + bl MOD83_0223496C + ldr r0, [r4] + lsl r0, r0, #0x10 + lsr r0, r0, #0x1c + cmp r0, #1 + bne _022348F2 + ldr r1, [r5, #0xc] + ldr r0, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r6, r1 + lsr r0, r0, #0x10 + sub r1, r1, #4 + add r2, r5, #4 + bl MOD83_0223478C _022348F2: - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022348F4: .word 0xFFFFF0FF _022348F8: .word 0xFFFF0FFF _022348FC: .word 0xFFFF00FF - thumb_func_end MOD83_022347D0 + thumb_func_end MOD83_022347D0 - thumb_func_start MOD83_02234900 + thumb_func_start MOD83_02234900 MOD83_02234900: ; 0x02234900 - push {r4, lr} - add r4, r0, #0 - bl MOD83_022346EC - ldr r0, [r4] - lsl r1, r0, #0x10 - lsr r1, r1, #0x1c - cmp r1, #1 - bne _02234930 - lsr r0, r0, #0x10 - mov r1, #0xc - add r2, r4, #4 - bl MOD83_0223478C - ldr r1, [r4, #0xc] - add r4, #0x10 - lsl r2, r1, #0x18 - lsr r2, r2, #0x18 - lsr r1, r1, #8 - add r1, r2, r1 - sub r1, #0x10 - add r2, r4, #0 - bl MOD83_0223478C + push {r4, lr} + add r4, r0, #0 + bl MOD83_022346EC + ldr r0, [r4] + lsl r1, r0, #0x10 + lsr r1, r1, #0x1c + cmp r1, #1 + bne _02234930 + lsr r0, r0, #0x10 + mov r1, #0xc + add r2, r4, #4 + bl MOD83_0223478C + ldr r1, [r4, #0xc] + add r4, #0x10 + lsl r2, r1, #0x18 + lsr r2, r2, #0x18 + lsr r1, r1, #8 + add r1, r2, r1 + sub r1, #0x10 + add r2, r4, #0 + bl MOD83_0223478C _02234930: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234900 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234900 - thumb_func_start MOD83_02234934 + thumb_func_start MOD83_02234934 MOD83_02234934: ; 0x02234934 - push {r4, lr} - add r4, r0, #0 - ldr r2, [r4, #0xc] - mov r0, #0 - lsl r1, r2, #0x18 - lsr r1, r1, #0x18 - add r1, r4, r1 - lsr r2, r2, #8 - bl SVC_GetCRC16 - ldr r1, [r4, #8] - lsr r1, r1, #0x10 - cmp r1, r0 - bne _02234954 - mov r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldr r2, [r4, #0xc] + mov r0, #0 + lsl r1, r2, #0x18 + lsr r1, r1, #0x18 + add r1, r4, r1 + lsr r2, r2, #8 + bl SVC_GetCRC16 + ldr r1, [r4, #8] + lsr r1, r1, #0x10 + cmp r1, r0 + bne _02234954 + mov r0, #1 + pop {r4, pc} _02234954: - mov r0, #0 - pop {r4, pc} - thumb_func_end MOD83_02234934 + mov r0, #0 + pop {r4, pc} + thumb_func_end MOD83_02234934 - thumb_func_start MOD83_02234958 + thumb_func_start MOD83_02234958 MOD83_02234958: ; 0x02234958 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234958 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234958 - thumb_func_start MOD83_0223495C + thumb_func_start MOD83_0223495C MOD83_0223495C: ; 0x0223495C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223495C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223495C - thumb_func_start MOD83_02234960 + thumb_func_start MOD83_02234960 MOD83_02234960: ; 0x02234960 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234960 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234960 - thumb_func_start MOD83_02234964 + thumb_func_start MOD83_02234964 MOD83_02234964: ; 0x02234964 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234964 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234964 - thumb_func_start MOD83_02234968 + thumb_func_start MOD83_02234968 MOD83_02234968: ; 0x02234968 - bx lr - .align 2, 0 - thumb_func_end MOD83_02234968 + bx lr + .align 2, 0 + thumb_func_end MOD83_02234968 - thumb_func_start MOD83_0223496C + thumb_func_start MOD83_0223496C MOD83_0223496C: ; 0x0223496C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223496C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223496C - thumb_func_start MOD83_02234970 + thumb_func_start MOD83_02234970 MOD83_02234970: ; 0x02234970 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r6, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - bl MOD83_022345BC - lsl r0, r0, #0x10 - lsl r3, r5, #0x10 - lsr r0, r0, #0x10 - str r4, [sp] - str r0, [sp, #4] - mov r0, #2 - str r0, [sp, #8] - ldr r0, _022349AC ; =MOD83_02233528 - mov r1, #0 - add r2, r6, #0 - lsr r3, r3, #0x10 - bl WM_SetMPDataToPortEx - cmp r0, #2 - beq _022349A6 - bl MOD83_02234958 - add sp, #0xc - mov r0, #0 - pop {r3, r4, r5, r6, pc} + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r6, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + bl MOD83_022345BC + lsl r0, r0, #0x10 + lsl r3, r5, #0x10 + lsr r0, r0, #0x10 + str r4, [sp] + str r0, [sp, #4] + mov r0, #2 + str r0, [sp, #8] + ldr r0, _022349AC ; =MOD83_02233528 + mov r1, #0 + add r2, r6, #0 + lsr r3, r3, #0x10 + bl WM_SetMPDataToPortEx + cmp r0, #2 + beq _022349A6 + bl MOD83_02234958 + add sp, #0xc + mov r0, #0 + pop {r3, r4, r5, r6, pc} _022349A6: - mov r0, #1 - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 _022349AC: .word MOD83_02233528 - thumb_func_end MOD83_02234970 + thumb_func_end MOD83_02234970 - thumb_func_start MOD83_022349B0 + thumb_func_start MOD83_022349B0 MOD83_022349B0: ; 0x022349B0 - push {r3, lr} - ldr r0, _022349C8 ; =MOD83_02233540 - bl WM_Enable - cmp r0, #2 - beq _022349C4 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022349C8 ; =MOD83_02233540 + bl WM_Enable + cmp r0, #2 + beq _022349C4 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _022349C4: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022349C8: .word MOD83_02233540 - thumb_func_end MOD83_022349B0 + thumb_func_end MOD83_022349B0 - thumb_func_start MOD83_022349CC + thumb_func_start MOD83_022349CC MOD83_022349CC: ; 0x022349CC - push {r3, lr} - ldr r0, _022349E8 ; =MOD83_02233580 - bl WM_Disable - cmp r0, #2 - beq _022349E4 - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022349E8 ; =MOD83_02233580 + bl WM_Disable + cmp r0, #2 + beq _022349E4 + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _022349E4: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022349E8: .word MOD83_02233580 - thumb_func_end MOD83_022349CC + thumb_func_end MOD83_022349CC - thumb_func_start MOD83_022349EC + thumb_func_start MOD83_022349EC MOD83_022349EC: ; 0x022349EC - push {r3, lr} - add r3, r0, #0 - mov r0, #0x1e - str r0, [sp] - lsl r3, r3, #0x10 - ldr r0, _02234A14 ; =MOD83_022335B8 - mov r1, #3 - mov r2, #0x11 - lsr r3, r3, #0x10 - bl WM_MeasureChannel - cmp r0, #2 - beq _02234A0E - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + add r3, r0, #0 + mov r0, #0x1e + str r0, [sp] + lsl r3, r3, #0x10 + ldr r0, _02234A14 ; =MOD83_022335B8 + mov r1, #3 + mov r2, #0x11 + lsr r3, r3, #0x10 + bl WM_MeasureChannel + cmp r0, #2 + beq _02234A0E + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A0E: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02234A14: .word MOD83_022335B8 - thumb_func_end MOD83_022349EC + thumb_func_end MOD83_022349EC - thumb_func_start MOD83_02234A18 + thumb_func_start MOD83_02234A18 MOD83_02234A18: ; 0x02234A18 - push {r3, r4, r5, lr} - bl MOD83_02234564 - add r5, r0, #0 - bl MOD83_022346EC - add r4, r0, #0 - bl MOD83_0223466C - add r0, #0x64 - ldrb r0, [r0] - strh r0, [r5, #0x32] - str r4, [r5] - bl MOD83_022346E8 - strh r0, [r5, #4] - ldr r0, _02234A50 ; =MOD83_02233620 - add r1, r5, #0 - bl WM_SetParentParameter - cmp r0, #2 - beq _02234A4C - bl MOD83_02234958 - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + bl MOD83_02234564 + add r5, r0, #0 + bl MOD83_022346EC + add r4, r0, #0 + bl MOD83_0223466C + add r0, #0x64 + ldrb r0, [r0] + strh r0, [r5, #0x32] + str r4, [r5] + bl MOD83_022346E8 + strh r0, [r5, #4] + ldr r0, _02234A50 ; =MOD83_02233620 + add r1, r5, #0 + bl WM_SetParentParameter + cmp r0, #2 + beq _02234A4C + bl MOD83_02234958 + mov r0, #0 + pop {r3, r4, r5, pc} _02234A4C: - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 _02234A50: .word MOD83_02233620 - thumb_func_end MOD83_02234A18 + thumb_func_end MOD83_02234A18 - thumb_func_start MOD83_02234A54 + thumb_func_start MOD83_02234A54 MOD83_02234A54: ; 0x02234A54 - push {r3, lr} - ldr r0, _02234A6C ; =MOD83_02233648 - bl WM_StartParent - cmp r0, #2 - beq _02234A68 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234A6C ; =MOD83_02233648 + bl WM_StartParent + cmp r0, #2 + beq _02234A68 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A68: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234A6C: .word MOD83_02233648 - thumb_func_end MOD83_02234A54 + thumb_func_end MOD83_02234A54 - thumb_func_start MOD83_02234A70 + thumb_func_start MOD83_02234A70 MOD83_02234A70: ; 0x02234A70 - push {r3, lr} - bl MOD83_022345D4 - add r1, r0, #0 - ldr r0, _02234A90 ; =MOD83_02233914 - bl WM_StartScan - cmp r0, #2 - beq _02234A8A - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_022345D4 + add r1, r0, #0 + ldr r0, _02234A90 ; =MOD83_02233914 + bl WM_StartScan + cmp r0, #2 + beq _02234A8A + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234A8A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02234A90: .word MOD83_02233914 - thumb_func_end MOD83_02234A70 + thumb_func_end MOD83_02234A70 - thumb_func_start MOD83_02234A94 + thumb_func_start MOD83_02234A94 MOD83_02234A94: ; 0x02234A94 - push {r3, r4, r5, lr} - bl MOD83_022345D4 - add r4, r0, #0 - bl MOD83_02234664 - ldr r2, _02234B24 ; =0x000001C3 - mov r3, #0x38 - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - add r1, #0x34 - ldrb r1, [r1] - strb r1, [r4, #8] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - add r1, #0x35 - ldrb r1, [r1] - strb r1, [r4, #9] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - ldrb r1, [r0, r5] - strb r1, [r4, #0xa] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - ldrb r1, [r1, #1] - strb r1, [r4, #0xb] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r5, r1, #0 - mul r5, r3 - add r1, r0, r5 - ldrb r1, [r1, #2] - strb r1, [r4, #0xc] - ldrb r1, [r0, r2] - lsl r1, r1, #0x1c - lsr r1, r1, #0x1c - add r2, r1, #0 - mul r2, r3 - add r0, r0, r2 - ldrb r0, [r0, #3] - strb r0, [r4, #0xd] - bl MOD83_022345D4 - add r1, r0, #0 - ldr r0, _02234B28 ; =MOD83_02233A30 - bl WM_StartScan - cmp r0, #2 - beq _02234B1E - bl MOD83_02234958 - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + bl MOD83_022345D4 + add r4, r0, #0 + bl MOD83_02234664 + ldr r2, _02234B24 ; =0x000001C3 + mov r3, #0x38 + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + add r1, #0x34 + ldrb r1, [r1] + strb r1, [r4, #8] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + add r1, #0x35 + ldrb r1, [r1] + strb r1, [r4, #9] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + ldrb r1, [r0, r5] + strb r1, [r4, #0xa] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + ldrb r1, [r1, #1] + strb r1, [r4, #0xb] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r5, r1, #0 + mul r5, r3 + add r1, r0, r5 + ldrb r1, [r1, #2] + strb r1, [r4, #0xc] + ldrb r1, [r0, r2] + lsl r1, r1, #0x1c + lsr r1, r1, #0x1c + add r2, r1, #0 + mul r2, r3 + add r0, r0, r2 + ldrb r0, [r0, #3] + strb r0, [r4, #0xd] + bl MOD83_022345D4 + add r1, r0, #0 + ldr r0, _02234B28 ; =MOD83_02233A30 + bl WM_StartScan + cmp r0, #2 + beq _02234B1E + bl MOD83_02234958 + mov r0, #0 + pop {r3, r4, r5, pc} _02234B1E: - mov r0, #1 - pop {r3, r4, r5, pc} - nop + mov r0, #1 + pop {r3, r4, r5, pc} + nop _02234B24: .word 0x000001C3 _02234B28: .word MOD83_02233A30 - thumb_func_end MOD83_02234A94 + thumb_func_end MOD83_02234A94 - thumb_func_start MOD83_02234B2C + thumb_func_start MOD83_02234B2C MOD83_02234B2C: ; 0x02234B2C - push {r3, lr} - ldr r0, _02234B44 ; =MOD83_02233AA0 - bl WM_EndScan - cmp r0, #2 - beq _02234B40 - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234B44 ; =MOD83_02233AA0 + bl WM_EndScan + cmp r0, #2 + beq _02234B40 + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234B40: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234B44: .word MOD83_02233AA0 - thumb_func_end MOD83_02234B2C + thumb_func_end MOD83_02234B2C - thumb_func_start MOD83_02234B48 + thumb_func_start MOD83_02234B48 MOD83_02234B48: ; 0x02234B48 - push {r3, r4, lr} - sub sp, #4 - bl MOD83_022346F8 - add r4, r0, #0 - bl MOD83_02234610 - add r1, r0, #0 - mov r0, #0 - str r0, [sp] - ldr r0, _02234B7C ; =MOD83_02233AF4 - add r2, r4, #0 - mov r3, #1 - bl WM_StartConnectEx - cmp r0, #2 - beq _02234B74 - bl MOD83_02234958 - add sp, #4 - mov r0, #0 - pop {r3, r4, pc} + push {r3, r4, lr} + sub sp, #4 + bl MOD83_022346F8 + add r4, r0, #0 + bl MOD83_02234610 + add r1, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, _02234B7C ; =MOD83_02233AF4 + add r2, r4, #0 + mov r3, #1 + bl WM_StartConnectEx + cmp r0, #2 + beq _02234B74 + bl MOD83_02234958 + add sp, #4 + mov r0, #0 + pop {r3, r4, pc} _02234B74: - mov r0, #1 - add sp, #4 - pop {r3, r4, pc} - nop + mov r0, #1 + add sp, #4 + pop {r3, r4, pc} + nop _02234B7C: .word MOD83_02233AF4 - thumb_func_end MOD83_02234B48 + thumb_func_end MOD83_02234B48 - thumb_func_start MOD83_02234B80 + thumb_func_start MOD83_02234B80 MOD83_02234B80: ; 0x02234B80 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - ldr r1, _02234BF0 ; =MOD83_02233DF0 - mov r0, #4 - mov r2, #0 - bl WM_SetPortCallback - cmp r0, #0 - beq _02234B9C - bl MOD83_02234958 - add sp, #8 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + ldr r1, _02234BF0 ; =MOD83_02233DF0 + mov r0, #4 + mov r2, #0 + bl WM_SetPortCallback + cmp r0, #0 + beq _02234B9C + bl MOD83_02234958 + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02234B9C: - bl MOD83_02234564 - ldrh r0, [r0, #0x16] - cmp r0, #0 - bne _02234BAA - mov r5, #1 - b _02234BAC + bl MOD83_02234564 + ldrh r0, [r0, #0x16] + cmp r0, #0 + bne _02234BAA + mov r5, #1 + b _02234BAC _02234BAA: - mov r5, #0 + mov r5, #0 _02234BAC: - bl MOD83_02234604 - add r6, r0, #0 - bl MOD83_022345EC - add r4, r0, #0 - bl MOD83_022345F8 - add r7, r0, #0 - bl MOD83_022345E0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp] - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #4] - lsl r2, r4, #0x10 - ldr r0, _02234BF4 ; =MOD83_02233BD8 - add r1, r6, #0 - lsr r2, r2, #0x10 - add r3, r7, #0 - bl WM_StartMP - cmp r0, #2 - beq _02234BEA - bl MOD83_02234958 - add sp, #8 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + bl MOD83_02234604 + add r6, r0, #0 + bl MOD83_022345EC + add r4, r0, #0 + bl MOD83_022345F8 + add r7, r0, #0 + bl MOD83_022345E0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + lsl r0, r5, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #4] + lsl r2, r4, #0x10 + ldr r0, _02234BF4 ; =MOD83_02233BD8 + add r1, r6, #0 + lsr r2, r2, #0x10 + add r3, r7, #0 + bl WM_StartMP + cmp r0, #2 + beq _02234BEA + bl MOD83_02234958 + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02234BEA: - mov r0, #1 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #1 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02234BF0: .word MOD83_02233DF0 _02234BF4: .word MOD83_02233BD8 - thumb_func_end MOD83_02234B80 + thumb_func_end MOD83_02234B80 - thumb_func_start MOD83_02234BF8 + thumb_func_start MOD83_02234BF8 MOD83_02234BF8: ; 0x02234BF8 - push {r3, lr} - ldr r0, _02234C10 ; =MOD83_02233E74 - bl WM_PowerOn - cmp r0, #2 - beq _02234C0C - bl MOD83_02234958 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C10 ; =MOD83_02233E74 + bl WM_PowerOn + cmp r0, #2 + beq _02234C0C + bl MOD83_02234958 + mov r0, #0 + pop {r3, pc} _02234C0C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C10: .word MOD83_02233E74 - thumb_func_end MOD83_02234BF8 + thumb_func_end MOD83_02234BF8 - thumb_func_start MOD83_02234C14 + thumb_func_start MOD83_02234C14 MOD83_02234C14: ; 0x02234C14 - push {r3, lr} - ldr r0, _02234C30 ; =MOD83_02233E98 - bl WM_PowerOff - cmp r0, #2 - beq _02234C2C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C30 ; =MOD83_02233E98 + bl WM_PowerOff + cmp r0, #2 + beq _02234C2C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C2C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C30: .word MOD83_02233E98 - thumb_func_end MOD83_02234C14 + thumb_func_end MOD83_02234C14 - thumb_func_start MOD83_02234C34 + thumb_func_start MOD83_02234C34 MOD83_02234C34: ; 0x02234C34 - push {r3, lr} - ldr r0, _02234C50 ; =MOD83_02233EBC - bl WM_Reset - cmp r0, #2 - beq _02234C4C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C50 ; =MOD83_02233EBC + bl WM_Reset + cmp r0, #2 + beq _02234C4C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C4C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C50: .word MOD83_02233EBC - thumb_func_end MOD83_02234C34 + thumb_func_end MOD83_02234C34 - thumb_func_start MOD83_02234C54 + thumb_func_start MOD83_02234C54 MOD83_02234C54: ; 0x02234C54 - push {r3, lr} - ldr r0, _02234C70 ; =MOD83_02233F00 - bl WM_End - cmp r0, #2 - beq _02234C6C - bl MOD83_02234958 - bl OS_Terminate - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _02234C70 ; =MOD83_02233F00 + bl WM_End + cmp r0, #2 + beq _02234C6C + bl MOD83_02234958 + bl OS_Terminate + mov r0, #0 + pop {r3, pc} _02234C6C: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02234C70: .word MOD83_02233F00 - thumb_func_end MOD83_02234C54 + thumb_func_end MOD83_02234C54 - thumb_func_start MOD83_RS_SpeciesIsInvalid + thumb_func_start MOD83_RS_SpeciesIsInvalid MOD83_RS_SpeciesIsInvalid: ; 0x02234C74 - cmp r0, #0 ; RS_SPECIES_NONE - bgt _02234C7C - mov r0, #1 - bx lr + cmp r0, #0 ; RS_SPECIES_NONE + bgt _02234C7C + mov r0, #1 + bx lr _02234C7C: - cmp r0, #0xfb ; RS_SPECIES_CELEBI - bgt _02234C84 - mov r0, #0 - bx lr + cmp r0, #0xfb ; RS_SPECIES_CELEBI + bgt _02234C84 + mov r0, #0 + bx lr _02234C84: - ldr r1, _02234C9C ; =0x00000115 RS_SPECIES_TREECKO - cmp r0, r1 - bge _02234C8E - mov r0, #1 - bx lr + ldr r1, _02234C9C ; =0x00000115 RS_SPECIES_TREECKO + cmp r0, r1 + bge _02234C8E + mov r0, #1 + bx lr _02234C8E: - add r1, #0x86 ; RS_SPECIES_CHIMECHO - cmp r0, r1 - ble _02234C98 - mov r0, #1 - bx lr + add r1, #0x86 ; RS_SPECIES_CHIMECHO + cmp r0, r1 + ble _02234C98 + mov r0, #1 + bx lr _02234C98: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02234C9C: .word 0x00000115 - thumb_func_end MOD83_RS_SpeciesIsInvalid + thumb_func_end MOD83_RS_SpeciesIsInvalid - thumb_func_start MOD83_02234CA0 + thumb_func_start MOD83_02234CA0 MOD83_02234CA0: ; 0x02234CA0 - push {r4, lr} - add r4, r0, #0 - bl MOD83_02236E9C - cmp r0, #4 - bhi _02234CE0 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, lr} + add r4, r0, #0 + bl MOD83_02236E9C + cmp r0, #4 + bhi _02234CE0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02234CB8: ; jump table - .short _02234CC2 - _02234CB8 - 2 ; case 0 - .short _02234CC8 - _02234CB8 - 2 ; case 1 - .short _02234CCE - _02234CB8 - 2 ; case 2 - .short _02234CD4 - _02234CB8 - 2 ; case 3 - .short _02234CDA - _02234CB8 - 2 ; case 4 + .short _02234CC2 - _02234CB8 - 2 ; case 0 + .short _02234CC8 - _02234CB8 - 2 ; case 1 + .short _02234CCE - _02234CB8 - 2 ; case 2 + .short _02234CD4 - _02234CB8 - 2 ; case 3 + .short _02234CDA - _02234CB8 - 2 ; case 4 _02234CC2: - mov r0, #2 - str r0, [r4] - pop {r4, pc} + mov r0, #2 + str r0, [r4] + pop {r4, pc} _02234CC8: - mov r0, #1 - str r0, [r4] - pop {r4, pc} + mov r0, #1 + str r0, [r4] + pop {r4, pc} _02234CCE: - mov r0, #5 - str r0, [r4] - pop {r4, pc} + mov r0, #5 + str r0, [r4] + pop {r4, pc} _02234CD4: - mov r0, #4 - str r0, [r4] - pop {r4, pc} + mov r0, #4 + str r0, [r4] + pop {r4, pc} _02234CDA: - mov r0, #3 - str r0, [r4] - pop {r4, pc} + mov r0, #3 + str r0, [r4] + pop {r4, pc} _02234CE0: - mov r0, #0 - mvn r0, r0 - str r0, [r4] - pop {r4, pc} - thumb_func_end MOD83_02234CA0 + mov r0, #0 + mvn r0, r0 + str r0, [r4] + pop {r4, pc} + thumb_func_end MOD83_02234CA0 - thumb_func_start MOD83_02234CE8 + thumb_func_start MOD83_02234CE8 MOD83_02234CE8: ; 0x02234CE8 - push {r3, r4, r5, lr} - sub sp, #0x10 - ldr r1, _02234E3C ; =0x0000E890 - add r5, r0, #0 - add r4, r5, r1 - ldr r1, [r4] - cmp r1, #9 - bls _02234CFA - b _02234E34 + push {r3, r4, r5, lr} + sub sp, #0x10 + ldr r1, _02234E3C ; =0x0000E890 + add r5, r0, #0 + add r4, r5, r1 + ldr r1, [r4] + cmp r1, #9 + bls _02234CFA + b _02234E34 _02234CFA: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _02234D06: ; jump table - .short _02234D1A - _02234D06 - 2 ; case 0 - .short _02234D3A - _02234D06 - 2 ; case 1 - .short _02234D52 - _02234D06 - 2 ; case 2 - .short _02234D62 - _02234D06 - 2 ; case 3 - .short _02234D72 - _02234D06 - 2 ; case 4 - .short _02234D8E - _02234D06 - 2 ; case 5 - .short _02234DA2 - _02234D06 - 2 ; case 6 - .short _02234DBE - _02234D06 - 2 ; case 7 - .short _02234DEA - _02234D06 - 2 ; case 8 - .short _02234E10 - _02234D06 - 2 ; case 9 + .short _02234D1A - _02234D06 - 2 ; case 0 + .short _02234D3A - _02234D06 - 2 ; case 1 + .short _02234D52 - _02234D06 - 2 ; case 2 + .short _02234D62 - _02234D06 - 2 ; case 3 + .short _02234D72 - _02234D06 - 2 ; case 4 + .short _02234D8E - _02234D06 - 2 ; case 5 + .short _02234DA2 - _02234D06 - 2 ; case 6 + .short _02234DBE - _02234D06 - 2 ; case 7 + .short _02234DEA - _02234D06 - 2 ; case 8 + .short _02234E10 - _02234D06 - 2 ; case 9 _02234D1A: - bl MOD83_02234E6C - ldr r0, [r5, #0x10] - bl FUN_02022528 - add r5, r0, #0 - bl MOD83_02237448 - add r1, r0, #0 - add r0, r5, #0 - bl FUN_0202BF90 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl MOD83_02234E6C + ldr r0, [r5, #0x10] + bl FUN_02022528 + add r5, r0, #0 + bl MOD83_02237448 + add r1, r0, #0 + add r0, r5, #0 + bl FUN_0202BF90 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D3A: - bl OS_GetTick - mov r2, #0x78 - mov r3, #0 - bl _ull_mod - add r0, r0, #1 - str r0, [r4, #4] - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl OS_GetTick + mov r2, #0x78 + mov r3, #0 + bl _ull_mod + add r0, r0, #1 + str r0, [r4, #4] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D52: - ldr r0, [r4, #4] - sub r0, r0, #1 - str r0, [r4, #4] - bne _02234E34 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] + bne _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D62: - ldr r0, [r5, #0x10] - mov r1, #2 - bl FUN_02022840 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r5, #0x10] + mov r1, #2 + bl FUN_02022840 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D72: - ldr r0, [r5, #0x10] - bl FUN_02022854 - cmp r0, #3 - bne _02234D82 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + ldr r0, [r5, #0x10] + bl FUN_02022854 + cmp r0, #3 + bne _02234D82 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234D82: - cmp r0, #1 - bne _02234E34 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + cmp r0, #1 + bne _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234D8E: - mov r0, #0 - add r1, r0, #0 - add r2, sp, #0 - mov r3, #0x10 - bl CTRDG_ReadAgbFlash - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + mov r0, #0 + add r1, r0, #0 + add r2, sp, #0 + mov r3, #0x10 + bl CTRDG_ReadAgbFlash + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DA2: - bl MOD83_0223736C - cmp r0, #0 - bne _02234DB6 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_0223736C + cmp r0, #0 + bne _02234DB6 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DB6: - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DBE: - bl MOD83_022373F4 - cmp r0, #9 - beq _02234E34 - bl MOD83_022373F4 - cmp r0, #0xb - bne _02234DD6 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + bl MOD83_022373F4 + cmp r0, #9 + beq _02234E34 + bl MOD83_022373F4 + cmp r0, #0xb + bne _02234DD6 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234DD6: - bl MOD83_022373B4 - cmp r0, #8 - bne _02234E34 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_022373B4 + cmp r0, #8 + bne _02234E34 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DEA: - ldr r0, [r5, #0x10] - bl FUN_02022854 - cmp r0, #3 - bne _02234DFA - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + ldr r0, [r5, #0x10] + bl FUN_02022854 + cmp r0, #3 + bne _02234DFA + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234DFA: - cmp r0, #2 - bne _02234DEA - bl MOD83_022373B4 - mov r0, #1 - bl FUN_02016444 - ldr r0, [r4] - add r0, r0, #1 - str r0, [r4] - b _02234E34 + cmp r0, #2 + bne _02234DEA + bl MOD83_022373B4 + mov r0, #1 + bl FUN_02016444 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02234E34 _02234E10: - bl MOD83_022373B4 - cmp r0, #8 - bne _02234E24 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xc - pop {r3, r4, r5, pc} + bl MOD83_022373B4 + cmp r0, #8 + bne _02234E24 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xc + pop {r3, r4, r5, pc} _02234E24: - cmp r0, #0 - bne _02234E34 - mov r0, #1 - bl FUN_02016454 - add sp, #0x10 - mov r0, #0xb - pop {r3, r4, r5, pc} + cmp r0, #0 + bne _02234E34 + mov r0, #1 + bl FUN_02016454 + add sp, #0x10 + mov r0, #0xb + pop {r3, r4, r5, pc} _02234E34: - mov r0, #0xa - add sp, #0x10 - pop {r3, r4, r5, pc} - nop + mov r0, #0xa + add sp, #0x10 + pop {r3, r4, r5, pc} + nop _02234E3C: .word 0x0000E890 - thumb_func_end MOD83_02234CE8 + thumb_func_end MOD83_02234CE8 - thumb_func_start MOD83_02234E40 + thumb_func_start MOD83_02234E40 MOD83_02234E40: ; 0x02234E40 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #0x10] - bl FUN_02022528 - add r4, r0, #0 - bl MOD83_02237448 - add r1, r0, #0 - add r0, r4, #0 - bl FUN_0202BF90 - mov r0, #4 - bl SetSoftResetDisableMask - ldr r0, [r5, #0x10] - bl FUN_02022720 - mov r0, #4 - bl ClearSoftResetDisableMask - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02234E40 - - thumb_func_start MOD83_02234E6C + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, [r5, #0x10] + bl FUN_02022528 + add r4, r0, #0 + bl MOD83_02237448 + add r1, r0, #0 + add r0, r4, #0 + bl FUN_0202BF90 + mov r0, #4 + bl SetSoftResetDisableMask + ldr r0, [r5, #0x10] + bl FUN_02022720 + mov r0, #4 + bl ClearSoftResetDisableMask + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02234E40 + + thumb_func_start MOD83_02234E6C MOD83_02234E6C: ; 0x02234E6C - push {r4, r5, r6, r7, lr} - sub sp, #0xf4 - add r7, r0, #0 - ldr r0, [r7, #0x10] - bl FUN_02022528 - str r0, [sp] - add r0, sp, #8 - bl FUN_020690E4 - add r6, r0, #0 - mov r4, #0 - add r5, r7, #0 + push {r4, r5, r6, r7, lr} + sub sp, #0xf4 + add r7, r0, #0 + ldr r0, [r7, #0x10] + bl FUN_02022528 + str r0, [sp] + add r0, sp, #8 + bl FUN_020690E4 + add r6, r0, #0 + mov r4, #0 + add r5, r7, #0 _02234E86: - ldr r0, _02234F04 ; =0x0000E880 - mov r1, #0x3d - lsl r1, r1, #4 - ldr r0, [r7, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - add r0, r0, #4 - mul r1, r2 - add r0, r0, r1 - mov r1, #0xf3 - lsl r1, r1, #2 - ldr r2, [r5, r1] - mov r1, #0x50 - mul r1, r2 - add r0, r0, r1 - add r1, r6, #0 - bl MigrateBoxMon - ldr r0, [sp] - add r1, r6, #0 - add r2, r4, #0 - bl FUN_0202BF7C - add r4, r4, #1 - add r5, #0xc - cmp r4, #6 - blt _02234E86 - mov r5, #0 - add r0, sp, #4 - strh r5, [r0] - add r4, r7, #0 - sub r6, r5, #1 + ldr r0, _02234F04 ; =0x0000E880 + mov r1, #0x3d + lsl r1, r1, #4 + ldr r0, [r7, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + add r0, r0, #4 + mul r1, r2 + add r0, r0, r1 + mov r1, #0xf3 + lsl r1, r1, #2 + ldr r2, [r5, r1] + mov r1, #0x50 + mul r1, r2 + add r0, r0, r1 + add r1, r6, #0 + bl MigrateBoxMon + ldr r0, [sp] + add r1, r6, #0 + add r2, r4, #0 + bl FUN_0202BF7C + add r4, r4, #1 + add r5, #0xc + cmp r4, #6 + blt _02234E86 + mov r5, #0 + add r0, sp, #4 + strh r5, [r0] + add r4, r7, #0 + sub r6, r5, #1 _02234EC8: - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r2, [r4, r0] - add r0, r0, #4 - ldr r1, [r4, r0] - cmp r2, r6 - beq _02234EF6 - cmp r1, #0xe - beq _02234EF6 - ldr r0, _02234F04 ; =0x0000E880 - mov r3, #0x96 - ldr r0, [r7, r0] - lsl r3, r3, #4 - mul r3, r1 - add r0, r0, #4 - mov r1, #0x50 - mul r1, r2 - add r0, r0, r3 - add r0, r0, r1 - mov r1, #0xb - add r2, sp, #4 - bl MOD83_02237D90 + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r2, [r4, r0] + add r0, r0, #4 + ldr r1, [r4, r0] + cmp r2, r6 + beq _02234EF6 + cmp r1, #0xe + beq _02234EF6 + ldr r0, _02234F04 ; =0x0000E880 + mov r3, #0x96 + ldr r0, [r7, r0] + lsl r3, r3, #4 + mul r3, r1 + add r0, r0, #4 + mov r1, #0x50 + mul r1, r2 + add r0, r0, r3 + add r0, r0, r1 + mov r1, #0xb + add r2, sp, #4 + bl MOD83_02237D90 _02234EF6: - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _02234EC8 - add sp, #0xf4 - pop {r4, r5, r6, r7, pc} - nop + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _02234EC8 + add sp, #0xf4 + pop {r4, r5, r6, r7, pc} + nop _02234F04: .word 0x0000E880 - thumb_func_end MOD83_02234E6C + thumb_func_end MOD83_02234E6C - thumb_func_start MOD83_02234F08 + thumb_func_start MOD83_02234F08 MOD83_02234F08: ; 0x02234F08 - push {r4, lr} - add r4, r0, #0 - mov r0, #1 - tst r2, r0 - beq _02234F26 - mov r2, #0 - bl FUN_02002E14 - ldr r1, [r4, #0x10] - lsl r1, r1, #3 - sub r1, r1, r0 - lsr r0, r1, #0x1f - add r0, r1, r0 - asr r0, r0, #1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + mov r0, #1 + tst r2, r0 + beq _02234F26 + mov r2, #0 + bl FUN_02002E14 + ldr r1, [r4, #0x10] + lsl r1, r1, #3 + sub r1, r1, r0 + lsr r0, r1, #0x1f + add r0, r1, r0 + asr r0, r0, #1 + pop {r4, pc} _02234F26: - ldr r0, [r4, #0x18] - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02234F08 + ldr r0, [r4, #0x18] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02234F08 - thumb_func_start MOD83_02234F2C + thumb_func_start MOD83_02234F2C MOD83_02234F2C: ; 0x02234F2C - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - add r5, r1, #0 - ldr r6, [r5, #0x44] - add r4, r2, #0 - cmp r6, #0 - bne _02234F3C - mov r6, #0xff + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + add r5, r1, #0 + ldr r6, [r5, #0x44] + add r4, r2, #0 + cmp r6, #0 + bne _02234F3C + mov r6, #0xff _02234F3C: - ldr r1, [r5] - ldr r2, [r1] - cmp r2, #0 - bne _02234F7A - ldr r2, [r5, #0xc] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp] - ldr r2, [r5, #0x10] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #4] - ldr r2, [r5, #0x14] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #8] - mov r2, #0xf - str r2, [sp, #0xc] - ldr r2, [r5, #0x20] - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - str r2, [sp, #0x10] - ldr r2, [r5, #0x24] - ldr r3, [r5, #8] - lsl r2, r2, #0x18 - lsl r3, r3, #0x18 - ldr r0, [r0, #0x20] - lsr r2, r2, #0x18 - lsr r3, r3, #0x18 - bl AddWindowParameterized + ldr r1, [r5] + ldr r2, [r1] + cmp r2, #0 + bne _02234F7A + ldr r2, [r5, #0xc] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp] + ldr r2, [r5, #0x10] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #4] + ldr r2, [r5, #0x14] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #8] + mov r2, #0xf + str r2, [sp, #0xc] + ldr r2, [r5, #0x20] + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + str r2, [sp, #0x10] + ldr r2, [r5, #0x24] + ldr r3, [r5, #8] + lsl r2, r2, #0x18 + lsl r3, r3, #0x18 + ldr r0, [r0, #0x20] + lsr r2, r2, #0x18 + lsr r3, r3, #0x18 + bl AddWindowParameterized _02234F7A: - mov r0, #2 - tst r0, r4 - bne _02234F8C - ldr r1, [r5, #0x30] - ldr r0, [r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FillWindowPixelBuffer + mov r0, #2 + tst r0, r4 + bne _02234F8C + ldr r1, [r5, #0x30] + ldr r0, [r5] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + bl FillWindowPixelBuffer _02234F8C: - mov r0, #0 - ldr r1, [r5, #0x34] - mvn r0, r0 - cmp r1, r0 - beq _02235004 - ldr r2, _022350B4 ; =0x00000193 - mov r0, #1 - mov r1, #0x1a - mov r3, #0x4e - bl NewMsgDataFromNarc - ldr r7, [r5, #0x40] - str r0, [sp, #0x14] - cmp r7, #0 - bne _02234FB2 - mov r0, #0x4e - bl ScrStrBufs_new - add r7, r0, #0 + mov r0, #0 + ldr r1, [r5, #0x34] + mvn r0, r0 + cmp r1, r0 + beq _02235004 + ldr r2, _022350B4 ; =0x00000193 + mov r0, #1 + mov r1, #0x1a + mov r3, #0x4e + bl NewMsgDataFromNarc + ldr r7, [r5, #0x40] + str r0, [sp, #0x14] + cmp r7, #0 + bne _02234FB2 + mov r0, #0x4e + bl ScrStrBufs_new + add r7, r0, #0 _02234FB2: - ldr r1, [sp, #0x14] - ldr r2, [r5, #0x34] - add r0, r7, #0 - mov r3, #0x4e - bl ReadMsgData_ExpandPlaceholders - str r0, [sp, #0x18] - ldr r1, [sp, #0x18] - add r0, r5, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - ldr r2, [sp, #0x18] - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - ldr r0, [sp, #0x18] - bl String_dtor - ldr r0, [r5, #0x40] - cmp r0, #0 - bne _02234FF8 - add r0, r7, #0 - bl ScrStrBufs_delete + ldr r1, [sp, #0x14] + ldr r2, [r5, #0x34] + add r0, r7, #0 + mov r3, #0x4e + bl ReadMsgData_ExpandPlaceholders + str r0, [sp, #0x18] + ldr r1, [sp, #0x18] + add r0, r5, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + ldr r2, [sp, #0x18] + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + ldr r0, [sp, #0x18] + bl String_dtor + ldr r0, [r5, #0x40] + cmp r0, #0 + bne _02234FF8 + add r0, r7, #0 + bl ScrStrBufs_delete _02234FF8: - ldr r0, [sp, #0x14] - bl DestroyMsgData - mov r0, #0 - mvn r0, r0 - str r0, [r5, #0x34] + ldr r0, [sp, #0x14] + bl DestroyMsgData + mov r0, #0 + mvn r0, r0 + str r0, [r5, #0x34] _02235004: - ldr r0, [r5, #0x38] - cmp r0, #0 - beq _0223504C - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - ldr r1, [r5, #0x38] - add r7, r0, #0 - mov r2, #0x40 - bl CopyU16ArrayToStringN - add r0, r5, #0 - add r1, r7, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - add r2, r7, #0 - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - add r0, r7, #0 - bl String_dtor - mov r0, #0 - str r0, [r5, #0x38] + ldr r0, [r5, #0x38] + cmp r0, #0 + beq _0223504C + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + ldr r1, [r5, #0x38] + add r7, r0, #0 + mov r2, #0x40 + bl CopyU16ArrayToStringN + add r0, r5, #0 + add r1, r7, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + add r2, r7, #0 + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + add r0, r7, #0 + bl String_dtor + mov r0, #0 + str r0, [r5, #0x38] _0223504C: - ldr r1, [r5, #0x3c] - cmp r1, #0 - beq _0223507A - add r0, r5, #0 - add r2, r4, #0 - bl MOD83_02234F08 - add r3, r0, #0 - ldr r0, [r5, #0x1c] - str r0, [sp] - str r6, [sp, #4] - ldr r0, [r5, #0x2c] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5] - ldr r1, [r5, #0x28] - ldr r2, [r5, #0x3c] - bl AddTextPrinterParameterized2 - str r0, [r5, #0x48] - mov r0, #0 - str r0, [r5, #0x3c] + ldr r1, [r5, #0x3c] + cmp r1, #0 + beq _0223507A + add r0, r5, #0 + add r2, r4, #0 + bl MOD83_02234F08 + add r3, r0, #0 + ldr r0, [r5, #0x1c] + str r0, [sp] + str r6, [sp, #4] + ldr r0, [r5, #0x2c] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5] + ldr r1, [r5, #0x28] + ldr r2, [r5, #0x3c] + bl AddTextPrinterParameterized2 + str r0, [r5, #0x48] + mov r0, #0 + str r0, [r5, #0x3c] _0223507A: - mov r0, #4 - tst r0, r4 - bne _02235086 - ldr r0, [r5] - bl CopyWindowToVram + mov r0, #4 + tst r0, r4 + bne _02235086 + ldr r0, [r5] + bl CopyWindowToVram _02235086: - mov r0, #8 - tst r0, r4 - beq _022350AE - mov r0, #0x10 - tst r0, r4 - ldr r0, [r5] - beq _022350A2 - ldr r2, _022350B8 ; =0x000003D2 - mov r1, #0 - mov r3, #0xd - bl FUN_0200D0BC - add sp, #0x1c - pop {r4, r5, r6, r7, pc} + mov r0, #8 + tst r0, r4 + beq _022350AE + mov r0, #0x10 + tst r0, r4 + ldr r0, [r5] + beq _022350A2 + ldr r2, _022350B8 ; =0x000003D2 + mov r1, #0 + mov r3, #0xd + bl FUN_0200D0BC + add sp, #0x1c + pop {r4, r5, r6, r7, pc} _022350A2: - mov r2, #0x3f - mov r1, #0 - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CCA4 + mov r2, #0x3f + mov r1, #0 + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CCA4 _022350AE: - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _022350B4: .word 0x00000193 _022350B8: .word 0x000003D2 - thumb_func_end MOD83_02234F2C + thumb_func_end MOD83_02234F2C - thumb_func_start MOD83_022350BC + thumb_func_start MOD83_022350BC MOD83_022350BC: ; 0x022350BC - push {r4, lr} - sub sp, #0x10 - ldr r4, _022350E8 ; =MOD83_0223A50C - add r3, sp, #0 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl FUN_0201D040 - mov r0, #0x14 - mov r1, #0x4e - bl FUN_0201E00C - bl FUN_0201D168 - bl FUN_0201E0BC - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + ldr r4, _022350E8 ; =MOD83_0223A50C + add r3, sp, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl FUN_0201D040 + mov r0, #0x14 + mov r1, #0x4e + bl FUN_0201E00C + bl FUN_0201D168 + bl FUN_0201E0BC + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _022350E8: .word MOD83_0223A50C - thumb_func_end MOD83_022350BC + thumb_func_end MOD83_022350BC - thumb_func_start MOD83_022350EC + thumb_func_start MOD83_022350EC MOD83_022350EC: ; 0x022350EC - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r6, r0, #0 - bl NNS_G2dInitOamManagerModule - mov r0, #0 - str r0, [sp] - mov r1, #0x7e - str r1, [sp, #4] - str r0, [sp, #8] - mov r3, #0x20 - str r3, [sp, #0xc] - mov r2, #0x4e - str r2, [sp, #0x10] - add r2, r0, #0 - bl FUN_02009EAC - add r1, r6, #0 - mov r0, #0x50 - add r1, #0x2c - mov r2, #0x4e - bl FUN_02008C9C - str r0, [r6, #0x28] - add r0, r6, #0 - mov r2, #1 - add r0, #0x2c - mov r1, #0 - lsl r2, r2, #0x14 - bl FUN_02008D24 - mov r7, #0x55 - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + bl NNS_G2dInitOamManagerModule + mov r0, #0 + str r0, [sp] + mov r1, #0x7e + str r1, [sp, #4] + str r0, [sp, #8] + mov r3, #0x20 + str r3, [sp, #0xc] + mov r2, #0x4e + str r2, [sp, #0x10] + add r2, r0, #0 + bl FUN_02009EAC + add r1, r6, #0 + mov r0, #0x50 + add r1, #0x2c + mov r2, #0x4e + bl FUN_02008C9C + str r0, [r6, #0x28] + add r0, r6, #0 + mov r2, #1 + add r0, #0x2c + mov r1, #0 + lsl r2, r2, #0x14 + bl FUN_02008D24 + mov r7, #0x55 + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02235132: - mov r0, #3 - add r1, r4, #0 - mov r2, #0x4e - bl FUN_02008DEC - str r0, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02235132 - mov r0, #0 - str r0, [sp] - mov r3, #1 - str r3, [sp, #4] - mov r0, #0x4e - str r0, [sp, #8] - mov r0, #0x55 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0x74 - mov r2, #0x1a - bl FUN_02008F34 - mov r1, #0x5b - lsl r1, r1, #2 - str r0, [r6, r1] - mov r3, #0 - str r3, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #0xc] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x17 - bl FUN_02008FEC - mov r1, #0x17 - lsl r1, r1, #4 - str r0, [r6, r1] - mov r0, #0 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #8] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x19 - mov r3, #1 - bl FUN_020090AC - mov r1, #0x5d - lsl r1, r1, #2 - str r0, [r6, r1] - mov r0, #0 - str r0, [sp] - mov r0, #3 - str r0, [sp, #4] - mov r0, #0x4e - sub r1, #0x14 - str r0, [sp, #8] - ldr r0, [r6, r1] - mov r1, #0x74 - mov r2, #0x18 - mov r3, #1 - bl FUN_020090AC - mov r1, #0x5e - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #0xc - ldr r0, [r6, r1] - bl FUN_02009A50 - mov r0, #0x17 - lsl r0, r0, #4 - ldr r0, [r6, r0] - bl FUN_02009CF0 - bl FUN_0206B888 - add r1, r0, #0 - mov r0, #0 - mov r2, #1 - str r0, [sp] - mov r0, #0x4e - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x13 - add r3, #0xff - bl GfGfxLoader_GXLoadPal - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - thumb_func_end MOD83_022350EC - - thumb_func_start MOD83_022351F8 + mov r0, #3 + add r1, r4, #0 + mov r2, #0x4e + bl FUN_02008DEC + str r0, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02235132 + mov r0, #0 + str r0, [sp] + mov r3, #1 + str r3, [sp, #4] + mov r0, #0x4e + str r0, [sp, #8] + mov r0, #0x55 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0x74 + mov r2, #0x1a + bl FUN_02008F34 + mov r1, #0x5b + lsl r1, r1, #2 + str r0, [r6, r1] + mov r3, #0 + str r3, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #4 + str r0, [sp, #8] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #0xc] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x17 + bl FUN_02008FEC + mov r1, #0x17 + lsl r1, r1, #4 + str r0, [r6, r1] + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #8] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x19 + mov r3, #1 + bl FUN_020090AC + mov r1, #0x5d + lsl r1, r1, #2 + str r0, [r6, r1] + mov r0, #0 + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + mov r0, #0x4e + sub r1, #0x14 + str r0, [sp, #8] + ldr r0, [r6, r1] + mov r1, #0x74 + mov r2, #0x18 + mov r3, #1 + bl FUN_020090AC + mov r1, #0x5e + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #0xc + ldr r0, [r6, r1] + bl FUN_02009A50 + mov r0, #0x17 + lsl r0, r0, #4 + ldr r0, [r6, r0] + bl FUN_02009CF0 + bl FUN_0206B888 + add r1, r0, #0 + mov r0, #0 + mov r2, #1 + str r0, [sp] + mov r0, #0x4e + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x13 + add r3, #0xff + bl GfGfxLoader_GXLoadPal + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + thumb_func_end MOD83_022350EC + + thumb_func_start MOD83_022351F8 MOD83_022351F8: ; 0x022351F8 - push {lr} - sub sp, #0x2c - mov r1, #0 - str r1, [sp] - sub r2, r1, #1 - str r2, [sp, #4] - str r2, [sp, #8] - str r1, [sp, #0xc] - mov r3, #0x55 - str r1, [sp, #0x10] - lsl r3, r3, #2 - ldr r2, [r0, r3] - str r2, [sp, #0x14] - add r2, r3, #4 - ldr r2, [r0, r2] - str r2, [sp, #0x18] - add r2, r3, #0 - add r2, #8 - ldr r2, [r0, r2] - str r2, [sp, #0x1c] - add r2, r3, #0 - add r2, #0xc - ldr r2, [r0, r2] - add r3, #0x30 - str r2, [sp, #0x20] - str r1, [sp, #0x24] - add r0, r0, r3 - add r2, r1, #0 - add r3, r1, #0 - str r1, [sp, #0x28] - bl FUN_02008AA4 - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add sp, #0x2c - pop {pc} - thumb_func_end MOD83_022351F8 - - thumb_func_start MOD83_02235244 + push {lr} + sub sp, #0x2c + mov r1, #0 + str r1, [sp] + sub r2, r1, #1 + str r2, [sp, #4] + str r2, [sp, #8] + str r1, [sp, #0xc] + mov r3, #0x55 + str r1, [sp, #0x10] + lsl r3, r3, #2 + ldr r2, [r0, r3] + str r2, [sp, #0x14] + add r2, r3, #4 + ldr r2, [r0, r2] + str r2, [sp, #0x18] + add r2, r3, #0 + add r2, #8 + ldr r2, [r0, r2] + str r2, [sp, #0x1c] + add r2, r3, #0 + add r2, #0xc + ldr r2, [r0, r2] + add r3, #0x30 + str r2, [sp, #0x20] + str r1, [sp, #0x24] + add r0, r0, r3 + add r2, r1, #0 + add r3, r1, #0 + str r1, [sp, #0x28] + bl FUN_02008AA4 + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add sp, #0x2c + pop {pc} + thumb_func_end MOD83_022351F8 + + thumb_func_start MOD83_02235244 MOD83_02235244: ; 0x02235244 - ldr r2, [r1, #0x28] - str r2, [r0] - mov r2, #0x61 - lsl r2, r2, #2 - add r1, r1, r2 - str r1, [r0, #4] - mov r2, #0 - mov r1, #1 - str r2, [r0, #0x10] - lsl r1, r1, #0xc - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - strh r2, [r0, #0x20] - mov r1, #0x14 - str r1, [r0, #0x24] - str r3, [r0, #0x28] - mov r1, #0x4e - str r1, [r0, #0x2c] - bx lr - thumb_func_end MOD83_02235244 - - thumb_func_start MOD83_0223526C + ldr r2, [r1, #0x28] + str r2, [r0] + mov r2, #0x61 + lsl r2, r2, #2 + add r1, r1, r2 + str r1, [r0, #4] + mov r2, #0 + mov r1, #1 + str r2, [r0, #0x10] + lsl r1, r1, #0xc + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + strh r2, [r0, #0x20] + mov r1, #0x14 + str r1, [r0, #0x24] + str r3, [r0, #0x28] + mov r1, #0x4e + str r1, [r0, #0x2c] + bx lr + thumb_func_end MOD83_02235244 + + thumb_func_start MOD83_0223526C MOD83_0223526C: ; 0x0223526C - ldr r3, _02235288 ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - ldr r3, _0223528C ; =AGB_GetBoxMonData - mov r1, #0xb - mov r2, #0 - bx r3 - .align 2, 0 + ldr r3, _02235288 ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + ldr r3, _0223528C ; =AGB_GetBoxMonData + mov r1, #0xb + mov r2, #0 + bx r3 + .align 2, 0 _02235288: .word 0x0000E880 _0223528C: .word AGB_GetBoxMonData - thumb_func_end MOD83_0223526C + thumb_func_end MOD83_0223526C - thumb_func_start MOD83_02235290 + thumb_func_start MOD83_02235290 MOD83_02235290: ; 0x02235290 - ldr r3, _022352AC ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - ldr r3, _022352B0 ; =AGB_GetBoxMonData - mov r1, #0x2d - mov r2, #0 - bx r3 - .align 2, 0 + ldr r3, _022352AC ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + ldr r3, _022352B0 ; =AGB_GetBoxMonData + mov r1, #0x2d + mov r2, #0 + bx r3 + .align 2, 0 _022352AC: .word 0x0000E880 _022352B0: .word AGB_GetBoxMonData - thumb_func_end MOD83_02235290 + thumb_func_end MOD83_02235290 - thumb_func_start MOD83_022352B4 + thumb_func_start MOD83_022352B4 MOD83_022352B4: ; 0x022352B4 - ldr r3, _022352D0 ; =0x0000E880 - ldr r0, [r0, r3] - add r3, r0, #4 - mov r0, #0x96 - lsl r0, r0, #4 - mul r0, r1 - add r1, r3, r0 - mov r0, #0x50 - mul r0, r2 - add r0, r1, r0 - mov r1, #0 - ldr r3, _022352D4 ; =AGB_GetBoxMonData - add r2, r1, #0 - bx r3 - .align 2, 0 + ldr r3, _022352D0 ; =0x0000E880 + ldr r0, [r0, r3] + add r3, r0, #4 + mov r0, #0x96 + lsl r0, r0, #4 + mul r0, r1 + add r1, r3, r0 + mov r0, #0x50 + mul r0, r2 + add r0, r1, r0 + mov r1, #0 + ldr r3, _022352D4 ; =AGB_GetBoxMonData + add r2, r1, #0 + bx r3 + .align 2, 0 _022352D0: .word 0x0000E880 _022352D4: .word AGB_GetBoxMonData - thumb_func_end MOD83_022352B4 + thumb_func_end MOD83_022352B4 - thumb_func_start MOD83_022352D8 + thumb_func_start MOD83_022352D8 MOD83_022352D8: ; 0x022352D8 - push {r4, r5} - ldr r5, [sp, #8] - lsr r4, r5, #0x1f - add r4, r5, r4 - asr r4, r4, #1 - sub r5, r2, r4 - strb r5, [r0] - lsr r5, r3, #0x1f - add r5, r3, r5 - asr r5, r5, #1 - sub r3, r1, r5 - strb r3, [r0, #2] - add r2, r2, r4 - strb r2, [r0, #1] - add r1, r1, r5 - strb r1, [r0, #3] - pop {r4, r5} - bx lr - thumb_func_end MOD83_022352D8 - - thumb_func_start MOD83_022352FC + push {r4, r5} + ldr r5, [sp, #8] + lsr r4, r5, #0x1f + add r4, r5, r4 + asr r4, r4, #1 + sub r5, r2, r4 + strb r5, [r0] + lsr r5, r3, #0x1f + add r5, r3, r5 + asr r5, r5, #1 + sub r3, r1, r5 + strb r3, [r0, #2] + add r2, r2, r4 + strb r2, [r0, #1] + add r1, r1, r5 + strb r1, [r0, #3] + pop {r4, r5} + bx lr + thumb_func_end MOD83_022352D8 + + thumb_func_start MOD83_022352FC MOD83_022352FC: ; 0x022352FC - push {r3, r4, r5, r6, r7, lr} - add r6, r1, #0 - mov r1, #1 - add r5, r0, #0 - add r0, r3, #0 - lsl r1, r1, #0xc - add r7, r2, #0 - bl AllocFromHeapAtEnd - add r4, r0, #0 - beq _02235330 - add r1, r5, #0 - add r2, r6, #0 - bl ReadWholeNarcMemberByIdPair - add r0, r4, #0 - add r1, r7, #0 - bl NNS_G2dGetUnpackedBGCharacterData - cmp r0, #0 - bne _02235330 - add r0, r4, #0 - bl FreeToHeap - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + mov r1, #1 + add r5, r0, #0 + add r0, r3, #0 + lsl r1, r1, #0xc + add r7, r2, #0 + bl AllocFromHeapAtEnd + add r4, r0, #0 + beq _02235330 + add r1, r5, #0 + add r2, r6, #0 + bl ReadWholeNarcMemberByIdPair + add r0, r4, #0 + add r1, r7, #0 + bl NNS_G2dGetUnpackedBGCharacterData + cmp r0, #0 + bne _02235330 + add r0, r4, #0 + bl FreeToHeap + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02235330: - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022352FC + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022352FC - thumb_func_start MOD83_02235334 + thumb_func_start MOD83_02235334 MOD83_02235334: ; 0x02235334 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - add r0, r3, #0 - add r1, r6, #0 - bl NARC_ReadWholeMember - add r0, r4, #0 - add r1, r5, #0 - bl NNS_G2dGetUnpackedBGCharacterData - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235334 - - thumb_func_start MOD83_02235350 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + add r0, r3, #0 + add r1, r6, #0 + bl NARC_ReadWholeMember + add r0, r4, #0 + add r1, r5, #0 + bl NNS_G2dGetUnpackedBGCharacterData + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235334 + + thumb_func_start MOD83_02235350 MOD83_02235350: ; 0x02235350 - push {r4, lr} - add r3, r1, #0 - mov r4, #0 - cmp r0, #0xc9 - beq _02235362 - ldr r1, _022353BC ; =0x00000182 - cmp r0, r1 - beq _0223538C - b _022353B6 + push {r4, lr} + add r3, r1, #0 + mov r4, #0 + cmp r0, #0xc9 + beq _02235362 + ldr r1, _022353BC ; =0x00000182 + cmp r0, r1 + beq _0223538C + b _022353B6 _02235362: - mov r4, #3 - lsl r0, r4, #8 - add r2, r3, #0 - and r0, r3 - lsr r1, r0, #6 - lsl r0, r4, #0x18 - and r2, r4 - and r0, r3 - lsl r4, r4, #0x10 - and r3, r4 - lsr r0, r0, #0x12 - lsr r3, r3, #0xc - orr r0, r3 - orr r0, r1 - orr r0, r2 - mov r1, #0x1c - bl _u32_div_f - lsl r0, r1, #0x18 - lsr r4, r0, #0x18 - b _022353B6 + mov r4, #3 + lsl r0, r4, #8 + add r2, r3, #0 + and r0, r3 + lsr r1, r0, #6 + lsl r0, r4, #0x18 + and r2, r4 + and r0, r3 + lsl r4, r4, #0x10 + and r3, r4 + lsr r0, r0, #0x12 + lsr r3, r3, #0xc + orr r0, r3 + orr r0, r1 + orr r0, r2 + mov r1, #0x1c + bl _u32_div_f + lsl r0, r1, #0x18 + lsr r4, r0, #0x18 + b _022353B6 _0223538C: - cmp r2, #5 - bhi _022353A8 - add r0, r2, r2 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r2, #5 + bhi _022353A8 + add r0, r2, r2 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223539C: ; jump table - .short _022353A8 - _0223539C - 2 ; case 0 - .short _022353A8 - _0223539C - 2 ; case 1 - .short _022353A8 - _0223539C - 2 ; case 2 - .short _022353B4 - _0223539C - 2 ; case 3 - .short _022353AC - _0223539C - 2 ; case 4 - .short _022353B0 - _0223539C - 2 ; case 5 + .short _022353A8 - _0223539C - 2 ; case 0 + .short _022353A8 - _0223539C - 2 ; case 1 + .short _022353A8 - _0223539C - 2 ; case 2 + .short _022353B4 - _0223539C - 2 ; case 3 + .short _022353AC - _0223539C - 2 ; case 4 + .short _022353B0 - _0223539C - 2 ; case 5 _022353A8: - mov r4, #0 - b _022353B6 + mov r4, #0 + b _022353B6 _022353AC: - mov r4, #1 - b _022353B6 + mov r4, #1 + b _022353B6 _022353B0: - mov r4, #2 - b _022353B6 + mov r4, #2 + b _022353B6 _022353B4: - mov r4, #3 + mov r4, #3 _022353B6: - add r0, r4, #0 - pop {r4, pc} - nop + add r0, r4, #0 + pop {r4, pc} + nop _022353BC: .word 0x00000182 - thumb_func_end MOD83_02235350 + thumb_func_end MOD83_02235350 - thumb_func_start MOD83_022353C0 + thumb_func_start MOD83_022353C0 MOD83_022353C0: ; 0x022353C0 - push {r3, r4, r5, r6, r7, lr} - add r6, r2, #0 - add r7, r3, #0 - add r5, r1, #0 - bl MOD83_TranslateAgbSpecies - add r1, r6, #0 - add r2, r7, #0 - add r4, r0, #0 - bl MOD83_02235350 - add r7, r0, #0 - add r0, r4, #0 - add r1, r5, #0 - add r2, r7, #0 - bl FUN_0206B6D4 - add r1, r0, #0 - mov r0, #0x13 - add r2, sp, #0 - mov r3, #0x4e - bl MOD83_022352FC - add r6, r0, #0 - ldr r0, [sp] - mov r1, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #8 - bl DC_FlushRange - ldr r1, [sp, #0x18] - ldr r0, [sp] - lsl r1, r1, #4 - add r1, #0x64 - mov r2, #2 - ldr r0, [r0, #0x14] - lsl r1, r1, #5 - lsl r2, r2, #8 - bl GX_LoadOBJ - add r0, r4, #0 - add r1, r7, #0 - add r2, r5, #0 - bl FUN_0206B7BC - add r1, r0, #0 - ldr r0, [sp, #0x1c] - add r1, #8 - bl FUN_02020248 - add r0, r6, #0 - bl FreeToHeap - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022353C0 - - thumb_func_start MOD83_0223542C + push {r3, r4, r5, r6, r7, lr} + add r6, r2, #0 + add r7, r3, #0 + add r5, r1, #0 + bl MOD83_TranslateAgbSpecies + add r1, r6, #0 + add r2, r7, #0 + add r4, r0, #0 + bl MOD83_02235350 + add r7, r0, #0 + add r0, r4, #0 + add r1, r5, #0 + add r2, r7, #0 + bl FUN_0206B6D4 + add r1, r0, #0 + mov r0, #0x13 + add r2, sp, #0 + mov r3, #0x4e + bl MOD83_022352FC + add r6, r0, #0 + ldr r0, [sp] + mov r1, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #8 + bl DC_FlushRange + ldr r1, [sp, #0x18] + ldr r0, [sp] + lsl r1, r1, #4 + add r1, #0x64 + mov r2, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #5 + lsl r2, r2, #8 + bl GX_LoadOBJ + add r0, r4, #0 + add r1, r7, #0 + add r2, r5, #0 + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, [sp, #0x1c] + add r1, #8 + bl FUN_02020248 + add r0, r6, #0 + bl FreeToHeap + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022353C0 + + thumb_func_start MOD83_0223542C MOD83_0223542C: ; 0x0223542C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r7, r1, #0 - ldr r1, _022354A8 ; =MOD83_0223BB14 - str r2, [sp] - ldr r2, [r1] - mov r1, #0x83 - add r5, r3, #0 - lsl r1, r1, #2 - mul r1, r5 - add r4, r2, r1 - ldr r1, [sp, #0x20] - add r6, r0, #0 - cmp r1, #0 - beq _022354A0 - bl MOD83_RS_SpeciesIsInvalid - cmp r0, #0 - bne _0223545C - add r0, r6, #0 - bl MOD83_TranslateAgbSpecies - add r6, r0, #0 - b _0223545E + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r1, #0 + ldr r1, _022354A8 ; =MOD83_0223BB14 + str r2, [sp] + ldr r2, [r1] + mov r1, #0x83 + add r5, r3, #0 + lsl r1, r1, #2 + mul r1, r5 + add r4, r2, r1 + ldr r1, [sp, #0x20] + add r6, r0, #0 + cmp r1, #0 + beq _022354A0 + bl MOD83_RS_SpeciesIsInvalid + cmp r0, #0 + bne _0223545C + add r0, r6, #0 + bl MOD83_TranslateAgbSpecies + add r6, r0, #0 + b _0223545E _0223545C: - mov r6, #0 + mov r6, #0 _0223545E: - ldr r2, [sp] - add r0, r6, #0 - add r1, r7, #0 - bl FUN_0206B6D4 - ldr r2, [sp, #0x24] - ldr r3, [sp, #0x28] - add r1, sp, #4 - bl MOD83_02235334 - ldr r0, [sp, #4] - add r1, r4, #0 - mov r2, #2 - ldr r0, [r0, #0x14] - add r1, #0xc - lsl r2, r2, #8 - bl MIi_CpuCopyFast - lsl r0, r5, #4 - add r0, #0x64 - lsl r0, r0, #5 - str r0, [r4] - ldr r0, [sp, #0x20] - ldr r1, [sp] - str r0, [r4, #8] - add r0, r6, #0 - add r2, r7, #0 - bl FUN_0206B7BC - add r0, #8 - add sp, #8 - str r0, [r4, #4] - pop {r3, r4, r5, r6, r7, pc} + ldr r2, [sp] + add r0, r6, #0 + add r1, r7, #0 + bl FUN_0206B6D4 + ldr r2, [sp, #0x24] + ldr r3, [sp, #0x28] + add r1, sp, #4 + bl MOD83_02235334 + ldr r0, [sp, #4] + add r1, r4, #0 + mov r2, #2 + ldr r0, [r0, #0x14] + add r1, #0xc + lsl r2, r2, #8 + bl MIi_CpuCopyFast + lsl r0, r5, #4 + add r0, #0x64 + lsl r0, r0, #5 + str r0, [r4] + ldr r0, [sp, #0x20] + ldr r1, [sp] + str r0, [r4, #8] + add r0, r6, #0 + add r2, r7, #0 + bl FUN_0206B7BC + add r0, #8 + add sp, #8 + str r0, [r4, #4] + pop {r3, r4, r5, r6, r7, pc} _022354A0: - mov r0, #0 - str r0, [r4, #8] - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + str r0, [r4, #8] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022354A8: .word MOD83_0223BB14 - thumb_func_end MOD83_0223542C + thumb_func_end MOD83_0223542C - thumb_func_start MOD83_022354AC + thumb_func_start MOD83_022354AC MOD83_022354AC: ; 0x022354AC - push {r3, r4, r5, r6, r7, lr} - ldr r0, _022354EC ; =MOD83_0223BB14 - mov r6, #2 - lsl r6, r6, #8 - add r7, r6, #0 - ldr r5, [r0] - mov r4, #0 - add r7, #0xc + push {r3, r4, r5, r6, r7, lr} + ldr r0, _022354EC ; =MOD83_0223BB14 + mov r6, #2 + lsl r6, r6, #8 + add r7, r6, #0 + ldr r5, [r0] + mov r4, #0 + add r7, #0xc _022354BC: - ldr r0, [r5, #8] - cmp r0, #0 - beq _022354E0 - add r0, r5, #0 - add r0, #0xc - add r1, r6, #0 - bl DC_FlushRange - add r0, r5, #0 - ldr r1, [r5] - add r0, #0xc - add r2, r6, #0 - bl GX_LoadOBJ - ldr r0, [r5, #8] - ldr r1, [r5, #4] - bl FUN_02020248 + ldr r0, [r5, #8] + cmp r0, #0 + beq _022354E0 + add r0, r5, #0 + add r0, #0xc + add r1, r6, #0 + bl DC_FlushRange + add r0, r5, #0 + ldr r1, [r5] + add r0, #0xc + add r2, r6, #0 + bl GX_LoadOBJ + ldr r0, [r5, #8] + ldr r1, [r5, #4] + bl FUN_02020248 _022354E0: - add r4, r4, #1 - add r5, r5, r7 - cmp r4, #0x1e - blt _022354BC - pop {r3, r4, r5, r6, r7, pc} - nop + add r4, r4, #1 + add r5, r5, r7 + cmp r4, #0x1e + blt _022354BC + pop {r3, r4, r5, r6, r7, pc} + nop _022354EC: .word MOD83_0223BB14 - thumb_func_end MOD83_022354AC + thumb_func_end MOD83_022354AC - thumb_func_start MOD83_022354F0 + thumb_func_start MOD83_022354F0 MOD83_022354F0: ; 0x022354F0 - push {r4, r5, r6, r7, lr} - sub sp, #0x24 - add r5, r0, #0 - mov r0, #0x13 - mov r1, #0x4e - bl NARC_ctor - mov r1, #1 - str r0, [sp, #0xc] - mov r0, #0x4e - lsl r1, r1, #0xc - bl AllocFromHeapAtEnd - mov r6, #0 - str r0, [sp, #0x10] - add r7, r6, #0 - add r4, r5, #0 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + add r5, r0, #0 + mov r0, #0x13 + mov r1, #0x4e + bl NARC_ctor + mov r1, #1 + str r0, [sp, #0xc] + mov r0, #0x4e + lsl r1, r1, #0xc + bl AllocFromHeapAtEnd + mov r6, #0 + str r0, [sp, #0x10] + add r7, r6, #0 + add r4, r5, #0 _02235512: - ldr r0, _02235634 ; =0x0000E880 - ldr r1, _02235638 ; =0x0000E884 - ldr r0, [r5, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - mul r1, r2 - add r0, r0, #4 - add r0, r0, r1 - add r0, r0, r7 - mov r1, #5 - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022355D2 - ldr r1, _02235638 ; =0x0000E884 - add r0, r5, #0 - ldr r1, [r5, r1] - add r2, r6, #0 - bl MOD83_0223526C - ldr r1, _02235638 ; =0x0000E884 - str r0, [sp, #0x1c] - ldr r1, [r5, r1] - add r0, r5, #0 - add r2, r6, #0 - bl MOD83_02235290 - ldr r1, _02235638 ; =0x0000E884 - str r0, [sp, #0x18] - ldr r1, [r5, r1] - add r0, r5, #0 - add r2, r6, #0 - bl MOD83_022352B4 - str r0, [sp, #0x20] - ldr r0, [sp, #0x1c] - bl MOD83_TranslateAgbSpecies - ldr r2, _0223563C ; =gMain + 0x60 - ldr r1, [sp, #0x20] - ldrb r2, [r2, #6] - bl MOD83_02235350 - str r0, [sp, #0x14] - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - ldr r1, [sp, #0x18] - str r0, [sp] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x14] - str r0, [sp, #4] - ldr r0, [sp, #0xc] - add r3, r6, #0 - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - bl MOD83_0223542C - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 - ldr r0, _02235634 ; =0x0000E880 - ldr r1, _02235638 ; =0x0000E884 - ldr r0, [r5, r0] - ldr r2, [r5, r1] - mov r1, #0x96 - lsl r1, r1, #4 - mul r1, r2 - add r0, r0, #4 - add r0, r0, r1 - add r0, r0, r7 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022355C4 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 - b _02235602 + ldr r0, _02235634 ; =0x0000E880 + ldr r1, _02235638 ; =0x0000E884 + ldr r0, [r5, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + mul r1, r2 + add r0, r0, #4 + add r0, r0, r1 + add r0, r0, r7 + mov r1, #5 + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022355D2 + ldr r1, _02235638 ; =0x0000E884 + add r0, r5, #0 + ldr r1, [r5, r1] + add r2, r6, #0 + bl MOD83_0223526C + ldr r1, _02235638 ; =0x0000E884 + str r0, [sp, #0x1c] + ldr r1, [r5, r1] + add r0, r5, #0 + add r2, r6, #0 + bl MOD83_02235290 + ldr r1, _02235638 ; =0x0000E884 + str r0, [sp, #0x18] + ldr r1, [r5, r1] + add r0, r5, #0 + add r2, r6, #0 + bl MOD83_022352B4 + str r0, [sp, #0x20] + ldr r0, [sp, #0x1c] + bl MOD83_TranslateAgbSpecies + ldr r2, _0223563C ; =gMain + 0x60 + ldr r1, [sp, #0x20] + ldrb r2, [r2, #6] + bl MOD83_02235350 + str r0, [sp, #0x14] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + ldr r1, [sp, #0x18] + str r0, [sp] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x14] + str r0, [sp, #4] + ldr r0, [sp, #0xc] + add r3, r6, #0 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + bl MOD83_0223542C + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 + ldr r0, _02235634 ; =0x0000E880 + ldr r1, _02235638 ; =0x0000E884 + ldr r0, [r5, r0] + ldr r2, [r5, r1] + mov r1, #0x96 + lsl r1, r1, #4 + mul r1, r2 + add r0, r0, #4 + add r0, r0, r1 + add r0, r0, r7 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022355C4 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 + b _02235602 _022355C4: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - b _02235602 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + b _02235602 _022355D2: - mov r0, #0 - str r0, [sp] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x18] - str r0, [sp, #4] - ldr r0, [sp, #0xc] - ldr r2, [sp, #0x14] - str r0, [sp, #8] - ldr r0, [sp, #0x1c] - add r3, r6, #0 - bl MOD83_0223542C - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 + mov r0, #0 + str r0, [sp] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x18] + str r0, [sp, #4] + ldr r0, [sp, #0xc] + ldr r2, [sp, #0x14] + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + add r3, r6, #0 + bl MOD83_0223542C + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 _02235602: - add r6, r6, #1 - add r7, #0x50 - add r4, #0xc - cmp r6, #0x1e - blt _02235512 - ldr r0, [sp, #0x10] - bl FreeToHeap - ldr r0, [sp, #0xc] - bl NARC_dtor - ldr r1, _02235640 ; =MOD83_022354AC - ldr r0, _02235644 ; =0x00012604 - str r1, [r5, r0] - ldr r1, _02235638 ; =0x0000E884 - add r0, r5, #0 - ldr r1, [r5, r1] - bl MOD83_02235B6C - add r0, r5, #0 - bl MOD83_02235B20 - add sp, #0x24 - pop {r4, r5, r6, r7, pc} - nop + add r6, r6, #1 + add r7, #0x50 + add r4, #0xc + cmp r6, #0x1e + blt _02235512 + ldr r0, [sp, #0x10] + bl FreeToHeap + ldr r0, [sp, #0xc] + bl NARC_dtor + ldr r1, _02235640 ; =MOD83_022354AC + ldr r0, _02235644 ; =0x00012604 + str r1, [r5, r0] + ldr r1, _02235638 ; =0x0000E884 + add r0, r5, #0 + ldr r1, [r5, r1] + bl MOD83_02235B6C + add r0, r5, #0 + bl MOD83_02235B20 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + nop _02235634: .word 0x0000E880 _02235638: .word 0x0000E884 _0223563C: .word gMain + 0x60 _02235640: .word MOD83_022354AC _02235644: .word 0x00012604 - thumb_func_end MOD83_022354F0 + thumb_func_end MOD83_022354F0 - thumb_func_start MOD83_02235648 + thumb_func_start MOD83_02235648 MOD83_02235648: ; 0x02235648 - push {r4, r5, r6, r7, lr} - sub sp, #0x44 - mov r2, #0x61 - add r5, r0, #0 - lsl r2, r2, #2 - add r0, sp, #0x14 - add r1, r5, #0 - add r2, r5, r2 - mov r3, #1 - bl MOD83_02235244 - mov r0, #0x28 - str r0, [sp, #8] - mov r0, #0x31 - mov r4, #0 - lsl r0, r0, #4 - str r4, [sp, #0xc] - add r7, r5, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x44 + mov r2, #0x61 + add r5, r0, #0 + lsl r2, r2, #2 + add r0, sp, #0x14 + add r1, r5, #0 + add r2, r5, r2 + mov r3, #1 + bl MOD83_02235244 + mov r0, #0x28 + str r0, [sp, #8] + mov r0, #0x31 + mov r4, #0 + lsl r0, r0, #4 + str r4, [sp, #0xc] + add r7, r5, r0 _0223566C: - mov r0, #0 - str r0, [sp, #0x10] - ldr r0, [sp, #8] - mov r6, #0x1c - lsl r0, r0, #0xc - str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #0x10] + ldr r0, [sp, #8] + mov r6, #0x1c + lsl r0, r0, #0xc + str r0, [sp, #4] _02235678: - mov r0, #0x1c - str r0, [sp] - ldr r2, [sp, #8] - add r0, r7, #0 - add r1, r6, #0 - mov r3, #0x1c - bl MOD83_022352D8 - lsl r0, r6, #0xc - str r0, [sp, #0x1c] - ldr r0, [sp, #4] - str r0, [sp, #0x20] - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - bne _022356A6 - add r0, sp, #0x14 - bl FUN_0201FE94 - mov r1, #0x6a - lsl r1, r1, #2 - str r0, [r5, r1] + mov r0, #0x1c + str r0, [sp] + ldr r2, [sp, #8] + add r0, r7, #0 + add r1, r6, #0 + mov r3, #0x1c + bl MOD83_022352D8 + lsl r0, r6, #0xc + str r0, [sp, #0x1c] + ldr r0, [sp, #4] + str r0, [sp, #0x20] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + bne _022356A6 + add r0, sp, #0x14 + bl FUN_0201FE94 + mov r1, #0x6a + lsl r1, r1, #2 + str r0, [r5, r1] _022356A6: - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200BC - mov r0, #0x6a - lsl r0, r0, #2 - add r1, r4, #0 - ldr r0, [r5, r0] - add r1, #0xa - bl FUN_02020130 - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_02020238 - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0x6a - lsl r0, r0, #2 - add r1, r4, #0 - ldr r0, [r5, r0] - add r1, #0x64 - bl FUN_02020310 - mov r0, #6 - ldr r1, [sp, #0x1c] - lsl r0, r0, #0xc - add r0, r1, r0 - str r0, [sp, #0x1c] - mov r0, #3 - ldr r1, [sp, #0x20] - lsl r0, r0, #0xe - add r0, r1, r0 - str r0, [sp, #0x20] - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - bne _02235710 - add r0, sp, #0x14 - bl FUN_0201FE94 - mov r1, #0x6b - lsl r1, r1, #2 - str r0, [r5, r1] + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200BC + mov r0, #0x6a + lsl r0, r0, #2 + add r1, r4, #0 + ldr r0, [r5, r0] + add r1, #0xa + bl FUN_02020130 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_02020238 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0x6a + lsl r0, r0, #2 + add r1, r4, #0 + ldr r0, [r5, r0] + add r1, #0x64 + bl FUN_02020310 + mov r0, #6 + ldr r1, [sp, #0x1c] + lsl r0, r0, #0xc + add r0, r1, r0 + str r0, [sp, #0x1c] + mov r0, #3 + ldr r1, [sp, #0x20] + lsl r0, r0, #0xe + add r0, r1, r0 + str r0, [sp, #0x20] + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + bne _02235710 + add r0, sp, #0x14 + bl FUN_0201FE94 + mov r1, #0x6b + lsl r1, r1, #2 + str r0, [r5, r1] _02235710: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200BC - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0x28 - bl FUN_02020130 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_02020238 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r4, #0 - bl FUN_02020310 - add r4, r4, #1 - add r7, r7, #4 - add r5, #0xc - cmp r4, #0x1e - beq _02235774 - ldr r0, [sp, #0x10] - add r6, #0x28 - add r0, r0, #1 - str r0, [sp, #0x10] - cmp r0, #6 - blt _02235678 - ldr r0, [sp, #8] - add r0, #0x18 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #5 - bge _02235774 - b _0223566C + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200BC + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0x28 + bl FUN_02020130 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_02020238 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r4, #0 + bl FUN_02020310 + add r4, r4, #1 + add r7, r7, #4 + add r5, #0xc + cmp r4, #0x1e + beq _02235774 + ldr r0, [sp, #0x10] + add r6, #0x28 + add r0, r0, #1 + str r0, [sp, #0x10] + cmp r0, #6 + blt _02235678 + ldr r0, [sp, #8] + add r0, #0x18 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #5 + bge _02235774 + b _0223566C _02235774: - add sp, #0x44 - pop {r4, r5, r6, r7, pc} - thumb_func_end MOD83_02235648 + add sp, #0x44 + pop {r4, r5, r6, r7, pc} + thumb_func_end MOD83_02235648 - thumb_func_start MOD83_02235778 + thumb_func_start MOD83_02235778 MOD83_02235778: ; 0x02235778 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x30 - add r4, r2, #0 - mov r2, #0x61 - add r6, r0, #0 - lsl r2, r2, #2 - add r5, r1, #0 - add r7, r3, #0 - add r0, sp, #0 - add r1, r6, #0 - add r2, r6, r2 - mov r3, #1 - bl MOD83_02235244 - lsl r0, r5, #0xc - str r0, [sp, #8] - lsl r0, r4, #0xc - str r0, [sp, #0xc] - mov r0, #0xa - str r0, [sp, #0x24] - add r0, sp, #0 - bl FUN_0201FE94 - add r4, r0, #0 - mov r1, #1 - bl FUN_020200BC - add r0, r4, #0 - add r1, r7, #0 - bl FUN_02020130 - add r0, r4, #0 - mov r1, #1 - bl FUN_02020238 - ldr r1, [sp, #0x48] - add r0, r4, #0 - bl FUN_020200A0 - add r0, r4, #0 - add sp, #0x30 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_02235778 - - thumb_func_start MOD83_022357CC + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x30 + add r4, r2, #0 + mov r2, #0x61 + add r6, r0, #0 + lsl r2, r2, #2 + add r5, r1, #0 + add r7, r3, #0 + add r0, sp, #0 + add r1, r6, #0 + add r2, r6, r2 + mov r3, #1 + bl MOD83_02235244 + lsl r0, r5, #0xc + str r0, [sp, #8] + lsl r0, r4, #0xc + str r0, [sp, #0xc] + mov r0, #0xa + str r0, [sp, #0x24] + add r0, sp, #0 + bl FUN_0201FE94 + add r4, r0, #0 + mov r1, #1 + bl FUN_020200BC + add r0, r4, #0 + add r1, r7, #0 + bl FUN_02020130 + add r0, r4, #0 + mov r1, #1 + bl FUN_02020238 + ldr r1, [sp, #0x48] + add r0, r4, #0 + bl FUN_020200A0 + add r0, r4, #0 + add sp, #0x30 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_02235778 + + thumb_func_start MOD83_022357CC MOD83_022357CC: ; 0x022357CC - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r0, #0x20 - str r0, [sp] - mov r0, #0xe2 - lsl r0, r0, #2 - add r0, r6, r0 - mov r1, #0xe4 - mov r2, #0xb0 - mov r3, #0x32 - bl MOD83_022352D8 - mov r0, #1 - str r0, [sp] - add r0, r6, #0 - mov r1, #0xe4 - mov r2, #0xb0 - mov r3, #6 - bl MOD83_02235778 - mov r1, #0xe6 - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #8 - add r0, r6, r1 - mov r1, #0xb0 - mov r3, #0x20 - add r2, r1, #0 - str r3, [sp] - bl MOD83_022352D8 - mov r0, #1 - mov r1, #0xb0 - str r0, [sp] - add r0, r6, #0 - add r2, r1, #0 - mov r3, #3 - bl MOD83_02235778 - mov r1, #0xea - lsl r1, r1, #2 - str r0, [r6, r1] - sub r1, #0x1c - mov r3, #0x20 - add r0, r6, r1 - mov r1, #0x18 - mov r2, #0xb0 - str r3, [sp] - bl MOD83_022352D8 - mov r0, #1 - str r0, [sp] - add r0, r6, #0 - mov r1, #0x18 - mov r2, #0xb0 - mov r3, #0 - bl MOD83_02235778 - mov r1, #0xee - lsl r1, r1, #2 - str r0, [r6, r1] - mov r7, #0 - mov r0, #0xff - sub r1, #0x24 - strb r0, [r6, r1] - add r4, r7, #0 - add r5, r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0xe2 + lsl r0, r0, #2 + add r0, r6, r0 + mov r1, #0xe4 + mov r2, #0xb0 + mov r3, #0x32 + bl MOD83_022352D8 + mov r0, #1 + str r0, [sp] + add r0, r6, #0 + mov r1, #0xe4 + mov r2, #0xb0 + mov r3, #6 + bl MOD83_02235778 + mov r1, #0xe6 + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #8 + add r0, r6, r1 + mov r1, #0xb0 + mov r3, #0x20 + add r2, r1, #0 + str r3, [sp] + bl MOD83_022352D8 + mov r0, #1 + mov r1, #0xb0 + str r0, [sp] + add r0, r6, #0 + add r2, r1, #0 + mov r3, #3 + bl MOD83_02235778 + mov r1, #0xea + lsl r1, r1, #2 + str r0, [r6, r1] + sub r1, #0x1c + mov r3, #0x20 + add r0, r6, r1 + mov r1, #0x18 + mov r2, #0xb0 + str r3, [sp] + bl MOD83_022352D8 + mov r0, #1 + str r0, [sp] + add r0, r6, #0 + mov r1, #0x18 + mov r2, #0xb0 + mov r3, #0 + bl MOD83_02235778 + mov r1, #0xee + lsl r1, r1, #2 + str r0, [r6, r1] + mov r7, #0 + mov r0, #0xff + sub r1, #0x24 + strb r0, [r6, r1] + add r4, r7, #0 + add r5, r6, #0 _02235852: - mov r0, #0 - str r0, [sp] - add r0, r6, #0 - add r1, r4, #0 - mov r2, #0x40 - mov r3, #9 - bl MOD83_02235778 - mov r1, #0xf2 - lsl r1, r1, #2 - str r0, [r5, r1] - mov r1, #0 - mov r0, #0xf3 - mvn r1, r1 - lsl r0, r0, #2 - str r1, [r5, r0] - mov r1, #0xe - add r0, r0, #4 - str r1, [r5, r0] - add r7, r7, #1 - add r4, #0x24 - add r5, #0xc - cmp r7, #6 - blt _02235852 - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #4 - str r1, [r6, r0] - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022357CC - - thumb_func_start MOD83_0223588C + mov r0, #0 + str r0, [sp] + add r0, r6, #0 + add r1, r4, #0 + mov r2, #0x40 + mov r3, #9 + bl MOD83_02235778 + mov r1, #0xf2 + lsl r1, r1, #2 + str r0, [r5, r1] + mov r1, #0 + mov r0, #0xf3 + mvn r1, r1 + lsl r0, r0, #2 + str r1, [r5, r0] + mov r1, #0xe + add r0, r0, #4 + str r1, [r5, r0] + add r7, r7, #1 + add r4, #0x24 + add r5, #0xc + cmp r7, #6 + blt _02235852 + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #4 + str r1, [r6, r0] + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022357CC + + thumb_func_start MOD83_0223588C MOD83_0223588C: ; 0x0223588C - push {r3, lr} - ldr r3, _022358C0 ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0x41 - mov r2, #0 - bl AGB_GetBoxMonData - mov r1, #0x67 - lsl r1, r1, #2 - cmp r0, r1 - bne _022358BA - mov r0, #1 - pop {r3, pc} + push {r3, lr} + ldr r3, _022358C0 ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0x41 + mov r2, #0 + bl AGB_GetBoxMonData + mov r1, #0x67 + lsl r1, r1, #2 + cmp r0, r1 + bne _022358BA + mov r0, #1 + pop {r3, pc} _022358BA: - mov r0, #0 - pop {r3, pc} - nop + mov r0, #0 + pop {r3, pc} + nop _022358C0: .word 0x0000E880 - thumb_func_end MOD83_0223588C + thumb_func_end MOD83_0223588C - thumb_func_start MOD83_022358C4 + thumb_func_start MOD83_022358C4 MOD83_022358C4: ; 0x022358C4 - push {r3, r4, r5, r6, r7, lr} - ldr r3, _02235910 ; =0x0000E880 - mov r5, #0 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r4, r2, r0 - mov r0, #0x50 - add r6, r1, #0 - mul r6, r0 - add r7, r5, #0 + push {r3, r4, r5, r6, r7, lr} + ldr r3, _02235910 ; =0x0000E880 + mov r5, #0 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r4, r2, r0 + mov r0, #0x50 + add r6, r1, #0 + mul r6, r0 + add r7, r5, #0 _022358E2: - add r1, r5, #0 - add r0, r4, r6 - add r1, #0xd - add r2, r7, #0 - bl AGB_GetBoxMonData - ldr r3, _02235914 ; =MOD83_0223B2B8 - add r2, r0, #0 - mov r1, #0 + add r1, r5, #0 + add r0, r4, r6 + add r1, #0xd + add r2, r7, #0 + bl AGB_GetBoxMonData + ldr r3, _02235914 ; =MOD83_0223B2B8 + add r2, r0, #0 + mov r1, #0 _022358F4: - ldr r0, [r3] - cmp r2, r0 - bne _022358FE - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r3] + cmp r2, r0 + bne _022358FE + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022358FE: - add r1, r1, #1 - add r3, r3, #4 - cmp r1, #8 - blo _022358F4 - add r5, r5, #1 - cmp r5, #4 - blt _022358E2 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add r1, r1, #1 + add r3, r3, #4 + cmp r1, #8 + blo _022358F4 + add r5, r5, #1 + cmp r5, #4 + blt _022358E2 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02235910: .word 0x0000E880 _02235914: .word MOD83_0223B2B8 - thumb_func_end MOD83_022358C4 + thumb_func_end MOD83_022358C4 - thumb_func_start MOD83_02235918 + thumb_func_start MOD83_02235918 MOD83_02235918: ; 0x02235918 - push {r3, lr} - ldr r3, _0223595C ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - ldr r1, _02235960 ; =MOD83_InvalidItemIds - 0x30 - ldrh r1, [r1, #0x30] - cmp r1, #0 - beq _02235956 - ldr r2, _02235964 ; =MOD83_InvalidItemIds + push {r3, lr} + ldr r3, _0223595C ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + ldr r1, _02235960 ; =MOD83_InvalidItemIds - 0x30 + ldrh r1, [r1, #0x30] + cmp r1, #0 + beq _02235956 + ldr r2, _02235964 ; =MOD83_InvalidItemIds _02235944: - ldrh r1, [r2] - cmp r0, r1 - bne _0223594E - mov r0, #1 - pop {r3, pc} + ldrh r1, [r2] + cmp r0, r1 + bne _0223594E + mov r0, #1 + pop {r3, pc} _0223594E: - add r2, r2, #2 - ldrh r1, [r2] - cmp r1, #0 - bne _02235944 + add r2, r2, #2 + ldrh r1, [r2] + cmp r1, #0 + bne _02235944 _02235956: - mov r0, #0 - pop {r3, pc} - nop + mov r0, #0 + pop {r3, pc} + nop _0223595C: .word 0x0000E880 _02235960: .word MOD83_InvalidItemIds - 0x30 _02235964: .word MOD83_InvalidItemIds - thumb_func_end MOD83_02235918 + thumb_func_end MOD83_02235918 - thumb_func_start MOD83_02235968 + thumb_func_start MOD83_02235968 MOD83_02235968: ; 0x02235968 - push {r3, lr} - ldr r3, _02235990 ; =0x0000E880 - ldr r2, [r0, r3] - add r3, r3, #4 - ldr r3, [r0, r3] - mov r0, #0x96 - lsl r0, r0, #4 - add r2, r2, #4 - mul r0, r3 - add r2, r2, r0 - mov r0, #0x50 - mul r0, r1 - add r0, r2, r0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_RS_SpeciesIsInvalid - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r3, _02235990 ; =0x0000E880 + ldr r2, [r0, r3] + add r3, r3, #4 + ldr r3, [r0, r3] + mov r0, #0x96 + lsl r0, r0, #4 + add r2, r2, #4 + mul r0, r3 + add r2, r2, r0 + mov r0, #0x50 + mul r0, r1 + add r0, r2, r0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_RS_SpeciesIsInvalid + pop {r3, pc} + .align 2, 0 _02235990: .word 0x0000E880 - thumb_func_end MOD83_02235968 + thumb_func_end MOD83_02235968 - thumb_func_start MOD83_02235994 + thumb_func_start MOD83_02235994 MOD83_02235994: ; 0x02235994 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r4, r0, #0 - mov r0, #0x6a - lsl r0, r0, #2 - add r0, r4, r0 - str r0, [sp] - add r6, r1, #0 - mov r0, #0xc - mul r0, r6 - ldr r1, [sp] - str r0, [sp, #4] - ldr r0, [r1, r0] - cmp r0, #0 - beq _022359C0 - bl FUN_02020128 - cmp r0, #0 - bne _022359C0 - add sp, #0x14 - mov r0, #3 - pop {r4, r5, r6, r7, pc} + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r4, r0, #0 + mov r0, #0x6a + lsl r0, r0, #2 + add r0, r4, r0 + str r0, [sp] + add r6, r1, #0 + mov r0, #0xc + mul r0, r6 + ldr r1, [sp] + str r0, [sp, #4] + ldr r0, [r1, r0] + cmp r0, #0 + beq _022359C0 + bl FUN_02020128 + cmp r0, #0 + bne _022359C0 + add sp, #0x14 + mov r0, #3 + pop {r4, r5, r6, r7, pc} _022359C0: - mov r5, #0 - mov r7, #0x3d - mvn r5, r5 - mov r2, #0 - add r3, r4, #0 - lsl r7, r7, #4 - b _022359E8 + mov r5, #0 + mov r7, #0x3d + mvn r5, r5 + mov r2, #0 + add r3, r4, #0 + lsl r7, r7, #4 + b _022359E8 _022359CE: - ldr r0, _02235B1C ; =0x0000E884 - ldr r1, [r4, r0] - ldr r0, [r3, r7] - cmp r1, r0 - bne _022359E4 - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r0, [r3, r0] - cmp r6, r0 - bne _022359E4 - add r5, r2, #0 + ldr r0, _02235B1C ; =0x0000E884 + ldr r1, [r4, r0] + ldr r0, [r3, r7] + cmp r1, r0 + bne _022359E4 + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r0, [r3, r0] + cmp r6, r0 + bne _022359E4 + add r5, r2, #0 _022359E4: - add r3, #0xc - add r2, r2, #1 + add r3, #0xc + add r2, r2, #1 _022359E8: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - bne _022359F4 - cmp r2, #6 - blt _022359CE + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + bne _022359F4 + cmp r2, #6 + blt _022359CE _022359F4: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_0223588C - cmp r0, #1 - bne _02235A06 - add sp, #0x14 - mov r0, #4 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_0223588C + cmp r0, #1 + bne _02235A06 + add sp, #0x14 + mov r0, #4 + pop {r4, r5, r6, r7, pc} _02235A06: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_022358C4 - cmp r0, #1 - bne _02235A18 - add sp, #0x14 - mov r0, #5 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_022358C4 + cmp r0, #1 + bne _02235A18 + add sp, #0x14 + mov r0, #5 + pop {r4, r5, r6, r7, pc} _02235A18: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235918 - cmp r0, #1 - bne _02235A2A - add sp, #0x14 - mov r0, #6 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235918 + cmp r0, #1 + bne _02235A2A + add sp, #0x14 + mov r0, #6 + pop {r4, r5, r6, r7, pc} _02235A2A: - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235968 - cmp r0, #1 - bne _02235A3C - add sp, #0x14 - mov r0, #7 - pop {r4, r5, r6, r7, pc} + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235968 + cmp r0, #1 + bne _02235A3C + add sp, #0x14 + mov r0, #7 + pop {r4, r5, r6, r7, pc} _02235A3C: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - bne _02235AE4 - mov r0, #0x41 - lsl r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #6 - bne _02235A54 - add sp, #0x14 - mov r0, #0 - pop {r4, r5, r6, r7, pc} + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + bne _02235AE4 + mov r0, #0x41 + lsl r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #6 + bne _02235A54 + add sp, #0x14 + mov r0, #0 + pop {r4, r5, r6, r7, pc} _02235A54: - mov r5, #0 - mov r0, #0xf3 - add r3, r4, #0 - lsl r0, r0, #2 - sub r1, r5, #1 + mov r5, #0 + mov r0, #0xf3 + add r3, r4, #0 + lsl r0, r0, #2 + sub r1, r5, #1 _02235A5E: - ldr r2, [r3, r0] - cmp r2, r1 - bne _02235ADA - ldr r1, [sp] - ldr r0, [sp, #4] - ldr r0, [r1, r0] - bl FUN_0202011C - add r1, r0, #0 - mov r0, #0xc - add r7, r5, #0 - mul r7, r0 - mov r0, #0xf2 - lsl r0, r0, #2 - add r5, r4, r0 - ldr r0, [r5, r7] - bl FUN_02020044 - ldr r0, [r5, r7] - bl FUN_0202011C - add r3, r0, #0 - add r2, sp, #8 - ldmia r3!, {r0, r1} - mov ip, r2 - stmia r2!, {r0, r1} - ldr r0, [r3] - mov r1, #2 - str r0, [r2] - ldr r0, [sp, #8] - lsl r1, r1, #0xe - sub r0, r0, r1 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - lsr r1, r1, #1 - sub r0, r0, r1 - str r0, [sp, #0xc] - ldr r0, [r5, r7] - mov r1, ip - bl FUN_02020044 - ldr r0, [r5, r7] - mov r1, #1 - bl FUN_020200A0 - mov r1, #0xf3 - add r3, r4, r7 - lsl r1, r1, #2 - ldr r0, _02235B1C ; =0x0000E884 - str r6, [r3, r1] - ldr r2, [r4, r0] - add r0, r1, #4 - str r2, [r3, r0] - add r0, r1, #0 - add r0, #0x44 - ldr r0, [r4, r0] - add r1, #0x44 - add r0, r0, #1 - str r0, [r4, r1] - add sp, #0x14 - mov r0, #1 - pop {r4, r5, r6, r7, pc} + ldr r2, [r3, r0] + cmp r2, r1 + bne _02235ADA + ldr r1, [sp] + ldr r0, [sp, #4] + ldr r0, [r1, r0] + bl FUN_0202011C + add r1, r0, #0 + mov r0, #0xc + add r7, r5, #0 + mul r7, r0 + mov r0, #0xf2 + lsl r0, r0, #2 + add r5, r4, r0 + ldr r0, [r5, r7] + bl FUN_02020044 + ldr r0, [r5, r7] + bl FUN_0202011C + add r3, r0, #0 + add r2, sp, #8 + ldmia r3!, {r0, r1} + mov ip, r2 + stmia r2!, {r0, r1} + ldr r0, [r3] + mov r1, #2 + str r0, [r2] + ldr r0, [sp, #8] + lsl r1, r1, #0xe + sub r0, r0, r1 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + lsr r1, r1, #1 + sub r0, r0, r1 + str r0, [sp, #0xc] + ldr r0, [r5, r7] + mov r1, ip + bl FUN_02020044 + ldr r0, [r5, r7] + mov r1, #1 + bl FUN_020200A0 + mov r1, #0xf3 + add r3, r4, r7 + lsl r1, r1, #2 + ldr r0, _02235B1C ; =0x0000E884 + str r6, [r3, r1] + ldr r2, [r4, r0] + add r0, r1, #4 + str r2, [r3, r0] + add r0, r1, #0 + add r0, #0x44 + ldr r0, [r4, r0] + add r1, #0x44 + add r0, r0, #1 + str r0, [r4, r1] + add sp, #0x14 + mov r0, #1 + pop {r4, r5, r6, r7, pc} _02235ADA: - add r5, r5, #1 - add r3, #0xc - cmp r5, #6 - blt _02235A5E - b _02235B16 + add r5, r5, #1 + add r3, #0xc + cmp r5, #6 + blt _02235A5E + b _02235B16 _02235AE4: - mov r0, #0xc - add r6, r5, #0 - mul r6, r0 - mov r0, #0xf2 - add r1, r4, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - mov r1, #0 - bl FUN_020200A0 - mov r2, #0 - mov r1, #0xf3 - mvn r2, r2 - add r0, r4, r6 - lsl r1, r1, #2 - str r2, [r0, r1] - add r0, r1, #0 - add r0, #0x44 - ldr r0, [r4, r0] - add r1, #0x44 - sub r0, r0, #1 - str r0, [r4, r1] - add sp, #0x14 - mov r0, #2 - pop {r4, r5, r6, r7, pc} + mov r0, #0xc + add r6, r5, #0 + mul r6, r0 + mov r0, #0xf2 + add r1, r4, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_020200A0 + mov r2, #0 + mov r1, #0xf3 + mvn r2, r2 + add r0, r4, r6 + lsl r1, r1, #2 + str r2, [r0, r1] + add r0, r1, #0 + add r0, #0x44 + ldr r0, [r4, r0] + add r1, #0x44 + sub r0, r0, #1 + str r0, [r4, r1] + add sp, #0x14 + mov r0, #2 + pop {r4, r5, r6, r7, pc} _02235B16: - mov r0, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02235B1C: .word 0x0000E884 - thumb_func_end MOD83_02235994 + thumb_func_end MOD83_02235994 - thumb_func_start MOD83_02235B20 + thumb_func_start MOD83_02235B20 MOD83_02235B20: ; 0x02235B20 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r4, #0 - add r5, r6, #0 - sub r7, r4, #1 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 + sub r7, r4, #1 _02235B2A: - mov r0, #0xf3 - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, r7 - beq _02235B50 - ldr r0, _02235B68 ; =0x0000E884 - ldr r1, [r6, r0] - mov r0, #0x3d - lsl r0, r0, #4 - ldr r0, [r5, r0] - cmp r1, r0 - bne _02235B50 - mov r0, #0xf2 - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #1 - bl FUN_020200A0 - b _02235B5C + mov r0, #0xf3 + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, r7 + beq _02235B50 + ldr r0, _02235B68 ; =0x0000E884 + ldr r1, [r6, r0] + mov r0, #0x3d + lsl r0, r0, #4 + ldr r0, [r5, r0] + cmp r1, r0 + bne _02235B50 + mov r0, #0xf2 + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #1 + bl FUN_020200A0 + b _02235B5C _02235B50: - mov r0, #0xf2 - lsl r0, r0, #2 - ldr r0, [r5, r0] - mov r1, #0 - bl FUN_020200A0 + mov r0, #0xf2 + lsl r0, r0, #2 + ldr r0, [r5, r0] + mov r1, #0 + bl FUN_020200A0 _02235B5C: - add r4, r4, #1 - add r5, #0xc - cmp r4, #6 - blt _02235B2A - pop {r3, r4, r5, r6, r7, pc} - nop + add r4, r4, #1 + add r5, #0xc + cmp r4, #6 + blt _02235B2A + pop {r3, r4, r5, r6, r7, pc} + nop _02235B68: .word 0x0000E884 - thumb_func_end MOD83_02235B20 + thumb_func_end MOD83_02235B20 - thumb_func_start MOD83_02235B6C + thumb_func_start MOD83_02235B6C MOD83_02235B6C: ; 0x02235B6C - push {r3, r4, r5, lr} - sub sp, #0x60 - add r5, r0, #0 - mov r0, #0 - add r4, r1, #0 - add r3, sp, #0x14 - add r1, r0, #0 - mov r2, #4 + push {r3, r4, r5, lr} + sub sp, #0x60 + add r5, r0, #0 + mov r0, #0 + add r4, r1, #0 + add r3, sp, #0x14 + add r1, r0, #0 + mov r2, #4 _02235B7C: - stmia r3!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235B7C - stmia r3!, {r0, r1} - str r0, [r3] - ldr r0, _02235BE4 ; =0x00000478 - add r0, r5, r0 - str r0, [sp, #0x14] - mov r0, #6 - str r0, [sp, #0x1c] - mov r0, #0x15 - str r0, [sp, #0x20] - mov r0, #0xd - str r0, [sp, #0x24] - mov r0, #2 - str r0, [sp, #0x28] - sub r0, r0, #3 - str r0, [sp, #0x48] - mov r0, #0 - str r0, [sp, #0x2c] - str r0, [sp, #0x30] - mov r0, #1 - str r0, [sp, #0x38] - str r0, [sp, #0x3c] - ldr r0, _02235BE8 ; =0x00010200 - str r0, [sp, #0x40] - mov r0, #0xa0 - str r0, [sp, #0x34] - bl MOD83_02236EA8 - add r3, r0, #0 - ldr r0, _02235BEC ; =0x0000E880 - mov r2, #9 - ldr r1, [r5, r0] - ldr r0, _02235BF0 ; =0x00008344 - add r1, r1, r0 - lsl r0, r4, #3 - add r0, r4, r0 - add r0, r1, r0 - add r1, sp, #0 - bl FUN_02015D88 - add r0, sp, #0 - str r0, [sp, #0x4c] - add r0, r5, #0 - add r1, sp, #0x14 - mov r2, #1 - bl MOD83_02234F2C - add sp, #0x60 - pop {r3, r4, r5, pc} - .align 2, 0 + stmia r3!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235B7C + stmia r3!, {r0, r1} + str r0, [r3] + ldr r0, _02235BE4 ; =0x00000478 + add r0, r5, r0 + str r0, [sp, #0x14] + mov r0, #6 + str r0, [sp, #0x1c] + mov r0, #0x15 + str r0, [sp, #0x20] + mov r0, #0xd + str r0, [sp, #0x24] + mov r0, #2 + str r0, [sp, #0x28] + sub r0, r0, #3 + str r0, [sp, #0x48] + mov r0, #0 + str r0, [sp, #0x2c] + str r0, [sp, #0x30] + mov r0, #1 + str r0, [sp, #0x38] + str r0, [sp, #0x3c] + ldr r0, _02235BE8 ; =0x00010200 + str r0, [sp, #0x40] + mov r0, #0xa0 + str r0, [sp, #0x34] + bl MOD83_02236EA8 + add r3, r0, #0 + ldr r0, _02235BEC ; =0x0000E880 + mov r2, #9 + ldr r1, [r5, r0] + ldr r0, _02235BF0 ; =0x00008344 + add r1, r1, r0 + lsl r0, r4, #3 + add r0, r4, r0 + add r0, r1, r0 + add r1, sp, #0 + bl FUN_02015D88 + add r0, sp, #0 + str r0, [sp, #0x4c] + add r0, r5, #0 + add r1, sp, #0x14 + mov r2, #1 + bl MOD83_02234F2C + add sp, #0x60 + pop {r3, r4, r5, pc} + .align 2, 0 _02235BE4: .word 0x00000478 _02235BE8: .word 0x00010200 _02235BEC: .word 0x0000E880 _02235BF0: .word 0x00008344 - thumb_func_end MOD83_02235B6C + thumb_func_end MOD83_02235B6C - thumb_func_start MOD83_02235BF4 + thumb_func_start MOD83_02235BF4 MOD83_02235BF4: ; 0x02235BF4 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, [r5, #0x20] - add r6, r1, #0 - mov r1, #2 - bl GetBgTilemapBuffer - add r4, r0, #0 - cmp r6, #0 - beq _02235C18 - add r0, r6, #0 - mov r1, #8 - mov r2, #0 - bl AGB_GetBoxMonData - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - b _02235C1A + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, [r5, #0x20] + add r6, r1, #0 + mov r1, #2 + bl GetBgTilemapBuffer + add r4, r0, #0 + cmp r6, #0 + beq _02235C18 + add r0, r6, #0 + mov r1, #8 + mov r2, #0 + bl AGB_GetBoxMonData + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + b _02235C1A _02235C18: - mov r1, #0 + mov r1, #0 _02235C1A: - mov r2, #0 - mov r0, #1 + mov r2, #0 + mov r0, #1 _02235C1E: - add r3, r1, #0 - tst r3, r0 - beq _02235C2A - add r6, r2, #0 - add r6, #0x80 - b _02235C2E + add r3, r1, #0 + tst r3, r0 + beq _02235C2A + add r6, r2, #0 + add r6, #0x80 + b _02235C2E _02235C2A: - add r6, r2, #0 - add r6, #0x60 + add r6, r2, #0 + add r6, #0x60 _02235C2E: - add r3, r4, #0 - add r3, #0xd6 - lsl r1, r1, #0x17 - add r2, r2, #1 - strh r6, [r3] - lsr r1, r1, #0x18 - add r4, r4, #2 - cmp r2, #4 - blt _02235C1E - ldr r0, [r5, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235BF4 - - thumb_func_start MOD83_02235C4C + add r3, r4, #0 + add r3, #0xd6 + lsl r1, r1, #0x17 + add r2, r2, #1 + strh r6, [r3] + lsr r1, r1, #0x18 + add r4, r4, #2 + cmp r2, #4 + blt _02235C1E + ldr r0, [r5, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235BF4 + + thumb_func_start MOD83_02235C4C MOD83_02235C4C: ; 0x02235C4C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x78 - add r5, r0, #0 - mov r0, #0 - add r4, r1, #0 - add r3, sp, #0x2c - add r1, r0, #0 - mov r2, #4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x78 + add r5, r0, #0 + mov r0, #0 + add r4, r1, #0 + add r3, sp, #0x2c + add r1, r0, #0 + mov r2, #4 _02235C5C: - stmia r3!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235C5C - stmia r3!, {r0, r1} - str r0, [r3] - mov r1, #0x20 - str r1, [sp, #0x3c] - mov r1, #1 - ldr r0, _02235DF8 ; =0x00000488 - str r1, [sp, #0x50] - str r1, [sp, #0x54] - mov r1, #0xbc - str r1, [sp, #0x4c] - ldr r1, _02235DFC ; =0x000F0200 - add r0, r5, r0 - str r1, [sp, #0x58] - mov r1, #0x2c - str r0, [sp, #0x2c] - mov r0, #0 - str r1, [sp, #0x60] - mov r1, #0x90 - mov r2, #4 - str r1, [sp, #0x44] - str r0, [sp, #0x34] - str r0, [sp, #0x38] - str r0, [sp, #0x64] - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - str r2, [sp, #0x40] - bl MOD83_02234F2C - mov r0, #0x2b - str r0, [sp, #0x60] - mov r0, #0x50 - str r0, [sp, #0x44] - mov r0, #8 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - bl MOD83_02234F2C - add r0, r5, #0 - add r1, r4, #0 - bl MOD83_02235BF4 - cmp r4, #0 - bne _02235CCA - ldr r0, [sp, #0x2c] - bl CopyWindowToVram - add sp, #0x78 - pop {r3, r4, r5, r6, r7, pc} + stmia r3!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235C5C + stmia r3!, {r0, r1} + str r0, [r3] + mov r1, #0x20 + str r1, [sp, #0x3c] + mov r1, #1 + ldr r0, _02235DF8 ; =0x00000488 + str r1, [sp, #0x50] + str r1, [sp, #0x54] + mov r1, #0xbc + str r1, [sp, #0x4c] + ldr r1, _02235DFC ; =0x000F0200 + add r0, r5, r0 + str r1, [sp, #0x58] + mov r1, #0x2c + str r0, [sp, #0x2c] + mov r0, #0 + str r1, [sp, #0x60] + mov r1, #0x90 + mov r2, #4 + str r1, [sp, #0x44] + str r0, [sp, #0x34] + str r0, [sp, #0x38] + str r0, [sp, #0x64] + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + str r2, [sp, #0x40] + bl MOD83_02234F2C + mov r0, #0x2b + str r0, [sp, #0x60] + mov r0, #0x50 + str r0, [sp, #0x44] + mov r0, #8 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + bl MOD83_02234F2C + add r0, r5, #0 + add r1, r4, #0 + bl MOD83_02235BF4 + cmp r4, #0 + bne _02235CCA + ldr r0, [sp, #0x2c] + bl CopyWindowToVram + add sp, #0x78 + pop {r3, r4, r5, r6, r7, pc} _02235CCA: - add r2, sp, #0x1c - add r0, r4, #0 - mov r1, #2 - add r2, #2 - bl AGB_GetBoxMonData - add r0, r4, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - add r3, r0, #0 - add r0, sp, #0x1c - add r0, #2 - add r1, sp, #8 - mov r2, #0xb - bl FUN_02015D88 - add r0, sp, #8 - str r0, [sp, #0x64] - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #8 - str r0, [sp, #0x44] - mov r0, #0 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - bl MOD83_02234F2C - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - add r6, r0, #0 - ldr r2, _02235E00 ; =0x0000016A - mov r0, #1 - mov r1, #0x1a - mov r3, #0x4e - bl NewMsgDataFromNarc - add r7, r0, #0 - add r0, r4, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_TranslateAgbSpecies - str r0, [sp, #4] - ldr r1, [sp, #4] - add r0, r7, #0 - add r2, r6, #0 - bl ReadMsgDataIntoString - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x10 - str r0, [sp, #0x44] - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - str r6, [sp, #0x68] - bl MOD83_02234F2C - add r0, r7, #0 - bl DestroyMsgData - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _02235DAC - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl UpConvertItemId_Gen3to4 - add r7, r0, #0 - mov r0, #0x40 - mov r1, #0x4e - bl String_ctor - lsl r1, r7, #0x10 - lsr r1, r1, #0x10 - mov r2, #0x4e - add r6, r0, #0 - bl GetItemNameIntoString - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x98 - str r0, [sp, #0x44] - mov r0, #0x10 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #6 - str r6, [sp, #0x68] - bl MOD83_02234F2C - add r0, r6, #0 - bl String_dtor + add r2, sp, #0x1c + add r0, r4, #0 + mov r1, #2 + add r2, #2 + bl AGB_GetBoxMonData + add r0, r4, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + add r3, r0, #0 + add r0, sp, #0x1c + add r0, #2 + add r1, sp, #8 + mov r2, #0xb + bl FUN_02015D88 + add r0, sp, #8 + str r0, [sp, #0x64] + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #8 + str r0, [sp, #0x44] + mov r0, #0 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + bl MOD83_02234F2C + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + add r6, r0, #0 + ldr r2, _02235E00 ; =0x0000016A + mov r0, #1 + mov r1, #0x1a + mov r3, #0x4e + bl NewMsgDataFromNarc + add r7, r0, #0 + add r0, r4, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_TranslateAgbSpecies + str r0, [sp, #4] + ldr r1, [sp, #4] + add r0, r7, #0 + add r2, r6, #0 + bl ReadMsgDataIntoString + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x10 + str r0, [sp, #0x44] + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + str r6, [sp, #0x68] + bl MOD83_02234F2C + add r0, r7, #0 + bl DestroyMsgData + add r0, r6, #0 + bl String_dtor + add r0, r4, #0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _02235DAC + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl UpConvertItemId_Gen3to4 + add r7, r0, #0 + mov r0, #0x40 + mov r1, #0x4e + bl String_ctor + lsl r1, r7, #0x10 + lsr r1, r1, #0x10 + mov r2, #0x4e + add r6, r0, #0 + bl GetItemNameIntoString + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x98 + str r0, [sp, #0x44] + mov r0, #0x10 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #6 + str r6, [sp, #0x68] + bl MOD83_02234F2C + add r0, r6, #0 + bl String_dtor _02235DAC: - add r0, r4, #0 - bl MOD83_02237EDC - add r6, r0, #0 - mov r0, #0xa - mov r1, #0x4e - bl String_ctor - mov r3, #1 - add r1, r6, #0 - mov r2, #3 - add r4, r0, #0 - str r3, [sp] - bl String16_FormatInteger - mov r0, #0 - mvn r0, r0 - str r0, [sp, #0x60] - mov r0, #0x64 - str r0, [sp, #0x44] - mov r0, #8 - str r0, [sp, #0x48] - add r0, r5, #0 - add r1, sp, #0x2c - mov r2, #2 - str r4, [sp, #0x68] - bl MOD83_02234F2C - add r0, r4, #0 - bl String_dtor - ldr r0, [sp, #4] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02005578 - add sp, #0x78 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + add r0, r4, #0 + bl MOD83_02237EDC + add r6, r0, #0 + mov r0, #0xa + mov r1, #0x4e + bl String_ctor + mov r3, #1 + add r1, r6, #0 + mov r2, #3 + add r4, r0, #0 + str r3, [sp] + bl String16_FormatInteger + mov r0, #0 + mvn r0, r0 + str r0, [sp, #0x60] + mov r0, #0x64 + str r0, [sp, #0x44] + mov r0, #8 + str r0, [sp, #0x48] + add r0, r5, #0 + add r1, sp, #0x2c + mov r2, #2 + str r4, [sp, #0x68] + bl MOD83_02234F2C + add r0, r4, #0 + bl String_dtor + ldr r0, [sp, #4] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02005578 + add sp, #0x78 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02235DF8: .word 0x00000488 _02235DFC: .word 0x000F0200 _02235E00: .word 0x0000016A - thumb_func_end MOD83_02235C4C + thumb_func_end MOD83_02235C4C - thumb_func_start MOD83_02235E04 + thumb_func_start MOD83_02235E04 MOD83_02235E04: ; 0x02235E04 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x4e - str r0, [sp, #8] - add r6, r2, #0 - mov r0, #0 - add r4, r3, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02235E2C - mov r0, #0x17 - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x4e + str r0, [sp, #8] + add r6, r2, #0 + mov r0, #0 + add r4, r3, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02235E2C + mov r0, #0x17 + str r0, [r4] _02235E2C: - str r6, [r5, #0x24] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02235E04 + str r6, [r5, #0x24] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02235E04 - thumb_func_start MOD83_02235E34 + thumb_func_start MOD83_02235E34 MOD83_02235E34: ; 0x02235E34 - push {r3, r4, r5, r6, lr} - sub sp, #0xc - add r5, r0, #0 - mov r0, #6 - str r0, [sp] - mov r0, #1 - add r4, r3, #0 - str r0, [sp, #4] - mov r0, #0x4e - add r6, r2, #0 - str r0, [sp, #8] - ldr r3, _02235E64 ; =0x00007FFF - mov r0, #0 - add r2, r1, #0 - bl FUN_0200E1D0 - cmp r4, #0 - beq _02235E5C - mov r0, #0x17 - str r0, [r4] + push {r3, r4, r5, r6, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + add r4, r3, #0 + str r0, [sp, #4] + mov r0, #0x4e + add r6, r2, #0 + str r0, [sp, #8] + ldr r3, _02235E64 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + cmp r4, #0 + beq _02235E5C + mov r0, #0x17 + str r0, [r4] _02235E5C: - str r6, [r5, #0x24] - add sp, #0xc - pop {r3, r4, r5, r6, pc} - nop + str r6, [r5, #0x24] + add sp, #0xc + pop {r3, r4, r5, r6, pc} + nop _02235E64: .word 0x00007FFF - thumb_func_end MOD83_02235E34 + thumb_func_end MOD83_02235E34 - thumb_func_start MOD83_02235E68 + thumb_func_start MOD83_02235E68 MOD83_02235E68: ; 0x02235E68 - push {r3, r4, r5, lr} - sub sp, #0x80 - ldr r5, _02235F28 ; =MOD83_0223A51C - add r3, sp, #0x70 - add r4, r0, #0 - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - ldr r5, _02235F2C ; =MOD83_0223A52C - add r3, sp, #0x54 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - add r0, r4, #0 - add r3, r1, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #0 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F30 ; =MOD83_0223A548 - add r3, sp, #0x38 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #1 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #1 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F34 ; =MOD83_0223A564 - add r3, sp, #0x1c - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #2 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #2 - bl BgClearTilemapBufferAndCommit - ldr r5, _02235F38 ; =MOD83_0223A580 - add r3, sp, #0 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #3 - str r0, [r3] - add r0, r4, #0 - mov r3, #0 - bl InitBgFromTemplate - add r0, r4, #0 - mov r1, #3 - bl BgClearTilemapBufferAndCommit - add sp, #0x80 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + sub sp, #0x80 + ldr r5, _02235F28 ; =MOD83_0223A51C + add r3, sp, #0x70 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl SetBothScreensModesAndDisable + ldr r5, _02235F2C ; =MOD83_0223A52C + add r3, sp, #0x54 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #0 + str r0, [r3] + add r0, r4, #0 + add r3, r1, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #0 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F30 ; =MOD83_0223A548 + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #1 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F34 ; =MOD83_0223A564 + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #2 + bl BgClearTilemapBufferAndCommit + ldr r5, _02235F38 ; =MOD83_0223A580 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + add r0, r4, #0 + mov r3, #0 + bl InitBgFromTemplate + add r0, r4, #0 + mov r1, #3 + bl BgClearTilemapBufferAndCommit + add sp, #0x80 + pop {r3, r4, r5, pc} + nop _02235F28: .word MOD83_0223A51C _02235F2C: .word MOD83_0223A52C _02235F30: .word MOD83_0223A548 _02235F34: .word MOD83_0223A564 _02235F38: .word MOD83_0223A580 - thumb_func_end MOD83_02235E68 + thumb_func_end MOD83_02235E68 - thumb_func_start MOD83_02235F3C + thumb_func_start MOD83_02235F3C MOD83_02235F3C: ; 0x02235F3C - push {r3, r4, r5, lr} - sub sp, #0x38 - ldr r5, _02235FB4 ; =MOD83_0223A59C - add r4, r0, #0 - add r3, sp, #0x10 - mov r2, #5 + push {r3, r4, r5, lr} + sub sp, #0x38 + ldr r5, _02235FB4 ; =MOD83_0223A59C + add r4, r0, #0 + add r3, sp, #0x10 + mov r2, #5 _02235F48: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _02235F48 - add r0, sp, #0x10 - bl GX_SetBanks - ldr r0, [r4, #0x20] - bl MOD83_02235E68 - ldr r0, _02235FB8 ; =gMain + 0x60 - mov r1, #1 - strb r1, [r0, #5] - bl GX_SwapDisplay - bl FUN_0201BD5C - mov r1, #0x1e - mov r0, #0 - lsl r1, r1, #4 - mov r2, #0x4e - bl FUN_02002ED0 - mov r0, #0xc0 - str r0, [sp] - mov r0, #0x4e - mov r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x13 - add r3, r2, #0 - bl GfGfxLoader_GXLoadPal - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r4, #0x20] - mov r0, #0x74 - mov r1, #0x16 - mov r3, #2 - bl GfGfxLoader_LoadCharData - mov r0, #2 - mov r1, #0x4e - bl FUN_02002C50 - add sp, #0x38 - pop {r3, r4, r5, pc} - .align 2, 0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02235F48 + add r0, sp, #0x10 + bl GX_SetBanks + ldr r0, [r4, #0x20] + bl MOD83_02235E68 + ldr r0, _02235FB8 ; =gMain + 0x60 + mov r1, #1 + strb r1, [r0, #5] + bl GX_SwapDisplay + bl FUN_0201BD5C + mov r1, #0x1e + mov r0, #0 + lsl r1, r1, #4 + mov r2, #0x4e + bl FUN_02002ED0 + mov r0, #0xc0 + str r0, [sp] + mov r0, #0x4e + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x13 + add r3, r2, #0 + bl GfGfxLoader_GXLoadPal + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r4, #0x20] + mov r0, #0x74 + mov r1, #0x16 + mov r3, #2 + bl GfGfxLoader_LoadCharData + mov r0, #2 + mov r1, #0x4e + bl FUN_02002C50 + add sp, #0x38 + pop {r3, r4, r5, pc} + .align 2, 0 _02235FB4: .word MOD83_0223A59C _02235FB8: .word gMain + 0x60 - thumb_func_end MOD83_02235F3C + thumb_func_end MOD83_02235F3C - thumb_func_start MOD83_02235FBC + thumb_func_start MOD83_02235FBC MOD83_02235FBC: ; 0x02235FBC - push {r4, lr} - sub sp, #0x10 - add r4, r0, #0 - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r4, #0x20] - mov r0, #0x74 - mov r1, #0x14 - mov r3, #2 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r2, #0 - ldr r1, [r4] - ldr r0, _02236008 ; =MOD83_0223B280 - add r3, r2, #0 - ldrb r0, [r0, r1] - mov r1, #2 - str r0, [sp, #8] - ldr r0, [r4, #0x20] - bl BgTilemapRectChangePalette - ldr r0, [r4, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r4, #0x20] + mov r0, #0x74 + mov r1, #0x14 + mov r3, #2 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r2, #0 + ldr r1, [r4] + ldr r0, _02236008 ; =MOD83_0223B280 + add r3, r2, #0 + ldrb r0, [r0, r1] + mov r1, #2 + str r0, [sp, #8] + ldr r0, [r4, #0x20] + bl BgTilemapRectChangePalette + ldr r0, [r4, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _02236008: .word MOD83_0223B280 - thumb_func_end MOD83_02235FBC + thumb_func_end MOD83_02235FBC - thumb_func_start MOD83_0223600C + thumb_func_start MOD83_0223600C MOD83_0223600C: ; 0x0223600C - push {r4, lr} - sub sp, #8 - mov r1, #7 - add r4, r0, #0 - mov r0, #0 - lsl r1, r1, #6 - mov r2, #0x4e - bl FUN_02002ED0 - mov r1, #0 - mov r2, #0x3f - str r1, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r4, #0x20] - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, [r4, #0x1c] - ldr r2, _022360B4 ; =0x000003D2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r4, #0x20] - mov r1, #0 - mov r3, #0xd - bl FUN_0200CD68 - ldr r0, _022360B8 ; =0x0000042C - mov r1, #0 - add r0, r4, r0 - mov r2, #0x4c - bl memset - ldr r0, _022360BC ; =0x00000498 - mov r3, #0x1b - add r1, r0, #0 - add r2, r4, r0 - sub r1, #0x6c - str r2, [r4, r1] - add r1, r0, #0 - mov r2, #2 - sub r1, #0x64 - str r2, [r4, r1] - add r1, r0, #0 - mov r2, #1 - sub r1, #0x60 - str r2, [r4, r1] - add r1, r0, #0 - sub r1, #0x5c - str r3, [r4, r1] - add r1, r0, #0 - mov r3, #4 - sub r1, #0x58 - str r3, [r4, r1] - add r3, r0, #0 - mov r1, #0 - sub r3, #0x48 - str r1, [r4, r3] - add r3, r0, #0 - sub r3, #0x44 - str r2, [r4, r3] - add r3, r0, #0 - sub r3, #0x4c - str r2, [r4, r3] - add r2, r0, #0 - ldr r3, _022360C0 ; =0x0001020F - sub r2, #0x40 - str r3, [r4, r2] - add r2, r0, #0 - ldr r3, _022360C4 ; =0x000F020F - sub r2, #0x3c - str r3, [r4, r2] - add r2, r0, #0 - sub r2, #0x34 - str r1, [r4, r2] - sub r0, #0x30 - str r1, [r4, r0] - add sp, #8 - pop {r4, pc} - nop + push {r4, lr} + sub sp, #8 + mov r1, #7 + add r4, r0, #0 + mov r0, #0 + lsl r1, r1, #6 + mov r2, #0x4e + bl FUN_02002ED0 + mov r1, #0 + mov r2, #0x3f + str r1, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r4, #0x20] + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, [r4, #0x1c] + ldr r2, _022360B4 ; =0x000003D2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r4, #0x20] + mov r1, #0 + mov r3, #0xd + bl FUN_0200CD68 + ldr r0, _022360B8 ; =0x0000042C + mov r1, #0 + add r0, r4, r0 + mov r2, #0x4c + bl memset + ldr r0, _022360BC ; =0x00000498 + mov r3, #0x1b + add r1, r0, #0 + add r2, r4, r0 + sub r1, #0x6c + str r2, [r4, r1] + add r1, r0, #0 + mov r2, #2 + sub r1, #0x64 + str r2, [r4, r1] + add r1, r0, #0 + mov r2, #1 + sub r1, #0x60 + str r2, [r4, r1] + add r1, r0, #0 + sub r1, #0x5c + str r3, [r4, r1] + add r1, r0, #0 + mov r3, #4 + sub r1, #0x58 + str r3, [r4, r1] + add r3, r0, #0 + mov r1, #0 + sub r3, #0x48 + str r1, [r4, r3] + add r3, r0, #0 + sub r3, #0x44 + str r2, [r4, r3] + add r3, r0, #0 + sub r3, #0x4c + str r2, [r4, r3] + add r2, r0, #0 + ldr r3, _022360C0 ; =0x0001020F + sub r2, #0x40 + str r3, [r4, r2] + add r2, r0, #0 + ldr r3, _022360C4 ; =0x000F020F + sub r2, #0x3c + str r3, [r4, r2] + add r2, r0, #0 + sub r2, #0x34 + str r1, [r4, r2] + sub r0, #0x30 + str r1, [r4, r0] + add sp, #8 + pop {r4, pc} + nop _022360B4: .word 0x000003D2 _022360B8: .word 0x0000042C _022360BC: .word 0x00000498 _022360C0: .word 0x0001020F _022360C4: .word 0x000F020F - thumb_func_end MOD83_0223600C + thumb_func_end MOD83_0223600C - thumb_func_start MOD83_022360C8 + thumb_func_start MOD83_022360C8 MOD83_022360C8: ; 0x022360C8 - push {r4, r5, r6, r7, lr} - sub sp, #0x4c - add r6, r0, #0 - mov r7, #0x6b - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x4c + add r6, r0, #0 + mov r7, #0x6b + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022360D6: - mov r0, #0x6a - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl FUN_020200A0 - ldr r0, [r4, r7] - mov r1, #0 - bl FUN_020200A0 - add r5, r5, #1 - add r4, #0xc - cmp r5, #0x1e - blt _022360D6 - mov r7, #0xf2 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + mov r0, #0x6a + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [r4, r7] + mov r1, #0 + bl FUN_020200A0 + add r5, r5, #1 + add r4, #0xc + cmp r5, #0x1e + blt _022360D6 + mov r7, #0xf2 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022360FA: - ldr r0, [r4, r7] - mov r1, #0 - bl FUN_020200A0 - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _022360FA - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #0 - bl FUN_020200A0 - mov r2, #0x61 - lsl r2, r2, #2 - add r0, sp, #0x1c - add r1, r6, #0 - add r2, r6, r2 - mov r3, #1 - bl MOD83_02235244 - mov r0, #0x1c - mov r7, #0 - str r0, [sp, #0x10] - add r4, r6, #0 - add r5, r6, #0 + ldr r0, [r4, r7] + mov r1, #0 + bl FUN_020200A0 + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _022360FA + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #0 + bl FUN_020200A0 + mov r2, #0x61 + lsl r2, r2, #2 + add r0, sp, #0x1c + add r1, r6, #0 + add r2, r6, r2 + mov r3, #1 + bl MOD83_02235244 + mov r0, #0x1c + mov r7, #0 + str r0, [sp, #0x10] + add r4, r6, #0 + add r5, r6, #0 _02236148: - ldr r0, [sp, #0x10] - lsl r0, r0, #0xc - str r0, [sp, #0x24] - mov r0, #0x8e - lsl r0, r0, #0xc - str r0, [sp, #0x28] - add r0, sp, #0x1c - bl FUN_0201FE94 - ldr r1, _02236288 ; =0x00000414 - str r0, [r4, r1] - add r0, r1, #0 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200BC - ldr r0, _02236288 ; =0x00000414 - add r1, r7, #0 - ldr r0, [r4, r0] - add r1, #0xa - bl FUN_02020130 - ldr r0, _02236288 ; =0x00000414 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_02020238 - ldr r0, _02236288 ; =0x00000414 - mov r1, #1 - ldr r0, [r4, r0] - bl FUN_020200A0 - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_0223526C - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - str r0, [sp, #0x14] - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_02235290 - mov r1, #0x3d - mov r2, #0xf3 - lsl r1, r1, #4 - lsl r2, r2, #2 - str r0, [sp, #0x18] - ldr r1, [r5, r1] - ldr r2, [r5, r2] - add r0, r6, #0 - bl MOD83_022352B4 - add r2, r0, #0 - ldr r0, _02236288 ; =0x00000414 - str r7, [sp] - ldr r0, [r4, r0] - ldr r3, _0223628C ; =gMain + 0x60 - str r0, [sp, #4] - ldrb r3, [r3, #6] - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x18] - bl MOD83_022353C0 - ldr r0, [sp, #0x10] - add r7, r7, #1 - add r0, #0x28 - str r0, [sp, #0x10] - add r4, r4, #4 - add r5, #0xc - cmp r7, #6 - blt _02236148 - mov r0, #0 - str r0, [sp] - mov r0, #6 - lsl r0, r0, #8 - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0x4e - str r0, [sp, #0xc] - ldr r2, [r6, #0x20] - mov r0, #0x74 - mov r1, #0x15 - mov r3, #2 - bl GfGfxLoader_LoadScrnData - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - str r0, [sp, #4] - mov r2, #0 - ldr r1, [r6] - ldr r0, _02236290 ; =MOD83_0223B280 - add r3, r2, #0 - ldrb r0, [r0, r1] - mov r1, #2 - str r0, [sp, #8] - ldr r0, [r6, #0x20] - bl BgTilemapRectChangePalette - ldr r0, [r6, #0x20] - mov r1, #2 - bl BgCommitTilemapBufferToVram - mov r0, #2 - mov r1, #0 - bl GX_EngineAToggleLayers - mov r1, #7 - mov r0, #0 - lsl r1, r1, #6 - mov r2, #0x4e - bl FUN_02002ED0 - mov r1, #0 - mov r2, #0x3f - str r1, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r6, #0x20] - lsl r2, r2, #4 - mov r3, #0xe - bl FUN_0200CB00 - ldr r0, [r6, #0x1c] - ldr r2, _02236294 ; =0x000003D2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - mov r0, #0x4e - str r0, [sp, #4] - ldr r0, [r6, #0x20] - mov r1, #0 - mov r3, #0xd - bl FUN_0200CD68 - add r0, r6, #0 - bl MOD83_0223600C - mov r1, #0x46 - mov r0, #0xa - lsl r1, r1, #4 - str r0, [r6, r1] - sub r1, #0x34 - add r0, r6, #0 - add r1, r6, r1 - mov r2, #0x18 - bl MOD83_02234F2C - add sp, #0x4c - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r0, [sp, #0x10] + lsl r0, r0, #0xc + str r0, [sp, #0x24] + mov r0, #0x8e + lsl r0, r0, #0xc + str r0, [sp, #0x28] + add r0, sp, #0x1c + bl FUN_0201FE94 + ldr r1, _02236288 ; =0x00000414 + str r0, [r4, r1] + add r0, r1, #0 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200BC + ldr r0, _02236288 ; =0x00000414 + add r1, r7, #0 + ldr r0, [r4, r0] + add r1, #0xa + bl FUN_02020130 + ldr r0, _02236288 ; =0x00000414 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_02020238 + ldr r0, _02236288 ; =0x00000414 + mov r1, #1 + ldr r0, [r4, r0] + bl FUN_020200A0 + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_0223526C + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + str r0, [sp, #0x14] + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_02235290 + mov r1, #0x3d + mov r2, #0xf3 + lsl r1, r1, #4 + lsl r2, r2, #2 + str r0, [sp, #0x18] + ldr r1, [r5, r1] + ldr r2, [r5, r2] + add r0, r6, #0 + bl MOD83_022352B4 + add r2, r0, #0 + ldr r0, _02236288 ; =0x00000414 + str r7, [sp] + ldr r0, [r4, r0] + ldr r3, _0223628C ; =gMain + 0x60 + str r0, [sp, #4] + ldrb r3, [r3, #6] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] + bl MOD83_022353C0 + ldr r0, [sp, #0x10] + add r7, r7, #1 + add r0, #0x28 + str r0, [sp, #0x10] + add r4, r4, #4 + add r5, #0xc + cmp r7, #6 + blt _02236148 + mov r0, #0 + str r0, [sp] + mov r0, #6 + lsl r0, r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x4e + str r0, [sp, #0xc] + ldr r2, [r6, #0x20] + mov r0, #0x74 + mov r1, #0x15 + mov r3, #2 + bl GfGfxLoader_LoadScrnData + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + str r0, [sp, #4] + mov r2, #0 + ldr r1, [r6] + ldr r0, _02236290 ; =MOD83_0223B280 + add r3, r2, #0 + ldrb r0, [r0, r1] + mov r1, #2 + str r0, [sp, #8] + ldr r0, [r6, #0x20] + bl BgTilemapRectChangePalette + ldr r0, [r6, #0x20] + mov r1, #2 + bl BgCommitTilemapBufferToVram + mov r0, #2 + mov r1, #0 + bl GX_EngineAToggleLayers + mov r1, #7 + mov r0, #0 + lsl r1, r1, #6 + mov r2, #0x4e + bl FUN_02002ED0 + mov r1, #0 + mov r2, #0x3f + str r1, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r6, #0x20] + lsl r2, r2, #4 + mov r3, #0xe + bl FUN_0200CB00 + ldr r0, [r6, #0x1c] + ldr r2, _02236294 ; =0x000003D2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x4e + str r0, [sp, #4] + ldr r0, [r6, #0x20] + mov r1, #0 + mov r3, #0xd + bl FUN_0200CD68 + add r0, r6, #0 + bl MOD83_0223600C + mov r1, #0x46 + mov r0, #0xa + lsl r1, r1, #4 + str r0, [r6, r1] + sub r1, #0x34 + add r0, r6, #0 + add r1, r6, r1 + mov r2, #0x18 + bl MOD83_02234F2C + add sp, #0x4c + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02236288: .word 0x00000414 _0223628C: .word gMain + 0x60 _02236290: .word MOD83_0223B280 _02236294: .word 0x000003D2 - thumb_func_end MOD83_022360C8 + thumb_func_end MOD83_022360C8 - thumb_func_start MOD83_02236298 + thumb_func_start MOD83_02236298 MOD83_02236298: ; 0x02236298 - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4] - cmp r1, #0 - beq _022362B4 - mov r1, #0 - bl FUN_0200D0E0 - add r0, r4, #0 - bl ClearWindowTilemapAndCopyToVram - add r0, r4, #0 - bl RemoveWindow + push {r4, lr} + add r4, r0, #0 + ldr r1, [r4] + cmp r1, #0 + beq _022362B4 + mov r1, #0 + bl FUN_0200D0E0 + add r0, r4, #0 + bl ClearWindowTilemapAndCopyToVram + add r0, r4, #0 + bl RemoveWindow _022362B4: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD83_02236298 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD83_02236298 - thumb_func_start MOD83_022362B8 + thumb_func_start MOD83_022362B8 MOD83_022362B8: ; 0x022362B8 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - ldr r7, _02236328 ; =0x00000414 - mov r4, #0 - add r5, r6, #0 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + ldr r7, _02236328 ; =0x00000414 + mov r4, #0 + add r5, r6, #0 _022362C2: - ldr r0, [r5, r7] - bl FUN_0201FFC8 - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _022362C2 - mov r0, #2 - mov r1, #1 - bl GX_EngineAToggleLayers - ldr r0, _0223632C ; =0x00000498 - add r0, r6, r0 - bl MOD83_02236298 - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - mov r1, #1 - bl FUN_020200A0 - mov r0, #0xf3 - mov r5, #0 - lsl r0, r0, #2 - add r4, r6, #0 - sub r3, r5, #1 - mov r2, #0xe - add r1, r0, #4 + ldr r0, [r5, r7] + bl FUN_0201FFC8 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _022362C2 + mov r0, #2 + mov r1, #1 + bl GX_EngineAToggleLayers + ldr r0, _0223632C ; =0x00000498 + add r0, r6, r0 + bl MOD83_02236298 + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + mov r1, #1 + bl FUN_020200A0 + mov r0, #0xf3 + mov r5, #0 + lsl r0, r0, #2 + add r4, r6, #0 + sub r3, r5, #1 + mov r2, #0xe + add r1, r0, #4 _02236312: - str r3, [r4, r0] - str r2, [r4, r1] - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _02236312 - mov r0, #0x41 - mov r1, #0 - lsl r0, r0, #4 - str r1, [r6, r0] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r3, [r4, r0] + str r2, [r4, r1] + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _02236312 + mov r0, #0x41 + mov r1, #0 + lsl r0, r0, #4 + str r1, [r6, r0] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02236328: .word 0x00000414 _0223632C: .word 0x00000498 - thumb_func_end MOD83_022362B8 + thumb_func_end MOD83_022362B8 - thumb_func_start MOD83_02236330 + thumb_func_start MOD83_02236330 MOD83_02236330: ; 0x02236330 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - mov r7, #0x6a - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + mov r7, #0x6a + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02236344: - ldr r0, [r5, r7] - cmp r0, #0 - beq _0223634E - bl FUN_0201FFC8 + ldr r0, [r5, r7] + cmp r0, #0 + beq _0223634E + bl FUN_0201FFC8 _0223634E: - mov r0, #0x6b - lsl r0, r0, #2 - ldr r0, [r5, r0] - cmp r0, #0 - beq _0223635C - bl FUN_0201FFC8 + mov r0, #0x6b + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + beq _0223635C + bl FUN_0201FFC8 _0223635C: - add r4, r4, #1 - add r5, #0xc - cmp r4, #0x1e - blt _02236344 - mov r7, #0xf2 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + add r4, r4, #1 + add r5, #0xc + cmp r4, #0x1e + blt _02236344 + mov r7, #0xf2 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _0223636C: - ldr r0, [r4, r7] - cmp r0, #0 - beq _02236376 - bl FUN_0201FFC8 + ldr r0, [r4, r7] + cmp r0, #0 + beq _02236376 + bl FUN_0201FFC8 _02236376: - add r5, r5, #1 - add r4, #0xc - cmp r5, #6 - blt _0223636C - mov r0, #0xe6 - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _0223638C - bl FUN_0201FFC8 + add r5, r5, #1 + add r4, #0xc + cmp r5, #6 + blt _0223636C + mov r0, #0xe6 + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _0223638C + bl FUN_0201FFC8 _0223638C: - mov r0, #0xee - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _0223639A - bl FUN_0201FFC8 + mov r0, #0xee + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _0223639A + bl FUN_0201FFC8 _0223639A: - mov r0, #0xea - lsl r0, r0, #2 - ldr r0, [r6, r0] - cmp r0, #0 - beq _022363A8 - bl FUN_0201FFC8 + mov r0, #0xea + lsl r0, r0, #2 + ldr r0, [r6, r0] + cmp r0, #0 + beq _022363A8 + bl FUN_0201FFC8 _022363A8: - ldr r0, _0223643C ; =0x00000478 - add r0, r6, r0 - bl MOD83_02236298 - ldr r0, _02236440 ; =0x00000488 - add r0, r6, r0 - bl MOD83_02236298 - ldr r0, _02236444 ; =0x00000498 - add r0, r6, r0 - bl MOD83_02236298 - mov r0, #2 - bl FUN_02002CF8 - mov r0, #0x5b - lsl r0, r0, #2 - ldr r0, [r6, r0] - bl FUN_02009C0C - mov r0, #0x17 - lsl r0, r0, #4 - ldr r0, [r6, r0] - bl FUN_02009E04 - mov r7, #0x55 - mov r5, #0 - add r4, r6, #0 - lsl r7, r7, #2 + ldr r0, _0223643C ; =0x00000478 + add r0, r6, r0 + bl MOD83_02236298 + ldr r0, _02236440 ; =0x00000488 + add r0, r6, r0 + bl MOD83_02236298 + ldr r0, _02236444 ; =0x00000498 + add r0, r6, r0 + bl MOD83_02236298 + mov r0, #2 + bl FUN_02002CF8 + mov r0, #0x5b + lsl r0, r0, #2 + ldr r0, [r6, r0] + bl FUN_02009C0C + mov r0, #0x17 + lsl r0, r0, #4 + ldr r0, [r6, r0] + bl FUN_02009E04 + mov r7, #0x55 + mov r5, #0 + add r4, r6, #0 + lsl r7, r7, #2 _022363E2: - ldr r0, [r4, r7] - bl FUN_02008E2C - add r5, r5, #1 - add r4, r4, #4 - cmp r5, #6 - blt _022363E2 - ldr r0, [r6, #0x28] - bl FUN_0201FD58 - mov r0, #0 - str r0, [r6, #0x28] - bl FUN_02009FA0 - bl FUN_0201D12C - bl FUN_0201E08C - ldr r0, _02236448 ; =0x0000E88C - ldr r0, [r6, r0] - bl FUN_020145A8 - ldr r0, _0223644C ; =gMain + 0x60 - mov r1, #0 - strb r1, [r0, #5] - bl GX_SwapDisplay - ldr r0, [r6, #0x20] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #2 - bl FreeBgTilemapBuffer - ldr r0, [r6, #0x20] - mov r1, #3 - bl FreeBgTilemapBuffer - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, [r4, r7] + bl FUN_02008E2C + add r5, r5, #1 + add r4, r4, #4 + cmp r5, #6 + blt _022363E2 + ldr r0, [r6, #0x28] + bl FUN_0201FD58 + mov r0, #0 + str r0, [r6, #0x28] + bl FUN_02009FA0 + bl FUN_0201D12C + bl FUN_0201E08C + ldr r0, _02236448 ; =0x0000E88C + ldr r0, [r6, r0] + bl FUN_020145A8 + ldr r0, _0223644C ; =gMain + 0x60 + mov r1, #0 + strb r1, [r0, #5] + bl GX_SwapDisplay + ldr r0, [r6, #0x20] + mov r1, #0 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #1 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #2 + bl FreeBgTilemapBuffer + ldr r0, [r6, #0x20] + mov r1, #3 + bl FreeBgTilemapBuffer + pop {r3, r4, r5, r6, r7, pc} + nop _0223643C: .word 0x00000478 _02236440: .word 0x00000488 _02236444: .word 0x00000498 _02236448: .word 0x0000E88C _0223644C: .word gMain + 0x60 - thumb_func_end MOD83_02236330 + thumb_func_end MOD83_02236330 - thumb_func_start MOD83_02236450 + thumb_func_start MOD83_02236450 MOD83_02236450: ; 0x02236450 - push {lr} - sub sp, #0x14 - ldr r1, [r0, #0x20] - mov r2, #0x19 - str r1, [sp] - mov r1, #0 - str r1, [sp, #4] - mov r1, #2 - lsl r1, r1, #8 - str r1, [sp, #8] - mov r1, #8 - str r1, [sp, #0xc] - add r1, sp, #0 - strb r2, [r1, #0x10] - mov r2, #7 - strb r2, [r1, #0x11] - ldr r1, _02236480 ; =0x0000E88C - ldr r0, [r0, r1] - add r1, sp, #0 - bl FUN_020145C8 - add sp, #0x14 - pop {pc} - nop + push {lr} + sub sp, #0x14 + ldr r1, [r0, #0x20] + mov r2, #0x19 + str r1, [sp] + mov r1, #0 + str r1, [sp, #4] + mov r1, #2 + lsl r1, r1, #8 + str r1, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + add r1, sp, #0 + strb r2, [r1, #0x10] + mov r2, #7 + strb r2, [r1, #0x11] + ldr r1, _02236480 ; =0x0000E88C + ldr r0, [r0, r1] + add r1, sp, #0 + bl FUN_020145C8 + add sp, #0x14 + pop {pc} + nop _02236480: .word 0x0000E88C - thumb_func_end MOD83_02236450 + thumb_func_end MOD83_02236450 - thumb_func_start MOD83_02236484 + thumb_func_start MOD83_02236484 MOD83_02236484: ; 0x02236484 - push {r4, r5, r6, lr} - sub sp, #0x18 - add r5, r0, #0 - bl MOD83_02237464 - add r4, r0, #0 - bl MOD83_02236EA8 - add r3, r0, #0 - add r0, r4, #0 - add r1, sp, #8 - mov r2, #8 - bl FUN_02015D88 - mov r0, #0x4e - bl ScrStrBufs_new - add r4, r0, #0 - mov r0, #8 - mov r1, #0x4e - bl String_ctor - add r1, sp, #8 - add r6, r0, #0 - bl CopyU16ArrayToString - mov r1, #1 - str r1, [sp] - mov r0, #2 - str r0, [sp, #4] - add r0, r4, #0 - add r2, r6, #0 - mov r3, #0 - bl BufferString - add r0, r5, #0 - bl MOD83_0223600C - ldr r0, [r5] - mov r2, #0x18 - lsl r1, r0, #2 - ldr r0, _02236508 ; =MOD83_0223B2A0 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - add r0, #0xc - sub r1, #0x34 - str r4, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - bl MOD83_02234F2C - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - bl ScrStrBufs_delete - add r0, r5, #0 - bl MOD83_02236450 - add sp, #0x18 - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + sub sp, #0x18 + add r5, r0, #0 + bl MOD83_02237464 + add r4, r0, #0 + bl MOD83_02236EA8 + add r3, r0, #0 + add r0, r4, #0 + add r1, sp, #8 + mov r2, #8 + bl FUN_02015D88 + mov r0, #0x4e + bl ScrStrBufs_new + add r4, r0, #0 + mov r0, #8 + mov r1, #0x4e + bl String_ctor + add r1, sp, #8 + add r6, r0, #0 + bl CopyU16ArrayToString + mov r1, #1 + str r1, [sp] + mov r0, #2 + str r0, [sp, #4] + add r0, r4, #0 + add r2, r6, #0 + mov r3, #0 + bl BufferString + add r0, r5, #0 + bl MOD83_0223600C + ldr r0, [r5] + mov r2, #0x18 + lsl r1, r0, #2 + ldr r0, _02236508 ; =MOD83_0223B2A0 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + add r0, #0xc + sub r1, #0x34 + str r4, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + bl MOD83_02234F2C + add r0, r6, #0 + bl String_dtor + add r0, r4, #0 + bl ScrStrBufs_delete + add r0, r5, #0 + bl MOD83_02236450 + add sp, #0x18 + pop {r4, r5, r6, pc} + nop _02236508: .word MOD83_0223B2A0 - thumb_func_end MOD83_02236484 + thumb_func_end MOD83_02236484 - thumb_func_start MOD83_0223650C + thumb_func_start MOD83_0223650C MOD83_0223650C: ; 0x0223650C - push {r4, lr} - add r4, r0, #0 - ldr r0, _0223653C ; =0x00012604 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02236520 - blx r0 - ldr r0, _0223653C ; =0x00012604 - mov r1, #0 - str r1, [r4, r0] + push {r4, lr} + add r4, r0, #0 + ldr r0, _0223653C ; =0x00012604 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02236520 + blx r0 + ldr r0, _0223653C ; =0x00012604 + mov r1, #0 + str r1, [r4, r0] _02236520: - bl FUN_0201C30C - bl FUN_02009F80 - ldr r0, [r4, #0x20] - bl DoScheduledBgGpuUpdates - ldr r3, _02236540 ; =MOD83_027E0000 - ldr r1, _02236544 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + bl FUN_0201C30C + bl FUN_02009F80 + ldr r0, [r4, #0x20] + bl DoScheduledBgGpuUpdates + ldr r3, _02236540 ; =MOD83_027E0000 + ldr r1, _02236544 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _0223653C: .word 0x00012604 _02236540: .word 0x027E0000 _02236544: .word 0x00003FF8 - thumb_func_end MOD83_0223650C + thumb_func_end MOD83_0223650C - thumb_func_start MOD83_02236548 + thumb_func_start MOD83_02236548 MOD83_02236548: ; 0x02236548 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - str r0, [sp] - ldr r0, [r0, #0x10] - bl FUN_02022528 - str r0, [sp, #8] - bl FUN_0202C0B8 - cmp r0, #0 - bne _0223659C - ldr r0, [sp, #8] - bl FUN_0202C060 - cmp r0, #0 - bne _0223656E - add sp, #0xc - mov r0, #3 - pop {r4, r5, r6, r7, pc} + push {r4, r5, r6, r7, lr} + sub sp, #0xc + str r0, [sp] + ldr r0, [r0, #0x10] + bl FUN_02022528 + str r0, [sp, #8] + bl FUN_0202C0B8 + cmp r0, #0 + bne _0223659C + ldr r0, [sp, #8] + bl FUN_0202C060 + cmp r0, #0 + bne _0223656E + add sp, #0xc + mov r0, #3 + pop {r4, r5, r6, r7, pc} _0223656E: - ldr r0, [sp, #8] - bl FUN_0202C094 - cmp r0, #0 - bne _0223657E - add sp, #0xc - mov r0, #4 - pop {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + bl FUN_0202C094 + cmp r0, #0 + bne _0223657E + add sp, #0xc + mov r0, #4 + pop {r4, r5, r6, r7, pc} _0223657E: - bl MOD83_02237448 - add r1, r0, #0 - ldr r0, [sp, #8] - bl FUN_0202C028 - cmp r0, #0 - bne _02236590 - ldr r0, _022365F8 ; =0x0002A300 + bl MOD83_02237448 + add r1, r0, #0 + ldr r0, [sp, #8] + bl FUN_0202C028 + cmp r0, #0 + bne _02236590 + ldr r0, _022365F8 ; =0x0002A300 _02236590: - ldr r1, _022365FC ; =0x00015180 - cmp r0, r1 - bge _0223659C - add sp, #0xc - mov r0, #2 - pop {r4, r5, r6, r7, pc} + ldr r1, _022365FC ; =0x00015180 + cmp r0, r1 + bge _0223659C + add sp, #0xc + mov r0, #2 + pop {r4, r5, r6, r7, pc} _0223659C: - mov r6, #0 - str r6, [sp, #4] - add r7, r6, #0 + mov r6, #0 + str r6, [sp, #4] + add r7, r6, #0 _022365A2: - mov r4, #0 - add r5, r4, #0 + mov r4, #0 + add r5, r4, #0 _022365A6: - ldr r1, [sp] - ldr r0, _02236600 ; =0x0000E880 - mov r2, #0 - ldr r0, [r1, r0] - mov r1, #5 - add r0, r0, #4 - add r0, r0, r7 - add r0, r0, r5 - bl AGB_GetBoxMonData - cmp r0, #0 - beq _022365C0 - add r6, r6, #1 + ldr r1, [sp] + ldr r0, _02236600 ; =0x0000E880 + mov r2, #0 + ldr r0, [r1, r0] + mov r1, #5 + add r0, r0, #4 + add r0, r0, r7 + add r0, r0, r5 + bl AGB_GetBoxMonData + cmp r0, #0 + beq _022365C0 + add r6, r6, #1 _022365C0: - add r4, r4, #1 - add r5, #0x50 - cmp r4, #0x1e - blt _022365A6 - mov r0, #0x96 - lsl r0, r0, #4 - add r7, r7, r0 - ldr r0, [sp, #4] - add r0, r0, #1 - str r0, [sp, #4] - cmp r0, #0xe - blt _022365A2 - cmp r6, #6 - bge _022365E2 - add sp, #0xc - mov r0, #5 - pop {r4, r5, r6, r7, pc} + add r4, r4, #1 + add r5, #0x50 + cmp r4, #0x1e + blt _022365A6 + mov r0, #0x96 + lsl r0, r0, #4 + add r7, r7, r0 + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] + cmp r0, #0xe + blt _022365A2 + cmp r6, #6 + bge _022365E2 + add sp, #0xc + mov r0, #5 + pop {r4, r5, r6, r7, pc} _022365E2: - ldr r0, [sp, #8] - bl FUN_0202C000 - cmp r0, #0 - beq _022365F2 - add sp, #0xc - mov r0, #6 - pop {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + bl FUN_0202C000 + cmp r0, #0 + beq _022365F2 + add sp, #0xc + mov r0, #6 + pop {r4, r5, r6, r7, pc} _022365F2: - mov r0, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _022365F8: .word 0x0002A300 _022365FC: .word 0x00015180 _02236600: .word 0x0000E880 - thumb_func_end MOD83_02236548 + thumb_func_end MOD83_02236548 - thumb_func_start MOD83_02236604 + thumb_func_start MOD83_02236604 MOD83_02236604: ; 0x02236604 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - ldr r1, [r5, #4] - cmp r1, #0 - beq _02236640 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - ldr r0, _02236660 ; =MOD83_0223B2D8 - lsl r1, r4, #2 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - sub r1, #0x34 - mov r2, #1 - add r0, #0x10 - str r2, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - str r0, [r5, #4] - b _0223665A + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + ldr r1, [r5, #4] + cmp r1, #0 + beq _02236640 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + ldr r0, _02236660 ; =MOD83_0223B2D8 + lsl r1, r4, #2 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + sub r1, #0x34 + mov r2, #1 + add r0, #0x10 + str r2, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + str r0, [r5, #4] + b _0223665A _02236640: - ldr r0, _02236664 ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _0223665A - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + ldr r0, _02236664 ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _0223665A + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _0223665A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _02236660: .word MOD83_0223B2D8 _02236664: .word 0x00000474 - thumb_func_end MOD83_02236604 + thumb_func_end MOD83_02236604 - thumb_func_start MOD83_02236668 + thumb_func_start MOD83_02236668 MOD83_02236668: ; 0x02236668 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - ldr r1, [r5, #4] - cmp r1, #0 - beq _022366A4 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - ldr r0, _022366C8 ; =MOD83_0223B2D8 - lsl r1, r4, #2 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - sub r1, #0x34 - mov r2, #1 - add r0, #0x10 - str r2, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - str r0, [r5, #4] - b _022366C4 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + ldr r1, [r5, #4] + cmp r1, #0 + beq _022366A4 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + ldr r0, _022366C8 ; =MOD83_0223B2D8 + lsl r1, r4, #2 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + sub r1, #0x34 + mov r2, #1 + add r0, #0x10 + str r2, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + str r0, [r5, #4] + b _022366C4 _022366A4: - ldr r0, _022366CC ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _022366C4 - add r0, r5, #0 - bl MOD83_02236450 - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + ldr r0, _022366CC ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _022366C4 + add r0, r5, #0 + bl MOD83_02236450 + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _022366C4: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _022366C8: .word MOD83_0223B2D8 _022366CC: .word 0x00000474 - thumb_func_end MOD83_02236668 + thumb_func_end MOD83_02236668 - thumb_func_start MOD83_022366D0 + thumb_func_start MOD83_022366D0 MOD83_022366D0: ; 0x022366D0 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - mov r1, #0 - ldr r2, [r5, #8] - mvn r1, r1 - cmp r2, r1 - beq _02236712 - bl MOD83_0223600C - mov r0, #1 - bl FUN_02002BB8 - mov r1, #0x46 - ldr r0, [r5, #8] - lsl r1, r1, #4 - str r0, [r5, r1] - add r0, r1, #0 - add r0, #0x10 - sub r1, #0x34 - str r4, [r5, r0] - add r0, r5, #0 - add r1, r5, r1 - mov r2, #0x18 - bl MOD83_02234F2C - mov r0, #0 - mvn r0, r0 - str r0, [r5, #8] - ldr r0, _02236754 ; =0x000005DC - bl PlaySE - b _02236750 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + mov r1, #0 + ldr r2, [r5, #8] + mvn r1, r1 + cmp r2, r1 + beq _02236712 + bl MOD83_0223600C + mov r0, #1 + bl FUN_02002BB8 + mov r1, #0x46 + ldr r0, [r5, #8] + lsl r1, r1, #4 + str r0, [r5, r1] + add r0, r1, #0 + add r0, #0x10 + sub r1, #0x34 + str r4, [r5, r0] + add r0, r5, #0 + add r1, r5, r1 + mov r2, #0x18 + bl MOD83_02234F2C + mov r0, #0 + mvn r0, r0 + str r0, [r5, #8] + ldr r0, _02236754 ; =0x000005DC + bl PlaySE + b _02236750 _02236712: - cmp r4, #0 - beq _02236730 - ldr r0, _02236758 ; =0x00000474 - ldr r0, [r5, r0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_0201BD70 - cmp r0, #0 - bne _02236750 - mov r0, #0 - bl FUN_02002BB8 - mov r0, #1 - pop {r3, r4, r5, pc} + cmp r4, #0 + beq _02236730 + ldr r0, _02236758 ; =0x00000474 + ldr r0, [r5, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_0201BD70 + cmp r0, #0 + bne _02236750 + mov r0, #0 + bl FUN_02002BB8 + mov r0, #1 + pop {r3, r4, r5, pc} _02236730: - ldr r0, _0223675C ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _02236740 - ldr r0, _02236760 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236750 + ldr r0, _0223675C ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _02236740 + ldr r0, _02236760 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236750 _02236740: - mov r0, #0 - bl FUN_02002BB8 - ldr r0, _02236754 ; =0x000005DC - bl PlaySE - mov r0, #1 - pop {r3, r4, r5, pc} + mov r0, #0 + bl FUN_02002BB8 + ldr r0, _02236754 ; =0x000005DC + bl PlaySE + mov r0, #1 + pop {r3, r4, r5, pc} _02236750: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02236754: .word 0x000005DC _02236758: .word 0x00000474 _0223675C: .word gMain + 0x40 _02236760: .word gMain - thumb_func_end MOD83_022366D0 + thumb_func_end MOD83_022366D0 - thumb_func_start MOD83_02236764 + thumb_func_start MOD83_02236764 MOD83_02236764: ; 0x02236764 - push {r3, r4, r5, lr} - mov r2, #0xa - add r5, r0, #0 - mov r0, #3 - mov r1, #0x4e - lsl r2, r2, #0xe - bl CreateHeap - ldr r1, _022367F0 ; =0x00012608 - add r0, r5, #0 - mov r2, #0x4e - bl OverlayManager_CreateAndGetData - ldr r2, _022367F0 ; =0x00012608 - mov r1, #0 - add r4, r0, #0 - bl memset - mov r0, #0x4e - bl BgConfig_Alloc - str r0, [r4, #0x20] - mov r0, #0x4e - bl FUN_02014590 - ldr r1, _022367F4 ; =0x0000E88C - str r0, [r4, r1] - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - bl OverlayManager_GetField18 - ldr r0, [r0, #8] - str r0, [r4, #0x10] - bl Sav2_PlayerData_GetProfileAddr - str r0, [r4, #0x14] - ldr r0, [r4, #0x10] - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0x18] - bl Options_GetFrame - str r0, [r4, #0x1c] - ldr r1, _022367F8 ; =0x00000496 - mov r0, #9 - mov r2, #1 - bl FUN_0200433C - bl OS_IsTickAvailable - cmp r0, #0 - bne _022367DE - bl OS_InitTick + push {r3, r4, r5, lr} + mov r2, #0xa + add r5, r0, #0 + mov r0, #3 + mov r1, #0x4e + lsl r2, r2, #0xe + bl CreateHeap + ldr r1, _022367F0 ; =0x00012608 + add r0, r5, #0 + mov r2, #0x4e + bl OverlayManager_CreateAndGetData + ldr r2, _022367F0 ; =0x00012608 + mov r1, #0 + add r4, r0, #0 + bl memset + mov r0, #0x4e + bl BgConfig_Alloc + str r0, [r4, #0x20] + mov r0, #0x4e + bl FUN_02014590 + ldr r1, _022367F4 ; =0x0000E88C + str r0, [r4, r1] + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + bl OverlayManager_GetField18 + ldr r0, [r0, #8] + str r0, [r4, #0x10] + bl Sav2_PlayerData_GetProfileAddr + str r0, [r4, #0x14] + ldr r0, [r4, #0x10] + bl Sav2_PlayerData_GetOptionsAddr + str r0, [r4, #0x18] + bl Options_GetFrame + str r0, [r4, #0x1c] + ldr r1, _022367F8 ; =0x00000496 + mov r0, #9 + mov r2, #1 + bl FUN_0200433C + bl OS_IsTickAvailable + cmp r0, #0 + bne _022367DE + bl OS_InitTick _022367DE: - bl MOD83_02239490 - ldr r0, _022367FC ; =0x0000E89C - add r1, r4, r0 - ldr r0, _02236800 ; =MOD83_0223BB14 - str r1, [r0] - mov r0, #1 - pop {r3, r4, r5, pc} - nop + bl MOD83_02239490 + ldr r0, _022367FC ; =0x0000E89C + add r1, r4, r0 + ldr r0, _02236800 ; =MOD83_0223BB14 + str r1, [r0] + mov r0, #1 + pop {r3, r4, r5, pc} + nop _022367F0: .word 0x00012608 _022367F4: .word 0x0000E88C _022367F8: .word 0x00000496 _022367FC: .word 0x0000E89C _02236800: .word MOD83_0223BB14 - thumb_func_end MOD83_02236764 + thumb_func_end MOD83_02236764 - thumb_func_start MOD83_02236804 + thumb_func_start MOD83_02236804 MOD83_02236804: ; 0x02236804 - push {r4, r5, r6, lr} - add r5, r1, #0 - bl OverlayManager_GetData - add r4, r0, #0 - bl CTRDG_IsExisting - bl CTRDG_IsPulledOut - cmp r0, #1 - beq _02236822 - ldr r0, _02236B3C ; =UNK_02016FA4 - ldr r0, [r0] - cmp r0, #0 - beq _02236828 + push {r4, r5, r6, lr} + add r5, r1, #0 + bl OverlayManager_GetData + add r4, r0, #0 + bl CTRDG_IsExisting + bl CTRDG_IsPulledOut + cmp r0, #1 + beq _02236822 + ldr r0, _02236B3C ; =UNK_02016FA4 + ldr r0, [r0] + cmp r0, #0 + beq _02236828 _02236822: - mov r0, #0x4e - bl FUN_02089F24 + mov r0, #0x4e + bl FUN_02089F24 _02236828: - ldr r0, [r4, #0xc] - add r0, r0, #1 - str r0, [r4, #0xc] - ldr r0, [r5] - cmp r0, #0x18 - bhi _02236924 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, [r4, #0xc] + add r0, r0, #1 + str r0, [r4, #0xc] + ldr r0, [r5] + cmp r0, #0x18 + bhi _02236924 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02236840: ; jump table - .short _02236872 - _02236840 - 2 ; case 0 - .short _022368BA - _02236840 - 2 ; case 1 - .short _02236900 - _02236840 - 2 ; case 2 - .short _02236914 - _02236840 - 2 ; case 3 - .short _0223694E - _02236840 - 2 ; case 4 - .short _02236966 - _02236840 - 2 ; case 5 - .short _022369BC - _02236840 - 2 ; case 6 - .short _022369CE - _02236840 - 2 ; case 7 - .short _022369EC - _02236840 - 2 ; case 8 - .short _022369FE - _02236840 - 2 ; case 9 - .short _02236A5C - _02236840 - 2 ; case 10 - .short _02236A74 - _02236840 - 2 ; case 11 - .short _02236A88 - _02236840 - 2 ; case 12 - .short _02236AC8 - _02236840 - 2 ; case 13 - .short _02236BF0 - _02236840 - 2 ; case 14 - .short _02236C0A - _02236840 - 2 ; case 15 - .short _02236C26 - _02236840 - 2 ; case 16 - .short _02236C40 - _02236840 - 2 ; case 17 - .short _02236C76 - _02236840 - 2 ; case 18 - .short _02236C9C - _02236840 - 2 ; case 19 - .short _02236D06 - _02236840 - 2 ; case 20 - .short _02236D12 - _02236840 - 2 ; case 21 - .short _02236D54 - _02236840 - 2 ; case 22 - .short _02236D78 - _02236840 - 2 ; case 23 - .short _02236D86 - _02236840 - 2 ; case 24 + .short _02236872 - _02236840 - 2 ; case 0 + .short _022368BA - _02236840 - 2 ; case 1 + .short _02236900 - _02236840 - 2 ; case 2 + .short _02236914 - _02236840 - 2 ; case 3 + .short _0223694E - _02236840 - 2 ; case 4 + .short _02236966 - _02236840 - 2 ; case 5 + .short _022369BC - _02236840 - 2 ; case 6 + .short _022369CE - _02236840 - 2 ; case 7 + .short _022369EC - _02236840 - 2 ; case 8 + .short _022369FE - _02236840 - 2 ; case 9 + .short _02236A5C - _02236840 - 2 ; case 10 + .short _02236A74 - _02236840 - 2 ; case 11 + .short _02236A88 - _02236840 - 2 ; case 12 + .short _02236AC8 - _02236840 - 2 ; case 13 + .short _02236BF0 - _02236840 - 2 ; case 14 + .short _02236C0A - _02236840 - 2 ; case 15 + .short _02236C26 - _02236840 - 2 ; case 16 + .short _02236C40 - _02236840 - 2 ; case 17 + .short _02236C76 - _02236840 - 2 ; case 18 + .short _02236C9C - _02236840 - 2 ; case 19 + .short _02236D06 - _02236840 - 2 ; case 20 + .short _02236D12 - _02236840 - 2 ; case 21 + .short _02236D54 - _02236840 - 2 ; case 22 + .short _02236D78 - _02236840 - 2 ; case 23 + .short _02236D86 - _02236840 - 2 ; case 24 _02236872: - bl MOD83_02236E90 - mov r0, #0x4b - lsl r0, r0, #4 - add r0, r4, r0 - bl MOD83_02236E18 - ldr r1, _02236B40 ; =0x000004A8 - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #0 - bne _022368AE - bl MOD83_022371C4 - ldr r1, _02236B44 ; =0x000004AC - str r0, [r4, r1] - ldr r0, [r4, r1] - cmp r0, #0 - bne _022368AA - bl MOD83_0223742C - ldr r1, _02236B48 ; =0x0000E880 - str r0, [r4, r1] - ldr r0, [r4, r1] - ldrb r2, [r0] - add r0, r1, #4 - str r2, [r4, r0] - b _022368AE + bl MOD83_02236E90 + mov r0, #0x4b + lsl r0, r0, #4 + add r0, r4, r0 + bl MOD83_02236E18 + ldr r1, _02236B40 ; =0x000004A8 + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #0 + bne _022368AE + bl MOD83_022371C4 + ldr r1, _02236B44 ; =0x000004AC + str r0, [r4, r1] + ldr r0, [r4, r1] + cmp r0, #0 + bne _022368AA + bl MOD83_0223742C + ldr r1, _02236B48 ; =0x0000E880 + str r0, [r4, r1] + ldr r0, [r4, r1] + ldrb r2, [r0] + add r0, r1, #4 + str r2, [r4, r0] + b _022368AE _022368AA: - mov r0, #1 - str r0, [r4, #4] + mov r0, #1 + str r0, [r4, #4] _022368AE: - add r0, r4, #0 - bl MOD83_02234CA0 - mov r0, #1 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_02234CA0 + mov r0, #1 + str r0, [r5] + b _02236D90 _022368BA: - add r0, r4, #0 - bl MOD83_02235F3C - bl MOD83_022350BC - add r0, r4, #0 - bl MOD83_022350EC - add r0, r4, #0 - bl MOD83_022351F8 - add r0, r4, #0 - bl MOD83_022357CC - ldr r0, _02236B4C ; =MOD83_0223650C - add r1, r4, #0 - bl Main_SetVBlankIntrCB - mov r0, #0x10 - mov r1, #0 - bl GX_EngineAToggleLayers - ldr r0, [r4, #4] - cmp r0, #1 - bne _022368FA - add r0, r4, #0 - mov r1, #1 - mov r2, #0xb - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + bl MOD83_02235F3C + bl MOD83_022350BC + add r0, r4, #0 + bl MOD83_022350EC + add r0, r4, #0 + bl MOD83_022351F8 + add r0, r4, #0 + bl MOD83_022357CC + ldr r0, _02236B4C ; =MOD83_0223650C + add r1, r4, #0 + bl Main_SetVBlankIntrCB + mov r0, #0x10 + mov r1, #0 + bl GX_EngineAToggleLayers + ldr r0, [r4, #4] + cmp r0, #1 + bne _022368FA + add r0, r4, #0 + mov r1, #1 + mov r2, #0xb + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _022368FA: - mov r0, #2 - str r0, [r5] - b _02236D90 + mov r0, #2 + str r0, [r5] + b _02236D90 _02236900: - add r0, r4, #0 - bl MOD83_02236484 - add r0, r4, #0 - mov r1, #1 - mov r2, #3 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + bl MOD83_02236484 + add r0, r4, #0 + mov r1, #1 + mov r2, #3 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236914: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236926 - cmp r0, #2 - beq _02236938 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236926 + cmp r0, #2 + beq _02236938 _02236924: - b _02236D90 + b _02236D90 _02236926: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - .ifdef DIAMOND - mov r0, #0x22 - .else - mov r0, #0x23 - .endif - str r0, [r4, #8] - mov r0, #4 - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + .ifdef DIAMOND + mov r0, #0x22 + .else + mov r0, #0x23 + .endif + str r0, [r4, #8] + mov r0, #4 + str r0, [r5] + b _02236D90 _02236938: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _0223694E: - add r0, r4, #0 - mov r1, #1 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236976 - add r0, r4, #0 - bl MOD83_02236450 - mov r0, #5 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #1 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236976 + add r0, r4, #0 + bl MOD83_02236450 + mov r0, #5 + str r0, [r5] + b _02236D90 _02236966: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236978 - cmp r0, #2 - beq _022369A6 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236978 + cmp r0, #2 + beq _022369A6 _02236976: - b _02236D90 + b _02236D90 _02236978: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - bl MOD83_02236548 - str r0, [r4, #4] - cmp r0, #0 - beq _0223699E - sub r0, r0, #3 - cmp r0, #1 - bhi _02236998 - mov r0, #8 - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + bl MOD83_02236548 + str r0, [r4, #4] + cmp r0, #0 + beq _0223699E + sub r0, r0, #3 + cmp r0, #1 + bhi _02236998 + mov r0, #8 + str r0, [r5] + b _02236D90 _02236998: - mov r0, #0xb - str r0, [r5] - b _02236D90 + mov r0, #0xb + str r0, [r5] + b _02236D90 _0223699E: - mov r0, #6 - str r0, [r4, #8] - str r0, [r5] - b _02236D90 + mov r0, #6 + str r0, [r4, #8] + str r0, [r5] + b _02236D90 _022369A6: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _022369BC: - add r0, r4, #0 - mov r1, #1 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236A0E - mov r0, #7 - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #1 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236A0E + mov r0, #7 + str r0, [r5] + b _02236D90 _022369CE: - ldr r0, _02236B54 ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _022369DE - ldr r0, _02236B58 ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236A0E + ldr r0, _02236B54 ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _022369DE + ldr r0, _02236B58 ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236A0E _022369DE: - add r0, r4, #0 - mov r1, #0 - mov r2, #0xc - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0xc + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _022369EC: - ldr r1, [r4, #4] - add r0, r4, #0 - bl MOD83_02236668 - cmp r0, #0 - beq _02236A0E - mov r0, #9 - str r0, [r5] - b _02236D90 + ldr r1, [r4, #4] + add r0, r4, #0 + bl MOD83_02236668 + cmp r0, #0 + beq _02236A0E + mov r0, #9 + str r0, [r5] + b _02236D90 _022369FE: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236A10 - cmp r0, #2 - beq _02236A46 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236A10 + cmp r0, #2 + beq _02236A46 _02236A0E: - b _02236D90 + b _02236D90 _02236A10: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - mov r1, #0x47 - lsl r1, r1, #4 - mov r2, #0 - add r0, r1, #0 - str r2, [r4, r1] - sub r1, #0x44 - mov r3, #0x28 - sub r0, #0x10 - str r3, [r4, r0] - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02234F2C - ldr r1, _02236B5C ; =0x00000498 - add r0, r4, r1 - sub r1, #0xc6 - bl FUN_0200D858 - ldr r1, _02236B60 ; =0x0000E898 - str r0, [r4, r1] - mov r0, #0xa - str r0, [r5] - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + mov r1, #0x47 + lsl r1, r1, #4 + mov r2, #0 + add r0, r1, #0 + str r2, [r4, r1] + sub r1, #0x44 + mov r3, #0x28 + sub r0, #0x10 + str r3, [r4, r0] + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02234F2C + ldr r1, _02236B5C ; =0x00000498 + add r0, r4, r1 + sub r1, #0xc6 + bl FUN_0200D858 + ldr r1, _02236B60 ; =0x0000E898 + str r0, [r4, r1] + mov r0, #0xa + str r0, [r5] + b _02236D90 _02236A46: - ldr r0, _02236B50 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - b _02236D90 + ldr r0, _02236B50 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + b _02236D90 _02236A5C: - add r0, r4, #0 - bl MOD83_02234E40 - ldr r0, _02236B60 ; =0x0000E898 - ldr r0, [r4, r0] - bl FUN_0200DBFC - mov r0, #7 - str r0, [r4, #4] - mov r0, #0xb - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_02234E40 + ldr r0, _02236B60 ; =0x0000E898 + ldr r0, [r4, r0] + bl FUN_0200DBFC + mov r0, #7 + str r0, [r4, #4] + mov r0, #0xb + str r0, [r5] + b _02236D90 _02236A74: - ldr r1, [r4, #4] - add r0, r4, #0 - bl MOD83_02236604 - cmp r0, #0 - bne _02236A82 - b _02236D90 + ldr r1, [r4, #4] + add r0, r4, #0 + bl MOD83_02236604 + cmp r0, #0 + bne _02236A82 + b _02236D90 _02236A82: - mov r0, #0x16 - str r0, [r5] - b _02236D90 + mov r0, #0x16 + str r0, [r5] + b _02236D90 _02236A88: - ldr r0, _02236B5C ; =0x00000498 - add r0, r4, r0 - bl MOD83_02236298 - add r0, r4, #0 - bl MOD83_02235FBC - add r0, r4, #0 - bl MOD83_02235648 - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236B4C ; =MOD83_0223650C - add r1, r4, #0 - bl Main_SetVBlankIntrCB - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - add r0, r4, #0 - mov r1, #0 - bl MOD83_02235C4C - add r0, r4, #0 - mov r1, #1 - mov r2, #0xd - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236B5C ; =0x00000498 + add r0, r4, r0 + bl MOD83_02236298 + add r0, r4, #0 + bl MOD83_02235FBC + add r0, r4, #0 + bl MOD83_02235648 + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236B4C ; =MOD83_0223650C + add r1, r4, #0 + bl Main_SetVBlankIntrCB + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + add r0, r4, #0 + mov r1, #0 + bl MOD83_02235C4C + add r0, r4, #0 + mov r1, #1 + mov r2, #0xd + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236AC8: - mov r0, #0x31 - lsl r0, r0, #4 - add r0, r4, r0 - bl FUN_02020988 - add r6, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r6, r0 - beq _02236B9C - cmp r6, #0x1e - bge _02236B92 - add r0, r4, #0 - add r1, r6, #0 - bl MOD83_02235994 - cmp r0, #1 - bne _02236B20 - ldr r2, _02236B48 ; =0x0000E880 - add r0, r4, #0 - ldr r1, [r4, r2] - add r2, r2, #4 - ldr r3, [r4, r2] - mov r2, #0x96 - lsl r2, r2, #4 - add r1, r1, #4 - mul r2, r3 - add r2, r1, r2 - mov r1, #0x50 - mul r1, r6 - add r1, r2, r1 - bl MOD83_02235C4C - mov r0, #0x41 - lsl r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #6 - bne _02236B9C - ldr r0, _02236B64 ; =0x0000E888 - mov r1, #0x2d - str r1, [r4, r0] - mov r0, #0xf - str r0, [r5] - b _02236D90 + mov r0, #0x31 + lsl r0, r0, #4 + add r0, r4, r0 + bl FUN_02020988 + add r6, r0, #0 + mov r0, #0 + mvn r0, r0 + cmp r6, r0 + beq _02236B9C + cmp r6, #0x1e + bge _02236B92 + add r0, r4, #0 + add r1, r6, #0 + bl MOD83_02235994 + cmp r0, #1 + bne _02236B20 + ldr r2, _02236B48 ; =0x0000E880 + add r0, r4, #0 + ldr r1, [r4, r2] + add r2, r2, #4 + ldr r3, [r4, r2] + mov r2, #0x96 + lsl r2, r2, #4 + add r1, r1, #4 + mul r2, r3 + add r2, r1, r2 + mov r1, #0x50 + mul r1, r6 + add r1, r2, r1 + bl MOD83_02235C4C + mov r0, #0x41 + lsl r0, r0, #4 + ldr r0, [r4, r0] + cmp r0, #6 + bne _02236B9C + ldr r0, _02236B64 ; =0x0000E888 + mov r1, #0x2d + str r1, [r4, r0] + mov r0, #0xf + str r0, [r5] + b _02236D90 _02236B20: - cmp r0, #2 - bne _02236B2E - add r0, r4, #0 - mov r1, #0 - bl MOD83_02235C4C - b _02236D90 + cmp r0, #2 + bne _02236B2E + add r0, r4, #0 + mov r1, #0 + bl MOD83_02235C4C + b _02236D90 _02236B2E: - cmp r0, #4 - bne _02236B68 - mov r0, #8 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 - .align 2, 0 + cmp r0, #4 + bne _02236B68 + mov r0, #8 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 + .align 2, 0 _02236B3C: .word UNK_02016FA4 _02236B40: .word 0x000004A8 _02236B44: .word 0x000004AC @@ -18978,288 +18978,288 @@ _02236B5C: .word 0x00000498 _02236B60: .word 0x0000E898 _02236B64: .word 0x0000E888 _02236B68: - cmp r0, #5 - bne _02236B76 - mov r0, #9 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #5 + bne _02236B76 + mov r0, #9 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B76: - cmp r0, #6 - bne _02236B84 - mov r0, #0x26 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #6 + bne _02236B84 + mov r0, #0x26 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B84: - cmp r0, #7 - bne _02236B9C - mov r0, #0x26 - str r0, [r4, #8] - mov r0, #0xe - str r0, [r5] - b _02236D90 + cmp r0, #7 + bne _02236B9C + mov r0, #0x26 + str r0, [r4, #8] + mov r0, #0xe + str r0, [r5] + b _02236D90 _02236B92: - beq _02236BDC - cmp r6, #0x1f - beq _02236B9E - cmp r6, #0x20 - beq _02236BBC + beq _02236BDC + cmp r6, #0x1f + beq _02236B9E + cmp r6, #0x20 + beq _02236BBC _02236B9C: - b _02236D90 + b _02236D90 _02236B9E: - ldr r0, _02236DA0 ; =0x0000E884 - ldr r1, [r4, r0] - cmp r1, #0 - bne _02236BAA - mov r1, #0xd - b _02236BAC + ldr r0, _02236DA0 ; =0x0000E884 + ldr r1, [r4, r0] + cmp r1, #0 + bne _02236BAA + mov r1, #0xd + b _02236BAC _02236BAA: - sub r1, r1, #1 + sub r1, r1, #1 _02236BAC: - str r1, [r4, r0] - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + str r1, [r4, r0] + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BBC: - ldr r0, _02236DA0 ; =0x0000E884 - ldr r1, [r4, r0] - add r1, r1, #1 - str r1, [r4, r0] - ldr r1, [r4, r0] - cmp r1, #0xe - bne _02236BCE - mov r1, #0 - str r1, [r4, r0] + ldr r0, _02236DA0 ; =0x0000E884 + ldr r1, [r4, r0] + add r1, r1, #1 + str r1, [r4, r0] + ldr r1, [r4, r0] + cmp r1, #0xe + bne _02236BCE + mov r1, #0 + str r1, [r4, r0] _02236BCE: - add r0, r4, #0 - bl MOD83_022354F0 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + bl MOD83_022354F0 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BDC: - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236BF0: - add r0, r4, #0 - mov r1, #0 - bl MOD83_022366D0 - cmp r0, #0 - beq _02236C50 - ldr r0, _02236DA8 ; =0x00000498 - add r0, r4, r0 - bl MOD83_02236298 - mov r0, #0xd - str r0, [r5] - b _02236D90 + add r0, r4, #0 + mov r1, #0 + bl MOD83_022366D0 + cmp r0, #0 + beq _02236C50 + ldr r0, _02236DA8 ; =0x00000498 + add r0, r4, r0 + bl MOD83_02236298 + mov r0, #0xd + str r0, [r5] + b _02236D90 _02236C0A: - ldr r0, _02236DAC ; =0x0000E888 - ldr r1, [r4, r0] - sub r1, r1, #1 - str r1, [r4, r0] - ldr r0, [r4, r0] - cmp r0, #0 - bne _02236C50 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x10 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DAC ; =0x0000E888 + ldr r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] + ldr r0, [r4, r0] + cmp r0, #0 + bne _02236C50 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x10 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236C26: - add r0, r4, #0 - bl MOD83_022360C8 - add r0, r4, #0 - mov r1, #1 - mov r2, #0x11 - add r3, r5, #0 - bl MOD83_02235E04 - add r0, r4, #0 - bl MOD83_02236450 - b _02236D90 + add r0, r4, #0 + bl MOD83_022360C8 + add r0, r4, #0 + mov r1, #1 + mov r2, #0x11 + add r3, r5, #0 + bl MOD83_02235E04 + add r0, r4, #0 + bl MOD83_02236450 + b _02236D90 _02236C40: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236C52 - cmp r0, #2 - beq _02236C60 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236C52 + cmp r0, #2 + beq _02236C60 _02236C50: - b _02236D90 + b _02236D90 _02236C52: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - mov r0, #0x12 - str r0, [r5] - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + mov r0, #0x12 + str r0, [r5] + b _02236D90 _02236C60: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236C76: - mov r1, #0x46 - mov r0, #0xb - lsl r1, r1, #4 - str r0, [r4, r1] - sub r1, #0x34 - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0 - bl MOD83_02234F2C - add r0, r4, #0 - bl MOD83_02236450 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - mov r0, #0x13 - str r0, [r5] - b _02236D90 + mov r1, #0x46 + mov r0, #0xb + lsl r1, r1, #4 + str r0, [r4, r1] + sub r1, #0x34 + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0 + bl MOD83_02234F2C + add r0, r4, #0 + bl MOD83_02236450 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + mov r0, #0x13 + str r0, [r5] + b _02236D90 _02236C9C: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_0201466C - cmp r0, #1 - beq _02236CAE - cmp r0, #2 - beq _02236CF0 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_0201466C + cmp r0, #1 + beq _02236CAE + cmp r0, #2 + beq _02236CF0 + b _02236D90 _02236CAE: - ldr r0, [r4] - mov r2, #0 - lsl r1, r0, #2 - ldr r0, _02236DB4 ; =MOD83_0223B288 - ldr r0, [r0, r1] - mov r1, #0x46 - lsl r1, r1, #4 - str r0, [r4, r1] - sub r1, #0x34 - add r0, r4, #0 - add r1, r4, r1 - bl MOD83_02234F2C - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - ldr r0, _02236DB8 ; =0x0000E890 - mov r1, #0 - str r1, [r4, r0] - ldr r1, _02236DA8 ; =0x00000498 - add r0, r4, r1 - sub r1, #0xc6 - bl FUN_0200D858 - ldr r1, _02236DBC ; =0x0000E898 - str r0, [r4, r1] - mov r0, #0x15 - str r0, [r5] - mov r0, #4 - bl SetSoftResetDisableMask - b _02236D90 + ldr r0, [r4] + mov r2, #0 + lsl r1, r0, #2 + ldr r0, _02236DB4 ; =MOD83_0223B288 + ldr r0, [r0, r1] + mov r1, #0x46 + lsl r1, r1, #4 + str r0, [r4, r1] + sub r1, #0x34 + add r0, r4, #0 + add r1, r4, r1 + bl MOD83_02234F2C + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + ldr r0, _02236DB8 ; =0x0000E890 + mov r1, #0 + str r1, [r4, r0] + ldr r1, _02236DA8 ; =0x00000498 + add r0, r4, r1 + sub r1, #0xc6 + bl FUN_0200D858 + ldr r1, _02236DBC ; =0x0000E898 + str r0, [r4, r1] + mov r0, #0x15 + str r0, [r5] + mov r0, #4 + bl SetSoftResetDisableMask + b _02236D90 _02236CF0: - ldr r0, _02236DB0 ; =0x0000E88C - ldr r0, [r4, r0] - bl FUN_020146C4 - add r0, r4, #0 - mov r1, #0 - mov r2, #0x14 - add r3, r5, #0 - bl MOD83_02235E04 - b _02236D90 + ldr r0, _02236DB0 ; =0x0000E88C + ldr r0, [r4, r0] + bl FUN_020146C4 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x14 + add r3, r5, #0 + bl MOD83_02235E04 + b _02236D90 _02236D06: - add r0, r4, #0 - bl MOD83_022362B8 - mov r0, #0xc - str r0, [r5] - b _02236D90 + add r0, r4, #0 + bl MOD83_022362B8 + mov r0, #0xc + str r0, [r5] + b _02236D90 _02236D12: - add r0, r4, #0 - bl MOD83_02234CE8 - add r6, r0, #0 - cmp r6, #0xa - beq _02236D90 - ldr r0, _02236DBC ; =0x0000E898 - ldr r0, [r4, r0] - bl FUN_0200DBFC - ldr r0, _02236DC0 ; =0x0000061B - bl PlaySE - cmp r6, #0xb - bne _02236D34 - .ifdef DIAMOND - mov r1, #0x1d - .else - mov r1, #0x1e - .endif - b _02236D36 + add r0, r4, #0 + bl MOD83_02234CE8 + add r6, r0, #0 + cmp r6, #0xa + beq _02236D90 + ldr r0, _02236DBC ; =0x0000E898 + ldr r0, [r4, r0] + bl FUN_0200DBFC + ldr r0, _02236DC0 ; =0x0000061B + bl PlaySE + cmp r6, #0xb + bne _02236D34 + .ifdef DIAMOND + mov r1, #0x1d + .else + mov r1, #0x1e + .endif + b _02236D36 _02236D34: - mov r1, #0x24 + mov r1, #0x24 _02236D36: - mov r0, #0x46 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r1, _02236DC4 ; =0x0000042C - add r0, r4, #0 - add r1, r4, r1 - mov r2, #0 - bl MOD83_02234F2C - mov r0, #0x16 - str r0, [r5] - mov r0, #4 - bl ClearSoftResetDisableMask - b _02236D90 + mov r0, #0x46 + lsl r0, r0, #4 + str r1, [r4, r0] + ldr r1, _02236DC4 ; =0x0000042C + add r0, r4, #0 + add r1, r4, r1 + mov r2, #0 + bl MOD83_02234F2C + mov r0, #0x16 + str r0, [r5] + mov r0, #4 + bl ClearSoftResetDisableMask + b _02236D90 _02236D54: - ldr r0, _02236DC8 ; =gMain + 0x40 - ldrh r0, [r0, #0x20] - cmp r0, #0 - bne _02236D64 - ldr r0, _02236DCC ; =gMain - ldr r0, [r0, #0x48] - cmp r0, #0 - beq _02236D90 + ldr r0, _02236DC8 ; =gMain + 0x40 + ldrh r0, [r0, #0x20] + cmp r0, #0 + bne _02236D64 + ldr r0, _02236DCC ; =gMain + ldr r0, [r0, #0x48] + cmp r0, #0 + beq _02236D90 _02236D64: - add r0, r4, #0 - mov r1, #0 - mov r2, #0x18 - add r3, r5, #0 - bl MOD83_02235E34 - ldr r0, _02236DA4 ; =0x000005DC - bl PlaySE - b _02236D90 + add r0, r4, #0 + mov r1, #0 + mov r2, #0x18 + add r3, r5, #0 + bl MOD83_02235E34 + ldr r0, _02236DA4 ; =0x000005DC + bl PlaySE + b _02236D90 _02236D78: - bl FUN_0200E308 - cmp r0, #0 - beq _02236D90 - ldr r0, [r4, #0x24] - str r0, [r5] - b _02236D90 + bl FUN_0200E308 + cmp r0, #0 + beq _02236D90 + ldr r0, [r4, #0x24] + str r0, [r5] + b _02236D90 _02236D86: - add r0, r4, #0 - bl MOD83_02236330 - mov r0, #1 - pop {r4, r5, r6, pc} + add r0, r4, #0 + bl MOD83_02236330 + mov r0, #1 + pop {r4, r5, r6, pc} _02236D90: - ldr r0, [r4, #0x28] - cmp r0, #0 - beq _02236D9A - bl FUN_0201FDEC + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _02236D9A + bl FUN_0201FDEC _02236D9A: - mov r0, #0 - pop {r4, r5, r6, pc} - nop + mov r0, #0 + pop {r4, r5, r6, pc} + nop _02236DA0: .word 0x0000E884 _02236DA4: .word 0x000005DC _02236DA8: .word 0x00000498 @@ -19272,96 +19272,96 @@ _02236DC0: .word 0x0000061B _02236DC4: .word 0x0000042C _02236DC8: .word gMain + 0x40 _02236DCC: .word gMain - thumb_func_end MOD83_02236804 + thumb_func_end MOD83_02236804 - thumb_func_start MOD83_02236DD0 + thumb_func_start MOD83_02236DD0 MOD83_02236DD0: ; 0x02236DD0 - push {r4, lr} - add r4, r0, #0 - bl OverlayManager_GetData - ldr r0, [r0, #0x20] - bl FreeToHeap - ldr r0, _02236DFC ; =SDK_OVERLAY_MODULE_63_ID - ldr r1, _02236E00 ; =MOD63_021DBAB8 - bl RegisterMainOverlay - add r0, r4, #0 - bl OverlayManager_FreeData - mov r0, #0x4e - bl DestroyHeap - mov r0, #0 - bl MOD83_02239450 - mov r0, #1 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + add r4, r0, #0 + bl OverlayManager_GetData + ldr r0, [r0, #0x20] + bl FreeToHeap + ldr r0, _02236DFC ; =SDK_OVERLAY_MODULE_63_ID + ldr r1, _02236E00 ; =MOD63_021DBAB8 + bl RegisterMainOverlay + add r0, r4, #0 + bl OverlayManager_FreeData + mov r0, #0x4e + bl DestroyHeap + mov r0, #0 + bl MOD83_02239450 + mov r0, #1 + pop {r4, pc} + .align 2, 0 _02236DFC: .word SDK_OVERLAY_MODULE_63_ID _02236E00: .word MOD63_021DBAB8 - thumb_func_end MOD83_02236DD0 + thumb_func_end MOD83_02236DD0 - thumb_func_start MOD83_02236E04 + thumb_func_start MOD83_02236E04 MOD83_02236E04: ; 0x02236E04 - push {r3, lr} - mov r0, #1 - bl CTRDG_IdentifyAgbBackup - cmp r0, #0 - bne _02236E14 - mov r0, #1 - pop {r3, pc} + push {r3, lr} + mov r0, #1 + bl CTRDG_IdentifyAgbBackup + cmp r0, #0 + bne _02236E14 + mov r0, #1 + pop {r3, pc} _02236E14: - mov r0, #0 - pop {r3, pc} - thumb_func_end MOD83_02236E04 + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD83_02236E04 - thumb_func_start MOD83_02236E18 + thumb_func_start MOD83_02236E18 MOD83_02236E18: ; 0x02236E18 - push {r3, lr} - ldr r1, _02236E74 ; =MOD83_0223BB18 - str r0, [r1, #8] - ldr r0, _02236E78 ; =MOD83_0223B41C - ldr r0, [r0] - cmp r0, #0 - beq _02236E2A - mov r0, #0xc - pop {r3, pc} + push {r3, lr} + ldr r1, _02236E74 ; =MOD83_0223BB18 + str r0, [r1, #8] + ldr r0, _02236E78 ; =MOD83_0223B41C + ldr r0, [r0] + cmp r0, #0 + beq _02236E2A + mov r0, #0xc + pop {r3, pc} _02236E2A: - ldr r0, _02236E7C ; =MOD83_0223A5C4 - mov r1, #0x1e - bl MOD83_02236EB4 - cmp r0, #0 - bne _02236E72 - ldr r0, _02236E78 ; =MOD83_0223B41C - ldr r0, [r0] - ldrb r0, [r0, #4] - cmp r0, #0 - bne _02236E5A - mov r0, #0x89 - ldr r1, _02236E80 ; =MOD83_0223BB98 - lsl r0, r0, #4 - str r0, [r1, #0x20] - mov r0, #0xeb - lsl r0, r0, #6 - str r0, [r1, #0x24] - ldr r2, _02236E84 ; =0x00001220 - ldr r0, _02236E74 ; =MOD83_0223BB18 - str r2, [r0, #0x68] - mov r0, #9 - str r0, [r1, #0x30] - b _02236E64 + ldr r0, _02236E7C ; =MOD83_0223A5C4 + mov r1, #0x1e + bl MOD83_02236EB4 + cmp r0, #0 + bne _02236E72 + ldr r0, _02236E78 ; =MOD83_0223B41C + ldr r0, [r0] + ldrb r0, [r0, #4] + cmp r0, #0 + bne _02236E5A + mov r0, #0x89 + ldr r1, _02236E80 ; =MOD83_0223BB98 + lsl r0, r0, #4 + str r0, [r1, #0x20] + mov r0, #0xeb + lsl r0, r0, #6 + str r0, [r1, #0x24] + ldr r2, _02236E84 ; =0x00001220 + ldr r0, _02236E74 ; =MOD83_0223BB18 + str r2, [r0, #0x68] + mov r0, #9 + str r0, [r1, #0x30] + b _02236E64 _02236E5A: - ldr r0, _02236E88 ; =0x08000100 - ldr r1, _02236E8C ; =MOD83_0223BB30 - mov r2, #0xfc - bl CTRDG_CpuCopy32 + ldr r0, _02236E88 ; =0x08000100 + ldr r1, _02236E8C ; =MOD83_0223BB30 + mov r2, #0xfc + bl CTRDG_CpuCopy32 _02236E64: - bl MOD83_02236E04 - cmp r0, #0 - bne _02236E70 - mov r0, #3 - pop {r3, pc} + bl MOD83_02236E04 + cmp r0, #0 + bne _02236E70 + mov r0, #3 + pop {r3, pc} _02236E70: - mov r0, #0 + mov r0, #0 _02236E72: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _02236E74: .word MOD83_0223BB18 _02236E78: .word MOD83_0223B41C _02236E7C: .word MOD83_0223A5C4 @@ -19369,337 +19369,337 @@ _02236E80: .word MOD83_0223BB98 _02236E84: .word 0x00001220 _02236E88: .word 0x08000100 _02236E8C: .word MOD83_0223BB30 - thumb_func_end MOD83_02236E18 + thumb_func_end MOD83_02236E18 - thumb_func_start MOD83_02236E90 + thumb_func_start MOD83_02236E90 MOD83_02236E90: ; 0x02236E90 - ldr r0, _02236E98 ; =MOD83_0223B41C - mov r1, #0 - str r1, [r0] - bx lr - .align 2, 0 + ldr r0, _02236E98 ; =MOD83_0223B41C + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 _02236E98: .word MOD83_0223B41C - thumb_func_end MOD83_02236E90 + thumb_func_end MOD83_02236E90 - thumb_func_start MOD83_02236E9C + thumb_func_start MOD83_02236E9C MOD83_02236E9C: ; 0x02236E9C - ldr r0, _02236EA4 ; =MOD83_0223B41C - ldr r0, [r0] - ldrb r0, [r0, #5] - bx lr - .align 2, 0 + ldr r0, _02236EA4 ; =MOD83_0223B41C + ldr r0, [r0] + ldrb r0, [r0, #5] + bx lr + .align 2, 0 _02236EA4: .word MOD83_0223B41C - thumb_func_end MOD83_02236E9C + thumb_func_end MOD83_02236E9C - thumb_func_start MOD83_02236EA8 + thumb_func_start MOD83_02236EA8 MOD83_02236EA8: ; 0x02236EA8 - ldr r0, _02236EB0 ; =MOD83_0223B41C - ldr r0, [r0] - ldrh r0, [r0, #6] - bx lr - .align 2, 0 + ldr r0, _02236EB0 ; =MOD83_0223B41C + ldr r0, [r0] + ldrh r0, [r0, #6] + bx lr + .align 2, 0 _02236EB0: .word MOD83_0223B41C - thumb_func_end MOD83_02236EA8 + thumb_func_end MOD83_02236EA8 - thumb_func_start MOD83_02236EB4 + thumb_func_start MOD83_02236EB4 MOD83_02236EB4: ; 0x02236EB4 - push {r3, r4, r5, lr} - sub sp, #0xc0 - add r5, r0, #0 - add r4, r1, #0 - ldr r0, _02236F60 ; =MOD83_0223B41C - mov r1, #0 - str r1, [r0] - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _02236ED0 - add sp, #0xc0 - mov r0, #1 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + sub sp, #0xc0 + add r5, r0, #0 + add r4, r1, #0 + ldr r0, _02236F60 ; =MOD83_0223B41C + mov r1, #0 + str r1, [r0] + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _02236ED0 + add sp, #0xc0 + mov r0, #1 + pop {r3, r4, r5, pc} _02236ED0: - bl CTRDG_GetAgbGameCode - mov r2, #0 - cmp r4, #0 - ble _02236EF4 - add r3, r5, #0 + bl CTRDG_GetAgbGameCode + mov r2, #0 + cmp r4, #0 + ble _02236EF4 + add r3, r5, #0 _02236EDC: - ldr r1, [r3] - cmp r0, r1 - bne _02236EEC - lsl r0, r2, #3 - add r1, r5, r0 - ldr r0, _02236F60 ; =MOD83_0223B41C - str r1, [r0] - b _02236EF4 + ldr r1, [r3] + cmp r0, r1 + bne _02236EEC + lsl r0, r2, #3 + add r1, r5, r0 + ldr r0, _02236F60 ; =MOD83_0223B41C + str r1, [r0] + b _02236EF4 _02236EEC: - add r2, r2, #1 - add r3, #8 - cmp r2, r4 - blt _02236EDC + add r2, r2, #1 + add r3, #8 + cmp r2, r4 + blt _02236EDC _02236EF4: - ldr r0, _02236F60 ; =MOD83_0223B41C - ldr r0, [r0] - cmp r0, #0 - bne _02236F02 - add sp, #0xc0 - mov r0, #2 - pop {r3, r4, r5, pc} + ldr r0, _02236F60 ; =MOD83_0223B41C + ldr r0, [r0] + cmp r0, #0 + bne _02236F02 + add sp, #0xc0 + mov r0, #2 + pop {r3, r4, r5, pc} _02236F02: - mov r0, #1 - bl CTRDG_Enable - add r4, sp, #0 - mov r0, #2 - lsl r0, r0, #0x1a - add r1, r4, #0 - mov r2, #0xc0 - bl CTRDG_CpuCopy32 - ldr r3, _02236F64 ; =MOD83_0223B424 - mov r2, #0 + mov r0, #1 + bl CTRDG_Enable + add r4, sp, #0 + mov r0, #2 + lsl r0, r0, #0x1a + add r1, r4, #0 + mov r2, #0xc0 + bl CTRDG_CpuCopy32 + ldr r3, _02236F64 ; =MOD83_0223B424 + mov r2, #0 _02236F1A: - add r0, r4, r2 - ldrb r1, [r3] - ldrb r0, [r0, #4] - cmp r1, r0 - beq _02236F2A - add sp, #0xc0 - mov r0, #4 - pop {r3, r4, r5, pc} + add r0, r4, r2 + ldrb r1, [r3] + ldrb r0, [r0, #4] + cmp r1, r0 + beq _02236F2A + add sp, #0xc0 + mov r0, #4 + pop {r3, r4, r5, pc} _02236F2A: - add r2, r2, #1 - add r3, r3, #1 - cmp r2, #0x9c - blo _02236F1A - mov r2, #0 - mov r1, #0xa0 + add r2, r2, #1 + add r3, r3, #1 + cmp r2, #0x9c + blo _02236F1A + mov r2, #0 + mov r1, #0xa0 _02236F36: - ldrb r0, [r4, r1] - add r1, r1, #1 - add r0, r2, r0 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 - cmp r1, #0xbc - ble _02236F36 - add r2, #0x19 - neg r0, r2 - lsl r0, r0, #0x18 - add r4, #0xbd - lsr r1, r0, #0x18 - ldrb r0, [r4] - cmp r0, r1 - beq _02236F5A - add sp, #0xc0 - mov r0, #4 - pop {r3, r4, r5, pc} + ldrb r0, [r4, r1] + add r1, r1, #1 + add r0, r2, r0 + lsl r0, r0, #0x18 + lsr r2, r0, #0x18 + cmp r1, #0xbc + ble _02236F36 + add r2, #0x19 + neg r0, r2 + lsl r0, r0, #0x18 + add r4, #0xbd + lsr r1, r0, #0x18 + ldrb r0, [r4] + cmp r0, r1 + beq _02236F5A + add sp, #0xc0 + mov r0, #4 + pop {r3, r4, r5, pc} _02236F5A: - mov r0, #0 - add sp, #0xc0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + add sp, #0xc0 + pop {r3, r4, r5, pc} + .align 2, 0 _02236F60: .word MOD83_0223B41C _02236F64: .word MOD83_0223B424 - thumb_func_end MOD83_02236EB4 + thumb_func_end MOD83_02236EB4 - thumb_func_start MOD83_02236F68 + thumb_func_start MOD83_02236F68 MOD83_02236F68: ; 0x02236F68 - push {r3, r4} - mov r2, #0 - lsr r4, r1, #2 - add r3, r2, #0 - cmp r4, #0 - ble _02236F84 + push {r3, r4} + mov r2, #0 + lsr r4, r1, #2 + add r3, r2, #0 + cmp r4, #0 + ble _02236F84 _02236F74: - ldr r1, [r0] - add r0, r0, #4 - add r2, r2, r1 - add r1, r3, #1 - lsl r1, r1, #0x10 - lsr r3, r1, #0x10 - cmp r3, r4 - blt _02236F74 + ldr r1, [r0] + add r0, r0, #4 + add r2, r2, r1 + add r1, r3, #1 + lsl r1, r1, #0x10 + lsr r3, r1, #0x10 + cmp r3, r4 + blt _02236F74 _02236F84: - lsr r0, r2, #0x10 - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - lsl r0, r2, #0x10 - lsr r0, r0, #0x10 - add r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02236F68 - - thumb_func_start MOD83_02236F98 + lsr r0, r2, #0x10 + lsl r0, r0, #0x10 + lsr r1, r0, #0x10 + lsl r0, r2, #0x10 + lsr r0, r0, #0x10 + add r0, r1, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02236F68 + + thumb_func_start MOD83_02236F98 MOD83_02236F98: ; 0x02236F98 - push {r3, lr} - lsl r0, r0, #0x10 - mov r3, #1 - add r2, r1, #0 - lsr r0, r0, #0x10 - mov r1, #0 - lsl r3, r3, #0xc - bl CTRDG_ReadAgbFlash - pop {r3, pc} - thumb_func_end MOD83_02236F98 - - thumb_func_start MOD83_02236FAC + push {r3, lr} + lsl r0, r0, #0x10 + mov r3, #1 + add r2, r1, #0 + lsr r0, r0, #0x10 + mov r1, #0 + lsl r3, r3, #0xc + bl CTRDG_ReadAgbFlash + pop {r3, pc} + thumb_func_end MOD83_02236F98 + + thumb_func_start MOD83_02236FAC MOD83_02236FAC: ; 0x02236FAC - cmp r0, #0 - bne _02236FBA - ldr r0, _02236FE0 ; =MOD83_0223BB98 - ldr r0, [r0, #0x20] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr + cmp r0, #0 + bne _02236FBA + ldr r0, _02236FE0 ; =MOD83_0223BB98 + ldr r0, [r0, #0x20] + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bx lr _02236FBA: - cmp r0, #4 - bne _02236FCE - ldr r0, _02236FE0 ; =MOD83_0223BB98 - ldr r1, [r0, #0x24] - mov r0, #0xba - lsl r0, r0, #6 - sub r0, r1, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr + cmp r0, #4 + bne _02236FCE + ldr r0, _02236FE0 ; =MOD83_0223BB98 + ldr r1, [r0, #0x24] + mov r0, #0xba + lsl r0, r0, #6 + sub r0, r1, r0 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bx lr _02236FCE: - cmp r0, #0xd - bne _02236FD8 - mov r0, #0x7d - lsl r0, r0, #4 - bx lr + cmp r0, #0xd + bne _02236FD8 + mov r0, #0x7d + lsl r0, r0, #4 + bx lr _02236FD8: - mov r0, #0x3e - lsl r0, r0, #6 - bx lr - nop + mov r0, #0x3e + lsl r0, r0, #6 + bx lr + nop _02236FE0: .word MOD83_0223BB98 - thumb_func_end MOD83_02236FAC + thumb_func_end MOD83_02236FAC - thumb_func_start MOD83_02236FE4 + thumb_func_start MOD83_02236FE4 MOD83_02236FE4: ; 0x02236FE4 - cmp r0, #0 - bne _02236FF4 - ldr r0, _02237034 ; =MOD83_0223BB18 - ldr r1, [r0, #8] - mov r0, #1 - lsl r0, r0, #0xc - add r0, r1, r0 - bx lr + cmp r0, #0 + bne _02236FF4 + ldr r0, _02237034 ; =MOD83_0223BB18 + ldr r1, [r0, #8] + mov r0, #1 + lsl r0, r0, #0xc + add r0, r1, r0 + bx lr _02236FF4: - cmp r0, #1 - blt _02237012 - cmp r0, #4 - bgt _02237012 - ldr r1, _02237034 ; =MOD83_0223BB18 - ldr r2, [r1, #8] - mov r1, #2 - lsl r1, r1, #0xc - add r2, r2, r1 - sub r1, r0, #1 - mov r0, #0x3e - lsl r0, r0, #6 - mul r0, r1 - add r0, r2, r0 - bx lr + cmp r0, #1 + blt _02237012 + cmp r0, #4 + bgt _02237012 + ldr r1, _02237034 ; =MOD83_0223BB18 + ldr r2, [r1, #8] + mov r1, #2 + lsl r1, r1, #0xc + add r2, r2, r1 + sub r1, r0, #1 + mov r0, #0x3e + lsl r0, r0, #6 + mul r0, r1 + add r0, r2, r0 + bx lr _02237012: - cmp r0, #5 - blt _02237030 - cmp r0, #0xe - bge _02237030 - ldr r1, _02237034 ; =MOD83_0223BB18 - ldr r2, [r1, #8] - mov r1, #6 - lsl r1, r1, #0xc - add r2, r2, r1 - sub r1, r0, #5 - mov r0, #0x3e - lsl r0, r0, #6 - mul r0, r1 - add r0, r2, r0 - bx lr + cmp r0, #5 + blt _02237030 + cmp r0, #0xe + bge _02237030 + ldr r1, _02237034 ; =MOD83_0223BB18 + ldr r2, [r1, #8] + mov r1, #6 + lsl r1, r1, #0xc + add r2, r2, r1 + sub r1, r0, #5 + mov r0, #0x3e + lsl r0, r0, #6 + mul r0, r1 + add r0, r2, r0 + bx lr _02237030: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02237034: .word MOD83_0223BB18 - thumb_func_end MOD83_02236FE4 + thumb_func_end MOD83_02236FE4 - thumb_func_start MOD83_02237038 + thumb_func_start MOD83_02237038 MOD83_02237038: ; 0x02237038 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - mov r6, #0 - add r5, r1, #0 - str r6, [sp, #4] - add r1, r2, #0 - str r6, [r1] - ldr r1, _022370CC ; =MOD83_0223BB18 - add r7, r0, #0 - str r6, [r1, #4] - mov r1, #0xe - str r2, [sp] - add r4, r6, #0 - mul r7, r1 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + mov r6, #0 + add r5, r1, #0 + str r6, [sp, #4] + add r1, r2, #0 + str r6, [r1] + ldr r1, _022370CC ; =MOD83_0223BB18 + add r7, r0, #0 + str r6, [r1, #4] + mov r1, #0xe + str r2, [sp] + add r4, r6, #0 + mul r7, r1 _02237054: - add r0, r4, #0 - mov r1, #0xe - bl _s32_div_f - add r0, r1, r7 - add r1, r5, #0 - bl MOD83_02236F98 - mov r1, #1 - add r0, r5, #0 - lsl r1, r1, #0xc - bl DC_FlushRange - ldr r0, _022370D0 ; =0x00000FF8 - ldr r1, [r5, r0] - ldr r0, _022370D4 ; =0x08012025 - cmp r1, r0 - bne _022370A6 - mov r0, #1 - str r0, [sp, #4] - ldr r0, _022370D8 ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r5, #0 - bl MOD83_02236F68 - ldr r1, _022370DC ; =0x00000FF6 - ldrh r1, [r5, r1] - cmp r1, r0 - bne _022370A6 - ldr r0, _022370E0 ; =0x00000FFC - ldr r1, [r5, r0] - ldr r0, [sp] - str r1, [r0] - ldr r0, _022370D8 ; =0x00000FF4 - ldrh r1, [r5, r0] - mov r0, #1 - lsl r0, r1 - orr r6, r0 + add r0, r4, #0 + mov r1, #0xe + bl _s32_div_f + add r0, r1, r7 + add r1, r5, #0 + bl MOD83_02236F98 + mov r1, #1 + add r0, r5, #0 + lsl r1, r1, #0xc + bl DC_FlushRange + ldr r0, _022370D0 ; =0x00000FF8 + ldr r1, [r5, r0] + ldr r0, _022370D4 ; =0x08012025 + cmp r1, r0 + bne _022370A6 + mov r0, #1 + str r0, [sp, #4] + ldr r0, _022370D8 ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r5, #0 + bl MOD83_02236F68 + ldr r1, _022370DC ; =0x00000FF6 + ldrh r1, [r5, r1] + cmp r1, r0 + bne _022370A6 + ldr r0, _022370E0 ; =0x00000FFC + ldr r1, [r5, r0] + ldr r0, [sp] + str r1, [r0] + ldr r0, _022370D8 ; =0x00000FF4 + ldrh r1, [r5, r0] + mov r0, #1 + lsl r0, r1 + orr r6, r0 _022370A6: - add r4, r4, #1 - cmp r4, #0xe - blt _02237054 - ldr r0, [sp, #4] - cmp r0, #0 - beq _022370C4 - ldr r0, _022370E4 ; =0x00003FFF - cmp r6, r0 - bne _022370BE - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add r4, r4, #1 + cmp r4, #0xe + blt _02237054 + ldr r0, [sp, #4] + cmp r0, #0 + beq _022370C4 + ldr r0, _022370E4 ; =0x00003FFF + cmp r6, r0 + bne _022370BE + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _022370BE: - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _022370C4: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _022370CC: .word MOD83_0223BB18 _022370D0: .word 0x00000FF8 _022370D4: .word 0x08012025 @@ -19707,224 +19707,224 @@ _022370D8: .word 0x00000FF4 _022370DC: .word 0x00000FF6 _022370E0: .word 0x00000FFC _022370E4: .word 0x00003FFF - thumb_func_end MOD83_02237038 + thumb_func_end MOD83_02237038 - thumb_func_start MOD83_022370E8 + thumb_func_start MOD83_022370E8 MOD83_022370E8: ; 0x022370E8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r7, r0, #0 - add r5, r1, #0 - add r4, r2, #0 - mov r0, #0 - add r1, r7, #0 - add r2, sp, #4 - bl MOD83_02237038 - add r6, r0, #0 - mov r0, #1 - add r1, r7, #0 - add r2, sp, #0 - bl MOD83_02237038 - cmp r6, #1 - bne _02237160 - cmp r0, #1 - bne _02237160 - mov r1, #0 - ldr r0, [sp, #4] - mvn r1, r1 - cmp r0, r1 - bne _02237120 - ldr r3, [sp] - cmp r3, #0 - beq _0223712E + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r0, #0 + add r5, r1, #0 + add r4, r2, #0 + mov r0, #0 + add r1, r7, #0 + add r2, sp, #4 + bl MOD83_02237038 + add r6, r0, #0 + mov r0, #1 + add r1, r7, #0 + add r2, sp, #0 + bl MOD83_02237038 + cmp r6, #1 + bne _02237160 + cmp r0, #1 + bne _02237160 + mov r1, #0 + ldr r0, [sp, #4] + mvn r1, r1 + cmp r0, r1 + bne _02237120 + ldr r3, [sp] + cmp r3, #0 + beq _0223712E _02237120: - cmp r0, #0 - bne _02237146 - mov r1, #0 - ldr r3, [sp] - mvn r1, r1 - cmp r3, r1 - bne _02237146 + cmp r0, #0 + bne _02237146 + mov r1, #0 + ldr r3, [sp] + mvn r1, r1 + cmp r3, r1 + bne _02237146 _0223712E: - add r2, r0, #1 - add r1, r3, #1 - cmp r2, r1 - bhs _0223713E - str r3, [r4] - mov r0, #1 - str r0, [r5] - b _0223715A + add r2, r0, #1 + add r1, r3, #1 + cmp r2, r1 + bhs _0223713E + str r3, [r4] + mov r0, #1 + str r0, [r5] + b _0223715A _0223713E: - str r0, [r4] - mov r0, #0 - str r0, [r5] - b _0223715A + str r0, [r4] + mov r0, #0 + str r0, [r5] + b _0223715A _02237146: - ldr r1, [sp] - cmp r0, r1 - bhs _02237154 - str r1, [r4] - mov r0, #1 - str r0, [r5] - b _0223715A + ldr r1, [sp] + cmp r0, r1 + bhs _02237154 + str r1, [r4] + mov r0, #1 + str r0, [r5] + b _0223715A _02237154: - str r0, [r4] - mov r0, #0 - str r0, [r5] + str r0, [r4] + mov r0, #0 + str r0, [r5] _0223715A: - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _02237160: - cmp r6, #1 - bne _02237184 - cmp r0, #1 - beq _02237184 - ldr r1, [sp, #4] - cmp r0, #0xff - str r1, [r4] - bne _0223717A - mov r0, #0 - str r0, [r5] - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + cmp r6, #1 + bne _02237184 + cmp r0, #1 + beq _02237184 + ldr r1, [sp, #4] + cmp r0, #0xff + str r1, [r4] + bne _0223717A + mov r0, #0 + str r0, [r5] + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _0223717A: - mov r0, #0 - str r0, [r5] - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #0 + str r0, [r5] + add sp, #8 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _02237184: - cmp r0, #1 - bne _022371A6 - cmp r6, #1 - beq _022371A6 - ldr r0, [sp] - cmp r6, #0xff - str r0, [r4] - bne _0223719E - mov r0, #1 - str r0, [r5] - add sp, #8 - mov r0, #0xff - pop {r3, r4, r5, r6, r7, pc} + cmp r0, #1 + bne _022371A6 + cmp r6, #1 + beq _022371A6 + ldr r0, [sp] + cmp r6, #0xff + str r0, [r4] + bne _0223719E + mov r0, #1 + str r0, [r5] + add sp, #8 + mov r0, #0xff + pop {r3, r4, r5, r6, r7, pc} _0223719E: - mov r0, #1 - add sp, #8 - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + mov r0, #1 + add sp, #8 + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _022371A6: - cmp r6, #0 - bne _022371B8 - cmp r0, #0 - bne _022371B8 - mov r0, #0 - str r0, [r4] - add sp, #8 - str r0, [r5] - pop {r3, r4, r5, r6, r7, pc} + cmp r6, #0 + bne _022371B8 + cmp r0, #0 + bne _022371B8 + mov r0, #0 + str r0, [r4] + add sp, #8 + str r0, [r5] + pop {r3, r4, r5, r6, r7, pc} _022371B8: - mov r0, #0 - str r0, [r4] - str r0, [r5] - mov r0, #2 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_022370E8 - - thumb_func_start MOD83_022371C4 + mov r0, #0 + str r0, [r4] + str r0, [r5] + mov r0, #2 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_022370E8 + + thumb_func_start MOD83_022371C4 MOD83_022371C4: ; 0x022371C4 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02237278 ; =MOD83_0223BB18 - ldr r1, _0223727C ; =MOD83_0223BB18 - ldr r0, [r0, #8] - ldr r2, _02237280 ; =MOD83_0223BB28 - bl MOD83_022370E8 - cmp r0, #1 - beq _022371EE - cmp r0, #0 - beq _022371E6 - cmp r0, #2 - beq _022371EA - cmp r0, #0xff - bne _022371EE - mov r0, #5 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02237278 ; =MOD83_0223BB18 + ldr r1, _0223727C ; =MOD83_0223BB18 + ldr r0, [r0, #8] + ldr r2, _02237280 ; =MOD83_0223BB28 + bl MOD83_022370E8 + cmp r0, #1 + beq _022371EE + cmp r0, #0 + beq _022371E6 + cmp r0, #2 + beq _022371EA + cmp r0, #0xff + bne _022371EE + mov r0, #5 + pop {r3, r4, r5, r6, r7, pc} _022371E6: - mov r0, #7 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #7 + pop {r3, r4, r5, r6, r7, pc} _022371EA: - mov r0, #6 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #6 + pop {r3, r4, r5, r6, r7, pc} _022371EE: - ldr r7, _02237278 ; =MOD83_0223BB18 - ldr r0, [r7] - cmp r0, #1 - bhi _02237272 - mov r6, #0 - ldr r5, [r7, #8] - add r4, r6, #0 + ldr r7, _02237278 ; =MOD83_0223BB18 + ldr r0, [r7] + cmp r0, #1 + bhi _02237272 + mov r6, #0 + ldr r5, [r7, #8] + add r4, r6, #0 _022371FC: - ldr r1, [r7] - mov r0, #0xe - mul r0, r1 - add r0, r4, r0 - add r1, r5, #0 - bl MOD83_02236F98 - ldr r0, _02237284 ; =0x00000FF8 - ldr r1, [r5, r0] - ldr r0, _02237288 ; =0x08012025 - cmp r1, r0 - bne _0223725E - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r5, #0 - bl MOD83_02236F68 - ldr r1, _02237290 ; =0x00000FF6 - ldrh r1, [r5, r1] - cmp r1, r0 - bne _0223725E - ldr r0, _02237294 ; =0x00000FFC - mov r1, #1 - ldr r0, [r5, r0] - str r0, [r7, #0x10] - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - lsl r1, r0 - orr r6, r1 - bl MOD83_02236FAC - str r0, [sp] - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - bl MOD83_02236FE4 - add r1, r0, #0 - ldr r2, [sp] - add r0, r5, #0 - bl MIi_CpuCopy32 - ldr r0, _0223728C ; =0x00000FF4 - ldrh r0, [r5, r0] - cmp r0, #0 - bne _0223725E - str r4, [r7, #0xc] + ldr r1, [r7] + mov r0, #0xe + mul r0, r1 + add r0, r4, r0 + add r1, r5, #0 + bl MOD83_02236F98 + ldr r0, _02237284 ; =0x00000FF8 + ldr r1, [r5, r0] + ldr r0, _02237288 ; =0x08012025 + cmp r1, r0 + bne _0223725E + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r5, #0 + bl MOD83_02236F68 + ldr r1, _02237290 ; =0x00000FF6 + ldrh r1, [r5, r1] + cmp r1, r0 + bne _0223725E + ldr r0, _02237294 ; =0x00000FFC + mov r1, #1 + ldr r0, [r5, r0] + str r0, [r7, #0x10] + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + lsl r1, r0 + orr r6, r1 + bl MOD83_02236FAC + str r0, [sp] + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + bl MOD83_02236FE4 + add r1, r0, #0 + ldr r2, [sp] + add r0, r5, #0 + bl MIi_CpuCopy32 + ldr r0, _0223728C ; =0x00000FF4 + ldrh r0, [r5, r0] + cmp r0, #0 + bne _0223725E + str r4, [r7, #0xc] _0223725E: - add r4, r4, #1 - cmp r4, #0xe - blt _022371FC - ldr r0, _02237298 ; =0x00003FFF - cmp r6, r0 - bne _0223726E - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + add r4, r4, #1 + cmp r4, #0xe + blt _022371FC + ldr r0, _02237298 ; =0x00003FFF + cmp r6, r0 + bne _0223726E + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0223726E: - mov r0, #4 - pop {r3, r4, r5, r6, r7, pc} + mov r0, #4 + pop {r3, r4, r5, r6, r7, pc} _02237272: - mov r0, #6 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #6 + pop {r3, r4, r5, r6, r7, pc} + nop _02237278: .word MOD83_0223BB18 _0223727C: .word MOD83_0223BB18 _02237280: .word MOD83_0223BB28 @@ -19934,2768 +19934,2768 @@ _0223728C: .word 0x00000FF4 _02237290: .word 0x00000FF6 _02237294: .word 0x00000FFC _02237298: .word 0x00003FFF - thumb_func_end MOD83_022371C4 + thumb_func_end MOD83_022371C4 - thumb_func_start MOD83_0223729C + thumb_func_start MOD83_0223729C MOD83_0223729C: ; 0x0223729C - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, _02237318 ; =MOD83_0223BB18 - mov r2, #1 - ldr r4, [r0, #8] - str r2, [r0, #0x14] - mov r0, #0 - add r1, r4, #0 - lsl r2, r2, #0xc - bl MIi_CpuClear32 - add r0, r5, #0 - bl MOD83_02236FAC - add r6, r0, #0 - add r0, r5, #0 - bl MOD83_02236FE4 - add r1, r4, #0 - add r2, r6, #0 - bl MIi_CpuCopy32 - ldr r0, _02237318 ; =MOD83_0223BB18 - ldr r1, [r0, #0x10] - ldr r0, _0223731C ; =0x00000FFC - str r1, [r4, r0] - add r1, r0, #0 - sub r1, #8 - strh r5, [r4, r1] - ldr r1, _02237320 ; =0x08012025 - sub r0, r0, #4 - str r1, [r4, r0] - add r0, r5, #0 - bl MOD83_02236FAC - add r1, r0, #0 - add r0, r4, #0 - bl MOD83_02236F68 - ldr r1, _02237324 ; =0x00000FF6 - strh r0, [r4, r1] - ldr r0, _02237318 ; =MOD83_0223BB18 - mov r1, #0xe - ldr r0, [r0, #0xc] - add r0, r5, r0 - add r0, r0, #1 - bl _s32_div_f - ldr r0, _02237328 ; =MOD83_0223B41C - ldr r3, _0223732C ; =MOD83_02237330 - ldr r2, [r0, #4] - mov r0, #0xe - mul r0, r2 - add r0, r1, r0 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - add r1, r4, #0 - mov r2, #4 - bl CTRDG_WriteAndVerifyAgbFlashAsync - pop {r4, r5, r6, pc} - nop + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, _02237318 ; =MOD83_0223BB18 + mov r2, #1 + ldr r4, [r0, #8] + str r2, [r0, #0x14] + mov r0, #0 + add r1, r4, #0 + lsl r2, r2, #0xc + bl MIi_CpuClear32 + add r0, r5, #0 + bl MOD83_02236FAC + add r6, r0, #0 + add r0, r5, #0 + bl MOD83_02236FE4 + add r1, r4, #0 + add r2, r6, #0 + bl MIi_CpuCopy32 + ldr r0, _02237318 ; =MOD83_0223BB18 + ldr r1, [r0, #0x10] + ldr r0, _0223731C ; =0x00000FFC + str r1, [r4, r0] + add r1, r0, #0 + sub r1, #8 + strh r5, [r4, r1] + ldr r1, _02237320 ; =0x08012025 + sub r0, r0, #4 + str r1, [r4, r0] + add r0, r5, #0 + bl MOD83_02236FAC + add r1, r0, #0 + add r0, r4, #0 + bl MOD83_02236F68 + ldr r1, _02237324 ; =0x00000FF6 + strh r0, [r4, r1] + ldr r0, _02237318 ; =MOD83_0223BB18 + mov r1, #0xe + ldr r0, [r0, #0xc] + add r0, r5, r0 + add r0, r0, #1 + bl _s32_div_f + ldr r0, _02237328 ; =MOD83_0223B41C + ldr r3, _0223732C ; =MOD83_02237330 + ldr r2, [r0, #4] + mov r0, #0xe + mul r0, r2 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + add r1, r4, #0 + mov r2, #4 + bl CTRDG_WriteAndVerifyAgbFlashAsync + pop {r4, r5, r6, pc} + nop _02237318: .word MOD83_0223BB18 _0223731C: .word 0x00000FFC _02237320: .word 0x08012025 _02237324: .word 0x00000FF6 _02237328: .word MOD83_0223B41C _0223732C: .word MOD83_02237330 - thumb_func_end MOD83_0223729C + thumb_func_end MOD83_0223729C - thumb_func_start MOD83_02237330 + thumb_func_start MOD83_02237330 MOD83_02237330: ; 0x02237330 - ldr r0, [r0, #8] - cmp r0, #0 - bne _0223735C - ldr r1, _02237368 ; =MOD83_0223BB18 - ldr r0, [r1, #4] - add r0, r0, #1 - str r0, [r1, #4] - cmp r0, #0xe - blt _0223734A - mov r0, #0 - str r0, [r1, #4] - str r0, [r1, #0x14] - bx lr + ldr r0, [r0, #8] + cmp r0, #0 + bne _0223735C + ldr r1, _02237368 ; =MOD83_0223BB18 + ldr r0, [r1, #4] + add r0, r0, #1 + str r0, [r1, #4] + cmp r0, #0xe + blt _0223734A + mov r0, #0 + str r0, [r1, #4] + str r0, [r1, #0x14] + bx lr _0223734A: - cmp r0, #0xd - bne _02237356 - mov r0, #2 - str r0, [r1, #0x14] - mov r0, #0 - bx lr + cmp r0, #0xd + bne _02237356 + mov r0, #2 + str r0, [r1, #0x14] + mov r0, #0 + bx lr _02237356: - mov r0, #3 - str r0, [r1, #0x14] - b _02237362 + mov r0, #3 + str r0, [r1, #0x14] + b _02237362 _0223735C: - ldr r0, _02237368 ; =MOD83_0223BB18 - mov r1, #4 - str r1, [r0, #0x14] + ldr r0, _02237368 ; =MOD83_0223BB18 + mov r1, #4 + str r1, [r0, #0x14] _02237362: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02237368: .word MOD83_0223BB18 - thumb_func_end MOD83_02237330 + thumb_func_end MOD83_02237330 - thumb_func_start MOD83_0223736C + thumb_func_start MOD83_0223736C MOD83_0223736C: ; 0x0223736C - push {r3, lr} - ldr r1, _022373AC ; =MOD83_0223BB18 - ldr r0, [r1, #4] - cmp r0, #0 - bne _02237392 - ldr r1, [r1] - cmp r1, #1 - bne _02237382 - mov r2, #0 - ldr r1, _022373B0 ; =MOD83_0223B41C - b _02237386 + push {r3, lr} + ldr r1, _022373AC ; =MOD83_0223BB18 + ldr r0, [r1, #4] + cmp r0, #0 + bne _02237392 + ldr r1, [r1] + cmp r1, #1 + bne _02237382 + mov r2, #0 + ldr r1, _022373B0 ; =MOD83_0223B41C + b _02237386 _02237382: - ldr r1, _022373B0 ; =MOD83_0223B41C - mov r2, #1 + ldr r1, _022373B0 ; =MOD83_0223B41C + mov r2, #1 _02237386: - str r2, [r1, #4] - ldr r1, _022373AC ; =MOD83_0223BB18 - ldr r2, [r1, #0x10] - add r2, r2, #1 - str r2, [r1, #0x10] - b _02237396 + str r2, [r1, #4] + ldr r1, _022373AC ; =MOD83_0223BB18 + ldr r2, [r1, #0x10] + add r2, r2, #1 + str r2, [r1, #0x10] + b _02237396 _02237392: - mov r0, #0 - pop {r3, pc} + mov r0, #0 + pop {r3, pc} _02237396: - ldr r1, _022373B0 ; =MOD83_0223B41C - ldr r1, [r1, #4] - cmp r1, #0 - bge _022373A2 - mov r0, #0 - pop {r3, pc} + ldr r1, _022373B0 ; =MOD83_0223B41C + ldr r1, [r1, #4] + cmp r1, #0 + bge _022373A2 + mov r0, #0 + pop {r3, pc} _022373A2: - bl MOD83_0223729C - mov r0, #1 - pop {r3, pc} - nop + bl MOD83_0223729C + mov r0, #1 + pop {r3, pc} + nop _022373AC: .word MOD83_0223BB18 _022373B0: .word MOD83_0223B41C - thumb_func_end MOD83_0223736C + thumb_func_end MOD83_0223736C - thumb_func_start MOD83_022373B4 + thumb_func_start MOD83_022373B4 MOD83_022373B4: ; 0x022373B4 - push {r3, lr} - ldr r1, _022373F0 ; =MOD83_0223BB18 - ldr r0, [r1, #0x14] - cmp r0, #4 - bhi _022373EC - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, lr} + ldr r1, _022373F0 ; =MOD83_0223BB18 + ldr r0, [r1, #0x14] + cmp r0, #4 + bhi _022373EC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022373CA: ; jump table - .short _022373EC - _022373CA - 2 ; case 0 - .short _022373E4 - _022373CA - 2 ; case 1 - .short _022373D4 - _022373CA - 2 ; case 2 - .short _022373DE - _022373CA - 2 ; case 3 - .short _022373E8 - _022373CA - 2 ; case 4 + .short _022373EC - _022373CA - 2 ; case 0 + .short _022373E4 - _022373CA - 2 ; case 1 + .short _022373D4 - _022373CA - 2 ; case 2 + .short _022373DE - _022373CA - 2 ; case 3 + .short _022373E8 - _022373CA - 2 ; case 4 _022373D4: - ldr r0, [r1, #4] - bl MOD83_0223729C - mov r0, #0 - pop {r3, pc} + ldr r0, [r1, #4] + bl MOD83_0223729C + mov r0, #0 + pop {r3, pc} _022373DE: - ldr r0, [r1, #4] - bl MOD83_0223729C + ldr r0, [r1, #4] + bl MOD83_0223729C _022373E4: - mov r0, #0xa - pop {r3, pc} + mov r0, #0xa + pop {r3, pc} _022373E8: - mov r0, #8 - pop {r3, pc} + mov r0, #8 + pop {r3, pc} _022373EC: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _022373F0: .word MOD83_0223BB18 - thumb_func_end MOD83_022373B4 + thumb_func_end MOD83_022373B4 - thumb_func_start MOD83_022373F4 + thumb_func_start MOD83_022373F4 MOD83_022373F4: ; 0x022373F4 - ldr r0, _02237428 ; =MOD83_0223BB18 - ldr r0, [r0, #0x14] - cmp r0, #4 - bhi _02237422 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + ldr r0, _02237428 ; =MOD83_0223BB18 + ldr r0, [r0, #0x14] + cmp r0, #4 + bhi _02237422 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237408: ; jump table - .short _02237422 - _02237408 - 2 ; case 0 - .short _0223741A - _02237408 - 2 ; case 1 - .short _02237412 - _02237408 - 2 ; case 2 - .short _02237416 - _02237408 - 2 ; case 3 - .short _0223741E - _02237408 - 2 ; case 4 + .short _02237422 - _02237408 - 2 ; case 0 + .short _0223741A - _02237408 - 2 ; case 1 + .short _02237412 - _02237408 - 2 ; case 2 + .short _02237416 - _02237408 - 2 ; case 3 + .short _0223741E - _02237408 - 2 ; case 4 _02237412: - mov r0, #0xb - bx lr + mov r0, #0xb + bx lr _02237416: - mov r0, #0xa - bx lr + mov r0, #0xa + bx lr _0223741A: - mov r0, #9 - bx lr + mov r0, #9 + bx lr _0223741E: - mov r0, #8 - bx lr + mov r0, #8 + bx lr _02237422: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02237428: .word MOD83_0223BB18 - thumb_func_end MOD83_022373F4 + thumb_func_end MOD83_022373F4 - thumb_func_start MOD83_0223742C + thumb_func_start MOD83_0223742C MOD83_0223742C: ; 0x0223742C - ldr r0, _02237438 ; =MOD83_0223BB18 - ldr r1, [r0, #8] - mov r0, #6 - lsl r0, r0, #0xc - add r0, r1, r0 - bx lr - .align 2, 0 + ldr r0, _02237438 ; =MOD83_0223BB18 + ldr r1, [r0, #8] + mov r0, #6 + lsl r0, r0, #0xc + add r0, r1, r0 + bx lr + .align 2, 0 _02237438: .word MOD83_0223BB18 - thumb_func_end MOD83_0223742C + thumb_func_end MOD83_0223742C - thumb_func_start MOD83_0223743C + thumb_func_start MOD83_0223743C MOD83_0223743C: ; 0x0223743C - ldr r3, _02237444 ; =MOD83_02236FE4 - mov r0, #0 - bx r3 - nop + ldr r3, _02237444 ; =MOD83_02236FE4 + mov r0, #0 + bx r3 + nop _02237444: .word MOD83_02236FE4 - thumb_func_end MOD83_0223743C + thumb_func_end MOD83_0223743C - thumb_func_start MOD83_02237448 + thumb_func_start MOD83_02237448 MOD83_02237448: ; 0x02237448 - push {r3, lr} - bl MOD83_0223743C - ldrb r2, [r0, #0xb] - ldrb r1, [r0, #0xa] - lsl r3, r2, #8 - ldrb r2, [r0, #0xd] - ldrb r0, [r0, #0xc] - lsl r2, r2, #0x18 - lsl r0, r0, #0x10 - orr r0, r2 - orr r0, r3 - orr r0, r1 - pop {r3, pc} - thumb_func_end MOD83_02237448 - - thumb_func_start MOD83_02237464 + push {r3, lr} + bl MOD83_0223743C + ldrb r2, [r0, #0xb] + ldrb r1, [r0, #0xa] + lsl r3, r2, #8 + ldrb r2, [r0, #0xd] + ldrb r0, [r0, #0xc] + lsl r2, r2, #0x18 + lsl r0, r0, #0x10 + orr r0, r2 + orr r0, r3 + orr r0, r1 + pop {r3, pc} + thumb_func_end MOD83_02237448 + + thumb_func_start MOD83_02237464 MOD83_02237464: ; 0x02237464 - ldr r3, _02237468 ; =MOD83_0223743C - bx r3 - .align 2, 0 + ldr r3, _02237468 ; =MOD83_0223743C + bx r3 + .align 2, 0 _02237468: .word MOD83_0223743C - thumb_func_end MOD83_02237464 + thumb_func_end MOD83_02237464 - thumb_func_start MOD83_0223746C + thumb_func_start MOD83_0223746C MOD83_0223746C: ; 0x0223746C - push {r4, r5, r6, lr} - add r4, r0, #0 - add r0, r1, #0 - mov r1, #0x18 - add r5, r2, #0 - mov r6, #0 - bl _u32_div_f - cmp r1, #0x17 - bhi _022374C2 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, lr} + add r4, r0, #0 + add r0, r1, #0 + mov r1, #0x18 + add r5, r2, #0 + mov r6, #0 + bl _u32_div_f + cmp r1, #0x17 + bhi _022374C2 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223748C: ; jump table - .short _022374BC - _0223748C - 2 ; case 0 - .short _022374EE - _0223748C - 2 ; case 1 - .short _0223751E - _0223748C - 2 ; case 2 - .short _0223754E - _0223748C - 2 ; case 3 - .short _0223757E - _0223748C - 2 ; case 4 - .short _022375AE - _0223748C - 2 ; case 5 - .short _022375DE - _0223748C - 2 ; case 6 - .short _02237610 - _0223748C - 2 ; case 7 - .short _02237640 - _0223748C - 2 ; case 8 - .short _02237670 - _0223748C - 2 ; case 9 - .short _022376A0 - _0223748C - 2 ; case 10 - .short _022376D0 - _0223748C - 2 ; case 11 - .short _02237700 - _0223748C - 2 ; case 12 - .short _02237732 - _0223748C - 2 ; case 13 - .short _02237762 - _0223748C - 2 ; case 14 - .short _02237792 - _0223748C - 2 ; case 15 - .short _022377C2 - _0223748C - 2 ; case 16 - .short _022377F2 - _0223748C - 2 ; case 17 - .short _02237822 - _0223748C - 2 ; case 18 - .short _02237854 - _0223748C - 2 ; case 19 - .short _02237884 - _0223748C - 2 ; case 20 - .short _022378B4 - _0223748C - 2 ; case 21 - .short _022378E4 - _0223748C - 2 ; case 22 - .short _02237914 - _0223748C - 2 ; case 23 + .short _022374BC - _0223748C - 2 ; case 0 + .short _022374EE - _0223748C - 2 ; case 1 + .short _0223751E - _0223748C - 2 ; case 2 + .short _0223754E - _0223748C - 2 ; case 3 + .short _0223757E - _0223748C - 2 ; case 4 + .short _022375AE - _0223748C - 2 ; case 5 + .short _022375DE - _0223748C - 2 ; case 6 + .short _02237610 - _0223748C - 2 ; case 7 + .short _02237640 - _0223748C - 2 ; case 8 + .short _02237670 - _0223748C - 2 ; case 9 + .short _022376A0 - _0223748C - 2 ; case 10 + .short _022376D0 - _0223748C - 2 ; case 11 + .short _02237700 - _0223748C - 2 ; case 12 + .short _02237732 - _0223748C - 2 ; case 13 + .short _02237762 - _0223748C - 2 ; case 14 + .short _02237792 - _0223748C - 2 ; case 15 + .short _022377C2 - _0223748C - 2 ; case 16 + .short _022377F2 - _0223748C - 2 ; case 17 + .short _02237822 - _0223748C - 2 ; case 18 + .short _02237854 - _0223748C - 2 ; case 19 + .short _02237884 - _0223748C - 2 ; case 20 + .short _022378B4 - _0223748C - 2 ; case 21 + .short _022378E4 - _0223748C - 2 ; case 22 + .short _02237914 - _0223748C - 2 ; case 23 _022374BC: - add r4, #0x20 - cmp r5, #3 - bls _022374C4 + add r4, #0x20 + cmp r5, #3 + bls _022374C4 _022374C2: - b _02237942 + b _02237942 _022374C4: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022374D0: ; jump table - .short _022374D8 - _022374D0 - 2 ; case 0 - .short _022374DC - _022374D0 - 2 ; case 1 - .short _022374E2 - _022374D0 - 2 ; case 2 - .short _022374E8 - _022374D0 - 2 ; case 3 + .short _022374D8 - _022374D0 - 2 ; case 0 + .short _022374DC - _022374D0 - 2 ; case 1 + .short _022374E2 - _022374D0 - 2 ; case 2 + .short _022374E8 - _022374D0 - 2 ; case 3 _022374D8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022374DC: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022374E2: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022374E8: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022374EE: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237500: ; jump table - .short _02237508 - _02237500 - 2 ; case 0 - .short _0223750C - _02237500 - 2 ; case 1 - .short _02237512 - _02237500 - 2 ; case 2 - .short _02237518 - _02237500 - 2 ; case 3 + .short _02237508 - _02237500 - 2 ; case 0 + .short _0223750C - _02237500 - 2 ; case 1 + .short _02237512 - _02237500 - 2 ; case 2 + .short _02237518 - _02237500 - 2 ; case 3 _02237508: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223750C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237512: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237518: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223751E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237530: ; jump table - .short _02237538 - _02237530 - 2 ; case 0 - .short _0223753C - _02237530 - 2 ; case 1 - .short _02237542 - _02237530 - 2 ; case 2 - .short _02237548 - _02237530 - 2 ; case 3 + .short _02237538 - _02237530 - 2 ; case 0 + .short _0223753C - _02237530 - 2 ; case 1 + .short _02237542 - _02237530 - 2 ; case 2 + .short _02237548 - _02237530 - 2 ; case 3 _02237538: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223753C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237542: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237548: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223754E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237560: ; jump table - .short _02237568 - _02237560 - 2 ; case 0 - .short _0223756C - _02237560 - 2 ; case 1 - .short _02237572 - _02237560 - 2 ; case 2 - .short _02237578 - _02237560 - 2 ; case 3 + .short _02237568 - _02237560 - 2 ; case 0 + .short _0223756C - _02237560 - 2 ; case 1 + .short _02237572 - _02237560 - 2 ; case 2 + .short _02237578 - _02237560 - 2 ; case 3 _02237568: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223756C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237572: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237578: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223757E: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237590: ; jump table - .short _02237598 - _02237590 - 2 ; case 0 - .short _0223759C - _02237590 - 2 ; case 1 - .short _022375A2 - _02237590 - 2 ; case 2 - .short _022375A8 - _02237590 - 2 ; case 3 + .short _02237598 - _02237590 - 2 ; case 0 + .short _0223759C - _02237590 - 2 ; case 1 + .short _022375A2 - _02237590 - 2 ; case 2 + .short _022375A8 - _02237590 - 2 ; case 3 _02237598: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223759C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022375A2: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022375A8: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022375AE: - add r4, #0x20 - cmp r5, #3 - bhi _022375E4 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _022375E4 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022375C0: ; jump table - .short _022375C8 - _022375C0 - 2 ; case 0 - .short _022375CC - _022375C0 - 2 ; case 1 - .short _022375D2 - _022375C0 - 2 ; case 2 - .short _022375D8 - _022375C0 - 2 ; case 3 + .short _022375C8 - _022375C0 - 2 ; case 0 + .short _022375CC - _022375C0 - 2 ; case 1 + .short _022375D2 - _022375C0 - 2 ; case 2 + .short _022375D8 - _022375C0 - 2 ; case 3 _022375C8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022375CC: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022375D2: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022375D8: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022375DE: - add r4, #0x20 - cmp r5, #3 - bls _022375E6 + add r4, #0x20 + cmp r5, #3 + bls _022375E6 _022375E4: - b _02237942 + b _02237942 _022375E6: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022375F2: ; jump table - .short _022375FA - _022375F2 - 2 ; case 0 - .short _02237600 - _022375F2 - 2 ; case 1 - .short _02237604 - _022375F2 - 2 ; case 2 - .short _0223760A - _022375F2 - 2 ; case 3 + .short _022375FA - _022375F2 - 2 ; case 0 + .short _02237600 - _022375F2 - 2 ; case 1 + .short _02237604 - _022375F2 - 2 ; case 2 + .short _0223760A - _022375F2 - 2 ; case 3 _022375FA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237600: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237604: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223760A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237610: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237622: ; jump table - .short _0223762A - _02237622 - 2 ; case 0 - .short _02237630 - _02237622 - 2 ; case 1 - .short _02237634 - _02237622 - 2 ; case 2 - .short _0223763A - _02237622 - 2 ; case 3 + .short _0223762A - _02237622 - 2 ; case 0 + .short _02237630 - _02237622 - 2 ; case 1 + .short _02237634 - _02237622 - 2 ; case 2 + .short _0223763A - _02237622 - 2 ; case 3 _0223762A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237630: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237634: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223763A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237640: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237652: ; jump table - .short _0223765A - _02237652 - 2 ; case 0 - .short _02237660 - _02237652 - 2 ; case 1 - .short _02237664 - _02237652 - 2 ; case 2 - .short _0223766A - _02237652 - 2 ; case 3 + .short _0223765A - _02237652 - 2 ; case 0 + .short _02237660 - _02237652 - 2 ; case 1 + .short _02237664 - _02237652 - 2 ; case 2 + .short _0223766A - _02237652 - 2 ; case 3 _0223765A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237660: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237664: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _0223766A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237670: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237682: ; jump table - .short _0223768A - _02237682 - 2 ; case 0 - .short _02237690 - _02237682 - 2 ; case 1 - .short _02237694 - _02237682 - 2 ; case 2 - .short _0223769A - _02237682 - 2 ; case 3 + .short _0223768A - _02237682 - 2 ; case 0 + .short _02237690 - _02237682 - 2 ; case 1 + .short _02237694 - _02237682 - 2 ; case 2 + .short _0223769A - _02237682 - 2 ; case 3 _0223768A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237690: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237694: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _0223769A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376A0: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022376B2: ; jump table - .short _022376BA - _022376B2 - 2 ; case 0 - .short _022376C0 - _022376B2 - 2 ; case 1 - .short _022376C4 - _022376B2 - 2 ; case 2 - .short _022376CA - _022376B2 - 2 ; case 3 + .short _022376BA - _022376B2 - 2 ; case 0 + .short _022376C0 - _022376B2 - 2 ; case 1 + .short _022376C4 - _022376B2 - 2 ; case 2 + .short _022376CA - _022376B2 - 2 ; case 3 _022376BA: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376C0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022376C4: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022376CA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022376D0: - add r4, #0x20 - cmp r5, #3 - bhi _02237706 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237706 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022376E2: ; jump table - .short _022376EA - _022376E2 - 2 ; case 0 - .short _022376F0 - _022376E2 - 2 ; case 1 - .short _022376F4 - _022376E2 - 2 ; case 2 - .short _022376FA - _022376E2 - 2 ; case 3 + .short _022376EA - _022376E2 - 2 ; case 0 + .short _022376F0 - _022376E2 - 2 ; case 1 + .short _022376F4 - _022376E2 - 2 ; case 2 + .short _022376FA - _022376E2 - 2 ; case 3 _022376EA: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022376F0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022376F4: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022376FA: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237700: - add r4, #0x20 - cmp r5, #3 - bls _02237708 + add r4, #0x20 + cmp r5, #3 + bls _02237708 _02237706: - b _02237942 + b _02237942 _02237708: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237714: ; jump table - .short _0223771C - _02237714 - 2 ; case 0 - .short _02237722 - _02237714 - 2 ; case 1 - .short _02237728 - _02237714 - 2 ; case 2 - .short _0223772C - _02237714 - 2 ; case 3 + .short _0223771C - _02237714 - 2 ; case 0 + .short _02237722 - _02237714 - 2 ; case 1 + .short _02237728 - _02237714 - 2 ; case 2 + .short _0223772C - _02237714 - 2 ; case 3 _0223771C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237722: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237728: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223772C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237732: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237744: ; jump table - .short _0223774C - _02237744 - 2 ; case 0 - .short _02237752 - _02237744 - 2 ; case 1 - .short _02237758 - _02237744 - 2 ; case 2 - .short _0223775C - _02237744 - 2 ; case 3 + .short _0223774C - _02237744 - 2 ; case 0 + .short _02237752 - _02237744 - 2 ; case 1 + .short _02237758 - _02237744 - 2 ; case 2 + .short _0223775C - _02237744 - 2 ; case 3 _0223774C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237752: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237758: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223775C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237762: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237774: ; jump table - .short _0223777C - _02237774 - 2 ; case 0 - .short _02237782 - _02237774 - 2 ; case 1 - .short _02237788 - _02237774 - 2 ; case 2 - .short _0223778C - _02237774 - 2 ; case 3 + .short _0223777C - _02237774 - 2 ; case 0 + .short _02237782 - _02237774 - 2 ; case 1 + .short _02237788 - _02237774 - 2 ; case 2 + .short _0223778C - _02237774 - 2 ; case 3 _0223777C: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237782: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237788: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223778C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237792: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022377A4: ; jump table - .short _022377AC - _022377A4 - 2 ; case 0 - .short _022377B2 - _022377A4 - 2 ; case 1 - .short _022377B8 - _022377A4 - 2 ; case 2 - .short _022377BC - _022377A4 - 2 ; case 3 + .short _022377AC - _022377A4 - 2 ; case 0 + .short _022377B2 - _022377A4 - 2 ; case 1 + .short _022377B8 - _022377A4 - 2 ; case 2 + .short _022377BC - _022377A4 - 2 ; case 3 _022377AC: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022377B2: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022377B8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022377BC: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022377C2: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022377D4: ; jump table - .short _022377DC - _022377D4 - 2 ; case 0 - .short _022377E2 - _022377D4 - 2 ; case 1 - .short _022377E8 - _022377D4 - 2 ; case 2 - .short _022377EC - _022377D4 - 2 ; case 3 + .short _022377DC - _022377D4 - 2 ; case 0 + .short _022377E2 - _022377D4 - 2 ; case 1 + .short _022377E8 - _022377D4 - 2 ; case 2 + .short _022377EC - _022377D4 - 2 ; case 3 _022377DC: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022377E2: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022377E8: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022377EC: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022377F2: - add r4, #0x20 - cmp r5, #3 - bhi _02237828 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237828 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237804: ; jump table - .short _0223780C - _02237804 - 2 ; case 0 - .short _02237812 - _02237804 - 2 ; case 1 - .short _02237818 - _02237804 - 2 ; case 2 - .short _0223781C - _02237804 - 2 ; case 3 + .short _0223780C - _02237804 - 2 ; case 0 + .short _02237812 - _02237804 - 2 ; case 1 + .short _02237818 - _02237804 - 2 ; case 2 + .short _0223781C - _02237804 - 2 ; case 3 _0223780C: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237812: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237818: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _0223781C: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237822: - add r4, #0x20 - cmp r5, #3 - bls _0223782A + add r4, #0x20 + cmp r5, #3 + bls _0223782A _02237828: - b _02237942 + b _02237942 _0223782A: - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237836: ; jump table - .short _0223783E - _02237836 - 2 ; case 0 - .short _02237844 - _02237836 - 2 ; case 1 - .short _0223784A - _02237836 - 2 ; case 2 - .short _02237850 - _02237836 - 2 ; case 3 + .short _0223783E - _02237836 - 2 ; case 0 + .short _02237844 - _02237836 - 2 ; case 1 + .short _0223784A - _02237836 - 2 ; case 2 + .short _02237850 - _02237836 - 2 ; case 3 _0223783E: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237844: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223784A: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237850: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237854: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237866: ; jump table - .short _0223786E - _02237866 - 2 ; case 0 - .short _02237874 - _02237866 - 2 ; case 1 - .short _0223787A - _02237866 - 2 ; case 2 - .short _02237880 - _02237866 - 2 ; case 3 + .short _0223786E - _02237866 - 2 ; case 0 + .short _02237874 - _02237866 - 2 ; case 1 + .short _0223787A - _02237866 - 2 ; case 2 + .short _02237880 - _02237866 - 2 ; case 3 _0223786E: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237874: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223787A: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237880: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237884: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237896: ; jump table - .short _0223789E - _02237896 - 2 ; case 0 - .short _022378A4 - _02237896 - 2 ; case 1 - .short _022378AA - _02237896 - 2 ; case 2 - .short _022378B0 - _02237896 - 2 ; case 3 + .short _0223789E - _02237896 - 2 ; case 0 + .short _022378A4 - _02237896 - 2 ; case 1 + .short _022378AA - _02237896 - 2 ; case 2 + .short _022378B0 - _02237896 - 2 ; case 3 _0223789E: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022378A4: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022378AA: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022378B0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022378B4: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022378C6: ; jump table - .short _022378CE - _022378C6 - 2 ; case 0 - .short _022378D4 - _022378C6 - 2 ; case 1 - .short _022378DA - _022378C6 - 2 ; case 2 - .short _022378E0 - _022378C6 - 2 ; case 3 + .short _022378CE - _022378C6 - 2 ; case 0 + .short _022378D4 - _022378C6 - 2 ; case 1 + .short _022378DA - _022378C6 - 2 ; case 2 + .short _022378E0 - _022378C6 - 2 ; case 3 _022378CE: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _022378D4: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _022378DA: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _022378E0: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _022378E4: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022378F6: ; jump table - .short _022378FE - _022378F6 - 2 ; case 0 - .short _02237904 - _022378F6 - 2 ; case 1 - .short _0223790A - _022378F6 - 2 ; case 2 - .short _02237910 - _022378F6 - 2 ; case 3 + .short _022378FE - _022378F6 - 2 ; case 0 + .short _02237904 - _022378F6 - 2 ; case 1 + .short _0223790A - _022378F6 - 2 ; case 2 + .short _02237910 - _022378F6 - 2 ; case 3 _022378FE: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _02237904: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _0223790A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237910: - add r6, r4, #0 - b _02237942 + add r6, r4, #0 + b _02237942 _02237914: - add r4, #0x20 - cmp r5, #3 - bhi _02237942 - add r0, r5, r5 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r4, #0x20 + cmp r5, #3 + bhi _02237942 + add r0, r5, r5 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237926: ; jump table - .short _0223792E - _02237926 - 2 ; case 0 - .short _02237934 - _02237926 - 2 ; case 1 - .short _0223793A - _02237926 - 2 ; case 2 - .short _02237940 - _02237926 - 2 ; case 3 + .short _0223792E - _02237926 - 2 ; case 0 + .short _02237934 - _02237926 - 2 ; case 1 + .short _0223793A - _02237926 - 2 ; case 2 + .short _02237940 - _02237926 - 2 ; case 3 _0223792E: - add r6, r4, #0 - add r6, #0x24 - b _02237942 + add r6, r4, #0 + add r6, #0x24 + b _02237942 _02237934: - add r6, r4, #0 - add r6, #0x18 - b _02237942 + add r6, r4, #0 + add r6, #0x18 + b _02237942 _0223793A: - add r6, r4, #0 - add r6, #0xc - b _02237942 + add r6, r4, #0 + add r6, #0xc + b _02237942 _02237940: - add r6, r4, #0 + add r6, r4, #0 _02237942: - add r0, r6, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_0223746C + add r0, r6, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_0223746C - thumb_func_start MOD83_02237948 + thumb_func_start MOD83_02237948 MOD83_02237948: ; 0x02237948 - push {r3, r4} - add r4, r0, #0 - mov r3, #0 - add r4, #0x20 + push {r3, r4} + add r4, r0, #0 + mov r3, #0 + add r4, #0x20 _02237950: - ldr r2, [r4] - ldr r1, [r0, #4] - add r3, r3, #1 - eor r2, r1 - str r2, [r4] - ldr r1, [r0] - eor r1, r2 - stmia r4!, {r1} - cmp r3, #0xc - blo _02237950 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02237948 - - thumb_func_start MOD83_02237968 + ldr r2, [r4] + ldr r1, [r0, #4] + add r3, r3, #1 + eor r2, r1 + str r2, [r4] + ldr r1, [r0] + eor r1, r2 + stmia r4!, {r1} + cmp r3, #0xc + blo _02237950 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02237948 + + thumb_func_start MOD83_02237968 MOD83_02237968: ; 0x02237968 - push {r3, r4} - add r4, r0, #0 - mov r3, #0 - add r4, #0x20 + push {r3, r4} + add r4, r0, #0 + mov r3, #0 + add r4, #0x20 _02237970: - ldr r2, [r4] - ldr r1, [r0] - add r3, r3, #1 - eor r2, r1 - str r2, [r4] - ldr r1, [r0, #4] - eor r1, r2 - stmia r4!, {r1} - cmp r3, #0xc - blo _02237970 - pop {r3, r4} - bx lr - thumb_func_end MOD83_02237968 - - thumb_func_start MOD83_02237988 + ldr r2, [r4] + ldr r1, [r0] + add r3, r3, #1 + eor r2, r1 + str r2, [r4] + ldr r1, [r0, #4] + eor r1, r2 + stmia r4!, {r1} + cmp r3, #0xc + blo _02237970 + pop {r3, r4} + bx lr + thumb_func_end MOD83_02237968 + + thumb_func_start MOD83_02237988 MOD83_02237988: ; 0x02237988 - push {r3, r4, r5, r6, r7, lr} - add r1, r0, #0 - mov r4, #0 - ldr r1, [r1] - str r0, [sp] - add r2, r4, #0 - bl MOD83_0223746C - add r5, r0, #0 - ldr r0, [sp] - mov r2, #1 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r6, r0, #0 - ldr r0, [sp] - mov r2, #2 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r7, r0, #0 - ldr r0, [sp] - mov r2, #3 - add r1, r0, #0 - ldr r1, [r1] - bl MOD83_0223746C - add r1, r4, #0 + push {r3, r4, r5, r6, r7, lr} + add r1, r0, #0 + mov r4, #0 + ldr r1, [r1] + str r0, [sp] + add r2, r4, #0 + bl MOD83_0223746C + add r5, r0, #0 + ldr r0, [sp] + mov r2, #1 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r6, r0, #0 + ldr r0, [sp] + mov r2, #2 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r7, r0, #0 + ldr r0, [sp] + mov r2, #3 + add r1, r0, #0 + ldr r1, [r1] + bl MOD83_0223746C + add r1, r4, #0 _022379C4: - ldrh r2, [r5] - add r1, r1, #1 - add r5, r5, #2 - add r2, r4, r2 - lsl r2, r2, #0x10 - lsr r4, r2, #0x10 - cmp r1, #6 - blt _022379C4 - mov r2, #0 + ldrh r2, [r5] + add r1, r1, #1 + add r5, r5, #2 + add r2, r4, r2 + lsl r2, r2, #0x10 + lsr r4, r2, #0x10 + cmp r1, #6 + blt _022379C4 + mov r2, #0 _022379D6: - ldrh r1, [r6] - add r2, r2, #1 - add r6, r6, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379D6 - mov r2, #0 + ldrh r1, [r6] + add r2, r2, #1 + add r6, r6, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379D6 + mov r2, #0 _022379E8: - ldrh r1, [r7] - add r2, r2, #1 - add r7, r7, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379E8 - mov r2, #0 + ldrh r1, [r7] + add r2, r2, #1 + add r7, r7, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379E8 + mov r2, #0 _022379FA: - ldrh r1, [r0] - add r2, r2, #1 - add r0, r0, #2 - add r1, r4, r1 - lsl r1, r1, #0x10 - lsr r4, r1, #0x10 - cmp r2, #6 - blt _022379FA - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD83_02237988 - - thumb_func_start AGB_GetBoxMonData + ldrh r1, [r0] + add r2, r2, #1 + add r0, r0, #2 + add r1, r4, r1 + lsl r1, r1, #0x10 + lsr r4, r1, #0x10 + cmp r2, #6 + blt _022379FA + add r0, r4, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD83_02237988 + + thumb_func_start AGB_GetBoxMonData AGB_GetBoxMonData: ; 0x02237A10 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - mov r4, #0 - add r5, r0, #0 - str r1, [sp] - add r7, r2, #0 - add r6, r4, #0 - str r4, [sp, #0xc] - str r4, [sp, #8] - str r4, [sp, #4] - cmp r1, #0xa - ble _02237A86 - ldr r1, [r5] - add r2, r4, #0 - bl MOD83_0223746C - str r0, [sp, #0xc] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #1 - bl MOD83_0223746C - str r0, [sp, #8] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #2 - bl MOD83_0223746C - str r0, [sp, #4] - ldr r1, [r5] - add r0, r5, #0 - mov r2, #3 - bl MOD83_0223746C - add r6, r0, #0 - add r0, r5, #0 - bl MOD83_02237948 - add r0, r5, #0 - bl MOD83_02237988 - ldrh r1, [r5, #0x1c] - cmp r0, r1 - beq _02237A86 - ldrb r0, [r5, #0x13] - mov r1, #1 - bic r0, r1 - mov r1, #1 - orr r0, r1 - strb r0, [r5, #0x13] - ldrb r1, [r5, #0x13] - mov r0, #4 - orr r0, r1 - strb r0, [r5, #0x13] - mov r0, #1 - ldr r1, [r6, #4] - lsl r0, r0, #0x1e - orr r0, r1 - str r0, [r6, #4] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + mov r4, #0 + add r5, r0, #0 + str r1, [sp] + add r7, r2, #0 + add r6, r4, #0 + str r4, [sp, #0xc] + str r4, [sp, #8] + str r4, [sp, #4] + cmp r1, #0xa + ble _02237A86 + ldr r1, [r5] + add r2, r4, #0 + bl MOD83_0223746C + str r0, [sp, #0xc] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #1 + bl MOD83_0223746C + str r0, [sp, #8] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #2 + bl MOD83_0223746C + str r0, [sp, #4] + ldr r1, [r5] + add r0, r5, #0 + mov r2, #3 + bl MOD83_0223746C + add r6, r0, #0 + add r0, r5, #0 + bl MOD83_02237948 + add r0, r5, #0 + bl MOD83_02237988 + ldrh r1, [r5, #0x1c] + cmp r0, r1 + beq _02237A86 + ldrb r0, [r5, #0x13] + mov r1, #1 + bic r0, r1 + mov r1, #1 + orr r0, r1 + strb r0, [r5, #0x13] + ldrb r1, [r5, #0x13] + mov r0, #4 + orr r0, r1 + strb r0, [r5, #0x13] + mov r0, #1 + ldr r1, [r6, #4] + lsl r0, r0, #0x1e + orr r0, r1 + str r0, [r6, #4] _02237A86: - ldr r0, [sp] - cmp r0, #0x50 - bls _02237A8E - b _02237D7C + ldr r0, [sp] + cmp r0, #0x50 + bls _02237A8E + b _02237D7C _02237A8E: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237A9A: ; jump table - .short _02237B3C - _02237A9A - 2 ; case 0 - .short _02237B40 - _02237A9A - 2 ; case 1 - .short _02237B44 - _02237A9A - 2 ; case 2 - .short _02237B64 - _02237A9A - 2 ; case 3 - .short _02237B68 - _02237A9A - 2 ; case 4 - .short _02237B70 - _02237A9A - 2 ; case 5 - .short _02237B78 - _02237A9A - 2 ; case 6 - .short _02237B80 - _02237A9A - 2 ; case 7 - .short _02237B94 - _02237A9A - 2 ; case 8 - .short _02237B98 - _02237A9A - 2 ; case 9 - .short _02237B9C - _02237A9A - 2 ; case 10 - .short _02237BA0 - _02237A9A - 2 ; case 11 - .short _02237BB4 - _02237A9A - 2 ; case 12 - .short _02237BCC - _02237A9A - 2 ; case 13 - .short _02237BCC - _02237A9A - 2 ; case 14 - .short _02237BCC - _02237A9A - 2 ; case 15 - .short _02237BCC - _02237A9A - 2 ; case 16 - .short _02237BD8 - _02237A9A - 2 ; case 17 - .short _02237BD8 - _02237A9A - 2 ; case 18 - .short _02237BD8 - _02237A9A - 2 ; case 19 - .short _02237BD8 - _02237A9A - 2 ; case 20 - .short _02237BC0 - _02237A9A - 2 ; case 21 - .short _02237C08 - _02237A9A - 2 ; case 22 - .short _02237C0E - _02237A9A - 2 ; case 23 - .short _02237C14 - _02237A9A - 2 ; case 24 - .short _02237BBA - _02237A9A - 2 ; case 25 - .short _02237BE4 - _02237A9A - 2 ; case 26 - .short _02237BEA - _02237A9A - 2 ; case 27 - .short _02237BF0 - _02237A9A - 2 ; case 28 - .short _02237BF6 - _02237A9A - 2 ; case 29 - .short _02237BFC - _02237A9A - 2 ; case 30 - .short _02237C02 - _02237A9A - 2 ; case 31 - .short _02237BC6 - _02237A9A - 2 ; case 32 - .short _02237C1A - _02237A9A - 2 ; case 33 - .short _02237C2C - _02237A9A - 2 ; case 34 - .short _02237C34 - _02237A9A - 2 ; case 35 - .short _02237C3C - _02237A9A - 2 ; case 36 - .short _02237C44 - _02237A9A - 2 ; case 37 - .short _02237C4C - _02237A9A - 2 ; case 38 - .short _02237C5A - _02237A9A - 2 ; case 39 - .short _02237C62 - _02237A9A - 2 ; case 40 - .short _02237C6A - _02237A9A - 2 ; case 41 - .short _02237C72 - _02237A9A - 2 ; case 42 - .short _02237C7A - _02237A9A - 2 ; case 43 - .short _02237C82 - _02237A9A - 2 ; case 44 - .short _02237C8A - _02237A9A - 2 ; case 45 - .short _02237C92 - _02237A9A - 2 ; case 46 - .short _02237C20 - _02237A9A - 2 ; case 47 - .short _02237C26 - _02237A9A - 2 ; case 48 - .short _02237C54 - _02237A9A - 2 ; case 49 - .short _02237C98 - _02237A9A - 2 ; case 50 - .short _02237CA0 - _02237A9A - 2 ; case 51 - .short _02237CA8 - _02237A9A - 2 ; case 52 - .short _02237CB0 - _02237A9A - 2 ; case 53 - .short _02237CB8 - _02237A9A - 2 ; case 54 - .short _02237D7C - _02237A9A - 2 ; case 55 - .short _02237D7C - _02237A9A - 2 ; case 56 - .short _02237D7C - _02237A9A - 2 ; case 57 - .short _02237D7C - _02237A9A - 2 ; case 58 - .short _02237D7C - _02237A9A - 2 ; case 59 - .short _02237D7C - _02237A9A - 2 ; case 60 - .short _02237D7C - _02237A9A - 2 ; case 61 - .short _02237D7C - _02237A9A - 2 ; case 62 - .short _02237D7C - _02237A9A - 2 ; case 63 - .short _02237D7C - _02237A9A - 2 ; case 64 - .short _02237D2E - _02237A9A - 2 ; case 65 - .short _02237D4C - _02237A9A - 2 ; case 66 - .short _02237CC0 - _02237A9A - 2 ; case 67 - .short _02237CC8 - _02237A9A - 2 ; case 68 - .short _02237CD0 - _02237A9A - 2 ; case 69 - .short _02237CD8 - _02237A9A - 2 ; case 70 - .short _02237CE0 - _02237A9A - 2 ; case 71 - .short _02237CE8 - _02237A9A - 2 ; case 72 - .short _02237CF0 - _02237A9A - 2 ; case 73 - .short _02237CF8 - _02237A9A - 2 ; case 74 - .short _02237D00 - _02237A9A - 2 ; case 75 - .short _02237D08 - _02237A9A - 2 ; case 76 - .short _02237D10 - _02237A9A - 2 ; case 77 - .short _02237D18 - _02237A9A - 2 ; case 78 - .short _02237D20 - _02237A9A - 2 ; case 79 - .short _02237D28 - _02237A9A - 2 ; case 80 + .short _02237B3C - _02237A9A - 2 ; case 0 + .short _02237B40 - _02237A9A - 2 ; case 1 + .short _02237B44 - _02237A9A - 2 ; case 2 + .short _02237B64 - _02237A9A - 2 ; case 3 + .short _02237B68 - _02237A9A - 2 ; case 4 + .short _02237B70 - _02237A9A - 2 ; case 5 + .short _02237B78 - _02237A9A - 2 ; case 6 + .short _02237B80 - _02237A9A - 2 ; case 7 + .short _02237B94 - _02237A9A - 2 ; case 8 + .short _02237B98 - _02237A9A - 2 ; case 9 + .short _02237B9C - _02237A9A - 2 ; case 10 + .short _02237BA0 - _02237A9A - 2 ; case 11 + .short _02237BB4 - _02237A9A - 2 ; case 12 + .short _02237BCC - _02237A9A - 2 ; case 13 + .short _02237BCC - _02237A9A - 2 ; case 14 + .short _02237BCC - _02237A9A - 2 ; case 15 + .short _02237BCC - _02237A9A - 2 ; case 16 + .short _02237BD8 - _02237A9A - 2 ; case 17 + .short _02237BD8 - _02237A9A - 2 ; case 18 + .short _02237BD8 - _02237A9A - 2 ; case 19 + .short _02237BD8 - _02237A9A - 2 ; case 20 + .short _02237BC0 - _02237A9A - 2 ; case 21 + .short _02237C08 - _02237A9A - 2 ; case 22 + .short _02237C0E - _02237A9A - 2 ; case 23 + .short _02237C14 - _02237A9A - 2 ; case 24 + .short _02237BBA - _02237A9A - 2 ; case 25 + .short _02237BE4 - _02237A9A - 2 ; case 26 + .short _02237BEA - _02237A9A - 2 ; case 27 + .short _02237BF0 - _02237A9A - 2 ; case 28 + .short _02237BF6 - _02237A9A - 2 ; case 29 + .short _02237BFC - _02237A9A - 2 ; case 30 + .short _02237C02 - _02237A9A - 2 ; case 31 + .short _02237BC6 - _02237A9A - 2 ; case 32 + .short _02237C1A - _02237A9A - 2 ; case 33 + .short _02237C2C - _02237A9A - 2 ; case 34 + .short _02237C34 - _02237A9A - 2 ; case 35 + .short _02237C3C - _02237A9A - 2 ; case 36 + .short _02237C44 - _02237A9A - 2 ; case 37 + .short _02237C4C - _02237A9A - 2 ; case 38 + .short _02237C5A - _02237A9A - 2 ; case 39 + .short _02237C62 - _02237A9A - 2 ; case 40 + .short _02237C6A - _02237A9A - 2 ; case 41 + .short _02237C72 - _02237A9A - 2 ; case 42 + .short _02237C7A - _02237A9A - 2 ; case 43 + .short _02237C82 - _02237A9A - 2 ; case 44 + .short _02237C8A - _02237A9A - 2 ; case 45 + .short _02237C92 - _02237A9A - 2 ; case 46 + .short _02237C20 - _02237A9A - 2 ; case 47 + .short _02237C26 - _02237A9A - 2 ; case 48 + .short _02237C54 - _02237A9A - 2 ; case 49 + .short _02237C98 - _02237A9A - 2 ; case 50 + .short _02237CA0 - _02237A9A - 2 ; case 51 + .short _02237CA8 - _02237A9A - 2 ; case 52 + .short _02237CB0 - _02237A9A - 2 ; case 53 + .short _02237CB8 - _02237A9A - 2 ; case 54 + .short _02237D7C - _02237A9A - 2 ; case 55 + .short _02237D7C - _02237A9A - 2 ; case 56 + .short _02237D7C - _02237A9A - 2 ; case 57 + .short _02237D7C - _02237A9A - 2 ; case 58 + .short _02237D7C - _02237A9A - 2 ; case 59 + .short _02237D7C - _02237A9A - 2 ; case 60 + .short _02237D7C - _02237A9A - 2 ; case 61 + .short _02237D7C - _02237A9A - 2 ; case 62 + .short _02237D7C - _02237A9A - 2 ; case 63 + .short _02237D7C - _02237A9A - 2 ; case 64 + .short _02237D2E - _02237A9A - 2 ; case 65 + .short _02237D4C - _02237A9A - 2 ; case 66 + .short _02237CC0 - _02237A9A - 2 ; case 67 + .short _02237CC8 - _02237A9A - 2 ; case 68 + .short _02237CD0 - _02237A9A - 2 ; case 69 + .short _02237CD8 - _02237A9A - 2 ; case 70 + .short _02237CE0 - _02237A9A - 2 ; case 71 + .short _02237CE8 - _02237A9A - 2 ; case 72 + .short _02237CF0 - _02237A9A - 2 ; case 73 + .short _02237CF8 - _02237A9A - 2 ; case 74 + .short _02237D00 - _02237A9A - 2 ; case 75 + .short _02237D08 - _02237A9A - 2 ; case 76 + .short _02237D10 - _02237A9A - 2 ; case 77 + .short _02237D18 - _02237A9A - 2 ; case 78 + .short _02237D20 - _02237A9A - 2 ; case 79 + .short _02237D28 - _02237A9A - 2 ; case 80 _02237B3C: - ldr r4, [r5] - b _02237D7C + ldr r4, [r5] + b _02237D7C _02237B40: - ldr r4, [r5, #4] - b _02237D7C + ldr r4, [r5, #4] + b _02237D7C _02237B44: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237B50 - mov r4, #0 - b _02237B5E + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237B50 + mov r4, #0 + b _02237B5E _02237B50: - mov r4, #0 + mov r4, #0 _02237B52: - add r0, r5, r4 - ldrb r0, [r0, #8] - strb r0, [r7, r4] - add r4, r4, #1 - cmp r4, #0xa - blo _02237B52 + add r0, r5, r4 + ldrb r0, [r0, #8] + strb r0, [r7, r4] + add r4, r4, #1 + cmp r4, #0xa + blo _02237B52 _02237B5E: - mov r0, #0xff - strb r0, [r7, r4] - b _02237D7C + mov r0, #0xff + strb r0, [r7, r4] + b _02237D7C _02237B64: - ldrb r4, [r5, #0x12] - b _02237D7C + ldrb r4, [r5, #0x12] + b _02237D7C _02237B68: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r4, r0, #0x1f + b _02237D7C _02237B70: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1e - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1e + lsr r4, r0, #0x1f + b _02237D7C _02237B78: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1d - lsr r4, r0, #0x1f - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1d + lsr r4, r0, #0x1f + b _02237D7C _02237B80: - mov r4, #0 + mov r4, #0 _02237B82: - add r0, r5, r4 - ldrb r0, [r0, #0x14] - strb r0, [r7, r4] - add r4, r4, #1 - cmp r4, #7 - blo _02237B82 - mov r0, #0xff - strb r0, [r7, r4] - b _02237D7C + add r0, r5, r4 + ldrb r0, [r0, #0x14] + strb r0, [r7, r4] + add r4, r4, #1 + cmp r4, #7 + blo _02237B82 + mov r0, #0xff + strb r0, [r7, r4] + b _02237D7C _02237B94: - ldrb r4, [r5, #0x1b] - b _02237D7C + ldrb r4, [r5, #0x1b] + b _02237D7C _02237B98: - ldrh r4, [r5, #0x1c] - b _02237D7C + ldrh r4, [r5, #0x1c] + b _02237D7C _02237B9C: - ldrh r4, [r5, #0x1e] - b _02237D7C + ldrh r4, [r5, #0x1e] + b _02237D7C _02237BA0: - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237BAE - mov r4, #0x67 - lsl r4, r4, #2 - b _02237D7C + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237BAE + mov r4, #0x67 + lsl r4, r4, #2 + b _02237D7C _02237BAE: - ldr r0, [sp, #0xc] - ldrh r4, [r0] - b _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0] + b _02237D7C _02237BB4: - ldr r0, [sp, #0xc] - ldrh r4, [r0, #2] - b _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0, #2] + b _02237D7C _02237BBA: - ldr r0, [sp, #0xc] - ldr r4, [r0, #4] - b _02237D7C + ldr r0, [sp, #0xc] + ldr r4, [r0, #4] + b _02237D7C _02237BC0: - ldr r0, [sp, #0xc] - ldrb r4, [r0, #8] - b _02237D7C + ldr r0, [sp, #0xc] + ldrb r4, [r0, #8] + b _02237D7C _02237BC6: - ldr r0, [sp, #0xc] - ldrb r4, [r0, #9] - b _02237D7C + ldr r0, [sp, #0xc] + ldrb r4, [r0, #9] + b _02237D7C _02237BCC: - ldr r0, [sp] - sub r0, #0xd - lsl r1, r0, #1 - ldr r0, [sp, #8] - ldrh r4, [r0, r1] - b _02237D7C + ldr r0, [sp] + sub r0, #0xd + lsl r1, r0, #1 + ldr r0, [sp, #8] + ldrh r4, [r0, r1] + b _02237D7C _02237BD8: - ldr r1, [sp] - ldr r0, [sp, #8] - sub r1, #0x11 - add r0, r0, r1 - ldrb r4, [r0, #8] - b _02237D7C + ldr r1, [sp] + ldr r0, [sp, #8] + sub r1, #0x11 + add r0, r0, r1 + ldrb r4, [r0, #8] + b _02237D7C _02237BE4: - ldr r0, [sp, #4] - ldrb r4, [r0] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0] + b _02237D7C _02237BEA: - ldr r0, [sp, #4] - ldrb r4, [r0, #1] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #1] + b _02237D7C _02237BF0: - ldr r0, [sp, #4] - ldrb r4, [r0, #2] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #2] + b _02237D7C _02237BF6: - ldr r0, [sp, #4] - ldrb r4, [r0, #3] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #3] + b _02237D7C _02237BFC: - ldr r0, [sp, #4] - ldrb r4, [r0, #4] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #4] + b _02237D7C _02237C02: - ldr r0, [sp, #4] - ldrb r4, [r0, #5] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #5] + b _02237D7C _02237C08: - ldr r0, [sp, #4] - ldrb r4, [r0, #6] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #6] + b _02237D7C _02237C0E: - ldr r0, [sp, #4] - ldrb r4, [r0, #7] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #7] + b _02237D7C _02237C14: - ldr r0, [sp, #4] - ldrb r4, [r0, #8] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #8] + b _02237D7C _02237C1A: - ldr r0, [sp, #4] - ldrb r4, [r0, #9] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #9] + b _02237D7C _02237C20: - ldr r0, [sp, #4] - ldrb r4, [r0, #0xa] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #0xa] + b _02237D7C _02237C26: - ldr r0, [sp, #4] - ldrb r4, [r0, #0xb] - b _02237D7C + ldr r0, [sp, #4] + ldrb r4, [r0, #0xb] + b _02237D7C _02237C2C: - ldr r0, [r6] - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + b _02237D7C _02237C34: - ldr r0, [r6] - lsl r0, r0, #0x10 - lsr r4, r0, #0x18 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #0x10 + lsr r4, r0, #0x18 + b _02237D7C _02237C3C: - ldr r0, [r6] - lsl r0, r0, #9 - lsr r4, r0, #0x19 - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #9 + lsr r4, r0, #0x19 + b _02237D7C _02237C44: - ldr r0, [r6] - lsl r0, r0, #5 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #5 + lsr r4, r0, #0x1c + b _02237D7C _02237C4C: - ldr r0, [r6] - lsl r0, r0, #1 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6] + lsl r0, r0, #1 + lsr r4, r0, #0x1c + b _02237D7C _02237C54: - ldr r0, [r6] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6] + lsr r4, r0, #0x1f + b _02237D7C _02237C5A: - ldr r0, [r6, #4] - lsl r0, r0, #0x1b - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x1b + lsr r4, r0, #0x1b + b _02237D7C _02237C62: - ldr r0, [r6, #4] - lsl r0, r0, #0x16 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x16 + lsr r4, r0, #0x1b + b _02237D7C _02237C6A: - ldr r0, [r6, #4] - lsl r0, r0, #0x11 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0x11 + lsr r4, r0, #0x1b + b _02237D7C _02237C72: - ldr r0, [r6, #4] - lsl r0, r0, #0xc - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #0xc + lsr r4, r0, #0x1b + b _02237D7C _02237C7A: - ldr r0, [r6, #4] - lsl r0, r0, #7 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #7 + lsr r4, r0, #0x1b + b _02237D7C _02237C82: - ldr r0, [r6, #4] - lsl r0, r0, #2 - lsr r4, r0, #0x1b - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #2 + lsr r4, r0, #0x1b + b _02237D7C _02237C8A: - ldr r0, [r6, #4] - lsl r0, r0, #1 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #1 + lsr r4, r0, #0x1f + b _02237D7C _02237C92: - ldr r0, [r6, #4] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #4] + lsr r4, r0, #0x1f + b _02237D7C _02237C98: - ldr r0, [r6, #8] - lsl r0, r0, #0x1d - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x1d + lsr r4, r0, #0x1d + b _02237D7C _02237CA0: - ldr r0, [r6, #8] - lsl r0, r0, #0x1a - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x1a + lsr r4, r0, #0x1d + b _02237D7C _02237CA8: - ldr r0, [r6, #8] - lsl r0, r0, #0x17 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x17 + lsr r4, r0, #0x1d + b _02237D7C _02237CB0: - ldr r0, [r6, #8] - lsl r0, r0, #0x14 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x14 + lsr r4, r0, #0x1d + b _02237D7C _02237CB8: - ldr r0, [r6, #8] - lsl r0, r0, #0x11 - lsr r4, r0, #0x1d - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x11 + lsr r4, r0, #0x1d + b _02237D7C _02237CC0: - ldr r0, [r6, #8] - lsl r0, r0, #0x10 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0x10 + lsr r4, r0, #0x1f + b _02237D7C _02237CC8: - ldr r0, [r6, #8] - lsl r0, r0, #0xf - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xf + lsr r4, r0, #0x1f + b _02237D7C _02237CD0: - ldr r0, [r6, #8] - lsl r0, r0, #0xe - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xe + lsr r4, r0, #0x1f + b _02237D7C _02237CD8: - ldr r0, [r6, #8] - lsl r0, r0, #0xd - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xd + lsr r4, r0, #0x1f + b _02237D7C _02237CE0: - ldr r0, [r6, #8] - lsl r0, r0, #0xc - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xc + lsr r4, r0, #0x1f + b _02237D7C _02237CE8: - ldr r0, [r6, #8] - lsl r0, r0, #0xb - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xb + lsr r4, r0, #0x1f + b _02237D7C _02237CF0: - ldr r0, [r6, #8] - lsl r0, r0, #0xa - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #0xa + lsr r4, r0, #0x1f + b _02237D7C _02237CF8: - ldr r0, [r6, #8] - lsl r0, r0, #9 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #9 + lsr r4, r0, #0x1f + b _02237D7C _02237D00: - ldr r0, [r6, #8] - lsl r0, r0, #8 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #8 + lsr r4, r0, #0x1f + b _02237D7C _02237D08: - ldr r0, [r6, #8] - lsl r0, r0, #7 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #7 + lsr r4, r0, #0x1f + b _02237D7C _02237D10: - ldr r0, [r6, #8] - lsl r0, r0, #6 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #6 + lsr r4, r0, #0x1f + b _02237D7C _02237D18: - ldr r0, [r6, #8] - lsl r0, r0, #5 - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #5 + lsr r4, r0, #0x1f + b _02237D7C _02237D20: - ldr r0, [r6, #8] - lsl r0, r0, #1 - lsr r4, r0, #0x1c - b _02237D7C + ldr r0, [r6, #8] + lsl r0, r0, #1 + lsr r4, r0, #0x1c + b _02237D7C _02237D28: - ldr r0, [r6, #8] - lsr r4, r0, #0x1f - b _02237D7C + ldr r0, [r6, #8] + lsr r4, r0, #0x1f + b _02237D7C _02237D2E: - ldr r0, [sp, #0xc] - ldrh r4, [r0] - cmp r4, #0 - beq _02237D7C - ldr r0, [r6, #4] - lsl r0, r0, #1 - lsr r0, r0, #0x1f - bne _02237D46 - ldrb r0, [r5, #0x13] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02237D7C + ldr r0, [sp, #0xc] + ldrh r4, [r0] + cmp r4, #0 + beq _02237D7C + ldr r0, [r6, #4] + lsl r0, r0, #1 + lsr r0, r0, #0x1f + bne _02237D46 + ldrb r0, [r5, #0x13] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02237D7C _02237D46: - mov r4, #0x67 - lsl r4, r4, #2 - b _02237D7C + mov r4, #0x67 + lsl r4, r4, #2 + b _02237D7C _02237D4C: - ldr r4, [r6, #4] - lsl r0, r4, #2 - lsr r0, r0, #0x1b - lsl r6, r0, #0x19 - lsl r0, r4, #7 - lsr r0, r0, #0x1b - lsl r3, r0, #0x14 - lsl r0, r4, #0xc - lsr r0, r0, #0x1b - lsl r2, r0, #0xf - lsl r0, r4, #0x11 - lsr r0, r0, #0x1b - lsl r1, r0, #0xa - lsl r0, r4, #0x1b - lsl r4, r4, #0x16 - lsr r4, r4, #0x1b - lsr r0, r0, #0x1b - lsl r4, r4, #5 - orr r0, r4 - orr r0, r1 - orr r0, r2 - orr r0, r3 - add r4, r6, #0 - orr r4, r0 + ldr r4, [r6, #4] + lsl r0, r4, #2 + lsr r0, r0, #0x1b + lsl r6, r0, #0x19 + lsl r0, r4, #7 + lsr r0, r0, #0x1b + lsl r3, r0, #0x14 + lsl r0, r4, #0xc + lsr r0, r0, #0x1b + lsl r2, r0, #0xf + lsl r0, r4, #0x11 + lsr r0, r0, #0x1b + lsl r1, r0, #0xa + lsl r0, r4, #0x1b + lsl r4, r4, #0x16 + lsr r4, r4, #0x1b + lsr r0, r0, #0x1b + lsl r4, r4, #5 + orr r0, r4 + orr r0, r1 + orr r0, r2 + orr r0, r3 + add r4, r6, #0 + orr r4, r0 _02237D7C: - ldr r0, [sp] - cmp r0, #0xa - ble _02237D88 - add r0, r5, #0 - bl MOD83_02237968 + ldr r0, [sp] + cmp r0, #0xa + ble _02237D88 + add r0, r5, #0 + bl MOD83_02237968 _02237D88: - add r0, r4, #0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end AGB_GetBoxMonData + add r0, r4, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end AGB_GetBoxMonData - thumb_func_start MOD83_02237D90 + thumb_func_start MOD83_02237D90 MOD83_02237D90: ; 0x02237D90 - push {r3, r4, r5, r6, r7, lr} - add r6, r1, #0 - add r4, r0, #0 - add r5, r2, #0 - mov r7, #0 - cmp r6, #0xa - ble _02237E04 - ldr r1, [r4] - add r2, r7, #0 - bl MOD83_0223746C - add r7, r0, #0 - ldr r1, [r4] - add r0, r4, #0 - mov r2, #1 - bl MOD83_0223746C - ldr r1, [r4] - add r0, r4, #0 - mov r2, #2 - bl MOD83_0223746C - ldr r1, [r4] - add r0, r4, #0 - mov r2, #3 - bl MOD83_0223746C - str r0, [sp] - add r0, r4, #0 - bl MOD83_02237948 - add r0, r4, #0 - bl MOD83_02237988 - ldrh r1, [r4, #0x1c] - cmp r0, r1 - beq _02237E04 - ldrb r1, [r4, #0x13] - mov r0, #1 - bic r1, r0 - mov r0, #1 - orr r0, r1 - strb r0, [r4, #0x13] - ldrb r1, [r4, #0x13] - mov r0, #4 - orr r0, r1 - strb r0, [r4, #0x13] - ldr r0, [sp] - ldr r1, [r0, #4] - mov r0, #1 - lsl r0, r0, #0x1e - orr r1, r0 - ldr r0, [sp] - str r1, [r0, #4] - add r0, r4, #0 - bl MOD83_02237968 - pop {r3, r4, r5, r6, r7, pc} + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + add r4, r0, #0 + add r5, r2, #0 + mov r7, #0 + cmp r6, #0xa + ble _02237E04 + ldr r1, [r4] + add r2, r7, #0 + bl MOD83_0223746C + add r7, r0, #0 + ldr r1, [r4] + add r0, r4, #0 + mov r2, #1 + bl MOD83_0223746C + ldr r1, [r4] + add r0, r4, #0 + mov r2, #2 + bl MOD83_0223746C + ldr r1, [r4] + add r0, r4, #0 + mov r2, #3 + bl MOD83_0223746C + str r0, [sp] + add r0, r4, #0 + bl MOD83_02237948 + add r0, r4, #0 + bl MOD83_02237988 + ldrh r1, [r4, #0x1c] + cmp r0, r1 + beq _02237E04 + ldrb r1, [r4, #0x13] + mov r0, #1 + bic r1, r0 + mov r0, #1 + orr r0, r1 + strb r0, [r4, #0x13] + ldrb r1, [r4, #0x13] + mov r0, #4 + orr r0, r1 + strb r0, [r4, #0x13] + ldr r0, [sp] + ldr r1, [r0, #4] + mov r0, #1 + lsl r0, r0, #0x1e + orr r1, r0 + ldr r0, [sp] + str r1, [r0, #4] + add r0, r4, #0 + bl MOD83_02237968 + pop {r3, r4, r5, r6, r7, pc} _02237E04: - cmp r6, #0xb - bhi _02237EA8 - add r0, r6, r6 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + cmp r6, #0xb + bhi _02237EA8 + add r0, r6, r6 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02237E14: ; jump table - .short _02237EA8 - _02237E14 - 2 ; case 0 - .short _02237EA8 - _02237E14 - 2 ; case 1 - .short _02237E2C - _02237E14 - 2 ; case 2 - .short _02237E3C - _02237E14 - 2 ; case 3 - .short _02237E42 - _02237E14 - 2 ; case 4 - .short _02237E54 - _02237E14 - 2 ; case 5 - .short _02237E66 - _02237E14 - 2 ; case 6 - .short _02237E78 - _02237E14 - 2 ; case 7 - .short _02237EA8 - _02237E14 - 2 ; case 8 - .short _02237EA8 - _02237E14 - 2 ; case 9 - .short _02237EA8 - _02237E14 - 2 ; case 10 - .short _02237E88 - _02237E14 - 2 ; case 11 + .short _02237EA8 - _02237E14 - 2 ; case 0 + .short _02237EA8 - _02237E14 - 2 ; case 1 + .short _02237E2C - _02237E14 - 2 ; case 2 + .short _02237E3C - _02237E14 - 2 ; case 3 + .short _02237E42 - _02237E14 - 2 ; case 4 + .short _02237E54 - _02237E14 - 2 ; case 5 + .short _02237E66 - _02237E14 - 2 ; case 6 + .short _02237E78 - _02237E14 - 2 ; case 7 + .short _02237EA8 - _02237E14 - 2 ; case 8 + .short _02237EA8 - _02237E14 - 2 ; case 9 + .short _02237EA8 - _02237E14 - 2 ; case 10 + .short _02237E88 - _02237E14 - 2 ; case 11 _02237E2C: - mov r2, #0 + mov r2, #0 _02237E2E: - ldrb r1, [r5, r2] - add r0, r4, r2 - add r2, r2, #1 - strb r1, [r0, #8] - cmp r2, #0xa - blt _02237E2E - b _02237EA8 + ldrb r1, [r5, r2] + add r0, r4, r2 + add r2, r2, #1 + strb r1, [r0, #8] + cmp r2, #0xa + blt _02237E2E + b _02237EA8 _02237E3C: - ldrb r0, [r5] - strb r0, [r4, #0x12] - b _02237EA8 + ldrb r0, [r5] + strb r0, [r4, #0x12] + b _02237EA8 _02237E42: - ldrb r0, [r4, #0x13] - ldrb r2, [r5] - mov r1, #1 - bic r0, r1 - mov r1, #1 - and r1, r2 - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + ldrb r2, [r5] + mov r1, #1 + bic r0, r1 + mov r1, #1 + and r1, r2 + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E54: - ldrb r0, [r4, #0x13] - mov r1, #2 - bic r0, r1 - ldrb r1, [r5] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1e - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + mov r1, #2 + bic r0, r1 + ldrb r1, [r5] + lsl r1, r1, #0x1f + lsr r1, r1, #0x1e + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E66: - ldrb r0, [r4, #0x13] - mov r1, #4 - bic r0, r1 - ldrb r1, [r5] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1d - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r4, #0x13] + mov r1, #4 + bic r0, r1 + ldrb r1, [r5] + lsl r1, r1, #0x1f + lsr r1, r1, #0x1d + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237E78: - mov r2, #0 + mov r2, #0 _02237E7A: - ldrb r1, [r5, r2] - add r0, r4, r2 - add r2, r2, #1 - strb r1, [r0, #0x14] - cmp r2, #7 - blt _02237E7A - b _02237EA8 + ldrb r1, [r5, r2] + add r0, r4, r2 + add r2, r2, #1 + strb r1, [r0, #0x14] + cmp r2, #7 + blt _02237E7A + b _02237EA8 _02237E88: - ldrb r0, [r5, #1] - ldrb r1, [r5] - lsl r0, r0, #8 - add r0, r1, r0 - strh r0, [r7] - ldrh r0, [r7] - ldrb r1, [r4, #0x13] - cmp r0, #0 - beq _02237EA2 - mov r0, #2 - orr r0, r1 - strb r0, [r4, #0x13] - b _02237EA8 + ldrb r0, [r5, #1] + ldrb r1, [r5] + lsl r0, r0, #8 + add r0, r1, r0 + strh r0, [r7] + ldrh r0, [r7] + ldrb r1, [r4, #0x13] + cmp r0, #0 + beq _02237EA2 + mov r0, #2 + orr r0, r1 + strb r0, [r4, #0x13] + b _02237EA8 _02237EA2: - mov r0, #2 - bic r1, r0 - strb r1, [r4, #0x13] + mov r0, #2 + bic r1, r0 + strb r1, [r4, #0x13] _02237EA8: - cmp r6, #0xa - ble _02237EBA - add r0, r4, #0 - bl MOD83_02237988 - strh r0, [r4, #0x1c] - add r0, r4, #0 - bl MOD83_02237968 + cmp r6, #0xa + ble _02237EBA + add r0, r4, #0 + bl MOD83_02237988 + strh r0, [r4, #0x1c] + add r0, r4, #0 + bl MOD83_02237968 _02237EBA: - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD83_02237D90 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD83_02237D90 - thumb_func_start MOD83_TranslateAgbSpecies + thumb_func_start MOD83_TranslateAgbSpecies MOD83_TranslateAgbSpecies: ; 0x02237EBC - ldr r2, _02237ED4 ; =0x00000115 - cmp r0, r2 - blt _02237ED2 - add r1, r2, #0 - add r1, #0x86 - cmp r0, r1 - bgt _02237ED2 - sub r0, r0, r2 - lsl r1, r0, #1 - ldr r0, _02237ED8 ; =MOD83_UpConvertSpeciesLUT - ldrh r0, [r0, r1] + ldr r2, _02237ED4 ; =0x00000115 + cmp r0, r2 + blt _02237ED2 + add r1, r2, #0 + add r1, #0x86 + cmp r0, r1 + bgt _02237ED2 + sub r0, r0, r2 + lsl r1, r0, #1 + ldr r0, _02237ED8 ; =MOD83_UpConvertSpeciesLUT + ldrh r0, [r0, r1] _02237ED2: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _02237ED4: .word 0x00000115 _02237ED8: .word MOD83_UpConvertSpeciesLUT - thumb_func_end MOD83_TranslateAgbSpecies + thumb_func_end MOD83_TranslateAgbSpecies - thumb_func_start MOD83_02237EDC + thumb_func_start MOD83_02237EDC MOD83_02237EDC: ; 0x02237EDC - push {r3, r4, r5, lr} - add r5, r0, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - bl MOD83_TranslateAgbSpecies - add r4, r0, #0 - add r0, r5, #0 - mov r1, #0x19 - mov r2, #0 - bl AGB_GetBoxMonData - add r1, r0, #0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl CalcLevelBySpeciesAndExp - pop {r3, r4, r5, pc} - thumb_func_end MOD83_02237EDC - - thumb_func_start MOD83_02237F04 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + bl MOD83_TranslateAgbSpecies + add r4, r0, #0 + add r0, r5, #0 + mov r1, #0x19 + mov r2, #0 + bl AGB_GetBoxMonData + add r1, r0, #0 + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + bl CalcLevelBySpeciesAndExp + pop {r3, r4, r5, pc} + thumb_func_end MOD83_02237EDC + + thumb_func_start MOD83_02237F04 MOD83_02237F04: ; 0x02237F04 - push {r4, r5, r6, lr} - add r4, r0, #0 - add r0, r1, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - add r0, r4, #0 - mov r1, #0x2e - mov r2, #0 - bl AGB_GetBoxMonData - add r6, r0, #0 - add r0, r5, #0 - mov r1, #0x19 ; BASE_ABILITY_2 - bl GetMonBaseStat - cmp r0, #0 - beq _02237F5E - ldr r2, _02237F68 ; =MOD83_SpeciesWithAbilityOverridesList - mov r4, #0 + push {r4, r5, r6, lr} + add r4, r0, #0 + add r0, r1, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + lsl r0, r0, #0x10 + lsr r5, r0, #0x10 + add r0, r4, #0 + mov r1, #0x2e + mov r2, #0 + bl AGB_GetBoxMonData + add r6, r0, #0 + add r0, r5, #0 + mov r1, #0x19 ; BASE_ABILITY_2 + bl GetMonBaseStat + cmp r0, #0 + beq _02237F5E + ldr r2, _02237F68 ; =MOD83_SpeciesWithAbilityOverridesList + mov r4, #0 _02237F32: - ldrh r1, [r2] - cmp r5, r1 - bne _02237F42 - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat - b _02237F4A + ldrh r1, [r2] + cmp r5, r1 + bne _02237F42 + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat + b _02237F4A _02237F42: - add r4, r4, #1 - add r2, r2, #2 - cmp r4, #0x5e - blo _02237F32 + add r4, r4, #1 + add r2, r2, #2 + cmp r4, #0x5e + blo _02237F32 _02237F4A: - cmp r4, #0x5e - bne _02237F66 - mov r1, #1 - tst r1, r6 - bne _02237F66 - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat - pop {r4, r5, r6, pc} + cmp r4, #0x5e + bne _02237F66 + mov r1, #1 + tst r1, r6 + bne _02237F66 + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat + pop {r4, r5, r6, pc} _02237F5E: - add r0, r5, #0 - mov r1, #0x18 ; BASE_ABILITY_1 - bl GetMonBaseStat + add r0, r5, #0 + mov r1, #0x18 ; BASE_ABILITY_1 + bl GetMonBaseStat _02237F66: - pop {r4, r5, r6, pc} - .align 2, 0 + pop {r4, r5, r6, pc} + .align 2, 0 _02237F68: .word MOD83_SpeciesWithAbilityOverridesList - thumb_func_end MOD83_02237F04 + thumb_func_end MOD83_02237F04 - thumb_func_start MigrateBoxMon + thumb_func_start MigrateBoxMon MigrateBoxMon: ; 0x02237F6C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x30 - add r4, r1, #0 - add r6, r0, #0 - add r0, r4, #0 - bl ZeroBoxMonData - add r0, r4, #0 - bl AcquireBoxMonLock - mov r1, #0 - str r0, [sp] - add r0, r6, #0 - add r2, r1, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0xb - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - bl MOD83_TranslateAgbSpecies - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #5 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0xc - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - cmp r0, #0 - beq _02237FCE - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl UpConvertItemId_Gen3to4 - str r0, [sp, #8] + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x30 + add r4, r1, #0 + add r6, r0, #0 + add r0, r4, #0 + bl ZeroBoxMonData + add r0, r4, #0 + bl AcquireBoxMonLock + mov r1, #0 + str r0, [sp] + add r0, r6, #0 + add r2, r1, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0xb + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + bl MOD83_TranslateAgbSpecies + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #5 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0xc + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + cmp r0, #0 + beq _02237FCE + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl UpConvertItemId_Gen3to4 + str r0, [sp, #8] _02237FCE: - add r0, r4, #0 - mov r1, #6 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #1 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #7 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x19 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #8 - add r2, sp, #8 - bl SetBoxMonData - mov r0, #0x46 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #9 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - add r1, r4, #0 - bl MOD83_02237F04 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xa - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #8 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xb - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #4] - add r0, r4, #0 - mov r1, #0xc - add r2, sp, #4 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xd - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xe - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0xf - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x10 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1e - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x11 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x1f - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x12 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x16 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x13 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x17 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x14 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x18 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x15 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x21 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x16 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2f - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x17 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x30 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x18 - add r2, sp, #8 - bl SetBoxMonData - mov r5, #0 - add r7, r5, #0 + add r0, r4, #0 + mov r1, #6 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #1 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #7 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x19 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #8 + add r2, sp, #8 + bl SetBoxMonData + mov r0, #0x46 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #9 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + add r1, r4, #0 + bl MOD83_02237F04 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xa + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #8 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xb + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0xc + add r2, sp, #4 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xd + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xe + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0xf + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x10 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1e + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x11 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x1f + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x12 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x16 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x13 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x17 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x14 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x18 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x15 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x21 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x16 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2f + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x17 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x30 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x18 + add r2, sp, #8 + bl SetBoxMonData + mov r5, #0 + add r7, r5, #0 _0223815E: - add r1, r5, #0 - add r0, r6, #0 - add r1, #0xd - mov r2, #0 - bl AGB_GetBoxMonData - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x36 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x15 - mov r2, #0 - bl AGB_GetBoxMonData - mov r1, #3 - lsl r1, r7 - str r0, [sp, #8] - and r0, r1 - lsr r0, r7 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x3e - add r2, sp, #8 - bl SetBoxMonData - add r1, r5, #0 - add r0, r4, #0 - add r1, #0x42 - mov r2, #0 - bl GetBoxMonData - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x3a - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - add r7, r7, #2 - cmp r5, #4 - blt _0223815E - add r0, r6, #0 - mov r1, #0x27 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x46 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x28 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x47 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x29 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x48 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x49 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x2d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4c - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x32 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238282 - mov r5, #0 - cmp r7, #0 - ble _02238282 + add r1, r5, #0 + add r0, r6, #0 + add r1, #0xd + mov r2, #0 + bl AGB_GetBoxMonData + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x36 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x15 + mov r2, #0 + bl AGB_GetBoxMonData + mov r1, #3 + lsl r1, r7 + str r0, [sp, #8] + and r0, r1 + lsr r0, r7 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x3e + add r2, sp, #8 + bl SetBoxMonData + add r1, r5, #0 + add r0, r4, #0 + add r1, #0x42 + mov r2, #0 + bl GetBoxMonData + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x3a + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + add r7, r7, #2 + cmp r5, #4 + blt _0223815E + add r0, r6, #0 + mov r1, #0x27 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x46 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x28 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x47 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x29 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x48 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x49 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x2d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4c + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x32 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238282 + mov r5, #0 + cmp r7, #0 + ble _02238282 _0223826C: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x4e - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _0223826C + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x4e + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _0223826C _02238282: - add r0, r6, #0 - mov r1, #0x33 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _022382AE - mov r5, #0 - cmp r7, #0 - ble _022382AE + add r0, r6, #0 + mov r1, #0x33 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _022382AE + mov r5, #0 + cmp r7, #0 + ble _022382AE _02238298: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x52 - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _02238298 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x52 + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _02238298 _022382AE: - add r0, r6, #0 - mov r1, #0x34 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _022382DA - mov r5, #0 - cmp r7, #0 - ble _022382DA + add r0, r6, #0 + mov r1, #0x34 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _022382DA + mov r5, #0 + cmp r7, #0 + ble _022382DA _022382C4: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x56 - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _022382C4 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x56 + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _022382C4 _022382DA: - add r0, r6, #0 - mov r1, #0x35 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238306 - mov r5, #0 - cmp r7, #0 - ble _02238306 + add r0, r6, #0 + mov r1, #0x35 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238306 + mov r5, #0 + cmp r7, #0 + ble _02238306 _022382F0: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x5a - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _022382F0 + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x5a + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _022382F0 _02238306: - add r0, r6, #0 - mov r1, #0x36 - mov r2, #0 - bl AGB_GetBoxMonData - add r7, r0, #0 - cmp r7, #4 - bgt _02238332 - mov r5, #0 - cmp r7, #0 - ble _02238332 + add r0, r6, #0 + mov r1, #0x36 + mov r2, #0 + bl AGB_GetBoxMonData + add r7, r0, #0 + cmp r7, #4 + bgt _02238332 + mov r5, #0 + cmp r7, #0 + ble _02238332 _0223831C: - mov r0, #1 - add r1, r5, #0 - str r0, [sp, #8] - add r0, r4, #0 - add r1, #0x5e - add r2, sp, #8 - bl SetBoxMonData - add r5, r5, #1 - cmp r5, r7 - blt _0223831C + mov r0, #1 + add r1, r5, #0 + str r0, [sp, #8] + add r0, r4, #0 + add r1, #0x5e + add r2, sp, #8 + bl SetBoxMonData + add r5, r5, #1 + cmp r5, r7 + blt _0223831C _02238332: - add r0, r6, #0 - mov r1, #0x43 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x62 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x44 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x63 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x45 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x64 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x46 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x65 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x47 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x66 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x48 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x67 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x49 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x68 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4a - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x69 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4b - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4c - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4d - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6c - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x4e - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6d - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x50 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6e - add r2, sp, #8 - bl SetBoxMonData - add r0, r4, #0 - bl GetBoxMonGender - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x6f - add r2, sp, #8 - bl SetBoxMonData - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - cmp r0, #0xc9 - bne _022384AE - mov r1, #0 - add r0, r6, #0 - add r2, r1, #0 - bl AGB_GetBoxMonData - add r3, r0, #0 - mov r7, #3 - lsl r0, r7, #8 - and r0, r3 - lsr r1, r0, #6 - lsl r0, r7, #0x18 - and r0, r3 - lsr r5, r0, #0x12 - lsl r0, r7, #0x10 - and r0, r3 - lsr r0, r0, #0xc - add r2, r3, #0 - orr r0, r5 - orr r0, r1 - and r2, r7 - str r3, [sp, #8] - orr r0, r2 - mov r1, #0x1c - bl _u32_div_f - str r1, [sp, #8] - add r0, r4, #0 - mov r1, #0x70 - add r2, sp, #8 - bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x43 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x62 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x44 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x63 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x45 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x64 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x46 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x65 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x47 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x66 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x48 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x67 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x49 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x68 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4a + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x69 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4b + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4c + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4d + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6c + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x4e + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6d + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x50 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6e + add r2, sp, #8 + bl SetBoxMonData + add r0, r4, #0 + bl GetBoxMonGender + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x6f + add r2, sp, #8 + bl SetBoxMonData + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + cmp r0, #0xc9 + bne _022384AE + mov r1, #0 + add r0, r6, #0 + add r2, r1, #0 + bl AGB_GetBoxMonData + add r3, r0, #0 + mov r7, #3 + lsl r0, r7, #8 + and r0, r3 + lsr r1, r0, #6 + lsl r0, r7, #0x18 + and r0, r3 + lsr r5, r0, #0x12 + lsl r0, r7, #0x10 + and r0, r3 + lsr r0, r0, #0xc + add r2, r3, #0 + orr r0, r5 + orr r0, r1 + and r2, r7 + str r3, [sp, #8] + orr r0, r2 + mov r1, #0x1c + bl _u32_div_f + str r1, [sp, #8] + add r0, r4, #0 + mov r1, #0x70 + add r2, sp, #8 + bl SetBoxMonData _022384AE: - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetBoxMonData - ldr r1, _022385F0 ; =0x00000182 - cmp r0, r1 - bne _022384FE - ldr r0, _022385F4 ; =gMain + 0x60 - ldrb r0, [r0, #6] - cmp r0, #5 - bhi _022384DE - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetBoxMonData + ldr r1, _022385F0 ; =0x00000182 + cmp r0, r1 + bne _022384FE + ldr r0, _022385F4 ; =gMain + 0x60 + ldrb r0, [r0, #6] + cmp r0, #5 + bhi _022384DE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022384D2: ; jump table - .short _022384DE - _022384D2 - 2 ; case 0 - .short _022384DE - _022384D2 - 2 ; case 1 - .short _022384DE - _022384D2 - 2 ; case 2 - .short _022384F0 - _022384D2 - 2 ; case 3 - .short _022384E4 - _022384D2 - 2 ; case 4 - .short _022384EA - _022384D2 - 2 ; case 5 + .short _022384DE - _022384D2 - 2 ; case 0 + .short _022384DE - _022384D2 - 2 ; case 1 + .short _022384DE - _022384D2 - 2 ; case 2 + .short _022384F0 - _022384D2 - 2 ; case 3 + .short _022384E4 - _022384D2 - 2 ; case 4 + .short _022384EA - _022384D2 - 2 ; case 5 _022384DE: - mov r0, #0 - str r0, [sp, #8] - b _022384F4 + mov r0, #0 + str r0, [sp, #8] + b _022384F4 _022384E4: - mov r0, #1 - str r0, [sp, #8] - b _022384F4 + mov r0, #1 + str r0, [sp, #8] + b _022384F4 _022384EA: - mov r0, #2 - str r0, [sp, #8] - b _022384F4 + mov r0, #2 + str r0, [sp, #8] + b _022384F4 _022384F0: - mov r0, #3 - str r0, [sp, #8] + mov r0, #3 + str r0, [sp, #8] _022384F4: - add r0, r4, #0 - mov r1, #0x70 - add r2, sp, #8 - bl SetBoxMonData + add r0, r4, #0 + mov r1, #0x70 + add r2, sp, #8 + bl SetBoxMonData _022384FE: - add r0, r6, #0 - mov r1, #2 - add r2, sp, #0x24 - bl AGB_GetBoxMonData - ldr r3, [sp, #4] - add r0, sp, #0x24 - add r1, sp, #0xc - mov r2, #0xc - bl FUN_02015D88 - add r0, r4, #0 - mov r1, #0x75 - add r2, sp, #0xc - bl SetBoxMonData - add r0, r6, #0 - mov r1, #3 - mov r2, #0 - bl AGB_GetBoxMonData - ldr r1, _022385F8 ; =gGameLanguage - ldrb r1, [r1] - cmp r1, r0 - beq _0223853E - mov r0, #1 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x4d - add r2, sp, #8 - bl SetBoxMonData + add r0, r6, #0 + mov r1, #2 + add r2, sp, #0x24 + bl AGB_GetBoxMonData + ldr r3, [sp, #4] + add r0, sp, #0x24 + add r1, sp, #0xc + mov r2, #0xc + bl FUN_02015D88 + add r0, r4, #0 + mov r1, #0x75 + add r2, sp, #0xc + bl SetBoxMonData + add r0, r6, #0 + mov r1, #3 + mov r2, #0 + bl AGB_GetBoxMonData + ldr r1, _022385F8 ; =gGameLanguage + ldrb r1, [r1] + cmp r1, r0 + beq _0223853E + mov r0, #1 + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x4d + add r2, sp, #8 + bl SetBoxMonData _0223853E: - add r0, r6, #0 - mov r1, #0x25 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x79 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #7 - add r2, sp, #0x24 - bl AGB_GetBoxMonData - ldr r3, [sp, #4] - add r0, sp, #0x24 - add r1, sp, #0xc - mov r2, #8 - bl FUN_02015D88 - add r0, r4, #0 - mov r1, #0x8f - add r2, sp, #0xc - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x23 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x98 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x22 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x99 - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x26 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9a - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x24 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9b - add r2, sp, #8 - bl SetBoxMonData - add r0, r6, #0 - mov r1, #0x31 - mov r2, #0 - bl AGB_GetBoxMonData - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0x9c - add r2, sp, #8 - bl SetBoxMonData - ldr r1, [sp] - add r0, r4, #0 - bl ReleaseBoxMonLock - add sp, #0x30 - pop {r3, r4, r5, r6, r7, pc} - nop + add r0, r6, #0 + mov r1, #0x25 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x79 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #7 + add r2, sp, #0x24 + bl AGB_GetBoxMonData + ldr r3, [sp, #4] + add r0, sp, #0x24 + add r1, sp, #0xc + mov r2, #8 + bl FUN_02015D88 + add r0, r4, #0 + mov r1, #0x8f + add r2, sp, #0xc + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x23 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x98 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x22 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x99 + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x26 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9a + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x24 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9b + add r2, sp, #8 + bl SetBoxMonData + add r0, r6, #0 + mov r1, #0x31 + mov r2, #0 + bl AGB_GetBoxMonData + str r0, [sp, #8] + add r0, r4, #0 + mov r1, #0x9c + add r2, sp, #8 + bl SetBoxMonData + ldr r1, [sp] + add r0, r4, #0 + bl ReleaseBoxMonLock + add sp, #0x30 + pop {r3, r4, r5, r6, r7, pc} + nop _022385F0: .word 0x00000182 _022385F4: .word gMain + 0x60 _022385F8: .word gGameLanguage - thumb_func_end MigrateBoxMon + thumb_func_end MigrateBoxMon - thumb_func_start MOD83_SetHeapId + thumb_func_start MOD83_SetHeapId MOD83_SetHeapId: ; 0x022385FC - ldr r1, _02238604 ; =heap_id - str r0, [r1] - bx lr - nop + ldr r1, _02238604 ; =heap_id + str r0, [r1] + bx lr + nop _02238604: .word heap_id - thumb_func_end MOD83_SetHeapId + thumb_func_end MOD83_SetHeapId - thumb_func_start MOD83_Alloc + thumb_func_start MOD83_Alloc MOD83_Alloc: ; 0x02238608 - add r1, r0, #0 - ldr r0, _02238614 ; =heap_id - ldr r3, _02238618 ; =AllocFromHeap - ldr r0, [r0] - bx r3 - nop + add r1, r0, #0 + ldr r0, _02238614 ; =heap_id + ldr r3, _02238618 ; =AllocFromHeap + ldr r0, [r0] + bx r3 + nop _02238614: .word heap_id _02238618: .word AllocFromHeap - thumb_func_end MOD83_Alloc + thumb_func_end MOD83_Alloc - thumb_func_start MOD83_0223861C + thumb_func_start MOD83_0223861C MOD83_0223861C: ; 0x0223861C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x130 - bl CTRDG_GetAgbGameCode - lsr r1, r0, #0x18 - lsl r1, r1, #0x18 - lsr r2, r1, #0x18 - lsr r1, r0, #0x10 - lsl r3, r0, #0x18 - lsr r0, r0, #8 - lsl r0, r0, #0x18 - lsl r1, r1, #0x18 - lsr r0, r0, #8 - lsr r1, r1, #0x10 - orr r0, r3 - orr r0, r1 - add r6, r2, #0 - orr r6, r0 - ldr r0, _022386B0 ; =MOD83_0223B69C - mov r4, #0 - ldr r0, [r0] - cmp r0, #0 - bls _022386A6 - ldr r5, _022386B4 ; =MOD83_0223B69C - add r7, sp, #0x80 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x1fc + sub sp, #0x1fc + sub sp, #0x130 + bl CTRDG_GetAgbGameCode + lsr r1, r0, #0x18 + lsl r1, r1, #0x18 + lsr r2, r1, #0x18 + lsr r1, r0, #0x10 + lsl r3, r0, #0x18 + lsr r0, r0, #8 + lsl r0, r0, #0x18 + lsl r1, r1, #0x18 + lsr r0, r0, #8 + lsr r1, r1, #0x10 + orr r0, r3 + orr r0, r1 + add r6, r2, #0 + orr r6, r0 + ldr r0, _022386B0 ; =MOD83_0223B69C + mov r4, #0 + ldr r0, [r0] + cmp r0, #0 + bls _022386A6 + ldr r5, _022386B4 ; =MOD83_0223B69C + add r7, sp, #0x80 _02238652: - ldr r0, [r5] - cmp r6, r0 - bne _0223869C - mov r0, #1 - bl CTRDG_Enable - mov r0, #0x81 - ldr r2, _022386B8 ; =0x000004A8 - lsl r0, r0, #0x14 - add r1, r7, #0 - bl CTRDG_CpuCopy8 - ldr r0, _022386BC ; =0x08020000 - add r1, sp, #0 - mov r2, #0x80 - bl CTRDG_CpuCopy8 - mov r0, #0 - bl CTRDG_Enable - ldr r0, _022386C0 ; =MOD83_Alloc - ldr r1, _022386C4 ; =FreeToHeap - bl SetCustomAllocatorAndDestructor - ldr r1, _022386B8 ; =0x000004A8 - ldr r3, _022386C8 ; =MOD83_0223A6B4 - add r0, r7, #0 - add r2, sp, #0 - bl FUN_020910EC - cmp r0, #0 - beq _0223869C - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x130 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} + ldr r0, [r5] + cmp r6, r0 + bne _0223869C + mov r0, #1 + bl CTRDG_Enable + mov r0, #0x81 + ldr r2, _022386B8 ; =0x000004A8 + lsl r0, r0, #0x14 + add r1, r7, #0 + bl CTRDG_CpuCopy8 + ldr r0, _022386BC ; =0x08020000 + add r1, sp, #0 + mov r2, #0x80 + bl CTRDG_CpuCopy8 + mov r0, #0 + bl CTRDG_Enable + ldr r0, _022386C0 ; =MOD83_Alloc + ldr r1, _022386C4 ; =FreeToHeap + bl SetCustomAllocatorAndDestructor + ldr r1, _022386B8 ; =0x000004A8 + ldr r3, _022386C8 ; =MOD83_0223A6B4 + add r0, r7, #0 + add r2, sp, #0 + bl FUN_020910EC + cmp r0, #0 + beq _0223869C + add sp, #0x1fc + add sp, #0x1fc + add sp, #0x130 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} _0223869C: - add r5, r5, #4 - ldr r0, [r5] - add r4, r4, #1 - cmp r4, r0 - blo _02238652 + add r5, r5, #4 + ldr r0, [r5] + add r4, r4, #1 + cmp r4, r0 + blo _02238652 _022386A6: - mov r0, #0 - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x130 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0 + add sp, #0x1fc + add sp, #0x1fc + add sp, #0x130 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022386B0: .word MOD83_0223B69C _022386B4: .word MOD83_0223B69C _022386B8: .word 0x000004A8 @@ -22703,2202 +22703,2202 @@ _022386BC: .word 0x08020000 _022386C0: .word MOD83_Alloc _022386C4: .word FreeToHeap _022386C8: .word MOD83_0223A6B4 - thumb_func_end MOD83_0223861C + thumb_func_end MOD83_0223861C - thumb_func_start MOD83_022386CC + thumb_func_start MOD83_022386CC MOD83_022386CC: ; 0x022386CC - push {r3, lr} - bl CTRDG_Init - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _022386DE - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl CTRDG_Init + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _022386DE + mov r0, #0 + pop {r3, pc} _022386DE: - bl CTRDG_GetAgbMakerCode - ldr r1, _022386FC ; =0x00003130 "01" - cmp r0, r1 - beq _022386EC - mov r0, #0 - pop {r3, pc} + bl CTRDG_GetAgbMakerCode + ldr r1, _022386FC ; =0x00003130 "01" + cmp r0, r1 + beq _022386EC + mov r0, #0 + pop {r3, pc} _022386EC: - bl MOD83_0223861C - cmp r0, #0 - beq _022386F8 - mov r0, #1 - pop {r3, pc} + bl MOD83_0223861C + cmp r0, #0 + beq _022386F8 + mov r0, #1 + pop {r3, pc} _022386F8: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _022386FC: .word 0x00003130 - thumb_func_end MOD83_022386CC + thumb_func_end MOD83_022386CC - thumb_func_start MOD83_02238700 + thumb_func_start MOD83_02238700 MOD83_02238700: ; 0x02238700 - push {r3, lr} - bl MOD83_022386CC - cmp r0, #0 - bne _0223870E - mov r0, #0 - pop {r3, pc} + push {r3, lr} + bl MOD83_022386CC + cmp r0, #0 + bne _0223870E + mov r0, #0 + pop {r3, pc} _0223870E: - mov r0, #1 - bl CTRDG_Enable - mov r0, #0x81 - lsl r0, r0, #0x14 - add r1, sp, #0 - bl CTRDG_Read32 - mov r0, #0 - bl CTRDG_Enable - ldr r0, [sp] - pop {r3, pc} - thumb_func_end MOD83_02238700 - - thumb_func_start MOD83_02238728 + mov r0, #1 + bl CTRDG_Enable + mov r0, #0x81 + lsl r0, r0, #0x14 + add r1, sp, #0 + bl CTRDG_Read32 + mov r0, #0 + bl CTRDG_Enable + ldr r0, [sp] + pop {r3, pc} + thumb_func_end MOD83_02238700 + + thumb_func_start MOD83_02238728 MOD83_02238728: ; 0x02238728 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl MOD83_022386CC - cmp r0, #0 - bne _0223873A - mov r0, #0 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl MOD83_022386CC + cmp r0, #0 + bne _0223873A + mov r0, #0 + pop {r3, r4, r5, pc} _0223873A: - cmp r4, #0 - bne _02238744 - bl MOD83_02238700 - add r4, r0, #0 + cmp r4, #0 + bne _02238744 + bl MOD83_02238700 + add r4, r0, #0 _02238744: - mov r0, #1 - bl CTRDG_Enable - ldr r0, _0223876C ; =0x08100100 - add r1, r5, #0 - add r2, r4, #0 - bl CTRDG_CpuCopy16 - add r4, r0, #0 - mov r0, #0 - bl CTRDG_Enable - bl CTRDG_IsExisting - cmp r0, #0 - bne _02238768 - mov r0, #0 - pop {r3, r4, r5, pc} + mov r0, #1 + bl CTRDG_Enable + ldr r0, _0223876C ; =0x08100100 + add r1, r5, #0 + add r2, r4, #0 + bl CTRDG_CpuCopy16 + add r4, r0, #0 + mov r0, #0 + bl CTRDG_Enable + bl CTRDG_IsExisting + cmp r0, #0 + bne _02238768 + mov r0, #0 + pop {r3, r4, r5, pc} _02238768: - add r0, r4, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _0223876C: .word 0x08100100 - thumb_func_end MOD83_02238728 + thumb_func_end MOD83_02238728 - thumb_func_start MOD83_02238770 + thumb_func_start MOD83_02238770 MOD83_02238770: ; 0x02238770 - push {r3, r4, r5, r6} - add r4, r0, #0 - mov r0, #0 - ldr r6, _02238798 ; =MOD83_0223BC30 - add r1, r0, #0 - add r2, r0, #0 - add r3, r0, #0 - mov r5, #0x75 + push {r3, r4, r5, r6} + add r4, r0, #0 + mov r0, #0 + ldr r6, _02238798 ; =MOD83_0223BC30 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + mov r5, #0x75 _02238780: - stmia r6!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - sub r5, r5, #1 - bne _02238780 - str r0, [r6] - ldr r0, _0223879C ; =MOD83_0223BC30 - mov r1, #1 - str r1, [r0] - str r4, [r0, #4] - pop {r3, r4, r5, r6} - bx lr - nop + stmia r6!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + sub r5, r5, #1 + bne _02238780 + str r0, [r6] + ldr r0, _0223879C ; =MOD83_0223BC30 + mov r1, #1 + str r1, [r0] + str r4, [r0, #4] + pop {r3, r4, r5, r6} + bx lr + nop _02238798: .word MOD83_0223BC30 _0223879C: .word MOD83_0223BC30 - thumb_func_end MOD83_02238770 + thumb_func_end MOD83_02238770 - thumb_func_start MOD83_022387A0 + thumb_func_start MOD83_022387A0 MOD83_022387A0: ; 0x022387A0 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r4, r2, #0 - add r6, r1, #0 - mov r0, #3 - add r2, r3, #0 - bl CreateHeap - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl OverlayManager_CreateAndGetData - mov r1, #0 - add r2, r4, #0 - add r5, r0, #0 - bl memset - mov r0, #0 - add r1, r0, #0 - bl FUN_0200E3A0 - mov r0, #1 - mov r1, #0 - bl FUN_0200E3A0 - add r0, r5, #0 - pop {r4, r5, r6, pc} - thumb_func_end MOD83_022387A0 - - thumb_func_start MOD83_022387D8 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r2, #0 + add r6, r1, #0 + mov r0, #3 + add r2, r3, #0 + bl CreateHeap + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl OverlayManager_CreateAndGetData + mov r1, #0 + add r2, r4, #0 + add r5, r0, #0 + bl memset + mov r0, #0 + add r1, r0, #0 + bl FUN_0200E3A0 + mov r0, #1 + mov r1, #0 + bl FUN_0200E3A0 + add r0, r5, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_022387A0 + + thumb_func_start MOD83_022387D8 MOD83_022387D8: ; 0x022387D8 - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - ldr r5, _0223885C ; =MOD83_0223A760 - add r6, r3, #0 - add r7, r0, #0 - add r4, r1, #0 - ldmia r5!, {r0, r1} - add r3, sp, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - cmp r2, #4 - str r0, [r3] - add r0, sp, #0 - strb r2, [r0, #0x10] - bhi _02238832 - add r0, r2, r2 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + ldr r5, _0223885C ; =MOD83_0223A760 + add r6, r3, #0 + add r7, r0, #0 + add r4, r1, #0 + ldmia r5!, {r0, r1} + add r3, sp, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + cmp r2, #4 + str r0, [r3] + add r0, sp, #0 + strb r2, [r0, #0x10] + bhi _02238832 + add r0, r2, r2 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _0223880A: ; jump table - .short _02238832 - _0223880A - 2 ; case 0 - .short _02238814 - _0223880A - 2 ; case 1 - .short _0223881C - _0223880A - 2 ; case 2 - .short _02238824 - _0223880A - 2 ; case 3 - .short _0223882C - _0223880A - 2 ; case 4 + .short _02238832 - _0223880A - 2 ; case 0 + .short _02238814 - _0223880A - 2 ; case 1 + .short _0223881C - _0223880A - 2 ; case 2 + .short _02238824 - _0223880A - 2 ; case 3 + .short _0223882C - _0223880A - 2 ; case 4 _02238814: - mov r0, #2 - lsl r0, r0, #0xa - str r0, [sp, #8] - b _02238832 + mov r0, #2 + lsl r0, r0, #0xa + str r0, [sp, #8] + b _02238832 _0223881C: - mov r0, #1 - lsl r0, r0, #0xc - str r0, [sp, #8] - b _02238832 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [sp, #8] + b _02238832 _02238824: - mov r0, #1 - lsl r0, r0, #0xc - str r0, [sp, #8] - b _02238832 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [sp, #8] + b _02238832 _0223882C: - mov r0, #2 - lsl r0, r0, #0xc - str r0, [sp, #8] + mov r0, #2 + lsl r0, r0, #0xc + str r0, [sp, #8] _02238832: - lsr r1, r6, #0xb - add r0, sp, #0 - strb r1, [r0, #0x12] - ldr r1, [sp, #0x30] - add r2, sp, #0 - lsr r1, r1, #0xe - strb r1, [r0, #0x13] - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - mov r3, #0 - bl InitBgFromTemplate - lsl r1, r4, #0x18 - add r0, r7, #0 - lsr r1, r1, #0x18 - bl BgClearTilemapBufferAndCommit - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - nop + lsr r1, r6, #0xb + add r0, sp, #0 + strb r1, [r0, #0x12] + ldr r1, [sp, #0x30] + add r2, sp, #0 + lsr r1, r1, #0xe + strb r1, [r0, #0x13] + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + mov r3, #0 + bl InitBgFromTemplate + lsl r1, r4, #0x18 + add r0, r7, #0 + lsr r1, r1, #0x18 + bl BgClearTilemapBufferAndCommit + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + nop _0223885C: .word MOD83_0223A760 - thumb_func_end MOD83_022387D8 + thumb_func_end MOD83_022387D8 - thumb_func_start MOD83_02238860 + thumb_func_start MOD83_02238860 MOD83_02238860: ; 0x02238860 - ldr r1, _02238868 ; =MOD83_0223BC30 - str r0, [r1, #0xc] - bx lr - nop + ldr r1, _02238868 ; =MOD83_0223BC30 + str r0, [r1, #0xc] + bx lr + nop _02238868: .word MOD83_0223BC30 - thumb_func_end MOD83_02238860 + thumb_func_end MOD83_02238860 - thumb_func_start MOD83_0223886C + thumb_func_start MOD83_0223886C MOD83_0223886C: ; 0x0223886C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - str r0, [sp, #0xc] - ldr r0, _022388C0 ; =MOD83_0223BC30 - add r5, r1, #0 - ldr r0, [r0, #0xc] - add r4, r2, #0 - add r6, r3, #0 - ldr r7, _022388C4 ; =MOD83_0223BC30 - cmp r0, #0 - bne _0223889C - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, [r7, #4] - ldr r1, [sp, #0xc] - str r0, [sp, #8] - mov r0, #0 - add r2, r1, #0 - add r3, r0, #0 - bl FUN_0200E1D0 - b _022388B4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp, #0xc] + ldr r0, _022388C0 ; =MOD83_0223BC30 + add r5, r1, #0 + ldr r0, [r0, #0xc] + add r4, r2, #0 + add r6, r3, #0 + ldr r7, _022388C4 ; =MOD83_0223BC30 + cmp r0, #0 + bne _0223889C + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r7, #4] + ldr r1, [sp, #0xc] + str r0, [sp, #8] + mov r0, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + b _022388B4 _0223889C: - mov r0, #6 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - ldr r0, [r7, #4] - ldr r1, [sp, #0xc] - str r0, [sp, #8] - ldr r3, _022388C8 ; =0x00007FFF - mov r0, #0 - add r2, r1, #0 - bl FUN_0200E1D0 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r7, #4] + ldr r1, [sp, #0xc] + str r0, [sp, #8] + ldr r3, _022388C8 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 _022388B4: - cmp r4, #0 - beq _022388BA - str r6, [r4] + cmp r4, #0 + beq _022388BA + str r6, [r4] _022388BA: - str r5, [r7, #8] - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + str r5, [r7, #8] + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022388C0: .word MOD83_0223BC30 _022388C4: .word MOD83_0223BC30 _022388C8: .word 0x00007FFF - thumb_func_end MOD83_0223886C + thumb_func_end MOD83_0223886C - thumb_func_start MOD83_022388CC + thumb_func_start MOD83_022388CC MOD83_022388CC: ; 0x022388CC - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r5, _022388E0 ; =MOD83_0223BC30 - bl FUN_0200E308 - cmp r0, #0 - beq _022388DE - ldr r0, [r5, #8] - str r0, [r4] + push {r3, r4, r5, lr} + add r4, r0, #0 + ldr r5, _022388E0 ; =MOD83_0223BC30 + bl FUN_0200E308 + cmp r0, #0 + beq _022388DE + ldr r0, [r5, #8] + str r0, [r4] _022388DE: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _022388E0: .word MOD83_0223BC30 - thumb_func_end MOD83_022388CC + thumb_func_end MOD83_022388CC - thumb_func_start MOD83_022388E4 + thumb_func_start MOD83_022388E4 MOD83_022388E4: ; 0x022388E4 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r6, r2, #0 - mov r1, #0 - mov r2, #0x54 - add r5, r0, #0 - add r7, r3, #0 - bl memset - mov r0, #1 - str r0, [r5, #4] - str r0, [r5, #8] - sub r0, r0, #2 - str r0, [r5, #0x4c] - str r4, [r5, #0x10] - str r6, [r5, #0x30] - ldr r0, [sp, #0x18] - str r7, [r5, #0x34] - str r0, [r5, #0x38] - ldr r0, [sp, #0x1c] - mov r2, #0 - str r0, [r5, #0x3c] - str r2, [r5, #0x2c] - ldr r0, _02238930 ; =0x0001020F - str r2, [r5, #0x40] - str r0, [r5, #0x44] - add r0, r5, #0 - mov r1, #0xf - add r0, #0x48 - strb r1, [r0] - str r2, [r5] - str r2, [r5, #0x24] - str r2, [r5, #0x20] - str r2, [r5, #0x14] - mov r0, #0xff - str r0, [r5, #0x50] - pop {r3, r4, r5, r6, r7, pc} - nop + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + add r6, r2, #0 + mov r1, #0 + mov r2, #0x54 + add r5, r0, #0 + add r7, r3, #0 + bl memset + mov r0, #1 + str r0, [r5, #4] + str r0, [r5, #8] + sub r0, r0, #2 + str r0, [r5, #0x4c] + str r4, [r5, #0x10] + str r6, [r5, #0x30] + ldr r0, [sp, #0x18] + str r7, [r5, #0x34] + str r0, [r5, #0x38] + ldr r0, [sp, #0x1c] + mov r2, #0 + str r0, [r5, #0x3c] + str r2, [r5, #0x2c] + ldr r0, _02238930 ; =0x0001020F + str r2, [r5, #0x40] + str r0, [r5, #0x44] + add r0, r5, #0 + mov r1, #0xf + add r0, #0x48 + strb r1, [r0] + str r2, [r5] + str r2, [r5, #0x24] + str r2, [r5, #0x20] + str r2, [r5, #0x14] + mov r0, #0xff + str r0, [r5, #0x50] + pop {r3, r4, r5, r6, r7, pc} + nop _02238930: .word 0x0001020F - thumb_func_end MOD83_022388E4 + thumb_func_end MOD83_022388E4 - thumb_func_start MOD83_02238934 + thumb_func_start MOD83_02238934 MOD83_02238934: ; 0x02238934 - str r1, [r0, #0x18] - str r2, [r0, #0x1c] - str r3, [r0, #0x28] - bx lr - thumb_func_end MOD83_02238934 + str r1, [r0, #0x18] + str r2, [r0, #0x1c] + str r3, [r0, #0x28] + bx lr + thumb_func_end MOD83_02238934 - thumb_func_start MOD83_0223893C + thumb_func_start MOD83_0223893C MOD83_0223893C: ; 0x0223893C - str r1, [r0] - str r2, [r0, #0x40] - bx lr - .align 2, 0 - thumb_func_end MOD83_0223893C + str r1, [r0] + str r2, [r0, #0x40] + bx lr + .align 2, 0 + thumb_func_end MOD83_0223893C - thumb_func_start MOD83_02238944 + thumb_func_start MOD83_02238944 MOD83_02238944: ; 0x02238944 - str r1, [r0, #0x20] - str r2, [r0, #0x24] - bx lr - .align 2, 0 - thumb_func_end MOD83_02238944 + str r1, [r0, #0x20] + str r2, [r0, #0x24] + bx lr + .align 2, 0 + thumb_func_end MOD83_02238944 - thumb_func_start MOD83_0223894C + thumb_func_start MOD83_0223894C MOD83_0223894C: ; 0x0223894C - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r5, r0, #0 - mov r0, #0 - mvn r0, r0 - ldr r4, _02238A34 ; =MOD83_0223BC30 - cmp r1, r0 - beq _02238A2A - ldr r0, [r5, #0x4c] - cmp r0, r1 - beq _02238A2A - str r1, [r5, #0x4c] - ldr r0, [r5, #8] - cmp r0, #1 - bne _02238976 - add r1, r5, #0 - add r1, #0x48 - ldrb r1, [r1] - ldr r0, [r5, #0x10] - bl FillWindowPixelBuffer + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r5, r0, #0 + mov r0, #0 + mvn r0, r0 + ldr r4, _02238A34 ; =MOD83_0223BC30 + cmp r1, r0 + beq _02238A2A + ldr r0, [r5, #0x4c] + cmp r0, r1 + beq _02238A2A + str r1, [r5, #0x4c] + ldr r0, [r5, #8] + cmp r0, #1 + bne _02238976 + add r1, r5, #0 + add r1, #0x48 + ldrb r1, [r1] + ldr r0, [r5, #0x10] + bl FillWindowPixelBuffer _02238976: - mov r0, #0 - ldr r1, [r5, #0x4c] - mvn r0, r0 - cmp r1, r0 - beq _02238A2A - ldr r2, [r5, #0x34] - ldr r3, [r4, #4] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - ldr r6, [r5, #0x14] - str r0, [sp, #0x10] - cmp r6, #0 - bne _0223899C - ldr r0, [r4, #4] - bl ScrStrBufs_new - add r6, r0, #0 + mov r0, #0 + ldr r1, [r5, #0x4c] + mvn r0, r0 + cmp r1, r0 + beq _02238A2A + ldr r2, [r5, #0x34] + ldr r3, [r4, #4] + mov r0, #1 + mov r1, #0x1a + bl NewMsgDataFromNarc + ldr r6, [r5, #0x14] + str r0, [sp, #0x10] + cmp r6, #0 + bne _0223899C + ldr r0, [r4, #4] + bl ScrStrBufs_new + add r6, r0, #0 _0223899C: - ldr r1, [sp, #0x10] - ldr r2, [r5, #0x4c] - ldr r3, [r4, #4] - add r0, r6, #0 - bl ReadMsgData_ExpandPlaceholders - add r4, r0, #0 - ldr r0, [r5, #0xc] - cmp r0, #0 - bne _022389D0 - ldr r0, [r5, #0x24] - add r2, r4, #0 - str r0, [sp] - ldr r0, [r5, #0x50] - str r0, [sp, #4] - ldr r0, [r5, #0x44] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5, #0x10] - ldr r1, [r5, #0x40] - ldr r3, [r5, #0x20] - bl AddTextPrinterParameterized2 - add r7, r0, #0 - b _02238A12 + ldr r1, [sp, #0x10] + ldr r2, [r5, #0x4c] + ldr r3, [r4, #4] + add r0, r6, #0 + bl ReadMsgData_ExpandPlaceholders + add r4, r0, #0 + ldr r0, [r5, #0xc] + cmp r0, #0 + bne _022389D0 + ldr r0, [r5, #0x24] + add r2, r4, #0 + str r0, [sp] + ldr r0, [r5, #0x50] + str r0, [sp, #4] + ldr r0, [r5, #0x44] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x40] + ldr r3, [r5, #0x20] + bl AddTextPrinterParameterized2 + add r7, r0, #0 + b _02238A12 _022389D0: - ldr r0, [r5, #0x40] - mov r1, #2 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl GetFontAttribute - add r2, r0, #0 - ldr r0, [r5, #0x40] - add r1, r4, #0 - bl FUN_02002E14 - add r7, r0, #0 - ldr r0, [r5, #0x10] - bl GetWindowWidth - lsl r0, r0, #3 - sub r3, r0, r7 - ldr r0, [r5, #0x24] - add r2, r4, #0 - str r0, [sp] - ldr r0, [r5, #0x50] - str r0, [sp, #4] - ldr r0, [r5, #0x44] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - ldr r0, [r5, #0x10] - ldr r1, [r5, #0x40] - bl AddTextPrinterParameterized2 - add r7, r0, #0 - mov r0, #0 - str r0, [r5, #0xc] + ldr r0, [r5, #0x40] + mov r1, #2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl GetFontAttribute + add r2, r0, #0 + ldr r0, [r5, #0x40] + add r1, r4, #0 + bl FUN_02002E14 + add r7, r0, #0 + ldr r0, [r5, #0x10] + bl GetWindowWidth + lsl r0, r0, #3 + sub r3, r0, r7 + ldr r0, [r5, #0x24] + add r2, r4, #0 + str r0, [sp] + ldr r0, [r5, #0x50] + str r0, [sp, #4] + ldr r0, [r5, #0x44] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x40] + bl AddTextPrinterParameterized2 + add r7, r0, #0 + mov r0, #0 + str r0, [r5, #0xc] _02238A12: - add r0, r4, #0 - bl String_dtor - ldr r0, [r5, #0x14] - cmp r0, #0 - bne _02238A24 - add r0, r6, #0 - bl ScrStrBufs_delete + add r0, r4, #0 + bl String_dtor + ldr r0, [r5, #0x14] + cmp r0, #0 + bne _02238A24 + add r0, r6, #0 + bl ScrStrBufs_delete _02238A24: - ldr r0, [sp, #0x10] - bl DestroyMsgData + ldr r0, [sp, #0x10] + bl DestroyMsgData _02238A2A: - mov r0, #0xff - str r0, [r5, #0x50] - add r0, r7, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0xff + str r0, [r5, #0x50] + add r0, r7, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02238A34: .word MOD83_0223BC30 - thumb_func_end MOD83_0223894C + thumb_func_end MOD83_0223894C - thumb_func_start MOD83_02238A38 + thumb_func_start MOD83_02238A38 MOD83_02238A38: ; 0x02238A38 - push {r3, r4, r5, r6, lr} - sub sp, #0x14 - add r4, r1, #0 - ldr r1, [r4, #0x10] - add r6, r2, #0 - ldr r2, [r1] - add r5, r3, #0 - cmp r2, #0 - bne _02238A8A - lsl r2, r5, #0x18 - lsr r2, r2, #0x18 - str r2, [sp] - ldr r2, [r4, #0x18] - lsl r3, r6, #0x18 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #4] - ldr r2, [r4, #0x1c] - lsr r3, r3, #0x18 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #8] - ldr r2, [r4, #0x30] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - str r2, [sp, #0xc] - ldr r2, [r4, #0x28] - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - str r2, [sp, #0x10] - ldr r2, [r4, #0x2c] - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - bl AddWindowParameterized - ldr r1, [sp, #0x28] - add r0, r4, #0 - bl MOD83_0223894C - add r5, r0, #0 - b _02238AB8 + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r4, r1, #0 + ldr r1, [r4, #0x10] + add r6, r2, #0 + ldr r2, [r1] + add r5, r3, #0 + cmp r2, #0 + bne _02238A8A + lsl r2, r5, #0x18 + lsr r2, r2, #0x18 + str r2, [sp] + ldr r2, [r4, #0x18] + lsl r3, r6, #0x18 + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #4] + ldr r2, [r4, #0x1c] + lsr r3, r3, #0x18 + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #8] + ldr r2, [r4, #0x30] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #0xc] + ldr r2, [r4, #0x28] + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + str r2, [sp, #0x10] + ldr r2, [r4, #0x2c] + lsl r2, r2, #0x18 + lsr r2, r2, #0x18 + bl AddWindowParameterized + ldr r1, [sp, #0x28] + add r0, r4, #0 + bl MOD83_0223894C + add r5, r0, #0 + b _02238AB8 _02238A8A: - mov r0, #0 - mvn r0, r0 - cmp r6, r0 - beq _02238A9C - add r0, r1, #0 - lsl r1, r6, #0x18 - lsr r1, r1, #0x18 - bl MoveWindowX + mov r0, #0 + mvn r0, r0 + cmp r6, r0 + beq _02238A9C + add r0, r1, #0 + lsl r1, r6, #0x18 + lsr r1, r1, #0x18 + bl MoveWindowX _02238A9C: - mov r0, #0 - mvn r0, r0 - cmp r5, r0 - beq _02238AAE - lsl r1, r5, #0x18 - ldr r0, [r4, #0x10] - lsr r1, r1, #0x18 - bl MoveWindowY + mov r0, #0 + mvn r0, r0 + cmp r5, r0 + beq _02238AAE + lsl r1, r5, #0x18 + ldr r0, [r4, #0x10] + lsr r1, r1, #0x18 + bl MoveWindowY _02238AAE: - ldr r1, [sp, #0x28] - add r0, r4, #0 - bl MOD83_0223894C - add r5, r0, #0 + ldr r1, [sp, #0x28] + add r0, r4, #0 + bl MOD83_0223894C + add r5, r0, #0 _02238AB8: - ldr r0, [r4, #4] - cmp r0, #1 - bne _02238AEC - ldr r0, [r4] - cmp r0, #0 - ldr r0, [r4, #0x10] - bne _02238ADA - ldr r2, [r4, #0x38] - ldr r3, [r4, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200CCA4 - b _02238AEC + ldr r0, [r4, #4] + cmp r0, #1 + bne _02238AEC + ldr r0, [r4] + cmp r0, #0 + ldr r0, [r4, #0x10] + bne _02238ADA + ldr r2, [r4, #0x38] + ldr r3, [r4, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200CCA4 + b _02238AEC _02238ADA: - ldr r2, [r4, #0x38] - ldr r3, [r4, #0x3c] - lsl r2, r2, #0x10 - lsl r3, r3, #0x18 - mov r1, #0 - lsr r2, r2, #0x10 - lsr r3, r3, #0x18 - bl FUN_0200D0BC + ldr r2, [r4, #0x38] + ldr r3, [r4, #0x3c] + lsl r2, r2, #0x10 + lsl r3, r3, #0x18 + mov r1, #0 + lsr r2, r2, #0x10 + lsr r3, r3, #0x18 + bl FUN_0200D0BC _02238AEC: - add r0, r5, #0 - add sp, #0x14 - pop {r3, r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD83_02238A38 + add r0, r5, #0 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD83_02238A38 - thumb_func_start MOD83_02238AF4 + thumb_func_start MOD83_02238AF4 MOD83_02238AF4: ; 0x02238AF4 - ldr r1, [r0, #0x18] - ldr r0, [r0, #0x1c] - mul r0, r1 - bx lr - thumb_func_end MOD83_02238AF4 + ldr r1, [r0, #0x18] + ldr r0, [r0, #0x1c] + mul r0, r1 + bx lr + thumb_func_end MOD83_02238AF4 - thumb_func_start MOD83_02238AFC + thumb_func_start MOD83_02238AFC MOD83_02238AFC: ; 0x02238AFC - push {r4, lr} - sub sp, #0x10 - ldr r4, _02238B30 ; =MOD83_0223A734 - add r3, sp, #0 - add r2, r3, #0 - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, _02238B34 ; =MOD83_0223BC30 - ldr r0, [r0, #4] - str r0, [sp, #0xc] - add r0, r2, #0 - bl FUN_0201D040 - ldr r1, _02238B34 ; =MOD83_0223BC30 - mov r0, #0x14 - ldr r1, [r1, #4] - bl FUN_0201E00C - bl FUN_0201D168 - bl FUN_0201E0BC - add sp, #0x10 - pop {r4, pc} - .align 2, 0 + push {r4, lr} + sub sp, #0x10 + ldr r4, _02238B30 ; =MOD83_0223A734 + add r3, sp, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, _02238B34 ; =MOD83_0223BC30 + ldr r0, [r0, #4] + str r0, [sp, #0xc] + add r0, r2, #0 + bl FUN_0201D040 + ldr r1, _02238B34 ; =MOD83_0223BC30 + mov r0, #0x14 + ldr r1, [r1, #4] + bl FUN_0201E00C + bl FUN_0201D168 + bl FUN_0201E0BC + add sp, #0x10 + pop {r4, pc} + .align 2, 0 _02238B30: .word MOD83_0223A734 _02238B34: .word MOD83_0223BC30 - thumb_func_end MOD83_02238AFC + thumb_func_end MOD83_02238AFC - thumb_func_start MOD83_02238B38 + thumb_func_start MOD83_02238B38 MOD83_02238B38: ; 0x02238B38 - ldr r0, _02238B48 ; =MOD83_0223BC30 - ldr r0, [r0, #0x30] - cmp r0, #0 - beq _02238B44 - mov r0, #1 - bx lr + ldr r0, _02238B48 ; =MOD83_0223BC30 + ldr r0, [r0, #0x30] + cmp r0, #0 + beq _02238B44 + mov r0, #1 + bx lr _02238B44: - mov r0, #0 - bx lr - .align 2, 0 + mov r0, #0 + bx lr + .align 2, 0 _02238B48: .word MOD83_0223BC30 - thumb_func_end MOD83_02238B38 + thumb_func_end MOD83_02238B38 - thumb_func_start MOD83_02238B4C + thumb_func_start MOD83_02238B4C MOD83_02238B4C: ; 0x02238B4C - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - ldr r6, _02238BB4 ; =MOD83_0223BC30 - bl NNS_G2dInitOamManagerModule - mov r0, #0 - str r0, [sp] - mov r1, #0x7e - str r1, [sp, #4] - str r0, [sp, #8] - mov r3, #0x20 - ldr r2, _02238BB8 ; =MOD83_0223BC30 - str r3, [sp, #0xc] - ldr r2, [r2, #4] - str r2, [sp, #0x10] - add r2, r0, #0 - bl FUN_02009EAC - ldr r2, _02238BB8 ; =MOD83_0223BC30 - ldr r1, _02238BBC ; =MOD83_0223BC64 - ldr r2, [r2, #4] - mov r0, #0x46 - bl FUN_02008C9C - ldr r1, _02238BB8 ; =MOD83_0223BC30 - mov r2, #1 - str r0, [r1, #0x30] - ldr r0, _02238BBC ; =MOD83_0223BC64 - mov r1, #0 - lsl r2, r2, #0x14 - bl FUN_02008D24 - mov r1, #3 - mov r7, #0x57 - ldr r0, _02238BC0 ; =MOD83_0223BE30 - lsl r1, r1, #0x12 - str r1, [r0, #0xc] - mov r4, #0 - add r5, r6, #0 - lsl r7, r7, #2 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + ldr r6, _02238BB4 ; =MOD83_0223BC30 + bl NNS_G2dInitOamManagerModule + mov r0, #0 + str r0, [sp] + mov r1, #0x7e + str r1, [sp, #4] + str r0, [sp, #8] + mov r3, #0x20 + ldr r2, _02238BB8 ; =MOD83_0223BC30 + str r3, [sp, #0xc] + ldr r2, [r2, #4] + str r2, [sp, #0x10] + add r2, r0, #0 + bl FUN_02009EAC + ldr r2, _02238BB8 ; =MOD83_0223BC30 + ldr r1, _02238BBC ; =MOD83_0223BC64 + ldr r2, [r2, #4] + mov r0, #0x46 + bl FUN_02008C9C + ldr r1, _02238BB8 ; =MOD83_0223BC30 + mov r2, #1 + str r0, [r1, #0x30] + ldr r0, _02238BBC ; =MOD83_0223BC64 + mov r1, #0 + lsl r2, r2, #0x14 + bl FUN_02008D24 + mov r1, #3 + mov r7, #0x57 + ldr r0, _02238BC0 ; =MOD83_0223BE30 + lsl r1, r1, #0x12 + str r1, [r0, #0xc] + mov r4, #0 + add r5, r6, #0 + lsl r7, r7, #2 _02238B9C: - ldr r2, [r6, #4] - mov r0, #3 - add r1, r4, #0 - bl FUN_02008DEC - str r0, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02238B9C - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldr r2, [r6, #4] + mov r0, #3 + add r1, r4, #0 + bl FUN_02008DEC + str r0, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02238B9C + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 _02238BB4: .word MOD83_0223BC30 _02238BB8: .word MOD83_0223BC30 _02238BBC: .word MOD83_0223BC64 _02238BC0: .word MOD83_0223BE30 - thumb_func_end MOD83_02238B4C + thumb_func_end MOD83_02238B4C - thumb_func_start MOD83_02238BC4 + thumb_func_start MOD83_02238BC4 MOD83_02238BC4: ; 0x02238BC4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x38 - ldr r4, [sp, #0x54] - add r6, r0, #0 - mov ip, r1 - str r2, [sp, #0x2c] - str r3, [sp, #0x30] - ldr r5, _02238D30 ; =MOD83_0223BC30 - cmp r4, #0 - bne _02238BDC - mov r7, #1 - b _02238BDE + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x38 + ldr r4, [sp, #0x54] + add r6, r0, #0 + mov ip, r1 + str r2, [sp, #0x2c] + str r3, [sp, #0x30] + ldr r5, _02238D30 ; =MOD83_0223BC30 + cmp r4, #0 + bne _02238BDC + mov r7, #1 + b _02238BDE _02238BDC: - mov r7, #2 + mov r7, #2 _02238BDE: - mov r0, #1 - str r0, [sp, #0x34] - cmp r6, #0x10 - bne _02238BEA - mov r0, #0 - str r0, [sp, #0x34] + mov r0, #1 + str r0, [sp, #0x34] + cmp r6, #0x10 + bne _02238BEA + mov r0, #0 + str r0, [sp, #0x34] _02238BEA: - mov r1, #0 - mvn r1, r1 - mov r0, ip - cmp r0, r1 - beq _02238C18 - str r4, [sp] - str r7, [sp, #4] - ldr r0, [r5, #4] - ldr r3, [sp, #0x34] - str r0, [sp, #8] - mov r0, #0x57 - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r6, #0 - mov r2, ip - bl FUN_02008F34 - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5d - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + mvn r1, r1 + mov r0, ip + cmp r0, r1 + beq _02238C18 + str r4, [sp] + str r7, [sp, #4] + ldr r0, [r5, #4] + ldr r3, [sp, #0x34] + str r0, [sp, #8] + mov r0, #0x57 + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r6, #0 + mov r2, ip + bl FUN_02008F34 + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5d + lsl r1, r1, #2 + str r0, [r2, r1] _02238C18: - mov r1, #0 - ldr r0, [sp, #0x2c] - mvn r1, r1 - cmp r0, r1 - beq _02238C4A - str r4, [sp] - str r7, [sp, #4] - mov r0, #3 - str r0, [sp, #8] - ldr r0, [r5, #4] - ldr r2, [sp, #0x2c] - str r0, [sp, #0xc] - mov r0, #0x16 - lsl r0, r0, #4 - ldr r0, [r5, r0] - add r1, r6, #0 - mov r3, #0 - bl FUN_02008FEC - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5e - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + ldr r0, [sp, #0x2c] + mvn r1, r1 + cmp r0, r1 + beq _02238C4A + str r4, [sp] + str r7, [sp, #4] + mov r0, #3 + str r0, [sp, #8] + ldr r0, [r5, #4] + ldr r2, [sp, #0x2c] + str r0, [sp, #0xc] + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r5, r0] + add r1, r6, #0 + mov r3, #0 + bl FUN_02008FEC + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5e + lsl r1, r1, #2 + str r0, [r2, r1] _02238C4A: - mov r1, #0 - ldr r0, [sp, #0x30] - mvn r1, r1 - cmp r0, r1 - beq _02238C7A - str r4, [sp] - mov r0, #2 - str r0, [sp, #4] - ldr r0, [r5, #4] - ldr r2, [sp, #0x30] - str r0, [sp, #8] - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r5, r0] - ldr r3, [sp, #0x34] - add r1, r6, #0 - bl FUN_020090AC - mov r1, #0x18 - mul r1, r4 - add r2, r5, r1 - mov r1, #0x5f - lsl r1, r1, #2 - str r0, [r2, r1] + mov r1, #0 + ldr r0, [sp, #0x30] + mvn r1, r1 + cmp r0, r1 + beq _02238C7A + str r4, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r0, [r5, #4] + ldr r2, [sp, #0x30] + str r0, [sp, #8] + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r5, r0] + ldr r3, [sp, #0x34] + add r1, r6, #0 + bl FUN_020090AC + mov r1, #0x18 + mul r1, r4 + add r2, r5, r1 + mov r1, #0x5f + lsl r1, r1, #2 + str r0, [r2, r1] _02238C7A: - mov r0, #0 - ldr r2, [sp, #0x50] - mvn r0, r0 - cmp r2, r0 - beq _02238CA8 - str r4, [sp] - mov r0, #3 - str r0, [sp, #4] - ldr r0, [r5, #4] - ldr r3, [sp, #0x34] - str r0, [sp, #8] - mov r0, #0x5a - lsl r0, r0, #2 - ldr r0, [r5, r0] - add r1, r6, #0 - bl FUN_020090AC - mov r1, #0x18 - add r2, r4, #0 - mul r2, r1 - add r2, r5, r2 - lsl r1, r1, #4 - str r0, [r2, r1] + mov r0, #0 + ldr r2, [sp, #0x50] + mvn r0, r0 + cmp r2, r0 + beq _02238CA8 + str r4, [sp] + mov r0, #3 + str r0, [sp, #4] + ldr r0, [r5, #4] + ldr r3, [sp, #0x34] + str r0, [sp, #8] + mov r0, #0x5a + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r1, r6, #0 + bl FUN_020090AC + mov r1, #0x18 + add r2, r4, #0 + mul r2, r1 + add r2, r5, r2 + lsl r1, r1, #4 + str r0, [r2, r1] _02238CA8: - mov r0, #0x18 - add r6, r4, #0 - mul r6, r0 - mov r0, #0x5d - add r1, r5, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - bl FUN_02009A50 - mov r0, #0x5e - add r1, r5, r6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - bl FUN_02009CF0 - mov r0, #0 - mov r2, #0x57 - str r4, [sp] - mvn r0, r0 - str r0, [sp, #4] - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - str r0, [sp, #0x10] - lsl r2, r2, #2 - ldr r1, [r5, r2] - add r3, r4, #0 - str r1, [sp, #0x14] - add r1, r2, #4 - ldr r1, [r5, r1] - str r1, [sp, #0x18] - add r1, r2, #0 - add r1, #8 - ldr r1, [r5, r1] - str r1, [sp, #0x1c] - add r1, r2, #0 - add r1, #0xc - ldr r1, [r5, r1] - add r2, #0x48 - str r1, [sp, #0x20] - str r0, [sp, #0x24] - str r0, [sp, #0x28] - mov r0, #0x24 - add r1, r5, r2 - mul r0, r4 - add r0, r1, r0 - add r1, r4, #0 - add r2, r4, #0 - bl FUN_02008AA4 - cmp r4, #0 - bne _02238D1A - mov r0, #0x10 - mov r1, #1 - bl GX_EngineAToggleLayers - b _02238D22 + mov r0, #0x18 + add r6, r4, #0 + mul r6, r0 + mov r0, #0x5d + add r1, r5, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + bl FUN_02009A50 + mov r0, #0x5e + add r1, r5, r6 + lsl r0, r0, #2 + ldr r0, [r1, r0] + bl FUN_02009CF0 + mov r0, #0 + mov r2, #0x57 + str r4, [sp] + mvn r0, r0 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + str r0, [sp, #0x10] + lsl r2, r2, #2 + ldr r1, [r5, r2] + add r3, r4, #0 + str r1, [sp, #0x14] + add r1, r2, #4 + ldr r1, [r5, r1] + str r1, [sp, #0x18] + add r1, r2, #0 + add r1, #8 + ldr r1, [r5, r1] + str r1, [sp, #0x1c] + add r1, r2, #0 + add r1, #0xc + ldr r1, [r5, r1] + add r2, #0x48 + str r1, [sp, #0x20] + str r0, [sp, #0x24] + str r0, [sp, #0x28] + mov r0, #0x24 + add r1, r5, r2 + mul r0, r4 + add r0, r1, r0 + add r1, r4, #0 + add r2, r4, #0 + bl FUN_02008AA4 + cmp r4, #0 + bne _02238D1A + mov r0, #0x10 + mov r1, #1 + bl GX_EngineAToggleLayers + b _02238D22 _02238D1A: - mov r0, #0x10 - mov r1, #1 - bl GX_EngineBToggleLayers + mov r0, #0x10 + mov r1, #1 + bl GX_EngineBToggleLayers _02238D22: - ldr r0, _02238D34 ; =MOD83_02238F00 - mov r1, #0 - bl Main_SetVBlankIntrCB - add sp, #0x38 - pop {r3, r4, r5, r6, r7, pc} - nop + ldr r0, _02238D34 ; =MOD83_02238F00 + mov r1, #0 + bl Main_SetVBlankIntrCB + add sp, #0x38 + pop {r3, r4, r5, r6, r7, pc} + nop _02238D30: .word MOD83_0223BC30 _02238D34: .word MOD83_02238F00 - thumb_func_end MOD83_02238BC4 + thumb_func_end MOD83_02238BC4 - thumb_func_start MOD83_02238D38 + thumb_func_start MOD83_02238D38 MOD83_02238D38: ; 0x02238D38 - push {r4, lr} - add r2, r0, #0 - add r4, r1, #0 - add r1, r2, #0 - ldr r0, _02238D50 ; =MOD83_0223BC64 - add r2, r4, #0 - bl FUN_02008D24 - ldr r0, _02238D54 ; =MOD83_0223BE30 - str r4, [r0, #0xc] - pop {r4, pc} - nop + push {r4, lr} + add r2, r0, #0 + add r4, r1, #0 + add r1, r2, #0 + ldr r0, _02238D50 ; =MOD83_0223BC64 + add r2, r4, #0 + bl FUN_02008D24 + ldr r0, _02238D54 ; =MOD83_0223BE30 + str r4, [r0, #0xc] + pop {r4, pc} + nop _02238D50: .word MOD83_0223BC64 _02238D54: .word MOD83_0223BE30 - thumb_func_end MOD83_02238D38 + thumb_func_end MOD83_02238D38 - thumb_func_start MOD83_02238D58 + thumb_func_start MOD83_02238D58 MOD83_02238D58: ; 0x02238D58 - push {r4, lr} - ldr r0, _02238DB4 ; =MOD83_0223BE30 - ldr r4, _02238DB8 ; =MOD83_0223BC30 - ldr r0, [r0, #4] - cmp r0, #0 - beq _02238DA6 - mov r0, #0x82 - lsl r0, r0, #2 - ldr r1, [r4, r0] - cmp r1, #0 - bne _02238DA2 - sub r0, r0, #4 - ldr r0, [r4, r0] - bl FUN_02020128 - cmp r0, #0 - bne _02238D86 - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl FUN_020200A0 + push {r4, lr} + ldr r0, _02238DB4 ; =MOD83_0223BE30 + ldr r4, _02238DB8 ; =MOD83_0223BC30 + ldr r0, [r0, #4] + cmp r0, #0 + beq _02238DA6 + mov r0, #0x82 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0 + bne _02238DA2 + sub r0, r0, #4 + ldr r0, [r4, r0] + bl FUN_02020128 + cmp r0, #0 + bne _02238D86 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_020200A0 _02238D86: - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl FUN_0202011C - mov r1, #6 - ldr r2, [r0, #4] - lsl r1, r1, #0x12 - cmp r2, r1 - bge _02238DA6 - lsr r1, r1, #7 - add r1, r2, r1 - str r1, [r0, #4] - b _02238DA6 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0202011C + mov r1, #6 + ldr r2, [r0, #4] + lsl r1, r1, #0x12 + cmp r2, r1 + bge _02238DA6 + lsr r1, r1, #7 + add r1, r2, r1 + str r1, [r0, #4] + b _02238DA6 _02238DA2: - sub r1, r1, #1 - str r1, [r4, r0] + sub r1, r1, #1 + str r1, [r4, r0] _02238DA6: - ldr r0, [r4, #0x30] - cmp r0, #0 - beq _02238DB0 - bl FUN_0201FDEC + ldr r0, [r4, #0x30] + cmp r0, #0 + beq _02238DB0 + bl FUN_0201FDEC _02238DB0: - pop {r4, pc} - nop + pop {r4, pc} + nop _02238DB4: .word MOD83_0223BE30 _02238DB8: .word MOD83_0223BC30 - thumb_func_end MOD83_02238D58 + thumb_func_end MOD83_02238D58 - thumb_func_start MOD83_02238DBC + thumb_func_start MOD83_02238DBC MOD83_02238DBC: ; 0x02238DBC - push {r3, r4, r5, lr} - sub sp, #0x30 - add r4, r1, #0 - ldr r1, _02238E44 ; =MOD83_0223BC30 - bne _02238E1E - ldr r4, [r1, #0x30] - lsl r2, r2, #0xc - str r4, [sp] - mov r4, #0x69 - lsl r4, r4, #2 - add r5, r1, r4 - mov r4, #0x24 - mul r4, r0 - add r4, r5, r4 - str r4, [sp, #4] - mov r4, #1 - lsl r4, r4, #0xc - mov r5, #0 - str r5, [sp, #0x10] - str r4, [sp, #0x14] - str r4, [sp, #0x18] - str r4, [sp, #0x1c] - add r4, sp, #0 - strh r5, [r4, #0x20] - str r2, [sp, #8] - lsl r2, r3, #0xc - str r2, [sp, #0xc] - mov r2, #0xa - str r2, [sp, #0x24] - cmp r0, #0 - bne _02238DFE - mov r2, #1 - b _02238E00 + push {r3, r4, r5, lr} + sub sp, #0x30 + add r4, r1, #0 + ldr r1, _02238E44 ; =MOD83_0223BC30 + bne _02238E1E + ldr r4, [r1, #0x30] + lsl r2, r2, #0xc + str r4, [sp] + mov r4, #0x69 + lsl r4, r4, #2 + add r5, r1, r4 + mov r4, #0x24 + mul r4, r0 + add r4, r5, r4 + str r4, [sp, #4] + mov r4, #1 + lsl r4, r4, #0xc + mov r5, #0 + str r5, [sp, #0x10] + str r4, [sp, #0x14] + str r4, [sp, #0x18] + str r4, [sp, #0x1c] + add r4, sp, #0 + strh r5, [r4, #0x20] + str r2, [sp, #8] + lsl r2, r3, #0xc + str r2, [sp, #0xc] + mov r2, #0xa + str r2, [sp, #0x24] + cmp r0, #0 + bne _02238DFE + mov r2, #1 + b _02238E00 _02238DFE: - mov r2, #2 + mov r2, #2 _02238E00: - ldr r0, [r1, #4] - str r2, [sp, #0x28] - str r0, [sp, #0x2c] - cmp r2, #2 - bne _02238E16 - mov r0, #0x83 - lsl r0, r0, #2 - ldr r2, [sp, #0xc] - ldr r0, [r1, r0] - add r0, r2, r0 - str r0, [sp, #0xc] + ldr r0, [r1, #4] + str r2, [sp, #0x28] + str r0, [sp, #0x2c] + cmp r2, #2 + bne _02238E16 + mov r0, #0x83 + lsl r0, r0, #2 + ldr r2, [sp, #0xc] + ldr r0, [r1, r0] + add r0, r2, r0 + str r0, [sp, #0xc] _02238E16: - add r0, sp, #0 - bl FUN_0201FE94 - add r4, r0, #0 + add r0, sp, #0 + bl FUN_0201FE94 + add r4, r0, #0 _02238E1E: - add r0, r4, #0 - mov r1, #1 - bl FUN_020200BC - add r0, r4, #0 - mov r1, #0 - bl FUN_02020238 - ldr r1, [sp, #0x40] - add r0, r4, #0 - bl FUN_02020130 - add r0, r4, #0 - mov r1, #1 - bl FUN_020200A0 - add r0, r4, #0 - add sp, #0x30 - pop {r3, r4, r5, pc} - .align 2, 0 + add r0, r4, #0 + mov r1, #1 + bl FUN_020200BC + add r0, r4, #0 + mov r1, #0 + bl FUN_02020238 + ldr r1, [sp, #0x40] + add r0, r4, #0 + bl FUN_02020130 + add r0, r4, #0 + mov r1, #1 + bl FUN_020200A0 + add r0, r4, #0 + add sp, #0x30 + pop {r3, r4, r5, pc} + .align 2, 0 _02238E44: .word MOD83_0223BC30 - thumb_func_end MOD83_02238DBC + thumb_func_end MOD83_02238DBC - thumb_func_start MOD83_02238E48 + thumb_func_start MOD83_02238E48 MOD83_02238E48: ; 0x02238E48 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02238EE8 ; =MOD83_0223BE30 - ldr r4, _02238EEC ; =MOD83_0223BC30 - ldr r0, [r0, #4] - cmp r0, #0 - beq _02238E66 - mov r0, #0x81 - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl FUN_0201FFC8 - mov r0, #0x81 - mov r1, #0 - lsl r0, r0, #2 - str r1, [r4, r0] + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02238EE8 ; =MOD83_0223BE30 + ldr r4, _02238EEC ; =MOD83_0223BC30 + ldr r0, [r0, #4] + cmp r0, #0 + beq _02238E66 + mov r0, #0x81 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0201FFC8 + mov r0, #0x81 + mov r1, #0 + lsl r0, r0, #2 + str r1, [r4, r0] _02238E66: - mov r1, #0x51 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E76 - bl FUN_02009C0C + mov r1, #0x51 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E76 + bl FUN_02009C0C _02238E76: - mov r1, #0x57 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E86 - bl FUN_02009C0C + mov r1, #0x57 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E86 + bl FUN_02009C0C _02238E86: - mov r1, #0x52 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #2 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238E96 - bl FUN_02009E04 + mov r1, #0x52 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #2 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238E96 + bl FUN_02009E04 _02238E96: - mov r1, #0x16 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - lsl r1, r1, #4 - ldr r0, [r0, r1] - cmp r0, #0 - beq _02238EA6 - bl FUN_02009E04 + mov r1, #0x16 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + lsl r1, r1, #4 + ldr r0, [r0, r1] + cmp r0, #0 + beq _02238EA6 + bl FUN_02009E04 _02238EA6: - mov r4, #0 - mov r7, #0x4b - ldr r5, _02238EF0 ; =MOD83_0223BC60 - add r6, r4, #0 - lsl r7, r7, #2 + mov r4, #0 + mov r7, #0x4b + ldr r5, _02238EF0 ; =MOD83_0223BC60 + add r6, r4, #0 + lsl r7, r7, #2 _02238EB0: - mov r0, #0x4b - lsl r0, r0, #2 - ldr r0, [r5, r0] - bl FUN_02008E2C - str r6, [r5, r7] - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #6 - blt _02238EB0 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - ldr r0, [r0] - bl FUN_0201FD58 - ldr r0, _02238EF0 ; =MOD83_0223BC60 - mov r1, #0 - str r1, [r0] - bl FUN_02009FA0 - bl FUN_0201D12C - bl FUN_0201E08C - mov r0, #0 - add r1, r0, #0 - bl Main_SetVBlankIntrCB - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r0, #0x4b + lsl r0, r0, #2 + ldr r0, [r5, r0] + bl FUN_02008E2C + str r6, [r5, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02238EB0 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + ldr r0, [r0] + bl FUN_0201FD58 + ldr r0, _02238EF0 ; =MOD83_0223BC60 + mov r1, #0 + str r1, [r0] + bl FUN_02009FA0 + bl FUN_0201D12C + bl FUN_0201E08C + mov r0, #0 + add r1, r0, #0 + bl Main_SetVBlankIntrCB + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02238EE8: .word MOD83_0223BE30 _02238EEC: .word MOD83_0223BC30 _02238EF0: .word MOD83_0223BC60 - thumb_func_end MOD83_02238E48 + thumb_func_end MOD83_02238E48 - thumb_func_start MOD83_02238EF4 + thumb_func_start MOD83_02238EF4 MOD83_02238EF4: ; 0x02238EF4 - mov r1, #1 - sub r0, #0xa - lsl r1, r0 - add r0, r1, #0 - bx lr - .align 2, 0 - thumb_func_end MOD83_02238EF4 - - thumb_func_start MOD83_02238F00 + mov r1, #1 + sub r0, #0xa + lsl r1, r0 + add r0, r1, #0 + bx lr + .align 2, 0 + thumb_func_end MOD83_02238EF4 + + thumb_func_start MOD83_02238F00 MOD83_02238F00: ; 0x02238F00 - push {r4, lr} - ldr r0, _02238F34 ; =MOD83_0223CAB0 - ldr r4, _02238F38 ; =MOD83_0223BC30 - ldr r0, [r0, #0x20] - cmp r0, #0 - beq _02238F1E - mov r1, #0xea - lsl r1, r1, #4 - ldr r1, [r4, r1] - add r0, r4, #0 - blx r1 - mov r0, #0xea - mov r1, #0 - lsl r0, r0, #4 - str r1, [r4, r0] + push {r4, lr} + ldr r0, _02238F34 ; =MOD83_0223CAB0 + ldr r4, _02238F38 ; =MOD83_0223BC30 + ldr r0, [r0, #0x20] + cmp r0, #0 + beq _02238F1E + mov r1, #0xea + lsl r1, r1, #4 + ldr r1, [r4, r1] + add r0, r4, #0 + blx r1 + mov r0, #0xea + mov r1, #0 + lsl r0, r0, #4 + str r1, [r4, r0] _02238F1E: - bl FUN_0201C30C - bl FUN_02009F80 - ldr r3, _02238F3C ; =MOD83_027E0000 - ldr r1, _02238F40 ; =0x00003FF8 - mov r0, #1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - pop {r4, pc} - .align 2, 0 + bl FUN_0201C30C + bl FUN_02009F80 + ldr r3, _02238F3C ; =MOD83_027E0000 + ldr r1, _02238F40 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + .align 2, 0 _02238F34: .word MOD83_0223CAB0 _02238F38: .word MOD83_0223BC30 _02238F3C: .word 0x027E0000 _02238F40: .word 0x00003FF8 - thumb_func_end MOD83_02238F00 + thumb_func_end MOD83_02238F00 - thumb_func_start MOD83_02238F44 + thumb_func_start MOD83_02238F44 MOD83_02238F44: ; 0x02238F44 - push {r4} - sub sp, #0x1c - ldr r4, _02238F90 ; =MOD83_0223A744 - add r3, sp, #0 - mov r2, #0x1a + push {r4} + sub sp, #0x1c + ldr r4, _02238F90 ; =MOD83_0223A744 + add r3, sp, #0 + mov r2, #0x1a _02238F4E: - ldrb r1, [r4] - add r4, r4, #1 - strb r1, [r3] - add r3, r3, #1 - sub r2, r2, #1 - bne _02238F4E - add r1, sp, #0 - ldrb r2, [r1] - mov r3, #0 - sub r1, r3, #1 - cmp r2, r1 - beq _02238F88 - add r4, sp, #0 - sub r1, r3, #1 + ldrb r1, [r4] + add r4, r4, #1 + strb r1, [r3] + add r3, r3, #1 + sub r2, r2, #1 + bne _02238F4E + add r1, sp, #0 + ldrb r2, [r1] + mov r3, #0 + sub r1, r3, #1 + cmp r2, r1 + beq _02238F88 + add r4, sp, #0 + sub r1, r3, #1 _02238F6A: - ldrb r2, [r4] - cmp r0, r2 - bne _02238F7E - add r0, sp, #0 - lsl r1, r3, #1 - add r0, #1 - add sp, #0x1c - ldrb r0, [r0, r1] - pop {r4} - bx lr + ldrb r2, [r4] + cmp r0, r2 + bne _02238F7E + add r0, sp, #0 + lsl r1, r3, #1 + add r0, #1 + add sp, #0x1c + ldrb r0, [r0, r1] + pop {r4} + bx lr _02238F7E: - add r4, r4, #2 - ldrb r2, [r4] - add r3, r3, #1 - cmp r2, r1 - bne _02238F6A + add r4, r4, #2 + ldrb r2, [r4] + add r3, r3, #1 + cmp r2, r1 + bne _02238F6A _02238F88: - mov r0, #0 - add sp, #0x1c - pop {r4} - bx lr - .align 2, 0 + mov r0, #0 + add sp, #0x1c + pop {r4} + bx lr + .align 2, 0 _02238F90: .word MOD83_0223A744 - thumb_func_end MOD83_02238F44 + thumb_func_end MOD83_02238F44 - thumb_func_start MOD83_02238F94 + thumb_func_start MOD83_02238F94 MOD83_02238F94: ; 0x02238F94 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x28 - str r0, [sp, #0x20] - add r5, r1, #0 - add r7, r2, #0 - add r6, r3, #0 - ldr r4, [sp, #0x40] - bl GetMonGender - str r0, [sp, #0x24] - ldr r0, [sp, #0x20] - bl MonIsShiny - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp] - lsl r0, r7, #0x18 - ldr r2, [sp, #0x24] - lsr r0, r0, #0x18 - str r0, [sp, #4] - mov r0, #0 - lsl r1, r5, #0x10 - lsl r2, r2, #0x18 - str r0, [sp, #8] - add r0, r4, #0 - lsr r1, r1, #0x10 - lsr r2, r2, #0x18 - mov r3, #2 - bl FUN_02068C00 - mov r1, #0 - ldr r0, [sp, #0x20] - add r2, r1, #0 - bl GetMonData - mov r3, #0 - str r3, [sp] - mov r1, #0xa - str r1, [sp, #4] - str r1, [sp, #8] - str r6, [sp, #0xc] - str r0, [sp, #0x10] - str r3, [sp, #0x14] - mov r0, #2 - str r0, [sp, #0x18] - str r5, [sp, #0x1c] - ldr r2, _0223902C ; =MOD83_0223BC30 - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldr r2, [r2, #4] - bl FUN_020124B4 - mov r1, #0x32 - add r0, r6, #0 - lsl r1, r1, #6 - bl DC_FlushRange - mov r1, #0x32 - lsl r1, r1, #6 - add r0, r6, #0 - add r2, r1, #0 - bl GXS_LoadOBJ - mov r0, #0x20 - str r0, [sp] - ldr r0, _0223902C ; =MOD83_0223BC30 - mov r2, #5 - ldr r0, [r0, #4] - mov r3, #0x60 - str r0, [sp, #4] - ldrh r0, [r4] - ldrh r1, [r4, #4] - bl GfGfxLoader_GXLoadPal - add sp, #0x28 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x28 + str r0, [sp, #0x20] + add r5, r1, #0 + add r7, r2, #0 + add r6, r3, #0 + ldr r4, [sp, #0x40] + bl GetMonGender + str r0, [sp, #0x24] + ldr r0, [sp, #0x20] + bl MonIsShiny + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + lsl r0, r7, #0x18 + ldr r2, [sp, #0x24] + lsr r0, r0, #0x18 + str r0, [sp, #4] + mov r0, #0 + lsl r1, r5, #0x10 + lsl r2, r2, #0x18 + str r0, [sp, #8] + add r0, r4, #0 + lsr r1, r1, #0x10 + lsr r2, r2, #0x18 + mov r3, #2 + bl FUN_02068C00 + mov r1, #0 + ldr r0, [sp, #0x20] + add r2, r1, #0 + bl GetMonData + mov r3, #0 + str r3, [sp] + mov r1, #0xa + str r1, [sp, #4] + str r1, [sp, #8] + str r6, [sp, #0xc] + str r0, [sp, #0x10] + str r3, [sp, #0x14] + mov r0, #2 + str r0, [sp, #0x18] + str r5, [sp, #0x1c] + ldr r2, _0223902C ; =MOD83_0223BC30 + ldrh r0, [r4] + ldrh r1, [r4, #2] + ldr r2, [r2, #4] + bl FUN_020124B4 + mov r1, #0x32 + add r0, r6, #0 + lsl r1, r1, #6 + bl DC_FlushRange + mov r1, #0x32 + lsl r1, r1, #6 + add r0, r6, #0 + add r2, r1, #0 + bl GXS_LoadOBJ + mov r0, #0x20 + str r0, [sp] + ldr r0, _0223902C ; =MOD83_0223BC30 + mov r2, #5 + ldr r0, [r0, #4] + mov r3, #0x60 + str r0, [sp, #4] + ldrh r0, [r4] + ldrh r1, [r4, #4] + bl GfGfxLoader_GXLoadPal + add sp, #0x28 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _0223902C: .word MOD83_0223BC30 - thumb_func_end MOD83_02238F94 + thumb_func_end MOD83_02238F94 - thumb_func_start MOD83_02239030 + thumb_func_start MOD83_02239030 MOD83_02239030: ; 0x02239030 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - mov r0, #0x21 - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x23 - mov r2, #0x20 - mov r3, #0x22 - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r3, #0 - mov r1, #0x81 - str r3, [sp] - lsl r1, r1, #2 - ldr r1, [r4, r1] - mov r0, #1 - mov r2, #0x80 - bl MOD83_02238DBC - mov r1, #0x81 - lsl r1, r1, #2 - str r0, [r4, r1] - add sp, #8 - pop {r4, pc} - thumb_func_end MOD83_02239030 - - thumb_func_start MOD83_02239070 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + mov r0, #0x21 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x23 + mov r2, #0x20 + mov r3, #0x22 + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r3, #0 + mov r1, #0x81 + str r3, [sp] + lsl r1, r1, #2 + ldr r1, [r4, r1] + mov r0, #1 + mov r2, #0x80 + bl MOD83_02238DBC + mov r1, #0x81 + lsl r1, r1, #2 + str r0, [r4, r1] + add sp, #8 + pop {r4, pc} + thumb_func_end MOD83_02239030 + + thumb_func_start MOD83_02239070 MOD83_02239070: ; 0x02239070 - push {r4, r5, r6, lr} - sub sp, #8 - add r5, r0, #0 - mov r0, #0xc - str r0, [sp] - mov r0, #1 - add r6, r1, #0 - add r4, r2, #0 - str r0, [sp, #4] - mov r0, #0x36 - mov r1, #0xa - mov r2, #0 - mov r3, #0xb - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r0, #1 - mov r1, #0x81 - str r0, [sp] - lsl r1, r1, #2 - ldr r1, [r5, r1] - mov r2, #0x80 - mov r3, #0 - bl MOD83_02238DBC - mov r3, #0x81 - lsl r3, r3, #2 - add r4, #8 - str r0, [r5, r3] - cmp r6, #1 - beq _022390C2 - cmp r6, #2 - beq _022390F4 - cmp r6, #7 - beq _02239110 - add sp, #8 - pop {r4, r5, r6, pc} + push {r4, r5, r6, lr} + sub sp, #8 + add r5, r0, #0 + mov r0, #0xc + str r0, [sp] + mov r0, #1 + add r6, r1, #0 + add r4, r2, #0 + str r0, [sp, #4] + mov r0, #0x36 + mov r1, #0xa + mov r2, #0 + mov r3, #0xb + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r0, #1 + mov r1, #0x81 + str r0, [sp] + lsl r1, r1, #2 + ldr r1, [r5, r1] + mov r2, #0x80 + mov r3, #0 + bl MOD83_02238DBC + mov r3, #0x81 + lsl r3, r3, #2 + add r4, #8 + str r0, [r5, r3] + cmp r6, #1 + beq _022390C2 + cmp r6, #2 + beq _022390F4 + cmp r6, #7 + beq _02239110 + add sp, #8 + pop {r4, r5, r6, pc} _022390C2: - add r0, r4, #0 - mov r1, #5 - mov r2, #0 - bl GetMonData - add r6, r0, #0 - add r0, r4, #0 - mov r1, #0x70 - mov r2, #0 - bl GetMonData - add r2, r0, #0 - mov r0, #0xe9 - lsl r0, r0, #4 - mov r3, #0x21 - add r0, r5, r0 - lsl r3, r3, #4 - str r0, [sp] - add r0, r4, #0 - add r1, r6, #0 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl GetMonData + add r6, r0, #0 + add r0, r4, #0 + mov r1, #0x70 + mov r2, #0 + bl GetMonData + add r2, r0, #0 + mov r0, #0xe9 + lsl r0, r0, #4 + mov r3, #0x21 + add r0, r5, r0 + lsl r3, r3, #4 + str r0, [sp] + add r0, r4, #0 + add r1, r6, #0 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} _022390F4: - mov r0, #0xe9 - lsl r0, r0, #4 - add r1, r3, #0 - add r0, r5, r0 - add r3, #0xc - str r0, [sp] - add r0, r4, #0 - sub r1, #0x16 - mov r2, #0 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} + mov r0, #0xe9 + lsl r0, r0, #4 + add r1, r3, #0 + add r0, r5, r0 + add r3, #0xc + str r0, [sp] + add r0, r4, #0 + sub r1, #0x16 + mov r2, #0 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} _02239110: - mov r0, #0xe9 - lsl r0, r0, #4 - add r1, r3, #0 - add r0, r5, r0 - add r3, #0xc - str r0, [sp] - add r0, r4, #0 - sub r1, #0x16 - mov r2, #1 - add r3, r5, r3 - bl MOD83_02238F94 - add sp, #8 - pop {r4, r5, r6, pc} - thumb_func_end MOD83_02239070 - - thumb_func_start MOD83_0223912C + mov r0, #0xe9 + lsl r0, r0, #4 + add r1, r3, #0 + add r0, r5, r0 + add r3, #0xc + str r0, [sp] + add r0, r4, #0 + sub r1, #0x16 + mov r2, #1 + add r3, r5, r3 + bl MOD83_02238F94 + add sp, #8 + pop {r4, r5, r6, pc} + thumb_func_end MOD83_02239070 + + thumb_func_start MOD83_0223912C MOD83_0223912C: ; 0x0223912C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - cmp r1, #0xa - bhi _02239168 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r5, r0, #0 + cmp r1, #0xa + bhi _02239168 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239142: ; jump table - .short _02239168 - _02239142 - 2 ; case 0 - .short _02239168 - _02239142 - 2 ; case 1 - .short _02239168 - _02239142 - 2 ; case 2 - .short _02239158 - _02239142 - 2 ; case 3 - .short _02239168 - _02239142 - 2 ; case 4 - .short _02239168 - _02239142 - 2 ; case 5 - .short _02239168 - _02239142 - 2 ; case 6 - .short _02239168 - _02239142 - 2 ; case 7 - .short _0223915C - _02239142 - 2 ; case 8 - .short _02239160 - _02239142 - 2 ; case 9 - .short _02239166 - _02239142 - 2 ; case 10 + .short _02239168 - _02239142 - 2 ; case 0 + .short _02239168 - _02239142 - 2 ; case 1 + .short _02239168 - _02239142 - 2 ; case 2 + .short _02239158 - _02239142 - 2 ; case 3 + .short _02239168 - _02239142 - 2 ; case 4 + .short _02239168 - _02239142 - 2 ; case 5 + .short _02239168 - _02239142 - 2 ; case 6 + .short _02239168 - _02239142 - 2 ; case 7 + .short _0223915C - _02239142 - 2 ; case 8 + .short _02239160 - _02239142 - 2 ; case 9 + .short _02239166 - _02239142 - 2 ; case 10 _02239158: - ldr r4, [r2, #4] - b _02239168 + ldr r4, [r2, #4] + b _02239168 _0223915C: - ldr r4, _022391C4 ; =0x000001C6 - b _02239168 + ldr r4, _022391C4 ; =0x000001C6 + b _02239168 _02239160: - mov r4, #0x71 - lsl r4, r4, #2 - b _02239168 + mov r4, #0x71 + lsl r4, r4, #2 + b _02239168 _02239166: - ldr r4, _022391C8 ; =0x000001C7 + ldr r4, _022391C8 ; =0x000001C7 _02239168: - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - mov r1, #1 - bl GetItemIndexMapping - add r7, r0, #0 - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - mov r1, #2 - bl GetItemIndexMapping - add r4, r0, #0 - bl FUN_0206E708 - add r6, r0, #0 - bl FUN_0206E70C - str r0, [sp] - mov r0, #1 - str r0, [sp, #4] - mov r0, #0x10 - add r1, r7, #0 - add r2, r4, #0 - add r3, r6, #0 - bl MOD83_02238BC4 - mov r1, #1 - mov r0, #0 - lsl r1, r1, #0x14 - bl MOD83_02238D38 - mov r3, #0 - mov r1, #0x81 - str r3, [sp] - lsl r1, r1, #2 - ldr r1, [r5, r1] - mov r0, #1 - mov r2, #0x80 - bl MOD83_02238DBC - mov r1, #0x81 - lsl r1, r1, #2 - str r0, [r5, r1] - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + mov r1, #1 + bl GetItemIndexMapping + add r7, r0, #0 + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + mov r1, #2 + bl GetItemIndexMapping + add r4, r0, #0 + bl FUN_0206E708 + add r6, r0, #0 + bl FUN_0206E70C + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x10 + add r1, r7, #0 + add r2, r4, #0 + add r3, r6, #0 + bl MOD83_02238BC4 + mov r1, #1 + mov r0, #0 + lsl r1, r1, #0x14 + bl MOD83_02238D38 + mov r3, #0 + mov r1, #0x81 + str r3, [sp] + lsl r1, r1, #2 + ldr r1, [r5, r1] + mov r0, #1 + mov r2, #0x80 + bl MOD83_02238DBC + mov r1, #0x81 + lsl r1, r1, #2 + str r0, [r5, r1] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop _022391C4: .word 0x000001C6 _022391C8: .word 0x000001C7 - thumb_func_end MOD83_0223912C + thumb_func_end MOD83_0223912C - thumb_func_start MOD83_022391CC + thumb_func_start MOD83_022391CC MOD83_022391CC: ; 0x022391CC - push {r3, lr} - sub sp, #8 - mov r1, #0xc0 - str r1, [sp] - ldr r0, [r0, #4] - mov r2, #4 - add r3, r2, #0 - str r0, [sp, #4] - mov r0, #0x74 - mov r1, #0x1d - add r3, #0xfc - bl GfGfxLoader_GXLoadPal - add sp, #8 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022391CC - - thumb_func_start MOD83_022391EC + push {r3, lr} + sub sp, #8 + mov r1, #0xc0 + str r1, [sp] + ldr r0, [r0, #4] + mov r2, #4 + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x74 + mov r1, #0x1d + add r3, #0xfc + bl GfGfxLoader_GXLoadPal + add sp, #8 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022391CC + + thumb_func_start MOD83_022391EC MOD83_022391EC: ; 0x022391EC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r6, r1, #0 - ldrh r4, [r6] - add r5, r0, #0 - add r0, r4, #0 - bl MOD83_02238F44 - add r7, r0, #0 - mov r0, #0 - str r0, [sp] - mov r0, #5 - lsl r0, r0, #0xa - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - ldr r0, _022392DC ; =MOD83_0223BC30 - mov r1, #0x1e - ldr r0, [r0, #4] - add r2, r5, #0 - str r0, [sp, #0xc] - mov r0, #0x74 - mov r3, #5 - bl GfGfxLoader_LoadCharData - mov r2, #1 - ldr r3, _022392DC ; =MOD83_0223BC30 - str r2, [sp] - ldr r3, [r3, #4] - mov r0, #0x74 - mov r1, #0x1f - bl GfGfxLoader_LoadFromNarc - add r1, sp, #0x14 - str r0, [sp, #0x10] - bl NNS_G2dGetUnpackedScreenData - ldr r2, [sp, #0x14] - mov r3, #6 - add r0, r5, #0 - mov r1, #5 - add r2, #0xc - lsl r3, r3, #8 - bl BG_LoadScreenTilemapData - ldr r0, [sp, #0x10] - bl FreeToHeap - mov r0, #0x20 - str r0, [sp] - mov r0, #0x18 - mov r2, #0 - add r7, #8 - str r0, [sp, #4] - lsl r0, r7, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #8] - add r0, r5, #0 - mov r1, #5 - add r3, r2, #0 - bl BgTilemapRectChangePalette - add r0, r5, #0 - mov r1, #5 - bl BgCommitTilemapBufferToVram - ldr r1, _022392E0 ; =MOD83_022391CC - ldr r0, _022392E4 ; =MOD83_0223CAB0 - cmp r4, #0xb - str r1, [r0, #0x20] - bhi _022392CA - add r0, r4, r4 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r6, r1, #0 + ldrh r4, [r6] + add r5, r0, #0 + add r0, r4, #0 + bl MOD83_02238F44 + add r7, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #5 + lsl r0, r0, #0xa + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, _022392DC ; =MOD83_0223BC30 + mov r1, #0x1e + ldr r0, [r0, #4] + add r2, r5, #0 + str r0, [sp, #0xc] + mov r0, #0x74 + mov r3, #5 + bl GfGfxLoader_LoadCharData + mov r2, #1 + ldr r3, _022392DC ; =MOD83_0223BC30 + str r2, [sp] + ldr r3, [r3, #4] + mov r0, #0x74 + mov r1, #0x1f + bl GfGfxLoader_LoadFromNarc + add r1, sp, #0x14 + str r0, [sp, #0x10] + bl NNS_G2dGetUnpackedScreenData + ldr r2, [sp, #0x14] + mov r3, #6 + add r0, r5, #0 + mov r1, #5 + add r2, #0xc + lsl r3, r3, #8 + bl BG_LoadScreenTilemapData + ldr r0, [sp, #0x10] + bl FreeToHeap + mov r0, #0x20 + str r0, [sp] + mov r0, #0x18 + mov r2, #0 + add r7, #8 + str r0, [sp, #4] + lsl r0, r7, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + add r0, r5, #0 + mov r1, #5 + add r3, r2, #0 + bl BgTilemapRectChangePalette + add r0, r5, #0 + mov r1, #5 + bl BgCommitTilemapBufferToVram + ldr r1, _022392E0 ; =MOD83_022391CC + ldr r0, _022392E4 ; =MOD83_0223CAB0 + cmp r4, #0xb + str r1, [r0, #0x20] + bhi _022392CA + add r0, r4, r4 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239286: ; jump table - .short _022392CA - _02239286 - 2 ; case 0 - .short _022392B4 - _02239286 - 2 ; case 1 - .short _022392B4 - _02239286 - 2 ; case 2 - .short _022392C0 - _02239286 - 2 ; case 3 - .short _0223929E - _02239286 - 2 ; case 4 - .short _0223929E - _02239286 - 2 ; case 5 - .short _0223929E - _02239286 - 2 ; case 6 - .short _022392AA - _02239286 - 2 ; case 7 - .short _022392C0 - _02239286 - 2 ; case 8 - .short _022392C0 - _02239286 - 2 ; case 9 - .short _022392C0 - _02239286 - 2 ; case 10 - .short _0223929E - _02239286 - 2 ; case 11 + .short _022392CA - _02239286 - 2 ; case 0 + .short _022392B4 - _02239286 - 2 ; case 1 + .short _022392B4 - _02239286 - 2 ; case 2 + .short _022392C0 - _02239286 - 2 ; case 3 + .short _0223929E - _02239286 - 2 ; case 4 + .short _0223929E - _02239286 - 2 ; case 5 + .short _0223929E - _02239286 - 2 ; case 6 + .short _022392AA - _02239286 - 2 ; case 7 + .short _022392C0 - _02239286 - 2 ; case 8 + .short _022392C0 - _02239286 - 2 ; case 9 + .short _022392C0 - _02239286 - 2 ; case 10 + .short _0223929E - _02239286 - 2 ; case 11 _0223929E: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02239030 - b _022392CA + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02239030 + b _022392CA _022392AA: - mov r1, #0x82 - ldr r0, _022392E8 ; =MOD83_0223BC30 - mov r2, #0x78 - lsl r1, r1, #2 - str r2, [r0, r1] + mov r1, #0x82 + ldr r0, _022392E8 ; =MOD83_0223BC30 + mov r2, #0x78 + lsl r1, r1, #2 + str r2, [r0, r1] _022392B4: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_02239070 - b _022392CA + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_02239070 + b _022392CA _022392C0: - ldr r0, _022392E8 ; =MOD83_0223BC30 - add r1, r4, #0 - add r2, r6, #0 - bl MOD83_0223912C + ldr r0, _022392E8 ; =MOD83_0223BC30 + add r1, r4, #0 + add r2, r6, #0 + bl MOD83_0223912C _022392CA: - mov r1, #0x81 - ldr r0, _022392E8 ; =MOD83_0223BC30 - lsl r1, r1, #2 - ldr r0, [r0, r1] - mov r1, #0 - bl FUN_020200A0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + mov r1, #0x81 + ldr r0, _022392E8 ; =MOD83_0223BC30 + lsl r1, r1, #2 + ldr r0, [r0, r1] + mov r1, #0 + bl FUN_020200A0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _022392DC: .word MOD83_0223BC30 _022392E0: .word MOD83_022391CC _022392E4: .word MOD83_0223CAB0 _022392E8: .word MOD83_0223BC30 - thumb_func_end MOD83_022391EC + thumb_func_end MOD83_022391EC - thumb_func_start MOD83_022392EC + thumb_func_start MOD83_022392EC MOD83_022392EC: ; 0x022392EC - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r7, r1, #0 - mov r1, #2 - add r5, r0, #0 - add r0, r2, #0 - lsl r1, r1, #8 - str r2, [sp] - bl AllocFromHeap - ldr r1, _0223936C ; =0x0000A001 - add r4, r0, #0 - bl MATHi_CRC16InitTableRev - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x50 - bl MATH_CalcCRC16 - add r6, r0, #0 - add r0, r4, #0 - bl FreeToHeap - add r0, sp, #4 - bl OS_GetMacAddress - add r0, sp, #4 - ldrh r1, [r0, #2] - mov r2, #0 - add r3, sp, #4 - strh r1, [r0, #6] - ldr r1, _02239370 ; =0x0000D679 - strh r6, [r0, #2] + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r7, r1, #0 + mov r1, #2 + add r5, r0, #0 + add r0, r2, #0 + lsl r1, r1, #8 + str r2, [sp] + bl AllocFromHeap + ldr r1, _0223936C ; =0x0000A001 + add r4, r0, #0 + bl MATHi_CRC16InitTableRev + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x50 + bl MATH_CalcCRC16 + add r6, r0, #0 + add r0, r4, #0 + bl FreeToHeap + add r0, sp, #4 + bl OS_GetMacAddress + add r0, sp, #4 + ldrh r1, [r0, #2] + mov r2, #0 + add r3, sp, #4 + strh r1, [r0, #6] + ldr r1, _02239370 ; =0x0000D679 + strh r6, [r0, #2] _0223932E: - ldrh r0, [r3] - add r2, r2, #1 - eor r0, r1 - strh r0, [r3] - ldrh r1, [r3] - add r3, r3, #2 - cmp r2, #4 - blt _0223932E - mov r1, #0x41 - ldr r0, [sp] - lsl r1, r1, #2 - bl AllocFromHeap - add r1, sp, #4 - mov r2, #8 - add r4, r0, #0 - bl FUN_0209521C - add r5, #0x50 - mov r2, #0xd6 - add r0, r4, #0 - add r1, r5, #0 - lsl r2, r2, #2 - add r3, r7, #0 - bl FUN_020952AC - add r0, r4, #0 - bl FreeToHeap - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r3] + add r2, r2, #1 + eor r0, r1 + strh r0, [r3] + ldrh r1, [r3] + add r3, r3, #2 + cmp r2, #4 + blt _0223932E + mov r1, #0x41 + ldr r0, [sp] + lsl r1, r1, #2 + bl AllocFromHeap + add r1, sp, #4 + mov r2, #8 + add r4, r0, #0 + bl FUN_0209521C + add r5, #0x50 + mov r2, #0xd6 + add r0, r4, #0 + add r1, r5, #0 + lsl r2, r2, #2 + add r3, r7, #0 + bl FUN_020952AC + add r0, r4, #0 + bl FreeToHeap + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0223936C: .word 0x0000A001 _02239370: .word 0x0000D679 - thumb_func_end MOD83_022392EC + thumb_func_end MOD83_022392EC - thumb_func_start MOD83_02239374 + thumb_func_start MOD83_02239374 MOD83_02239374: ; 0x02239374 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r7, r1, #0 - mov r1, #2 - add r5, r0, #0 - add r0, r2, #0 - lsl r1, r1, #8 - str r2, [sp] - bl AllocFromHeap - ldr r1, _0223940C ; =0x0000A001 - add r4, r0, #0 - bl MATHi_CRC16InitTableRev - add r0, r4, #0 - add r1, r5, #0 - mov r2, #0x50 - bl MATH_CalcCRC16 - add r6, r0, #0 - add r0, r4, #0 - bl FreeToHeap - mov r0, #0 - bl FUN_0202EF18 - ldrb r2, [r0, #4] - add r1, sp, #4 - mov r3, #0 - strb r2, [r1] - ldrb r2, [r0, #5] - strb r2, [r1, #1] - ldrb r2, [r0, #6] - strb r2, [r1, #2] - ldrb r2, [r0, #7] - strb r2, [r1, #3] - ldrb r2, [r0, #8] - strb r2, [r1, #4] - ldrb r0, [r0, #9] - strb r0, [r1, #5] - add r0, sp, #4 - ldrh r2, [r0, #2] - strh r2, [r0, #6] - ldr r2, _02239410 ; =0x0000D679 - strh r6, [r0, #2] + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r7, r1, #0 + mov r1, #2 + add r5, r0, #0 + add r0, r2, #0 + lsl r1, r1, #8 + str r2, [sp] + bl AllocFromHeap + ldr r1, _0223940C ; =0x0000A001 + add r4, r0, #0 + bl MATHi_CRC16InitTableRev + add r0, r4, #0 + add r1, r5, #0 + mov r2, #0x50 + bl MATH_CalcCRC16 + add r6, r0, #0 + add r0, r4, #0 + bl FreeToHeap + mov r0, #0 + bl FUN_0202EF18 + ldrb r2, [r0, #4] + add r1, sp, #4 + mov r3, #0 + strb r2, [r1] + ldrb r2, [r0, #5] + strb r2, [r1, #1] + ldrb r2, [r0, #6] + strb r2, [r1, #2] + ldrb r2, [r0, #7] + strb r2, [r1, #3] + ldrb r2, [r0, #8] + strb r2, [r1, #4] + ldrb r0, [r0, #9] + strb r0, [r1, #5] + add r0, sp, #4 + ldrh r2, [r0, #2] + strh r2, [r0, #6] + ldr r2, _02239410 ; =0x0000D679 + strh r6, [r0, #2] _022393CE: - ldrh r0, [r1] - add r3, r3, #1 - eor r0, r2 - strh r0, [r1] - ldrh r2, [r1] - add r1, r1, #2 - cmp r3, #4 - blt _022393CE - mov r1, #0x41 - ldr r0, [sp] - lsl r1, r1, #2 - bl AllocFromHeap - add r1, sp, #4 - mov r2, #8 - add r4, r0, #0 - bl FUN_0209521C - add r5, #0x50 - mov r2, #0xd6 - add r0, r4, #0 - add r1, r5, #0 - lsl r2, r2, #2 - add r3, r7, #0 - bl FUN_020952AC - add r0, r4, #0 - bl FreeToHeap - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .align 2, 0 + ldrh r0, [r1] + add r3, r3, #1 + eor r0, r2 + strh r0, [r1] + ldrh r2, [r1] + add r1, r1, #2 + cmp r3, #4 + blt _022393CE + mov r1, #0x41 + ldr r0, [sp] + lsl r1, r1, #2 + bl AllocFromHeap + add r1, sp, #4 + mov r2, #8 + add r4, r0, #0 + bl FUN_0209521C + add r5, #0x50 + mov r2, #0xd6 + add r0, r4, #0 + add r1, r5, #0 + lsl r2, r2, #2 + add r3, r7, #0 + bl FUN_020952AC + add r0, r4, #0 + bl FreeToHeap + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 _0223940C: .word 0x0000A001 _02239410: .word 0x0000D679 - thumb_func_end MOD83_02239374 + thumb_func_end MOD83_02239374 - thumb_func_start MOD83_02239414 + thumb_func_start MOD83_02239414 MOD83_02239414: ; 0x02239414 - push {r3, lr} - cmp r2, #0 - beq _0223941E - cmp r2, #1 - pop {r3, pc} + push {r3, lr} + cmp r2, #0 + beq _0223941E + cmp r2, #1 + pop {r3, pc} _0223941E: - ldr r0, _02239428 ; =0x000005DC - bl PlaySE - pop {r3, pc} - nop + ldr r0, _02239428 ; =0x000005DC + bl PlaySE + pop {r3, pc} + nop _02239428: .word 0x000005DC - thumb_func_end MOD83_02239414 + thumb_func_end MOD83_02239414 - thumb_func_start MOD83_0223942C + thumb_func_start MOD83_0223942C MOD83_0223942C: ; 0x0223942C - push {r3, lr} - ldr r0, _0223944C ; =MOD83_027FFFA8 - ldrh r1, [r0] - mov r0, #2 - lsl r0, r0, #0xe - and r0, r1 - asr r0, r0, #0xf - bne _02239448 - bl CTRDG_IsAgbCartridge - cmp r0, #0 - bne _02239448 - bl CTRDG_TerminateForPulledOut + push {r3, lr} + ldr r0, _0223944C ; =MOD83_027FFFA8 + ldrh r1, [r0] + mov r0, #2 + lsl r0, r0, #0xe + and r0, r1 + asr r0, r0, #0xf + bne _02239448 + bl CTRDG_IsAgbCartridge + cmp r0, #0 + bne _02239448 + bl CTRDG_TerminateForPulledOut _02239448: - pop {r3, pc} - nop + pop {r3, pc} + nop _0223944C: .word 0x027FFFA8 - thumb_func_end MOD83_0223942C + thumb_func_end MOD83_0223942C - thumb_func_start MOD83_02239450 + thumb_func_start MOD83_02239450 MOD83_02239450: ; 0x02239450 - push {r3, lr} - cmp r0, #1 - bne _02239478 - ldr r1, _02239484 ; =0x04000208 - ldrh r0, [r1] - mov r0, #0 - strh r0, [r1] - lsr r0, r1, #0xd - ldr r1, _02239488 ; =MOD83_0223942C - bl OS_SetIrqFunction - mov r0, #2 - lsl r0, r0, #0xc - bl OS_EnableIrqMask - ldr r1, _02239484 ; =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - pop {r3, pc} + push {r3, lr} + cmp r0, #1 + bne _02239478 + ldr r1, _02239484 ; =0x04000208 + ldrh r0, [r1] + mov r0, #0 + strh r0, [r1] + lsr r0, r1, #0xd + ldr r1, _02239488 ; =MOD83_0223942C + bl OS_SetIrqFunction + mov r0, #2 + lsl r0, r0, #0xc + bl OS_EnableIrqMask + ldr r1, _02239484 ; =0x04000208 + ldrh r0, [r1] + mov r0, #1 + strh r0, [r1] + pop {r3, pc} _02239478: - mov r0, #2 - lsl r0, r0, #0xc - bl OS_DisableIrqMask - pop {r3, pc} - nop + mov r0, #2 + lsl r0, r0, #0xc + bl OS_DisableIrqMask + pop {r3, pc} + nop _02239484: .word 0x04000208 _02239488: .word MOD83_0223942C - thumb_func_end MOD83_02239450 + thumb_func_end MOD83_02239450 - thumb_func_start MOD83_0223948C + thumb_func_start MOD83_0223948C MOD83_0223948C: ; 0x0223948C - bx lr - .align 2, 0 - thumb_func_end MOD83_0223948C + bx lr + .align 2, 0 + thumb_func_end MOD83_0223948C - thumb_func_start MOD83_02239490 + thumb_func_start MOD83_02239490 MOD83_02239490: ; 0x02239490 - push {r3, lr} - ldr r1, _022394B4 ; =0x04000208 - ldrh r0, [r1] - mov r0, #0 - strh r0, [r1] - lsr r0, r1, #0xd - ldr r1, _022394B8 ; =MOD83_0223948C - bl OS_SetIrqFunction - mov r0, #2 - lsl r0, r0, #0xc - bl OS_EnableIrqMask - ldr r1, _022394B4 ; =0x04000208 - ldrh r0, [r1] - mov r0, #1 - strh r0, [r1] - pop {r3, pc} - .align 2, 0 + push {r3, lr} + ldr r1, _022394B4 ; =0x04000208 + ldrh r0, [r1] + mov r0, #0 + strh r0, [r1] + lsr r0, r1, #0xd + ldr r1, _022394B8 ; =MOD83_0223948C + bl OS_SetIrqFunction + mov r0, #2 + lsl r0, r0, #0xc + bl OS_EnableIrqMask + ldr r1, _022394B4 ; =0x04000208 + ldrh r0, [r1] + mov r0, #1 + strh r0, [r1] + pop {r3, pc} + .align 2, 0 _022394B4: .word 0x04000208 _022394B8: .word MOD83_0223948C - thumb_func_end MOD83_02239490 + thumb_func_end MOD83_02239490 - thumb_func_start MOD83_022394BC + thumb_func_start MOD83_022394BC MOD83_022394BC: ; 0x022394BC - ldr r1, _022394C8 ; =MOD83_0223BC30 - str r0, [r1, #0x14] - mov r0, #0 - str r0, [r1, #0x10] - bx lr - nop + ldr r1, _022394C8 ; =MOD83_0223BC30 + str r0, [r1, #0x14] + mov r0, #0 + str r0, [r1, #0x10] + bx lr + nop _022394C8: .word MOD83_0223BC30 - thumb_func_end MOD83_022394BC + thumb_func_end MOD83_022394BC - thumb_func_start MOD83_022394CC + thumb_func_start MOD83_022394CC MOD83_022394CC: ; 0x022394CC - push {r3, r4, r5, lr} - ldr r0, _0223953C ; =MOD83_0223BC30 - ldr r4, _02239540 ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - cmp r0, #4 - bhi _02239538 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + push {r3, r4, r5, lr} + ldr r0, _0223953C ; =MOD83_0223BC30 + ldr r4, _02239540 ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + cmp r0, #4 + bhi _02239538 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _022394E4: ; jump table - .short _022394EE - _022394E4 - 2 ; case 0 - .short _02239504 - _022394E4 - 2 ; case 1 - .short _02239538 - _022394E4 - 2 ; case 2 - .short _02239538 - _022394E4 - 2 ; case 3 - .short _02239538 - _022394E4 - 2 ; case 4 + .short _022394EE - _022394E4 - 2 ; case 0 + .short _02239504 - _022394E4 - 2 ; case 1 + .short _02239538 - _022394E4 - 2 ; case 2 + .short _02239538 - _022394E4 - 2 ; case 3 + .short _02239538 - _022394E4 - 2 ; case 4 _022394EE: - mov r0, #4 - bl SetSoftResetDisableMask - ldr r0, [r4, #0x14] - mov r1, #2 - bl FUN_02022840 - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02239538 + mov r0, #4 + bl SetSoftResetDisableMask + ldr r0, [r4, #0x14] + mov r1, #2 + bl FUN_02022840 + ldr r0, [r4, #0x10] + add r0, r0, #1 + str r0, [r4, #0x10] + b _02239538 _02239504: - ldr r0, [r4, #0x14] - bl FUN_02022854 - add r5, r0, #0 - cmp r5, #3 - bne _02239516 - mov r0, #3 - str r0, [r4, #0x10] - b _02239528 + ldr r0, [r4, #0x14] + bl FUN_02022854 + add r5, r0, #0 + cmp r5, #3 + bne _02239516 + mov r0, #3 + str r0, [r4, #0x10] + b _02239528 _02239516: - cmp r5, #2 - bne _02239520 - mov r0, #2 - str r0, [r4, #0x10] - b _02239528 + cmp r5, #2 + bne _02239520 + mov r0, #2 + str r0, [r4, #0x10] + b _02239528 _02239520: - cmp r5, #1 - bne _02239528 - mov r0, #4 - str r0, [r4, #0x10] + cmp r5, #1 + bne _02239528 + mov r0, #4 + str r0, [r4, #0x10] _02239528: - sub r0, r5, #2 - cmp r0, #1 - bhi _02239534 - mov r0, #4 - bl ClearSoftResetDisableMask + sub r0, r5, #2 + cmp r0, #1 + bhi _02239534 + mov r0, #4 + bl ClearSoftResetDisableMask _02239534: - add r0, r5, #0 - pop {r3, r4, r5, pc} + add r0, r5, #0 + pop {r3, r4, r5, pc} _02239538: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _0223953C: .word MOD83_0223BC30 _02239540: .word MOD83_0223BC30 - thumb_func_end MOD83_022394CC + thumb_func_end MOD83_022394CC - thumb_func_start MOD83_02239544 + thumb_func_start MOD83_02239544 MOD83_02239544: ; 0x02239544 - ldr r0, _02239554 ; =MOD83_0223BC30 - ldr r1, _02239558 ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - cmp r0, #4 - bne _02239552 - mov r0, #1 - str r0, [r1, #0x10] + ldr r0, _02239554 ; =MOD83_0223BC30 + ldr r1, _02239558 ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + cmp r0, #4 + bne _02239552 + mov r0, #1 + str r0, [r1, #0x10] _02239552: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _02239554: .word MOD83_0223BC30 _02239558: .word MOD83_0223BC30 - thumb_func_end MOD83_02239544 + thumb_func_end MOD83_02239544 - thumb_func_start MOD83_0223955C + thumb_func_start MOD83_0223955C MOD83_0223955C: ; 0x0223955C - push {r3, lr} - ldr r0, _02239570 ; =MOD83_0223BC30 - ldr r0, [r0, #0x14] - bl FUN_0202287C - mov r0, #4 - bl ClearSoftResetDisableMask - pop {r3, pc} - nop + push {r3, lr} + ldr r0, _02239570 ; =MOD83_0223BC30 + ldr r0, [r0, #0x14] + bl FUN_0202287C + mov r0, #4 + bl ClearSoftResetDisableMask + pop {r3, pc} + nop _02239570: .word MOD83_0223BC30 - thumb_func_end MOD83_0223955C + thumb_func_end MOD83_0223955C - thumb_func_start MOD83_02239574 + thumb_func_start MOD83_02239574 MOD83_02239574: ; 0x02239574 - ldr r0, _0223957C ; =MOD83_0223BC30 - ldr r0, [r0, #0x10] - bx lr - nop + ldr r0, _0223957C ; =MOD83_0223BC30 + ldr r0, [r0, #0x10] + bx lr + nop _0223957C: .word MOD83_0223BC30 - thumb_func_end MOD83_02239574 + thumb_func_end MOD83_02239574 - thumb_func_start MOD83_02239580 + thumb_func_start MOD83_02239580 MOD83_02239580: ; 0x02239580 - push {r4, lr} - ldr r1, _022395BC ; =MOD83_0223CAD4 - add r4, r0, #0 - ldr r2, [r1, #4] - cmp r2, #0 - beq _0223959C - ldr r3, [r1] - ldr r1, _022395C0 ; =0x00001150 - ldr r0, _022395C4 ; =MOD83_0223B80C - ldr r1, [r3, r1] - lsl r3, r1, #2 - ldr r1, _022395C8 ; =MOD83_0223B7E4 - ldr r1, [r1, r3] - blx r2 + push {r4, lr} + ldr r1, _022395BC ; =MOD83_0223CAD4 + add r4, r0, #0 + ldr r2, [r1, #4] + cmp r2, #0 + beq _0223959C + ldr r3, [r1] + ldr r1, _022395C0 ; =0x00001150 + ldr r0, _022395C4 ; =MOD83_0223B80C + ldr r1, [r3, r1] + lsl r3, r1, #2 + ldr r1, _022395C8 ; =MOD83_0223B7E4 + ldr r1, [r1, r3] + blx r2 _0223959C: - ldr r3, _022395BC ; =MOD83_0223CAD4 - ldr r1, _022395C0 ; =0x00001150 - ldr r0, [r3] - str r4, [r0, r1] - ldr r2, [r3, #4] - cmp r2, #0 - beq _022395B8 - ldr r3, [r3] - ldr r0, _022395CC ; =MOD83_0223B814 - ldr r1, [r3, r1] - lsl r3, r1, #2 - ldr r1, _022395C8 ; =MOD83_0223B7E4 - ldr r1, [r1, r3] - blx r2 + ldr r3, _022395BC ; =MOD83_0223CAD4 + ldr r1, _022395C0 ; =0x00001150 + ldr r0, [r3] + str r4, [r0, r1] + ldr r2, [r3, #4] + cmp r2, #0 + beq _022395B8 + ldr r3, [r3] + ldr r0, _022395CC ; =MOD83_0223B814 + ldr r1, [r3, r1] + lsl r3, r1, #2 + ldr r1, _022395C8 ; =MOD83_0223B7E4 + ldr r1, [r1, r3] + blx r2 _022395B8: - pop {r4, pc} - nop + pop {r4, pc} + nop _022395BC: .word MOD83_0223CAD4 _022395C0: .word 0x00001150 _022395C4: .word MOD83_0223B80C _022395C8: .word MOD83_0223B7E4 _022395CC: .word MOD83_0223B814 - thumb_func_end MOD83_02239580 + thumb_func_end MOD83_02239580 - thumb_func_start MOD83_022395D0 + thumb_func_start MOD83_022395D0 MOD83_022395D0: ; 0x022395D0 - ldr r1, _022395E4 ; =MOD83_0223CAD4 - ldr r3, [r1] - ldr r1, _022395E8 ; =0x00001150 - ldr r2, [r3, r1] - sub r2, #9 - cmp r2, #1 - bls _022395E2 - add r1, r1, #4 - str r0, [r3, r1] + ldr r1, _022395E4 ; =MOD83_0223CAD4 + ldr r3, [r1] + ldr r1, _022395E8 ; =0x00001150 + ldr r2, [r3, r1] + sub r2, #9 + cmp r2, #1 + bls _022395E2 + add r1, r1, #4 + str r0, [r3, r1] _022395E2: - bx lr - .align 2, 0 + bx lr + .align 2, 0 _022395E4: .word MOD83_0223CAD4 _022395E8: .word 0x00001150 - thumb_func_end MOD83_022395D0 + thumb_func_end MOD83_022395D0 - thumb_func_start MOD83_022395EC + thumb_func_start MOD83_022395EC MOD83_022395EC: ; 0x022395EC - push {r4, lr} - ldr r0, _02239658 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _0223965C ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #4 - bne _022395FE - bl OS_Terminate + push {r4, lr} + ldr r0, _02239658 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _0223965C ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #4 + bne _022395FE + bl OS_Terminate _022395FE: - mov r0, #2 - bl MOD83_02239580 - ldr r3, _02239658 ; =MOD83_0223CAD4 - ldr r0, _02239660 ; =0x0000FFFF - ldr r2, [r3] - ldr r1, _02239664 ; =0x00000FCC - strh r0, [r2, r1] - sub r2, r1, #2 - ldr r4, [r3] - sub r1, r1, #4 - strh r0, [r4, r2] - ldr r2, [r3] - strh r0, [r2, r1] - bl MOD83_02239670 - cmp r0, #0 - bne _0223963C - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239658 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239668 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239638 - mov r0, #4 - blx r1 + mov r0, #2 + bl MOD83_02239580 + ldr r3, _02239658 ; =MOD83_0223CAD4 + ldr r0, _02239660 ; =0x0000FFFF + ldr r2, [r3] + ldr r1, _02239664 ; =0x00000FCC + strh r0, [r2, r1] + sub r2, r1, #2 + ldr r4, [r3] + sub r1, r1, #4 + strh r0, [r4, r2] + ldr r2, [r3] + strh r0, [r2, r1] + bl MOD83_02239670 + cmp r0, #0 + bne _0223963C + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239658 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239668 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239638 + mov r0, #4 + blx r1 _02239638: - mov r0, #0 - pop {r4, pc} + mov r0, #0 + pop {r4, pc} _0223963C: - ldr r1, _02239658 ; =MOD83_0223CAD4 - ldr r0, _0223966C ; =0x00001158 - ldr r2, [r1] - mov r3, #2 - strh r3, [r2, r0] - ldr r1, [r1] - add r0, #0x24 - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239654 - mov r0, #0 - blx r1 + ldr r1, _02239658 ; =MOD83_0223CAD4 + ldr r0, _0223966C ; =0x00001158 + ldr r2, [r1] + mov r3, #2 + strh r3, [r2, r0] + ldr r1, [r1] + add r0, #0x24 + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239654 + mov r0, #0 + blx r1 _02239654: - mov r0, #1 - pop {r4, pc} - .align 2, 0 + mov r0, #1 + pop {r4, pc} + .align 2, 0 _02239658: .word MOD83_0223CAD4 _0223965C: .word 0x00001150 _02239660: .word 0x0000FFFF _02239664: .word 0x00000FCC _02239668: .word 0x0000117C _0223966C: .word 0x00001158 - thumb_func_end MOD83_022395EC + thumb_func_end MOD83_022395EC - thumb_func_start MOD83_02239670 + thumb_func_start MOD83_02239670 MOD83_02239670: ; 0x02239670 - push {r3, r4, r5, r6, r7, lr} - ldr r0, _02239748 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _0223974C ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #2 - beq _02239684 - bl OS_Terminate - mov r0, #0 + push {r3, r4, r5, r6, r7, lr} + ldr r0, _02239748 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _0223974C ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #2 + beq _02239684 + bl OS_Terminate + mov r0, #0 _02239684: - bl WM_GetAllowedChannel - add r4, r0, #0 - mov r0, #2 - lsl r0, r0, #0xe - cmp r4, r0 - bne _0223969C - mov r0, #3 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + bl WM_GetAllowedChannel + add r4, r0, #0 + mov r0, #2 + lsl r0, r0, #0xe + cmp r4, r0 + bne _0223969C + mov r0, #3 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _0223969C: - cmp r4, #0 - bne _022396AA - mov r0, #0x16 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + cmp r4, #0 + bne _022396AA + mov r0, #0x16 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _022396AA: - ldr r0, _02239748 ; =MOD83_0223CAD4 - ldr r2, [r0] - ldr r0, _02239750 ; =0x00001176 - ldrh r1, [r2, r0] - cmp r1, #0x10 - blo _022396EC - sub r1, #0x10 - mov r5, #0 - mov r7, #0xd - mov r6, #1 - b _022396D2 + ldr r0, _02239748 ; =MOD83_0223CAD4 + ldr r2, [r0] + ldr r0, _02239750 ; =0x00001176 + ldrh r1, [r2, r0] + cmp r1, #0x10 + blo _022396EC + sub r1, #0x10 + mov r5, #0 + mov r7, #0xd + mov r6, #1 + b _022396D2 _022396C0: - add r0, r1, #1 - add r1, r7, #0 - bl _s32_div_f - add r0, r6, #0 - lsl r0, r1 - tst r0, r4 - bne _022396D6 - add r5, r5, #1 + add r0, r1, #1 + add r1, r7, #0 + bl _s32_div_f + add r0, r6, #0 + lsl r0, r1 + tst r0, r4 + bne _022396D6 + add r5, r5, #1 _022396D2: - cmp r5, #0xd - blt _022396C0 + cmp r5, #0xd + blt _022396C0 _022396D6: - ldr r2, _02239748 ; =MOD83_0223CAD4 - add r4, r1, #0 - ldr r3, [r2] - ldr r0, _02239750 ; =0x00001176 - add r4, #0x10 - strh r4, [r3, r0] - add r3, r1, #1 - ldr r1, [r2] - ldr r0, _02239754 ; =0x00000FC4 - strh r3, [r1, r0] - b _022396F0 + ldr r2, _02239748 ; =MOD83_0223CAD4 + add r4, r1, #0 + ldr r3, [r2] + ldr r0, _02239750 ; =0x00001176 + add r4, #0x10 + strh r4, [r3, r0] + add r3, r1, #1 + ldr r1, [r2] + ldr r0, _02239754 ; =0x00000FC4 + strh r3, [r1, r0] + b _022396F0 _022396EC: - ldr r0, _02239754 ; =0x00000FC4 - strh r1, [r2, r0] + ldr r0, _02239754 ; =0x00000FC4 + strh r1, [r2, r0] _022396F0: - ldr r2, _02239748 ; =MOD83_0223CAD4 - ldr r0, _02239758 ; =0x00000FC6 - ldr r1, [r2] - mov r3, #0xdc - strh r3, [r1, r0] - add r1, r0, #0 - ldr r3, [r2] - sub r1, #0xc6 - add r1, r3, r1 - sub r0, r0, #6 - str r1, [r3, r0] - ldr r1, [r2] - ldr r0, _0223975C ; =0x00001158 - ldrh r0, [r1, r0] - cmp r0, #3 - bne _02239726 - mov r5, #0 - ldr r0, _02239760 ; =0x00001170 - ldr r1, _02239764 ; =0x00000FC8 - b _02239722 + ldr r2, _02239748 ; =MOD83_0223CAD4 + ldr r0, _02239758 ; =0x00000FC6 + ldr r1, [r2] + mov r3, #0xdc + strh r3, [r1, r0] + add r1, r0, #0 + ldr r3, [r2] + sub r1, #0xc6 + add r1, r3, r1 + sub r0, r0, #6 + str r1, [r3, r0] + ldr r1, [r2] + ldr r0, _0223975C ; =0x00001158 + ldrh r0, [r1, r0] + cmp r0, #3 + bne _02239726 + mov r5, #0 + ldr r0, _02239760 ; =0x00001170 + ldr r1, _02239764 ; =0x00000FC8 + b _02239722 _02239718: - ldr r3, [r2] - add r4, r3, r5 - ldrb r3, [r4, r0] - add r5, r5, #1 - strb r3, [r4, r1] + ldr r3, [r2] + add r4, r3, r5 + ldrb r3, [r4, r0] + add r5, r5, #1 + strb r3, [r4, r1] _02239722: - cmp r5, #6 - blt _02239718 + cmp r5, #6 + blt _02239718 _02239726: - ldr r1, _02239748 ; =MOD83_0223CAD4 - ldr r0, _02239768 ; =MOD83_0223976C - ldr r2, [r1] - mov r1, #0x3f - lsl r1, r1, #6 - add r1, r2, r1 - bl WM_StartScan - cmp r0, #2 - beq _02239742 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} + ldr r1, _02239748 ; =MOD83_0223CAD4 + ldr r0, _02239768 ; =MOD83_0223976C + ldr r2, [r1] + mov r1, #0x3f + lsl r1, r1, #6 + add r1, r2, r1 + bl WM_StartScan + cmp r0, #2 + beq _02239742 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} _02239742: - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + nop _02239748: .word MOD83_0223CAD4 _0223974C: .word 0x00001150 _02239750: .word 0x00001176 @@ -24908,147 +24908,147 @@ _0223975C: .word 0x00001158 _02239760: .word 0x00001170 _02239764: .word 0x00000FC8 _02239768: .word MOD83_0223976C - thumb_func_end MOD83_02239670 + thumb_func_end MOD83_02239670 - thumb_func_start MOD83_0223976C + thumb_func_start MOD83_0223976C MOD83_0223976C: ; 0x0223976C - push {r3, r4, r5, lr} - add r4, r0, #0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _02239792 - bl MOD83_022395D0 - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 - pop {r3, r4, r5, pc} + push {r3, r4, r5, lr} + add r4, r0, #0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _02239792 + bl MOD83_022395D0 + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 + pop {r3, r4, r5, pc} _02239792: - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239888 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #2 - beq _022397BE - bl MOD83_022398A4 - cmp r0, #0 - bne _0223987E - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 - pop {r3, r4, r5, pc} + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239888 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #2 + beq _022397BE + bl MOD83_022398A4 + cmp r0, #0 + bne _0223987E + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 + pop {r3, r4, r5, pc} _022397BE: - ldrh r0, [r4, #8] - cmp r0, #3 - beq _0223987E - cmp r0, #4 - beq _02239860 - cmp r0, #5 - bne _02239860 - mov r0, #0xf - lsl r0, r0, #8 - add r0, r1, r0 - mov r1, #0xc0 - bl DC_InvalidateRange - ldrh r0, [r4, #0x36] - cmp r0, #8 - blo _022397E6 - ldr r1, [r4, #0x3c] - ldr r0, _0223988C ; =0x00400318 - cmp r1, r0 - beq _022397F8 + ldrh r0, [r4, #8] + cmp r0, #3 + beq _0223987E + cmp r0, #4 + beq _02239860 + cmp r0, #5 + bne _02239860 + mov r0, #0xf + lsl r0, r0, #8 + add r0, r1, r0 + mov r1, #0xc0 + bl DC_InvalidateRange + ldrh r0, [r4, #0x36] + cmp r0, #8 + blo _022397E6 + ldr r1, [r4, #0x3c] + ldr r0, _0223988C ; =0x00400318 + cmp r1, r0 + beq _022397F8 _022397E6: - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r3, [r0, #4] - cmp r3, #0 - beq _02239860 - ldr r0, _02239890 ; =MOD83_0223B818 - ldr r1, [r4, #0x3c] - ldr r2, _0223988C ; =0x00400318 - blx r3 - b _02239860 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r3, [r0, #4] + cmp r3, #0 + beq _02239860 + ldr r0, _02239890 ; =MOD83_0223B818 + ldr r1, [r4, #0x3c] + ldr r2, _0223988C ; =0x00400318 + blx r3 + b _02239860 _022397F8: - ldr r1, _02239880 ; =MOD83_0223CAD4 - ldrh r3, [r4, #0x12] - ldr r2, [r1] - ldr r0, _02239894 ; =0x0000116C - str r3, [r2, r0] - ldr r1, [r1] - sub r0, #0x14 - ldrh r0, [r1, r0] - cmp r0, #2 - bne _02239844 - add r0, r4, #0 - add r0, #0x48 - bl MOD83_02239B00 - ldr r2, _02239880 ; =MOD83_0223CAD4 - ldr r1, _02239898 ; =0x00001170 - mov r0, #0 + ldr r1, _02239880 ; =MOD83_0223CAD4 + ldrh r3, [r4, #0x12] + ldr r2, [r1] + ldr r0, _02239894 ; =0x0000116C + str r3, [r2, r0] + ldr r1, [r1] + sub r0, #0x14 + ldrh r0, [r1, r0] + cmp r0, #2 + bne _02239844 + add r0, r4, #0 + add r0, #0x48 + bl MOD83_02239B00 + ldr r2, _02239880 ; =MOD83_0223CAD4 + ldr r1, _02239898 ; =0x00001170 + mov r0, #0 _0223981A: - add r3, r4, r0 - ldrb r5, [r3, #0xa] - ldr r3, [r2] - add r3, r3, r0 - add r0, r0, #1 - strb r5, [r3, r1] - cmp r0, #6 - blt _0223981A - ldr r1, _02239880 ; =MOD83_0223CAD4 - ldr r0, _0223989C ; =0x00001176 - ldr r3, [r1] - ldrh r2, [r3, r0] - sub r2, #0xf - strh r2, [r3, r0] - ldr r1, [r1] - add r0, r0, #6 - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239844 - mov r0, #1 - blx r1 + add r3, r4, r0 + ldrb r5, [r3, #0xa] + ldr r3, [r2] + add r3, r3, r0 + add r0, r0, #1 + strb r5, [r3, r1] + cmp r0, #6 + blt _0223981A + ldr r1, _02239880 ; =MOD83_0223CAD4 + ldr r0, _0223989C ; =0x00001176 + ldr r3, [r1] + ldrh r2, [r3, r0] + sub r2, #0xf + strh r2, [r3, r0] + ldr r1, [r1] + add r0, r0, #6 + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239844 + mov r0, #1 + blx r1 _02239844: - add r4, #0x48 - add r0, r4, #0 - bl MOD83_02239B80 - cmp r0, #0 - beq _02239860 - ldr r0, _02239880 ; =MOD83_0223CAD4 - mov r2, #4 - ldr r1, [r0] - ldr r0, _022398A0 ; =0x00001158 - strh r2, [r1, r0] - bl MOD83_02239A14 - pop {r3, r4, r5, pc} + add r4, #0x48 + add r0, r4, #0 + bl MOD83_02239B80 + cmp r0, #0 + beq _02239860 + ldr r0, _02239880 ; =MOD83_0223CAD4 + mov r2, #4 + ldr r1, [r0] + ldr r0, _022398A0 ; =0x00001158 + strh r2, [r1, r0] + bl MOD83_02239A14 + pop {r3, r4, r5, pc} _02239860: - bl MOD83_02239670 - cmp r0, #0 - bne _0223987E - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239880 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239884 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223987E - mov r0, #4 - blx r1 + bl MOD83_02239670 + cmp r0, #0 + bne _0223987E + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239880 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239884 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223987E + mov r0, #4 + blx r1 _0223987E: - pop {r3, r4, r5, pc} - .align 2, 0 + pop {r3, r4, r5, pc} + .align 2, 0 _02239880: .word MOD83_0223CAD4 _02239884: .word 0x0000117C _02239888: .word 0x00001150 @@ -25058,541 +25058,541 @@ _02239894: .word 0x0000116C _02239898: .word 0x00001170 _0223989C: .word 0x00001176 _022398A0: .word 0x00001158 - thumb_func_end MOD83_0223976C + thumb_func_end MOD83_0223976C - thumb_func_start MOD83_022398A4 + thumb_func_start MOD83_022398A4 MOD83_022398A4: ; 0x022398A4 - push {r3, lr} - ldr r0, _022398BC ; =MOD83_022398C0 - bl WM_EndScan - cmp r0, #2 - beq _022398B8 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + ldr r0, _022398BC ; =MOD83_022398C0 + bl WM_EndScan + cmp r0, #2 + beq _022398B8 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, pc} _022398B8: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _022398BC: .word MOD83_022398C0 - thumb_func_end MOD83_022398A4 + thumb_func_end MOD83_022398A4 - thumb_func_start MOD83_022398C0 + thumb_func_start MOD83_022398C0 MOD83_022398C0: ; 0x022398C0 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _022398CE - bl MOD83_022395D0 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _022398CE + bl MOD83_022395D0 + pop {r3, pc} _022398CE: - mov r0, #1 - bl MOD83_02239580 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD83_022398C0 + mov r0, #1 + bl MOD83_02239580 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD83_022398C0 - thumb_func_start MOD83_022398D8 + thumb_func_start MOD83_022398D8 MOD83_022398D8: ; 0x022398D8 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _022398E8 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _022398E8 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _022398E8: - mov r0, #0 - bl MOD83_02239580 - ldr r0, _02239900 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239904 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _022398FE - mov r0, #3 - blx r1 + mov r0, #0 + bl MOD83_02239580 + ldr r0, _02239900 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239904 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _022398FE + mov r0, #3 + blx r1 _022398FE: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _02239900: .word MOD83_0223CAD4 _02239904: .word 0x0000117C - thumb_func_end MOD83_022398D8 + thumb_func_end MOD83_022398D8 - thumb_func_start MOD83_02239908 + thumb_func_start MOD83_02239908 MOD83_02239908: ; 0x02239908 - push {r3, lr} - ldr r0, _02239924 ; =MOD83_0223CAD4 - mov r2, #0 - ldr r1, [r0] - ldr r0, _02239928 ; =0x00001154 - str r2, [r1, r0] - bl MOD83_02239954 - cmp r0, #0 - beq _02239920 - mov r0, #1 - pop {r3, pc} + push {r3, lr} + ldr r0, _02239924 ; =MOD83_0223CAD4 + mov r2, #0 + ldr r1, [r0] + ldr r0, _02239928 ; =0x00001154 + str r2, [r1, r0] + bl MOD83_02239954 + cmp r0, #0 + beq _02239920 + mov r0, #1 + pop {r3, pc} _02239920: - mov r0, #0 - pop {r3, pc} - .align 2, 0 + mov r0, #0 + pop {r3, pc} + .align 2, 0 _02239924: .word MOD83_0223CAD4 _02239928: .word 0x00001154 - thumb_func_end MOD83_02239908 + thumb_func_end MOD83_02239908 - thumb_func_start MOD83_0223992C + thumb_func_start MOD83_0223992C MOD83_0223992C: ; 0x0223992C - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #8 - bne _0223994A - mov r0, #9 - bl MOD83_02239580 - ldr r0, _0223994C ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239950 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _0223994A - mov r0, #4 - blx r1 + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #8 + bne _0223994A + mov r0, #9 + bl MOD83_02239580 + ldr r0, _0223994C ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239950 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _0223994A + mov r0, #4 + blx r1 _0223994A: - pop {r3, pc} - .align 2, 0 + pop {r3, pc} + .align 2, 0 _0223994C: .word MOD83_0223CAD4 _02239950: .word 0x0000117C - thumb_func_end MOD83_0223992C + thumb_func_end MOD83_0223992C - thumb_func_start MOD83_02239954 + thumb_func_start MOD83_02239954 MOD83_02239954: ; 0x02239954 - push {r3, lr} - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239980 ; =MOD83_0223CAD4 - ldr r1, _02239984 ; =MOD83_02239988 - ldr r0, [r0] - mov r2, #2 - bl WM_Initialize - cmp r0, #2 - beq _0223997A - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239980 ; =MOD83_0223CAD4 + ldr r1, _02239984 ; =MOD83_02239988 + ldr r0, [r0] + mov r2, #2 + bl WM_Initialize + cmp r0, #2 + beq _0223997A + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + mov r0, #0 + pop {r3, pc} _0223997A: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02239980: .word MOD83_0223CAD4 _02239984: .word MOD83_02239988 - thumb_func_end MOD83_02239954 + thumb_func_end MOD83_02239954 - thumb_func_start MOD83_02239988 + thumb_func_start MOD83_02239988 MOD83_02239988: ; 0x02239988 - push {r3, lr} - ldrh r0, [r0, #2] - cmp r0, #0 - beq _0223999C - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + push {r3, lr} + ldrh r0, [r0, #2] + cmp r0, #0 + beq _0223999C + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _0223999C: - ldr r0, _022399C0 ; =MOD83_0223992C - bl WM_SetIndCallback - cmp r0, #0 - beq _022399B2 - bl MOD83_022395D0 - mov r0, #0xa - bl MOD83_02239580 - pop {r3, pc} + ldr r0, _022399C0 ; =MOD83_0223992C + bl WM_SetIndCallback + cmp r0, #0 + beq _022399B2 + bl MOD83_022395D0 + mov r0, #0xa + bl MOD83_02239580 + pop {r3, pc} _022399B2: - mov r0, #1 - bl MOD83_02239580 - bl MOD83_022395EC - pop {r3, pc} - nop + mov r0, #1 + bl MOD83_02239580 + bl MOD83_022395EC + pop {r3, pc} + nop _022399C0: .word MOD83_0223992C - thumb_func_end MOD83_02239988 + thumb_func_end MOD83_02239988 - thumb_func_start MOD83_022399C4 + thumb_func_start MOD83_022399C4 MOD83_022399C4: ; 0x022399C4 - push {r3, lr} - ldr r0, _02239A04 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A08 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #1 - beq _022399D6 - bl OS_Terminate + push {r3, lr} + ldr r0, _02239A04 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A08 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #1 + beq _022399D6 + bl OS_Terminate _022399D6: - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239A0C ; =MOD83_022398D8 - bl WM_End - cmp r0, #2 - beq _02239A00 - mov r0, #9 - bl MOD83_02239580 - ldr r0, _02239A04 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A10 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _022399FC - mov r0, #4 - blx r1 + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239A0C ; =MOD83_022398D8 + bl WM_End + cmp r0, #2 + beq _02239A00 + mov r0, #9 + bl MOD83_02239580 + ldr r0, _02239A04 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A10 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _022399FC + mov r0, #4 + blx r1 _022399FC: - mov r0, #0 - pop {r3, pc} + mov r0, #0 + pop {r3, pc} _02239A00: - mov r0, #1 - pop {r3, pc} - .align 2, 0 + mov r0, #1 + pop {r3, pc} + .align 2, 0 _02239A04: .word MOD83_0223CAD4 _02239A08: .word 0x00001150 _02239A0C: .word MOD83_022398D8 _02239A10: .word 0x0000117C - thumb_func_end MOD83_022399C4 + thumb_func_end MOD83_022399C4 - thumb_func_start MOD83_02239A14 + thumb_func_start MOD83_02239A14 MOD83_02239A14: ; 0x02239A14 - push {r3, lr} - ldr r0, _02239A30 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A34 ; =0x00001150 - ldr r0, [r1, r0] - cmp r0, #1 - bne _02239A28 - bl MOD83_022399C4 - pop {r3, pc} + push {r3, lr} + ldr r0, _02239A30 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A34 ; =0x00001150 + ldr r0, [r1, r0] + cmp r0, #1 + bne _02239A28 + bl MOD83_022399C4 + pop {r3, pc} _02239A28: - bl MOD83_02239A38 - pop {r3, pc} - nop + bl MOD83_02239A38 + pop {r3, pc} + nop _02239A30: .word MOD83_0223CAD4 _02239A34: .word 0x00001150 - thumb_func_end MOD83_02239A14 + thumb_func_end MOD83_02239A14 - thumb_func_start MOD83_02239A38 + thumb_func_start MOD83_02239A38 MOD83_02239A38: ; 0x02239A38 - push {r3, lr} - mov r0, #3 - bl MOD83_02239580 - ldr r0, _02239A58 ; =MOD83_02239A5C - bl WM_Reset - cmp r0, #2 - beq _02239A52 - bl MOD83_022395D0 - mov r0, #0 - pop {r3, pc} + push {r3, lr} + mov r0, #3 + bl MOD83_02239580 + ldr r0, _02239A58 ; =MOD83_02239A5C + bl WM_Reset + cmp r0, #2 + beq _02239A52 + bl MOD83_022395D0 + mov r0, #0 + pop {r3, pc} _02239A52: - mov r0, #1 - pop {r3, pc} - nop + mov r0, #1 + pop {r3, pc} + nop _02239A58: .word MOD83_02239A5C - thumb_func_end MOD83_02239A38 + thumb_func_end MOD83_02239A38 - thumb_func_start MOD83_02239A5C + thumb_func_start MOD83_02239A5C MOD83_02239A5C: ; 0x02239A5C - push {r4, lr} - add r4, r0, #0 - ldrh r0, [r4, #2] - cmp r0, #0 - beq _02239A84 - mov r0, #9 - bl MOD83_02239580 - ldrh r0, [r4, #2] - bl MOD83_022395D0 - ldr r0, _02239A90 ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239A94 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239A8E - mov r0, #4 - blx r1 - pop {r4, pc} + push {r4, lr} + add r4, r0, #0 + ldrh r0, [r4, #2] + cmp r0, #0 + beq _02239A84 + mov r0, #9 + bl MOD83_02239580 + ldrh r0, [r4, #2] + bl MOD83_022395D0 + ldr r0, _02239A90 ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239A94 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239A8E + mov r0, #4 + blx r1 + pop {r4, pc} _02239A84: - mov r0, #1 - bl MOD83_02239580 - bl MOD83_022399C4 + mov r0, #1 + bl MOD83_02239580 + bl MOD83_022399C4 _02239A8E: - pop {r4, pc} - .align 2, 0 + pop {r4, pc} + .align 2, 0 _02239A90: .word MOD83_0223CAD4 _02239A94: .word 0x0000117C - thumb_func_end MOD83_02239A5C + thumb_func_end MOD83_02239A5C - thumb_func_start MOD83_02239A98 + thumb_func_start MOD83_02239A98 MOD83_02239A98: ; 0x02239A98 - push {r3, r4, r5, r6, r7, lr} - add r3, r0, #0 - add r2, #0x1f - mov r0, #0x1f - bic r2, r0 - ldr r5, _02239AF4 ; =MOD83_0223CAD4 - ldr r4, _02239AF8 ; =0x00001150 - str r2, [r5] - mov r0, #0 - str r0, [r2, r4] - add r2, r4, #0 - ldr r6, [r5] - mov r7, #1 - add r2, #8 - strh r7, [r6, r2] - add r2, r4, #0 - ldr r6, [r5] - add r2, #0x28 - str r3, [r6, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0xc - strh r0, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0xe - strh r0, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - add r2, #0x2c - str r1, [r3, r2] - add r2, r4, #0 - ldr r3, [r5] - mov r1, #0x10 - add r2, #0x26 - strh r1, [r3, r2] - ldr r3, [r5] - ldr r2, _02239AFC ; =0x00001048 - sub r1, #0x11 - str r0, [r3, r2] - ldr r0, [r5] - add r4, #0x1c - str r1, [r0, r4] - bl MOD83_02239908 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 + push {r3, r4, r5, r6, r7, lr} + add r3, r0, #0 + add r2, #0x1f + mov r0, #0x1f + bic r2, r0 + ldr r5, _02239AF4 ; =MOD83_0223CAD4 + ldr r4, _02239AF8 ; =0x00001150 + str r2, [r5] + mov r0, #0 + str r0, [r2, r4] + add r2, r4, #0 + ldr r6, [r5] + mov r7, #1 + add r2, #8 + strh r7, [r6, r2] + add r2, r4, #0 + ldr r6, [r5] + add r2, #0x28 + str r3, [r6, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0xc + strh r0, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0xe + strh r0, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + add r2, #0x2c + str r1, [r3, r2] + add r2, r4, #0 + ldr r3, [r5] + mov r1, #0x10 + add r2, #0x26 + strh r1, [r3, r2] + ldr r3, [r5] + ldr r2, _02239AFC ; =0x00001048 + sub r1, #0x11 + str r0, [r3, r2] + ldr r0, [r5] + add r4, #0x1c + str r1, [r0, r4] + bl MOD83_02239908 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 _02239AF4: .word MOD83_0223CAD4 _02239AF8: .word 0x00001150 _02239AFC: .word 0x00001048 - thumb_func_end MOD83_02239A98 + thumb_func_end MOD83_02239A98 - thumb_func_start MOD83_02239B00 + thumb_func_start MOD83_02239B00 MOD83_02239B00: ; 0x02239B00 - push {r4, r5, r6, lr} - ldr r3, _02239B70 ; =MOD83_0223CAD4 - ldr r1, _02239B74 ; =0x00001048 - ldr r2, [r3] - mov r4, #0 - str r4, [r2, r1] - ldr r1, [r3] - ldr r2, _02239B78 ; =0x00001158 - mov r4, #3 - strh r4, [r1, r2] - ldrh r5, [r0] - ldr r4, [r3] - add r1, r2, #2 - strh r5, [r4, r1] - ldr r4, [r0, #4] - add r0, r2, #0 - ldr r1, [r3] - add r0, #8 - str r4, [r1, r0] - ldr r4, [r3] - add r2, #8 - ldr r0, [r4, r2] - mov r1, #0x68 - sub r0, r0, #1 - bl _u32_div_f - ldr r2, _02239B7C ; =0x0000115C - add r0, r0, #1 - strh r0, [r4, r2] - ldr r4, _02239B70 ; =MOD83_0223CAD4 - mov r0, #0 - ldr r3, [r4] - add r1, r2, #2 - strh r0, [r3, r1] - add r1, r2, #0 - ldr r3, [r4] - add r1, #8 - str r0, [r3, r1] - ldr r1, [r4] - ldrh r2, [r1, r2] - cmp r2, #0 - ble _02239B6C - mov r2, #0x46 - lsl r2, r2, #6 - add r3, r2, #0 - add r6, r0, #0 - sub r3, #0x24 + push {r4, r5, r6, lr} + ldr r3, _02239B70 ; =MOD83_0223CAD4 + ldr r1, _02239B74 ; =0x00001048 + ldr r2, [r3] + mov r4, #0 + str r4, [r2, r1] + ldr r1, [r3] + ldr r2, _02239B78 ; =0x00001158 + mov r4, #3 + strh r4, [r1, r2] + ldrh r5, [r0] + ldr r4, [r3] + add r1, r2, #2 + strh r5, [r4, r1] + ldr r4, [r0, #4] + add r0, r2, #0 + ldr r1, [r3] + add r0, #8 + str r4, [r1, r0] + ldr r4, [r3] + add r2, #8 + ldr r0, [r4, r2] + mov r1, #0x68 + sub r0, r0, #1 + bl _u32_div_f + ldr r2, _02239B7C ; =0x0000115C + add r0, r0, #1 + strh r0, [r4, r2] + ldr r4, _02239B70 ; =MOD83_0223CAD4 + mov r0, #0 + ldr r3, [r4] + add r1, r2, #2 + strh r0, [r3, r1] + add r1, r2, #0 + ldr r3, [r4] + add r1, #8 + str r0, [r3, r1] + ldr r1, [r4] + ldrh r2, [r1, r2] + cmp r2, #0 + ble _02239B6C + mov r2, #0x46 + lsl r2, r2, #6 + add r3, r2, #0 + add r6, r0, #0 + sub r3, #0x24 _02239B5E: - add r1, r1, r0 - strb r6, [r1, r2] - ldr r1, [r4] - add r0, r0, #1 - ldrh r5, [r1, r3] - cmp r0, r5 - blt _02239B5E + add r1, r1, r0 + strb r6, [r1, r2] + ldr r1, [r4] + add r0, r0, #1 + ldrh r5, [r1, r3] + cmp r0, r5 + blt _02239B5E _02239B6C: - pop {r4, r5, r6, pc} - nop + pop {r4, r5, r6, pc} + nop _02239B70: .word MOD83_0223CAD4 _02239B74: .word 0x00001048 _02239B78: .word 0x00001158 _02239B7C: .word 0x0000115C - thumb_func_end MOD83_02239B00 + thumb_func_end MOD83_02239B00 - thumb_func_start MOD83_02239B80 + thumb_func_start MOD83_02239B80 MOD83_02239B80: ; 0x02239B80 - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldrh r1, [r4] - ldr r3, [r0] - ldr r0, _02239CA0 ; =0x0000115A - ldrh r2, [r3, r0] - cmp r2, r1 - bne _02239B9C - add r0, r0, #6 - ldr r1, [r3, r0] - ldr r0, [r4, #4] - cmp r1, r0 - beq _02239BC8 + push {r3, r4, r5, lr} + add r4, r0, #0 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldrh r1, [r4] + ldr r3, [r0] + ldr r0, _02239CA0 ; =0x0000115A + ldrh r2, [r3, r0] + cmp r2, r1 + bne _02239B9C + add r0, r0, #6 + ldr r1, [r3, r0] + ldr r0, [r4, #4] + cmp r1, r0 + beq _02239BC8 _02239B9C: - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldr r3, [r0] - ldr r0, _02239CA4 ; =0x00001164 - ldr r2, [r3, r0] - add r1, r2, #1 - str r1, [r3, r0] - cmp r2, #0x10 - blo _02239BC4 - add r0, r4, #0 - bl MOD83_02239B00 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - ldr r1, [r0] - ldr r0, _02239CA8 ; =0x0000117C - ldr r1, [r1, r0] - cmp r1, #0 - beq _02239BC8 - mov r0, #5 - blx r1 - b _02239BC8 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldr r3, [r0] + ldr r0, _02239CA4 ; =0x00001164 + ldr r2, [r3, r0] + add r1, r2, #1 + str r1, [r3, r0] + cmp r2, #0x10 + blo _02239BC4 + add r0, r4, #0 + bl MOD83_02239B00 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + ldr r1, [r0] + ldr r0, _02239CA8 ; =0x0000117C + ldr r1, [r1, r0] + cmp r1, #0 + beq _02239BC8 + mov r0, #5 + blx r1 + b _02239BC8 _02239BC4: - mov r0, #0 - pop {r3, r4, r5, pc} + mov r0, #0 + pop {r3, r4, r5, pc} _02239BC8: - ldrh r3, [r4, #2] - ldr r0, _02239CAC ; =0x0000FFFF - cmp r3, r0 - bne _02239BF0 - ldr r1, _02239C9C ; =MOD83_0223CAD4 - add r4, #8 - ldr r2, [r1] - mov r1, #0xfe - lsl r1, r1, #4 - add r1, r2, r1 - add r0, r4, #0 - mov r2, #0x68 - bl MIi_CpuCopy32 - ldr r0, _02239C9C ; =MOD83_0223CAD4 - mov r2, #1 - ldr r1, [r0] - ldr r0, _02239CB0 ; =0x00001048 - str r2, [r1, r0] - b _02239C98 + ldrh r3, [r4, #2] + ldr r0, _02239CAC ; =0x0000FFFF + cmp r3, r0 + bne _02239BF0 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + add r4, #8 + ldr r2, [r1] + mov r1, #0xfe + lsl r1, r1, #4 + add r1, r2, r1 + add r0, r4, #0 + mov r2, #0x68 + bl MIi_CpuCopy32 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + mov r2, #1 + ldr r1, [r0] + ldr r0, _02239CB0 ; =0x00001048 + str r2, [r1, r0] + b _02239C98 _02239BF0: - ldr r1, _02239C9C ; =MOD83_0223CAD4 - ldr r0, _02239CB4 ; =0x00001168 - ldr r2, [r1] - str r3, [r2, r0] - ldr r3, [r1] - add r1, r0, #0 - sub r1, #0xc - ldrh r2, [r4, #2] - ldrh r1, [r3, r1] - cmp r2, r1 - blo _02239C18 - add r0, #0x14 - ldr r1, [r3, r0] - cmp r1, #0 - beq _02239C12 - mov r0, #4 - blx r1 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + ldr r0, _02239CB4 ; =0x00001168 + ldr r2, [r1] + str r3, [r2, r0] + ldr r3, [r1] + add r1, r0, #0 + sub r1, #0xc + ldrh r2, [r4, #2] + ldrh r1, [r3, r1] + cmp r2, r1 + blo _02239C18 + add r0, #0x14 + ldr r1, [r3, r0] + cmp r1, #0 + beq _02239C12 + mov r0, #4 + blx r1 _02239C12: - mov r0, #9 - bl MOD83_02239580 + mov r0, #9 + bl MOD83_02239580 _02239C18: - ldr r0, _02239C9C ; =MOD83_0223CAD4 - mov r2, #0x46 - ldr r1, [r0] - lsl r2, r2, #6 - ldrh r3, [r4, #2] - add r5, r1, r2 - ldrb r1, [r5, r3] - cmp r1, #0 - bne _02239C98 - mov r1, #1 - strb r1, [r5, r3] - ldr r5, [r0] - add r0, r2, #0 - sub r0, #0x24 - ldrh r0, [r5, r0] - ldrh r1, [r4, #2] - sub r0, r0, #1 - cmp r1, r0 - bne _02239C5C - add r3, r1, #0 - add r1, r2, #0 - sub r1, #8 - sub r2, #0x20 - mov r0, #0x68 - ldr r1, [r5, r1] - mul r3, r0 - ldr r2, [r5, r2] - add r4, #8 - add r0, r4, #0 - add r1, r1, r3 - sub r2, r2, r3 - bl MIi_CpuCopy32 - b _02239C70 + ldr r0, _02239C9C ; =MOD83_0223CAD4 + mov r2, #0x46 + ldr r1, [r0] + lsl r2, r2, #6 + ldrh r3, [r4, #2] + add r5, r1, r2 + ldrb r1, [r5, r3] + cmp r1, #0 + bne _02239C98 + mov r1, #1 + strb r1, [r5, r3] + ldr r5, [r0] + add r0, r2, #0 + sub r0, #0x24 + ldrh r0, [r5, r0] + ldrh r1, [r4, #2] + sub r0, r0, #1 + cmp r1, r0 + bne _02239C5C + add r3, r1, #0 + add r1, r2, #0 + sub r1, #8 + sub r2, #0x20 + mov r0, #0x68 + ldr r1, [r5, r1] + mul r3, r0 + ldr r2, [r5, r2] + add r4, #8 + add r0, r4, #0 + add r1, r1, r3 + sub r2, r2, r3 + bl MIi_CpuCopy32 + b _02239C70 _02239C5C: - add r4, #8 - sub r2, #8 - add r0, r4, #0 - ldr r4, [r5, r2] - mov r2, #0x68 - add r3, r1, #0 - mul r3, r2 - add r1, r4, r3 - bl MIi_CpuCopy32 + add r4, #8 + sub r2, #8 + add r0, r4, #0 + ldr r4, [r5, r2] + mov r2, #0x68 + add r3, r1, #0 + mul r3, r2 + add r1, r4, r3 + bl MIi_CpuCopy32 _02239C70: - ldr r1, _02239C9C ; =MOD83_0223CAD4 - ldr r0, _02239CB8 ; =0x0000115E - ldr r3, [r1] - ldrh r2, [r3, r0] - add r2, r2, #1 - strh r2, [r3, r0] - ldr r3, [r1] - sub r1, r0, #2 - ldrh r2, [r3, r0] - ldrh r1, [r3, r1] - cmp r2, r1 - bne _02239C98 - add r0, #0x1e - ldr r1, [r3, r0] - cmp r1, #0 - beq _02239C94 - mov r0, #2 - blx r1 + ldr r1, _02239C9C ; =MOD83_0223CAD4 + ldr r0, _02239CB8 ; =0x0000115E + ldr r3, [r1] + ldrh r2, [r3, r0] + add r2, r2, #1 + strh r2, [r3, r0] + ldr r3, [r1] + sub r1, r0, #2 + ldrh r2, [r3, r0] + ldrh r1, [r3, r1] + cmp r2, r1 + bne _02239C98 + add r0, #0x1e + ldr r1, [r3, r0] + cmp r1, #0 + beq _02239C94 + mov r0, #2 + blx r1 _02239C94: - mov r0, #1 - pop {r3, r4, r5, pc} + mov r0, #1 + pop {r3, r4, r5, pc} _02239C98: - mov r0, #0 - pop {r3, r4, r5, pc} - .align 2, 0 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 _02239C9C: .word MOD83_0223CAD4 _02239CA0: .word 0x0000115A _02239CA4: .word 0x00001164 @@ -25601,746 +25601,746 @@ _02239CAC: .word 0x0000FFFF _02239CB0: .word 0x00001048 _02239CB4: .word 0x00001168 _02239CB8: .word 0x0000115E - thumb_func_end MOD83_02239B80 + thumb_func_end MOD83_02239B80 - thumb_func_start MOD83_02239CBC + thumb_func_start MOD83_02239CBC MOD83_02239CBC: ; 0x02239CBC - push {r3, r4} - mov r2, #0 - add r3, r2, #0 - lsr r1, r1, #1 - beq _02239CE4 + push {r3, r4} + mov r2, #0 + add r3, r2, #0 + lsr r1, r1, #1 + beq _02239CE4 _02239CC6: - lsl r4, r3, #1 - ldrh r4, [r0, r4] - add r3, r3, #1 - lsl r3, r3, #0x10 - add r2, r2, r4 - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - lsl r4, r2, #1 - asr r2, r2, #0xf - orr r2, r4 - lsl r2, r2, #0x10 - lsr r3, r3, #0x10 - lsr r2, r2, #0x10 - cmp r3, r1 - blo _02239CC6 + lsl r4, r3, #1 + ldrh r4, [r0, r4] + add r3, r3, #1 + lsl r3, r3, #0x10 + add r2, r2, r4 + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + lsl r4, r2, #1 + asr r2, r2, #0xf + orr r2, r4 + lsl r2, r2, #0x10 + lsr r3, r3, #0x10 + lsr r2, r2, #0x10 + cmp r3, r1 + blo _02239CC6 _02239CE4: - add r0, r2, #0 - pop {r3, r4} - bx lr - .align 2, 0 - thumb_func_end MOD83_02239CBC + add r0, r2, #0 + pop {r3, r4} + bx lr + .align 2, 0 + thumb_func_end MOD83_02239CBC - thumb_func_start MOD83_02239CEC + thumb_func_start MOD83_02239CEC MOD83_02239CEC: ; 0x02239CEC - push {r4, lr} - sub sp, #8 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - add r1, sp, #0 - ldr r4, [r0] - ldr r0, _02239D84 ; =0x00001170 - add r3, r4, r0 - ldrh r2, [r3] - sub r0, #0x16 - strh r2, [r1] - ldrh r2, [r3, #2] - strh r2, [r1, #6] - ldrh r2, [r3, #4] - add r3, sp, #0 - strh r2, [r1, #4] - ldrh r0, [r4, r0] - ldr r2, _02239D88 ; =0x00003FA2 - strh r0, [r1, #2] - mov r1, #0 + push {r4, lr} + sub sp, #8 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + add r1, sp, #0 + ldr r4, [r0] + ldr r0, _02239D84 ; =0x00001170 + add r3, r4, r0 + ldrh r2, [r3] + sub r0, #0x16 + strh r2, [r1] + ldrh r2, [r3, #2] + strh r2, [r1, #6] + ldrh r2, [r3, #4] + add r3, sp, #0 + strh r2, [r1, #4] + ldrh r0, [r4, r0] + ldr r2, _02239D88 ; =0x00003FA2 + strh r0, [r1, #2] + mov r1, #0 _02239D12: - ldrh r0, [r3] - add r1, r1, #1 - eor r0, r2 - strh r0, [r3] - ldrh r2, [r3] - add r3, r3, #2 - cmp r1, #4 - blt _02239D12 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - mov r2, #8 - ldr r1, [r0] - ldr r0, _02239D8C ; =0x0000104C - add r0, r1, r0 - add r1, sp, #0 - bl FUN_0209521C - ldr r0, _02239D80 ; =MOD83_0223CAD4 - ldr r2, _02239D90 ; =0x00001178 - ldr r3, [r0] - ldr r0, _02239D8C ; =0x0000104C - ldr r1, [r3, r2] - sub r2, #0x18 - ldr r2, [r3, r2] - add r0, r3, r0 - add r3, r1, #0 - bl FUN_020952AC - ldr r1, _02239D80 ; =MOD83_0223CAD4 - ldr r2, _02239D8C ; =0x0000104C - ldr r1, [r1] - mov r0, #0 - add r1, r1, r2 - lsr r2, r2, #4 - bl MIi_CpuClear32 - ldr r0, _02239D80 ; =MOD83_0223CAD4 - ldr r1, _02239D90 ; =0x00001178 - ldr r2, [r0] - ldr r0, [r2, r1] - sub r1, #0x18 - ldr r1, [r2, r1] - bl MOD83_02239CBC - ldr r1, _02239D80 ; =MOD83_0223CAD4 - ldr r2, [r1] - ldr r1, _02239D94 ; =0x0000115A - ldrh r1, [r2, r1] - cmp r1, r0 - bne _02239D7A - add sp, #8 - mov r0, #1 - pop {r4, pc} + ldrh r0, [r3] + add r1, r1, #1 + eor r0, r2 + strh r0, [r3] + ldrh r2, [r3] + add r3, r3, #2 + cmp r1, #4 + blt _02239D12 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + mov r2, #8 + ldr r1, [r0] + ldr r0, _02239D8C ; =0x0000104C + add r0, r1, r0 + add r1, sp, #0 + bl FUN_0209521C + ldr r0, _02239D80 ; =MOD83_0223CAD4 + ldr r2, _02239D90 ; =0x00001178 + ldr r3, [r0] + ldr r0, _02239D8C ; =0x0000104C + ldr r1, [r3, r2] + sub r2, #0x18 + ldr r2, [r3, r2] + add r0, r3, r0 + add r3, r1, #0 + bl FUN_020952AC + ldr r1, _02239D80 ; =MOD83_0223CAD4 + ldr r2, _02239D8C ; =0x0000104C + ldr r1, [r1] + mov r0, #0 + add r1, r1, r2 + lsr r2, r2, #4 + bl MIi_CpuClear32 + ldr r0, _02239D80 ; =MOD83_0223CAD4 + ldr r1, _02239D90 ; =0x00001178 + ldr r2, [r0] + ldr r0, [r2, r1] + sub r1, #0x18 + ldr r1, [r2, r1] + bl MOD83_02239CBC + ldr r1, _02239D80 ; =MOD83_0223CAD4 + ldr r2, [r1] + ldr r1, _02239D94 ; =0x0000115A + ldrh r1, [r2, r1] + cmp r1, r0 + bne _02239D7A + add sp, #8 + mov r0, #1 + pop {r4, pc} _02239D7A: - mov r0, #0 - add sp, #8 - pop {r4, pc} - .align 2, 0 + mov r0, #0 + add sp, #8 + pop {r4, pc} + .align 2, 0 _02239D80: .word MOD83_0223CAD4 _02239D84: .word 0x00001170 _02239D88: .word 0x00003FA2 _02239D8C: .word 0x0000104C _02239D90: .word 0x00001178 _02239D94: .word 0x0000115A - thumb_func_end MOD83_02239CEC + thumb_func_end MOD83_02239CEC - thumb_func_start MOD83_02239D98 + thumb_func_start MOD83_02239D98 MOD83_02239D98: ; 0x02239D98 - ldr r0, _02239D9C ; =0x000016A0 - bx lr - .align 2, 0 + ldr r0, _02239D9C ; =0x000016A0 + bx lr + .align 2, 0 _02239D9C: .word 0x000016A0 - thumb_func_end MOD83_02239D98 + thumb_func_end MOD83_02239D98 - thumb_func_start MOD83_02239DA0 + thumb_func_start MOD83_02239DA0 MOD83_02239DA0: ; 0x02239DA0 - ldr r0, _02239DB8 ; =MOD83_0223CAD4 - ldr r2, [r0] - ldr r0, _02239DBC ; =0x00001048 - ldr r1, [r2, r0] - cmp r1, #0 - beq _02239DB2 - sub r0, #0x68 - add r0, r2, r0 - bx lr + ldr r0, _02239DB8 ; =MOD83_0223CAD4 + ldr r2, [r0] + ldr r0, _02239DBC ; =0x00001048 + ldr r1, [r2, r0] + cmp r1, #0 + beq _02239DB2 + sub r0, #0x68 + add r0, r2, r0 + bx lr _02239DB2: - mov r0, #0 - bx lr - nop + mov r0, #0 + bx lr + nop _02239DB8: .word MOD83_0223CAD4 _02239DBC: .word 0x00001048 - thumb_func_end MOD83_02239DA0 + thumb_func_end MOD83_02239DA0 - thumb_func_start MOD83_02239DC0 + thumb_func_start MOD83_02239DC0 MOD83_02239DC0: ; 0x02239DC0 - push {r3, lr} - add r1, #0x24 - mov r0, #0x1f - bic r1, r0 - add r1, #0x20 - mov r0, #0x56 - bl AllocFromHeap - add r2, r0, #0 - add r2, #0x20 - mov r1, #0x1f - bic r2, r1 - sub r1, r2, #4 - str r0, [r1] - add r0, r2, #0 - pop {r3, pc} - thumb_func_end MOD83_02239DC0 - - thumb_func_start MOD83_02239DE0 + push {r3, lr} + add r1, #0x24 + mov r0, #0x1f + bic r1, r0 + add r1, #0x20 + mov r0, #0x56 + bl AllocFromHeap + add r2, r0, #0 + add r2, #0x20 + mov r1, #0x1f + bic r2, r1 + sub r1, r2, #4 + str r0, [r1] + add r0, r2, #0 + pop {r3, pc} + thumb_func_end MOD83_02239DC0 + + thumb_func_start MOD83_02239DE0 MOD83_02239DE0: ; 0x02239DE0 - push {r3, lr} - cmp r1, #0 - beq _02239DEE - sub r0, r1, #4 - ldr r0, [r0] - bl FreeToHeap + push {r3, lr} + cmp r1, #0 + beq _02239DEE + sub r0, r1, #4 + ldr r0, [r0] + bl FreeToHeap _02239DEE: - pop {r3, pc} - thumb_func_end MOD83_02239DE0 + pop {r3, pc} + thumb_func_end MOD83_02239DE0 - thumb_func_start MOD83_02239DF0 + thumb_func_start MOD83_02239DF0 MOD83_02239DF0: ; 0x02239DF0 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - add r0, sp, #0 - add r1, sp, #4 - bl MOD04_021DD718 - ldr r0, [sp] - neg r0, r0 - bl MOD04_021D80E0 - ldr r1, _02239E34 ; =0x00002610 - str r0, [r4, r1] - ldr r0, [sp] - neg r2, r0 - add r0, r1, #4 - str r2, [r4, r0] - add r0, r1, #0 - ldr r2, [sp, #4] - add r0, #8 - str r2, [r4, r0] - sub r0, r1, #4 - mov r2, #1 - str r2, [r4, r0] - ldr r0, _02239E38 ; =MOD83_0223CADC - mov r1, #0 - str r1, [r0, #0xc] - add r0, r4, #0 - bl MOD83_0222FA44 - ldr r0, _02239E3C ; =0x0000100E - add sp, #8 - pop {r4, pc} - nop + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + add r0, sp, #0 + add r1, sp, #4 + bl MOD04_021DD718 + ldr r0, [sp] + neg r0, r0 + bl MOD04_021D80E0 + ldr r1, _02239E34 ; =0x00002610 + str r0, [r4, r1] + ldr r0, [sp] + neg r2, r0 + add r0, r1, #4 + str r2, [r4, r0] + add r0, r1, #0 + ldr r2, [sp, #4] + add r0, #8 + str r2, [r4, r0] + sub r0, r1, #4 + mov r2, #1 + str r2, [r4, r0] + ldr r0, _02239E38 ; =MOD83_0223CADC + mov r1, #0 + str r1, [r0, #0xc] + add r0, r4, #0 + bl MOD83_0222FA44 + ldr r0, _02239E3C ; =0x0000100E + add sp, #8 + pop {r4, pc} + nop _02239E34: .word 0x00002610 _02239E38: .word MOD83_0223CADC _02239E3C: .word 0x0000100E - thumb_func_end MOD83_02239DF0 + thumb_func_end MOD83_02239DF0 - thumb_func_start MOD83_02239E40 + thumb_func_start MOD83_02239E40 MOD83_02239E40: ; 0x02239E40 - push {r4, lr} - add r4, r0, #0 - ldr r0, _02239E70 ; =0x00002618 - ldr r0, [r4, r0] - cmp r0, #5 - beq _02239E50 - cmp r0, #6 - bne _02239E5C + push {r4, lr} + add r4, r0, #0 + ldr r0, _02239E70 ; =0x00002618 + ldr r0, [r4, r0] + cmp r0, #5 + beq _02239E50 + cmp r0, #6 + bne _02239E5C _02239E50: - bl MOD04_021DDC1C - ldr r0, _02239E74 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #0xc] - b _02239E62 + bl MOD04_021DDC1C + ldr r0, _02239E74 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #0xc] + b _02239E62 _02239E5C: - ldr r0, _02239E74 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #0xc] + ldr r0, _02239E74 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #0xc] _02239E62: - bl FUN_02033ED0 - ldr r0, _02239E78 ; =0x0000260C - mov r1, #0 - str r1, [r4, r0] - ldr r0, _02239E7C ; =0x0000100F - pop {r4, pc} - .align 2, 0 + bl FUN_02033ED0 + ldr r0, _02239E78 ; =0x0000260C + mov r1, #0 + str r1, [r4, r0] + ldr r0, _02239E7C ; =0x0000100F + pop {r4, pc} + .align 2, 0 _02239E70: .word 0x00002618 _02239E74: .word MOD83_0223CADC _02239E78: .word 0x0000260C _02239E7C: .word 0x0000100F - thumb_func_end MOD83_02239E40 + thumb_func_end MOD83_02239E40 - thumb_func_start MOD83_02239E80 + thumb_func_start MOD83_02239E80 MOD83_02239E80: ; 0x02239E80 - push {lr} - sub sp, #0x3c - bl MOD04_021DDC1C - cmp r0, #4 - beq _02239E94 - cmp r0, #7 - beq _02239EA0 - cmp r0, #8 - b _02239EA0 + push {lr} + sub sp, #0x3c + bl MOD04_021DDC1C + cmp r0, #4 + beq _02239E94 + cmp r0, #7 + beq _02239EA0 + cmp r0, #8 + b _02239EA0 _02239E94: - add r0, sp, #0 - bl MOD04_021DD9DC - add sp, #0x3c - mov r0, #1 - pop {pc} + add r0, sp, #0 + bl MOD04_021DD9DC + add sp, #0x3c + mov r0, #1 + pop {pc} _02239EA0: - mov r0, #0 - add sp, #0x3c - pop {pc} - .align 2, 0 - thumb_func_end MOD83_02239E80 + mov r0, #0 + add sp, #0x3c + pop {pc} + .align 2, 0 + thumb_func_end MOD83_02239E80 - thumb_func_start MOD83_02239EA8 + thumb_func_start MOD83_02239EA8 MOD83_02239EA8: ; 0x02239EA8 - push {r3, r4} - ldr r3, _02239EBC ; =MOD83_0223CADC - mov r4, #0 - str r4, [r3] - ldr r3, _02239EC0 ; =0x000015F4 - str r2, [r0, r3] - ldr r0, _02239EC4 ; =0x00001011 - str r0, [r1] - pop {r3, r4} - bx lr - .align 2, 0 + push {r3, r4} + ldr r3, _02239EBC ; =MOD83_0223CADC + mov r4, #0 + str r4, [r3] + ldr r3, _02239EC0 ; =0x000015F4 + str r2, [r0, r3] + ldr r0, _02239EC4 ; =0x00001011 + str r0, [r1] + pop {r3, r4} + bx lr + .align 2, 0 _02239EBC: .word MOD83_0223CADC _02239EC0: .word 0x000015F4 _02239EC4: .word 0x00001011 - thumb_func_end MOD83_02239EA8 + thumb_func_end MOD83_02239EA8 - thumb_func_start MOD83_02239EC8 + thumb_func_start MOD83_02239EC8 MOD83_02239EC8: ; 0x02239EC8 - push {r3, r4, r5, lr} - ldr r4, _02239EE4 ; =MOD83_0223CADC - mov r5, #0 - str r5, [r4, #8] - str r1, [r4, #4] - ldr r1, _02239EE8 ; =0x000015F4 - str r3, [r0, r1] - ldr r0, _02239EEC ; =0x00001012 - str r0, [r2] - ldr r0, _02239EF0 ; =MOD83_02239F28 - bl MOD04_021DE404 - pop {r3, r4, r5, pc} - nop + push {r3, r4, r5, lr} + ldr r4, _02239EE4 ; =MOD83_0223CADC + mov r5, #0 + str r5, [r4, #8] + str r1, [r4, #4] + ldr r1, _02239EE8 ; =0x000015F4 + str r3, [r0, r1] + ldr r0, _02239EEC ; =0x00001012 + str r0, [r2] + ldr r0, _02239EF0 ; =MOD83_02239F28 + bl MOD04_021DE404 + pop {r3, r4, r5, pc} + nop _02239EE4: .word MOD83_0223CADC _02239EE8: .word 0x000015F4 _02239EEC: .word 0x00001012 _02239EF0: .word MOD83_02239F28 - thumb_func_end MOD83_02239EC8 + thumb_func_end MOD83_02239EC8 - thumb_func_start MOD83_02239EF4 + thumb_func_start MOD83_02239EF4 MOD83_02239EF4: ; 0x02239EF4 - push {r3, lr} - cmp r1, #6 - bhi _02239F1C - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 + push {r3, lr} + cmp r1, #6 + bhi _02239F1C + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 _02239F06: ; jump table - .short _02239F1C - _02239F06 - 2 ; case 0 - .short _02239F1C - _02239F06 - 2 ; case 1 - .short _02239F1C - _02239F06 - 2 ; case 2 - .short _02239F14 - _02239F06 - 2 ; case 3 - .short _02239F1C - _02239F06 - 2 ; case 4 - .short _02239F1C - _02239F06 - 2 ; case 5 - .short _02239F1C - _02239F06 - 2 ; case 6 + .short _02239F1C - _02239F06 - 2 ; case 0 + .short _02239F1C - _02239F06 - 2 ; case 1 + .short _02239F1C - _02239F06 - 2 ; case 2 + .short _02239F14 - _02239F06 - 2 ; case 3 + .short _02239F1C - _02239F06 - 2 ; case 4 + .short _02239F1C - _02239F06 - 2 ; case 5 + .short _02239F1C - _02239F06 - 2 ; case 6 _02239F14: - cmp r0, #1 - bne _02239F1C - bl OS_Terminate + cmp r0, #1 + bne _02239F1C + bl OS_Terminate _02239F1C: - ldr r0, _02239F24 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0] - pop {r3, pc} - .align 2, 0 + ldr r0, _02239F24 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0] + pop {r3, pc} + .align 2, 0 _02239F24: .word MOD83_0223CADC - thumb_func_end MOD83_02239EF4 + thumb_func_end MOD83_02239EF4 - thumb_func_start MOD83_02239F28 + thumb_func_start MOD83_02239F28 MOD83_02239F28: ; 0x02239F28 - ldr r0, _02239F30 ; =MOD83_0223CADC - mov r1, #1 - str r1, [r0, #8] - bx lr - .align 2, 0 + ldr r0, _02239F30 ; =MOD83_0223CADC + mov r1, #1 + str r1, [r0, #8] + bx lr + .align 2, 0 _02239F30: .word MOD83_0223CADC - thumb_func_end MOD83_02239F28 + thumb_func_end MOD83_02239F28 - thumb_func_start MOD83_02239F34 + thumb_func_start MOD83_02239F34 MOD83_02239F34: ; 0x02239F34 - push {r3, r4, r5, lr} - add r5, r1, #0 - bl OverlayManager_GetData - ldr r1, _0223A24C ; =0x0000260C - add r4, r0, #0 - ldr r1, [r4, r1] - cmp r1, #1 - bne _02239F4C - bl MOD83_02239E40 - str r0, [r5] + push {r3, r4, r5, lr} + add r5, r1, #0 + bl OverlayManager_GetData + ldr r1, _0223A24C ; =0x0000260C + add r4, r0, #0 + ldr r1, [r4, r1] + cmp r1, #1 + bne _02239F4C + bl MOD83_02239E40 + str r0, [r5] _02239F4C: - ldr r0, _0223A250 ; =0x00002620 - ldr r0, [r4, r0] - cmp r0, #0 - beq _02239F62 - blx r0 - cmp r0, #1 - bne _02239F62 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] + ldr r0, _0223A250 ; =0x00002620 + ldr r0, [r4, r0] + cmp r0, #0 + beq _02239F62 + blx r0 + cmp r0, #1 + bne _02239F62 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] _02239F62: - mov r3, #1 - ldr r0, [r5] - lsl r3, r3, #0xc - sub r0, r0, r3 - cmp r0, #0x12 - bls _02239F70 - b _0223A342 + mov r3, #1 + ldr r0, [r5] + lsl r3, r3, #0xc + sub r0, r0, r3 + cmp r0, #0x12 + bls _02239F70 + b _0223A342 _02239F70: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 _02239F7C: ; jump table - .short _02239FA2 - _02239F7C - 2 ; case 0 - .short _02239FB0 - _02239F7C - 2 ; case 1 - .short _02239FCC - _02239F7C - 2 ; case 2 - .short _02239FF4 - _02239F7C - 2 ; case 3 - .short _0223A046 - _02239F7C - 2 ; case 4 - .short _0223A05E - _02239F7C - 2 ; case 5 - .short _0223A09A - _02239F7C - 2 ; case 6 - .short _0223A0BE - _02239F7C - 2 ; case 7 - .short _0223A0F2 - _02239F7C - 2 ; case 8 - .short _0223A114 - _02239F7C - 2 ; case 9 - .short _0223A14E - _02239F7C - 2 ; case 10 - .short _0223A174 - _02239F7C - 2 ; case 11 - .short _0223A1E8 - _02239F7C - 2 ; case 12 - .short _0223A212 - _02239F7C - 2 ; case 13 - .short _0223A342 - _02239F7C - 2 ; case 14 - .short _0223A238 - _02239F7C - 2 ; case 15 - .short _0223A2D4 - _02239F7C - 2 ; case 16 - .short _0223A2F8 - _02239F7C - 2 ; case 17 - .short _0223A31E - _02239F7C - 2 ; case 18 + .short _02239FA2 - _02239F7C - 2 ; case 0 + .short _02239FB0 - _02239F7C - 2 ; case 1 + .short _02239FCC - _02239F7C - 2 ; case 2 + .short _02239FF4 - _02239F7C - 2 ; case 3 + .short _0223A046 - _02239F7C - 2 ; case 4 + .short _0223A05E - _02239F7C - 2 ; case 5 + .short _0223A09A - _02239F7C - 2 ; case 6 + .short _0223A0BE - _02239F7C - 2 ; case 7 + .short _0223A0F2 - _02239F7C - 2 ; case 8 + .short _0223A114 - _02239F7C - 2 ; case 9 + .short _0223A14E - _02239F7C - 2 ; case 10 + .short _0223A174 - _02239F7C - 2 ; case 11 + .short _0223A1E8 - _02239F7C - 2 ; case 12 + .short _0223A212 - _02239F7C - 2 ; case 13 + .short _0223A342 - _02239F7C - 2 ; case 14 + .short _0223A238 - _02239F7C - 2 ; case 15 + .short _0223A2D4 - _02239F7C - 2 ; case 16 + .short _0223A2F8 - _02239F7C - 2 ; case 17 + .short _0223A31E - _02239F7C - 2 ; case 18 _02239FA2: - bl FUN_0202E49C - bl FUN_02088858 - ldr r0, _0223A254 ; =0x00001001 - str r0, [r5] - b _0223A342 + bl FUN_0202E49C + bl FUN_02088858 + ldr r0, _0223A254 ; =0x00001001 + str r0, [r5] + b _0223A342 _02239FB0: - bl FUN_0202E4C8 - cmp r0, #0 - beq _0223A092 - ldr r0, _0223A258 ; =MOD83_02239DC0 - ldr r1, _0223A25C ; =MOD83_02239DE0 - bl MOD04_021DD968 - ldr r0, [r4, #4] - bl FUN_02033310 - ldr r0, _0223A260 ; =0x00001002 - str r0, [r5] - b _0223A342 + bl FUN_0202E4C8 + cmp r0, #0 + beq _0223A092 + ldr r0, _0223A258 ; =MOD83_02239DC0 + ldr r1, _0223A25C ; =MOD83_02239DE0 + bl MOD04_021DD968 + ldr r0, [r4, #4] + bl FUN_02033310 + ldr r0, _0223A260 ; =0x00001002 + str r0, [r5] + b _0223A342 _02239FCC: - ldr r0, _0223A264 ; =0x000015E4 - mov r1, #2 - add r0, r4, r0 - mov r2, #1 - mov r3, #0x14 - bl MOD04_021DDEE0 - mov r0, #2 - bl MOD04_021DDE7C - bl MOD04_021DDDCC - bl FUN_02033E74 - ldr r0, _0223A268 ; =0x00001003 - mov r1, #0 - str r0, [r5] - ldr r0, _0223A26C ; =0x0000261C - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A264 ; =0x000015E4 + mov r1, #2 + add r0, r4, r0 + mov r2, #1 + mov r3, #0x14 + bl MOD04_021DDEE0 + mov r0, #2 + bl MOD04_021DDE7C + bl MOD04_021DDDCC + bl FUN_02033E74 + ldr r0, _0223A268 ; =0x00001003 + mov r1, #0 + str r0, [r5] + ldr r0, _0223A26C ; =0x0000261C + str r1, [r4, r0] + b _0223A342 _02239FF4: - bl MOD04_021DDD7C - cmp r0, #0 - bne _0223A002 - bl MOD04_021DDCE8 - b _0223A034 + bl MOD04_021DDD7C + cmp r0, #0 + bne _0223A002 + bl MOD04_021DDCE8 + b _0223A034 _0223A002: - add r0, r4, #0 - bl MOD83_02239E80 - cmp r0, #1 - bne _0223A02C - ldr r0, _0223A26C ; =0x0000261C - ldr r1, [r4, r0] - cmp r1, #1 - bne _0223A020 - ldr r0, _0223A270 ; =MOD83_0223CADC - mov r1, #3 - str r1, [r0, #4] - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] - b _0223A034 + add r0, r4, #0 + bl MOD83_02239E80 + cmp r0, #1 + bne _0223A02C + ldr r0, _0223A26C ; =0x0000261C + ldr r1, [r4, r0] + cmp r1, #1 + bne _0223A020 + ldr r0, _0223A270 ; =MOD83_0223CADC + mov r1, #3 + str r1, [r0, #4] + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] + b _0223A034 _0223A020: - ldr r1, _0223A278 ; =MOD04_021DD984 - add r0, r0, #4 - str r1, [r4, r0] - ldr r0, _0223A27C ; =0x00001004 - str r0, [r5] - b _0223A034 + ldr r1, _0223A278 ; =MOD04_021DD984 + add r0, r0, #4 + str r1, [r4, r0] + ldr r0, _0223A27C ; =0x00001004 + str r0, [r5] + b _0223A034 _0223A02C: - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] _0223A034: - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A092 - ldr r0, _0223A26C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A092 + ldr r0, _0223A26C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] + b _0223A342 _0223A046: - bl MOD04_021DE05C - cmp r0, #0 - bne _0223A058 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + bl MOD04_021DE05C + cmp r0, #0 + bne _0223A058 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A058: - ldr r0, _0223A284 ; =0x00001005 - str r0, [r5] - b _0223A342 + ldr r0, _0223A284 ; =0x00001005 + str r0, [r5] + b _0223A342 _0223A05E: - bl MOD04_021DDF4C - cmp r0, #3 - bne _0223A06C - ldr r0, _0223A288 ; =0x00001006 - str r0, [r5] - b _0223A088 + bl MOD04_021DDF4C + cmp r0, #3 + bne _0223A06C + ldr r0, _0223A288 ; =0x00001006 + str r0, [r5] + b _0223A088 _0223A06C: - cmp r0, #4 - bne _0223A07A - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A088 + cmp r0, #4 + bne _0223A07A + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A088 _0223A07A: - cmp r0, #5 - bne _0223A088 - ldr r0, _0223A270 ; =MOD83_0223CADC - mov r1, #3 - str r1, [r0, #4] - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] + cmp r0, #5 + bne _0223A088 + ldr r0, _0223A270 ; =MOD83_0223CADC + mov r1, #3 + str r1, [r0, #4] + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] _0223A088: - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - bne _0223A094 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + bne _0223A094 _0223A092: - b _0223A342 + b _0223A342 _0223A094: - bl MOD04_021DDF40 - b _0223A342 + bl MOD04_021DDF40 + b _0223A342 _0223A09A: - ldr r0, _0223A28C ; =MOD83_02239EF4 - ldr r1, _0223A290 ; =MOD83_0223B838 - ldr r2, _0223A294 ; =MOD83_0223B840 - bl MOD04_021DE45C - cmp r0, #0 - bne _0223A0B2 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A28C ; =MOD83_02239EF4 + ldr r1, _0223A290 ; =MOD83_0223B838 + ldr r2, _0223A294 ; =MOD83_0223B840 + bl MOD04_021DE45C + cmp r0, #0 + bne _0223A0B2 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A0B2: - ldr r2, _0223A298 ; =0x00001007 - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A298 ; =0x00001007 + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A0BE: - ldr r0, _0223A26C ; =0x0000261C - ldr r0, [r4, r0] - cmp r0, #1 - bne _0223A0D4 - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xc - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A26C ; =0x0000261C + ldr r0, [r4, r0] + cmp r0, #1 + bne _0223A0D4 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xc + bl MOD83_02239EC8 + b _0223A342 _0223A0D4: - ldr r0, _0223A29C ; =MOD83_0223B854 - add r1, r0, #0 - add r2, r0, #0 - bl MOD04_021DE3D0 - cmp r0, #0 - bne _0223A0EC - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A29C ; =MOD83_0223B854 + add r1, r0, #0 + add r2, r0, #0 + bl MOD04_021DE3D0 + cmp r0, #0 + bne _0223A0EC + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A0EC: - ldr r0, _0223A2A0 ; =0x00001008 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2A0 ; =0x00001008 + str r0, [r5] + b _0223A342 _0223A0F2: - ldr r0, _0223A2A4 ; =0x000015F8 - add r0, r4, r0 - bl MOD04_021DE3AC - cmp r0, #0 - bne _0223A108 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2A4 ; =0x000015F8 + add r0, r4, r0 + bl MOD04_021DE3AC + cmp r0, #0 + bne _0223A108 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A108: - ldr r2, _0223A2A8 ; =0x00001009 - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A2A8 ; =0x00001009 + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A114: - ldr r0, _0223A2A4 ; =0x000015F8 - ldr r0, [r4, r0] - cmp r0, #1 - beq _0223A12A - add r0, r4, #0 - mov r1, #2 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A2A4 ; =0x000015F8 + ldr r0, [r4, r0] + cmp r0, #1 + beq _0223A12A + add r0, r4, #0 + mov r1, #2 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A12A: - ldr r0, _0223A2AC ; =MOD83_0223CAEC - mov r1, #0 - mov r2, #0xa - bl MOD04_021DE364 - cmp r0, #0 - bne _0223A142 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r0, _0223A2AC ; =MOD83_0223CAEC + mov r1, #0 + mov r2, #0xa + bl MOD04_021DE364 + cmp r0, #0 + bne _0223A142 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A142: - ldr r2, _0223A2B0 ; =0x0000100A - add r0, r4, #0 - add r1, r5, #0 - bl MOD83_02239EA8 - b _0223A342 + ldr r2, _0223A2B0 ; =0x0000100A + add r0, r4, #0 + add r1, r5, #0 + bl MOD83_02239EA8 + b _0223A342 _0223A14E: - ldr r1, _0223A2B4 ; =0x000015FC - ldr r0, _0223A2AC ; =MOD83_0223CAEC - add r1, r4, r1 - add r2, r3, #0 - bl MOD04_021DE330 - cmp r0, #0 - bne _0223A168 - add r0, r4, #0 - bl MOD83_02239DF0 - str r0, [r5] - b _0223A342 + ldr r1, _0223A2B4 ; =0x000015FC + ldr r0, _0223A2AC ; =MOD83_0223CAEC + add r1, r4, r1 + add r2, r3, #0 + bl MOD04_021DE330 + cmp r0, #0 + bne _0223A168 + add r0, r4, #0 + bl MOD83_02239DF0 + str r0, [r5] + b _0223A342 _0223A168: - ldr r0, _0223A2B8 ; =0x0000100B - mov r1, #0 - str r0, [r5] - ldr r0, _0223A2BC ; =0x00002608 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A2B8 ; =0x0000100B + mov r1, #0 + str r0, [r5] + ldr r0, _0223A2BC ; =0x00002608 + str r1, [r4, r0] + b _0223A342 _0223A174: - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0] - cmp r0, #0 - bne _0223A1C4 - ldr r0, _0223A280 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A194 - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xc - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0] + cmp r0, #0 + bne _0223A1C4 + ldr r0, _0223A280 ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A194 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xc + bl MOD83_02239EC8 + b _0223A342 _0223A194: - mov r1, #0x26 - lsl r1, r1, #8 - add r0, r4, r1 - add r1, r1, #4 - add r1, r4, r1 - bl MOD04_021DE2D0 - cmp r0, #1 - bne _0223A21A - mov r1, #0x26 - lsl r1, r1, #8 - ldr r2, [r4, r1] - add r1, r1, #4 - mov r0, #0x64 - ldr r1, [r4, r1] - mul r0, r2 - bl _u32_div_f - ldr r1, _0223A2BC ; =0x00002608 - ldr r2, [r4, r1] - cmp r2, r0 - beq _0223A21A - str r0, [r4, r1] - b _0223A342 + mov r1, #0x26 + lsl r1, r1, #8 + add r0, r4, r1 + add r1, r1, #4 + add r1, r4, r1 + bl MOD04_021DE2D0 + cmp r0, #1 + bne _0223A21A + mov r1, #0x26 + lsl r1, r1, #8 + ldr r2, [r4, r1] + add r1, r1, #4 + mov r0, #0x64 + ldr r1, [r4, r1] + mul r0, r2 + bl _u32_div_f + ldr r1, _0223A2BC ; =0x00002608 + ldr r2, [r4, r1] + cmp r2, r0 + beq _0223A21A + str r0, [r4, r1] + b _0223A342 _0223A1C4: - ldr r0, _0223A26C ; =0x0000261C - ldr r0, [r4, r0] - cmp r0, #0 - bne _0223A1DA - add r0, r4, #0 - mov r1, #1 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + ldr r0, _0223A26C ; =0x0000261C + ldr r0, [r4, r0] + cmp r0, #0 + bne _0223A1DA + add r0, r4, #0 + mov r1, #1 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A1DA: - add r0, r4, #0 - mov r1, #3 - add r2, r5, #0 - add r3, #0xd - bl MOD83_02239EC8 - b _0223A342 + add r0, r4, #0 + mov r1, #3 + add r2, r5, #0 + add r3, #0xd + bl MOD83_02239EC8 + b _0223A342 _0223A1E8: - bl MOD04_021DE308 - cmp r0, #0 - bne _0223A1F6 - ldr r0, _0223A274 ; =0x0000100D - str r0, [r5] - b _0223A342 + bl MOD04_021DE308 + cmp r0, #0 + bne _0223A1F6 + ldr r0, _0223A274 ; =0x0000100D + str r0, [r5] + b _0223A342 _0223A1F6: - ldr r0, _0223A250 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl FUN_02033ED0 - bl FUN_02033364 - bl FUN_02088868 - bl FUN_0202E4F0 - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #4] - pop {r3, r4, r5, pc} + ldr r0, _0223A250 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl FUN_02033ED0 + bl FUN_02033364 + bl FUN_02088868 + bl FUN_0202E4F0 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #4] + pop {r3, r4, r5, pc} _0223A212: - bl MOD04_021DDB40 - cmp r0, #1 - beq _0223A21C + bl MOD04_021DDB40 + cmp r0, #1 + beq _0223A21C _0223A21A: - b _0223A342 + b _0223A342 _0223A21C: - ldr r0, _0223A250 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl FUN_02033ED0 - bl FUN_020332DC - bl FUN_02088868 - bl FUN_0202E4F0 - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #4] - pop {r3, r4, r5, pc} + ldr r0, _0223A250 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl FUN_02033ED0 + bl FUN_020332DC + bl FUN_02088868 + bl FUN_0202E4F0 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #4] + pop {r3, r4, r5, pc} _0223A238: - ldr r0, _0223A270 ; =MOD83_0223CADC - ldr r0, [r0, #0xc] - cmp r0, #1 - beq _0223A242 - b _0223A342 + ldr r0, _0223A270 ; =MOD83_0223CADC + ldr r0, [r0, #0xc] + cmp r0, #1 + beq _0223A242 + b _0223A342 _0223A242: - add r0, r4, #0 - bl MOD83_022307B4 - ldr r0, _0223A2C0 ; =0x00002618 - b _0223A2C4 - .align 2, 0 + add r0, r4, #0 + bl MOD83_022307B4 + ldr r0, _0223A2C0 ; =0x00002618 + b _0223A2C4 + .align 2, 0 _0223A24C: .word 0x0000260C _0223A250: .word 0x00002620 _0223A254: .word 0x00001001 @@ -26372,1160 +26372,1160 @@ _0223A2B8: .word 0x0000100B _0223A2BC: .word 0x00002608 _0223A2C0: .word 0x00002618 _0223A2C4: - ldr r0, [r4, r0] - cmp r0, #6 - bne _0223A2CE - bl MOD04_021DDBBC + ldr r0, [r4, r0] + cmp r0, #6 + bne _0223A2CE + bl MOD04_021DDBBC _0223A2CE: - ldr r0, _0223A348 ; =0x00001010 - str r0, [r5] - b _0223A342 + ldr r0, _0223A348 ; =0x00001010 + str r0, [r5] + b _0223A342 _0223A2D4: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A350 ; =0x00002620 - mov r1, #0 - str r1, [r4, r0] - bl MOD04_021DD6F0 - bl FUN_020332DC - bl FUN_02088868 - bl FUN_0202E4F0 - mov r0, #4 - pop {r3, r4, r5, pc} + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #1 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A350 ; =0x00002620 + mov r1, #0 + str r1, [r4, r0] + bl MOD04_021DD6F0 + bl FUN_020332DC + bl FUN_02088868 + bl FUN_0202E4F0 + mov r0, #4 + pop {r3, r4, r5, pc} _0223A2F8: - ldr r0, _0223A354 ; =MOD83_0223CADC - ldr r1, [r0] - cmp r1, #1 - bne _0223A30C - mov r1, #0 - str r1, [r0] - ldr r0, _0223A358 ; =0x000015F4 - ldr r0, [r4, r0] - str r0, [r5] - b _0223A342 + ldr r0, _0223A354 ; =MOD83_0223CADC + ldr r1, [r0] + cmp r1, #1 + bne _0223A30C + mov r1, #0 + str r1, [r0] + ldr r0, _0223A358 ; =0x000015F4 + ldr r0, [r4, r0] + str r0, [r5] + b _0223A342 _0223A30C: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A35C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] - b _0223A342 + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A35C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] + b _0223A342 _0223A31E: - ldr r0, _0223A354 ; =MOD83_0223CADC - ldr r1, [r0, #8] - cmp r1, #1 - bne _0223A332 - mov r1, #0 - str r1, [r0, #8] - ldr r0, _0223A358 ; =0x000015F4 - ldr r0, [r4, r0] - str r0, [r5] - b _0223A342 + ldr r0, _0223A354 ; =MOD83_0223CADC + ldr r1, [r0, #8] + cmp r1, #1 + bne _0223A332 + mov r1, #0 + str r1, [r0, #8] + ldr r0, _0223A358 ; =0x000015F4 + ldr r0, [r4, r0] + str r0, [r5] + b _0223A342 _0223A332: - ldr r0, _0223A34C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #2 - tst r0, r1 - beq _0223A342 - ldr r0, _0223A35C ; =0x0000261C - mov r1, #1 - str r1, [r4, r0] + ldr r0, _0223A34C ; =gMain + ldr r1, [r0, #0x48] + mov r0, #2 + tst r0, r1 + beq _0223A342 + ldr r0, _0223A35C ; =0x0000261C + mov r1, #1 + str r1, [r4, r0] _0223A342: - mov r0, #0 - pop {r3, r4, r5, pc} - nop + mov r0, #0 + pop {r3, r4, r5, pc} + nop _0223A348: .word 0x00001010 _0223A34C: .word gMain _0223A350: .word 0x00002620 _0223A354: .word MOD83_0223CADC _0223A358: .word 0x000015F4 _0223A35C: .word 0x0000261C - thumb_func_end MOD83_02239F34 + thumb_func_end MOD83_02239F34 - .rodata - .global MOD83_0223A360 + .rodata + .global MOD83_0223A360 MOD83_0223A360: ; 0x0223A360 - .word MOD83_0222E48C, MOD83_0222E540, MOD83_0222E850, 0xFFFFFFFF + .word MOD83_0222E48C, MOD83_0222E540, MOD83_0222E850, 0xFFFFFFFF - .global MOD83_0223A370 + .global MOD83_0223A370 MOD83_0223A370: ; 0x0223A370 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A380 + .global MOD83_0223A380 MOD83_0223A380: ; 0x0223A380 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A3A8 + .global MOD83_0223A3A8 MOD83_0223A3A8: ; 0x0223A3A8 - .word MOD83_0222EDF8, MOD83_0222EE8C, MOD83_0222F048, 0xFFFFFFFF + .word MOD83_0222EDF8, MOD83_0222EE8C, MOD83_0222F048, 0xFFFFFFFF - .global MOD83_0223A3B8 + .global MOD83_0223A3B8 MOD83_0223A3B8: ; 0x0223A3B8 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A3C8 + .global MOD83_0223A3C8 MOD83_0223A3C8: ; 0x0223A3C8 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A3F0 + .global MOD83_0223A3F0 MOD83_0223A3F0: ; 0x0223A3F0 - .word MOD83_0222F984, MOD83_0222F9B0, MOD83_0222F9B8, MOD83_0222F9C4 - .word FUN_0202DA80, 0x00000000 + .word MOD83_0222F984, MOD83_0222F9B0, MOD83_0222F9B8, MOD83_0222F9C4 + .word FUN_0202DA80, 0x00000000 - .global MOD83_0223A408 + .global MOD83_0223A408 MOD83_0223A408: ; 0x0223A408 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A418 + .global MOD83_0223A418 MOD83_0223A418: ; 0x0223A418 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A434 + .global MOD83_0223A434 MOD83_0223A434: ; 0x0223A434 - .word MOD83_02230954, MOD83_02230A10, MOD83_0223137C, 0xFFFFFFFF + .word MOD83_02230954, MOD83_02230A10, MOD83_0223137C, 0xFFFFFFFF - .global MOD83_0223A444 + .global MOD83_0223A444 MOD83_0223A444: ; 0x0223A444 - .word MOD83_022323A8, MOD83_02232788, MOD83_022330A4, 0xFFFFFFFF + .word MOD83_022323A8, MOD83_02232788, MOD83_022330A4, 0xFFFFFFFF - .global MOD83_0223A454 + .global MOD83_0223A454 MOD83_0223A454: ; 0x0223A454 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A464 + .global MOD83_0223A464 MOD83_0223A464: ; 0x0223A464 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1F, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1F, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A480 + .global MOD83_0223A480 MOD83_0223A480: ; 0x0223A480 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A49C + .global MOD83_0223A49C MOD83_0223A49C: ; 0x0223A49C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1E, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A4B8 + .global MOD83_0223A4B8 MOD83_0223A4B8: ; 0x0223A4B8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A4D4 + .global MOD83_0223A4D4 MOD83_0223A4D4: ; 0x0223A4D4 - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A4FC + .global MOD83_0223A4FC MOD83_0223A4FC: ; 0x0223A4FC - .word MOD83_02236764, MOD83_02236804, MOD83_02236DD0, 0xFFFFFFFF + .word MOD83_02236764, MOD83_02236804, MOD83_02236DD0, 0xFFFFFFFF - .global MOD83_0223A50C + .global MOD83_0223A50C MOD83_0223A50C: ; 0x0223A50C - .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00 + .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00 - .global MOD83_0223A51C + .global MOD83_0223A51C MOD83_0223A51C: ; 0x0223A51C - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A52C + .global MOD83_0223A52C MOD83_0223A52C: ; 0x0223A52C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A548 + .global MOD83_0223A548 MOD83_0223A548: ; 0x0223A548 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1D, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A564 + .global MOD83_0223A564 MOD83_0223A564: ; 0x0223A564 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1E, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1E, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A580 + .global MOD83_0223A580 MOD83_0223A580: ; 0x0223A580 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x1F, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x1F, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A59C + .global MOD83_0223A59C MOD83_0223A59C: ; 0x0223A59C - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .global MOD83_0223A5C4 + .global MOD83_0223A5C4 MOD83_0223A5C4: ; 0x0223A5C4 - .byte 0x41, 0x58, 0x56, 0x4A, 0x00, 0x00, 0x01, 0x00, 0x41, 0x58, 0x56, 0x45, 0x00, 0x00, 0x02, 0x00 - .byte 0x41, 0x58, 0x56, 0x46, 0x00, 0x00, 0x03, 0x00, 0x41, 0x58, 0x56, 0x44, 0x00, 0x00, 0x05, 0x00 - .byte 0x41, 0x58, 0x56, 0x53, 0x00, 0x00, 0x07, 0x00, 0x41, 0x58, 0x56, 0x49, 0x00, 0x00, 0x04, 0x00 - .byte 0x41, 0x58, 0x50, 0x4A, 0x00, 0x01, 0x01, 0x00, 0x41, 0x58, 0x50, 0x45, 0x00, 0x01, 0x02, 0x00 - .byte 0x41, 0x58, 0x50, 0x46, 0x00, 0x01, 0x03, 0x00, 0x41, 0x58, 0x50, 0x44, 0x00, 0x01, 0x05, 0x00 - .byte 0x41, 0x58, 0x50, 0x53, 0x00, 0x01, 0x07, 0x00, 0x41, 0x58, 0x50, 0x49, 0x00, 0x01, 0x04, 0x00 - .byte 0x42, 0x50, 0x52, 0x4A, 0x01, 0x03, 0x01, 0x00, 0x42, 0x50, 0x52, 0x45, 0x01, 0x03, 0x02, 0x00 - .byte 0x42, 0x50, 0x52, 0x46, 0x01, 0x03, 0x03, 0x00, 0x42, 0x50, 0x52, 0x44, 0x01, 0x03, 0x05, 0x00 - .byte 0x42, 0x50, 0x52, 0x53, 0x01, 0x03, 0x07, 0x00, 0x42, 0x50, 0x52, 0x49, 0x01, 0x03, 0x04, 0x00 - .byte 0x42, 0x50, 0x47, 0x4A, 0x01, 0x02, 0x01, 0x00, 0x42, 0x50, 0x47, 0x45, 0x01, 0x02, 0x02, 0x00 - .byte 0x42, 0x50, 0x47, 0x46, 0x01, 0x02, 0x03, 0x00, 0x42, 0x50, 0x47, 0x44, 0x01, 0x02, 0x05, 0x00 - .byte 0x42, 0x50, 0x47, 0x53, 0x01, 0x02, 0x07, 0x00, 0x42, 0x50, 0x47, 0x49, 0x01, 0x02, 0x04, 0x00 - .byte 0x42, 0x50, 0x45, 0x4A, 0x02, 0x04, 0x01, 0x00, 0x42, 0x50, 0x45, 0x45, 0x02, 0x04, 0x02, 0x00 - .byte 0x42, 0x50, 0x45, 0x46, 0x02, 0x04, 0x03, 0x00, 0x42, 0x50, 0x45, 0x44, 0x02, 0x04, 0x05, 0x00 - .byte 0x42, 0x50, 0x45, 0x53, 0x02, 0x04, 0x07, 0x00, 0x42, 0x50, 0x45, 0x49, 0x02, 0x04, 0x04, 0x00 - - .global MOD83_0223A6B4 + .byte 0x41, 0x58, 0x56, 0x4A, 0x00, 0x00, 0x01, 0x00, 0x41, 0x58, 0x56, 0x45, 0x00, 0x00, 0x02, 0x00 + .byte 0x41, 0x58, 0x56, 0x46, 0x00, 0x00, 0x03, 0x00, 0x41, 0x58, 0x56, 0x44, 0x00, 0x00, 0x05, 0x00 + .byte 0x41, 0x58, 0x56, 0x53, 0x00, 0x00, 0x07, 0x00, 0x41, 0x58, 0x56, 0x49, 0x00, 0x00, 0x04, 0x00 + .byte 0x41, 0x58, 0x50, 0x4A, 0x00, 0x01, 0x01, 0x00, 0x41, 0x58, 0x50, 0x45, 0x00, 0x01, 0x02, 0x00 + .byte 0x41, 0x58, 0x50, 0x46, 0x00, 0x01, 0x03, 0x00, 0x41, 0x58, 0x50, 0x44, 0x00, 0x01, 0x05, 0x00 + .byte 0x41, 0x58, 0x50, 0x53, 0x00, 0x01, 0x07, 0x00, 0x41, 0x58, 0x50, 0x49, 0x00, 0x01, 0x04, 0x00 + .byte 0x42, 0x50, 0x52, 0x4A, 0x01, 0x03, 0x01, 0x00, 0x42, 0x50, 0x52, 0x45, 0x01, 0x03, 0x02, 0x00 + .byte 0x42, 0x50, 0x52, 0x46, 0x01, 0x03, 0x03, 0x00, 0x42, 0x50, 0x52, 0x44, 0x01, 0x03, 0x05, 0x00 + .byte 0x42, 0x50, 0x52, 0x53, 0x01, 0x03, 0x07, 0x00, 0x42, 0x50, 0x52, 0x49, 0x01, 0x03, 0x04, 0x00 + .byte 0x42, 0x50, 0x47, 0x4A, 0x01, 0x02, 0x01, 0x00, 0x42, 0x50, 0x47, 0x45, 0x01, 0x02, 0x02, 0x00 + .byte 0x42, 0x50, 0x47, 0x46, 0x01, 0x02, 0x03, 0x00, 0x42, 0x50, 0x47, 0x44, 0x01, 0x02, 0x05, 0x00 + .byte 0x42, 0x50, 0x47, 0x53, 0x01, 0x02, 0x07, 0x00, 0x42, 0x50, 0x47, 0x49, 0x01, 0x02, 0x04, 0x00 + .byte 0x42, 0x50, 0x45, 0x4A, 0x02, 0x04, 0x01, 0x00, 0x42, 0x50, 0x45, 0x45, 0x02, 0x04, 0x02, 0x00 + .byte 0x42, 0x50, 0x45, 0x46, 0x02, 0x04, 0x03, 0x00, 0x42, 0x50, 0x45, 0x44, 0x02, 0x04, 0x05, 0x00 + .byte 0x42, 0x50, 0x45, 0x53, 0x02, 0x04, 0x07, 0x00, 0x42, 0x50, 0x45, 0x49, 0x02, 0x04, 0x04, 0x00 + + .global MOD83_0223A6B4 MOD83_0223A6B4: ; 0x0223A6B4 - .byte 0xC8, 0x7E, 0x66, 0x71, 0x46, 0x0B, 0xE6, 0x6F, 0x17, 0x8A, 0x5C, 0x7D, 0xEA, 0xE1, 0x93, 0xFD - .byte 0xEE, 0xFA, 0x99, 0x84, 0xFE, 0x35, 0x02, 0xB9, 0x7F, 0x4F, 0xF1, 0x19, 0x74, 0xA2, 0x0F, 0x65 - .byte 0x8A, 0x9C, 0x44, 0x81, 0x0C, 0x1F, 0x94, 0xE4, 0xC0, 0xB6, 0xD7, 0x20, 0xEE, 0x11, 0x9A, 0x8D - .byte 0x27, 0x33, 0x9B, 0x7B, 0x02, 0xE9, 0x33, 0x11, 0xDC, 0xCF, 0x72, 0xD9, 0xA8, 0x78, 0x12, 0x8C - .byte 0x3B, 0x60, 0xD5, 0x24, 0xB8, 0xD9, 0xFC, 0x8D, 0x15, 0xBA, 0x0B, 0x90, 0xA3, 0xBD, 0x3A, 0xE4 - .byte 0x01, 0x18, 0xBA, 0xF9, 0x65, 0xA5, 0x15, 0x37, 0xDC, 0x7A, 0x48, 0x5C, 0x3A, 0x55, 0x35, 0x43 - .byte 0xE2, 0xC6, 0x66, 0xBA, 0x21, 0xEA, 0x67, 0x2E, 0xA8, 0x29, 0x03, 0xD7, 0x1F, 0x0F, 0xC6, 0xDE - .byte 0x1B, 0xE2, 0xA1, 0xCA, 0x21, 0x51, 0xFE, 0xB9, 0x68, 0x17, 0x3C, 0xEB, 0x04, 0x54, 0xE0, 0xBD - - .global MOD83_0223A734 + .byte 0xC8, 0x7E, 0x66, 0x71, 0x46, 0x0B, 0xE6, 0x6F, 0x17, 0x8A, 0x5C, 0x7D, 0xEA, 0xE1, 0x93, 0xFD + .byte 0xEE, 0xFA, 0x99, 0x84, 0xFE, 0x35, 0x02, 0xB9, 0x7F, 0x4F, 0xF1, 0x19, 0x74, 0xA2, 0x0F, 0x65 + .byte 0x8A, 0x9C, 0x44, 0x81, 0x0C, 0x1F, 0x94, 0xE4, 0xC0, 0xB6, 0xD7, 0x20, 0xEE, 0x11, 0x9A, 0x8D + .byte 0x27, 0x33, 0x9B, 0x7B, 0x02, 0xE9, 0x33, 0x11, 0xDC, 0xCF, 0x72, 0xD9, 0xA8, 0x78, 0x12, 0x8C + .byte 0x3B, 0x60, 0xD5, 0x24, 0xB8, 0xD9, 0xFC, 0x8D, 0x15, 0xBA, 0x0B, 0x90, 0xA3, 0xBD, 0x3A, 0xE4 + .byte 0x01, 0x18, 0xBA, 0xF9, 0x65, 0xA5, 0x15, 0x37, 0xDC, 0x7A, 0x48, 0x5C, 0x3A, 0x55, 0x35, 0x43 + .byte 0xE2, 0xC6, 0x66, 0xBA, 0x21, 0xEA, 0x67, 0x2E, 0xA8, 0x29, 0x03, 0xD7, 0x1F, 0x0F, 0xC6, 0xDE + .byte 0x1B, 0xE2, 0xA1, 0xCA, 0x21, 0x51, 0xFE, 0xB9, 0x68, 0x17, 0x3C, 0xEB, 0x04, 0x54, 0xE0, 0xBD + + .global MOD83_0223A734 MOD83_0223A734: ; 0x0223A734 - .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x14, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A744 + .global MOD83_0223A744 MOD83_0223A744: ; 0x0223A744 - .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x05, 0x02, 0x06, 0x02, 0x07, 0x00 - .byte 0x08, 0x05, 0x09, 0x05, 0x0A, 0x05, 0x0B, 0x04, 0xFF, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x03, 0x05, 0x02, 0x06, 0x02, 0x07, 0x00 + .byte 0x08, 0x05, 0x09, 0x05, 0x0A, 0x05, 0x0B, 0x04, 0xFF, 0x00, 0x00, 0x00 - .global MOD83_0223A760 + .global MOD83_0223A760 MOD83_0223A760: ; 0x0223A760 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .data - .global MOD83_0223A780 + .data + .global MOD83_0223A780 MOD83_0223A780: ; 0x0223A780 - .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A784 + .global MOD83_0223A784 MOD83_0223A784: ; 0x0223A784 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .global MOD83_0223A794 + .global MOD83_0223A794 MOD83_0223A794: ; 0x0223A794 - .byte 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x65, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x65, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A7B0 + .global MOD83_0223A7B0 MOD83_0223A7B0: ; 0x0223A7B0 - .byte 0x81, 0x53, 0x83, 0x53, 0x85, 0x53, 0x87, 0x53, 0x89, 0x53, 0x8B, 0x53, 0x8D, 0x53, 0x8F, 0x53 - .byte 0x91, 0x53, 0x93, 0x53, 0x95, 0x53, 0x97, 0x53, 0x99, 0x53, 0x9B, 0x53, 0x9D, 0x53, 0x9F, 0x53 - .byte 0x9D, 0x53, 0x9B, 0x53, 0x99, 0x53, 0x97, 0x53, 0x95, 0x53, 0x93, 0x53, 0x91, 0x53, 0x8F, 0x53 - .byte 0x8D, 0x53, 0x8B, 0x53, 0x89, 0x53, 0x87, 0x53, 0x85, 0x53, 0x83, 0x53, 0x00, 0x00, 0x00, 0x00 + .byte 0x81, 0x53, 0x83, 0x53, 0x85, 0x53, 0x87, 0x53, 0x89, 0x53, 0x8B, 0x53, 0x8D, 0x53, 0x8F, 0x53 + .byte 0x91, 0x53, 0x93, 0x53, 0x95, 0x53, 0x97, 0x53, 0x99, 0x53, 0x9B, 0x53, 0x9D, 0x53, 0x9F, 0x53 + .byte 0x9D, 0x53, 0x9B, 0x53, 0x99, 0x53, 0x97, 0x53, 0x95, 0x53, 0x93, 0x53, 0x91, 0x53, 0x8F, 0x53 + .byte 0x8D, 0x53, 0x8B, 0x53, 0x89, 0x53, 0x87, 0x53, 0x85, 0x53, 0x83, 0x53, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A7F0 + .global MOD83_0223A7F0 MOD83_0223A7F0: ; 0x0223A7F0 - .byte 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00 - .global MOD83_0223A804 + .global MOD83_0223A804 MOD83_0223A804: ; 0x0223A804 - .byte 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00 - .global MOD83_0223A818 + .global MOD83_0223A818 MOD83_0223A818: ; 0x0223A818 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223A82C + .global MOD83_0223A82C MOD83_0223A82C: ; 0x0223A82C - .byte 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00 - .global MOD83_0223A840 + .global MOD83_0223A840 MOD83_0223A840: ; 0x0223A840 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00 - .global MOD83_0223A854 + .global MOD83_0223A854 MOD83_0223A854: ; 0x0223A854 - .byte 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00 - .global MOD83_0223A85C + .global MOD83_0223A85C MOD83_0223A85C: ; 0x0223A85C - .word 0x00, MOD83_0222DD24, 0x02, 0x02 - .word 0x01, 0x00000000, 0x03, 0x02 - .word 0x02, MOD83_0222DF40, 0x04, 0x02 - .word 0x03, MOD83_0222DFEC, 0x05, 0x02 - .word 0x00, MOD83_0222DECC, 0x06, 0x02 - .word 0x0A, MOD83_0222E048, 0x07, 0x02 - .word 0x0B, MOD83_0222E098 - - .global MOD83_0223A8C4 + .word 0x00, MOD83_0222DD24, 0x02, 0x02 + .word 0x01, 0x00000000, 0x03, 0x02 + .word 0x02, MOD83_0222DF40, 0x04, 0x02 + .word 0x03, MOD83_0222DFEC, 0x05, 0x02 + .word 0x00, MOD83_0222DECC, 0x06, 0x02 + .word 0x0A, MOD83_0222E048, 0x07, 0x02 + .word 0x0B, MOD83_0222E098 + + .global MOD83_0223A8C4 MOD83_0223A8C4: ; 0x0223A8C4 - .asciz "data/eoo.dat" + .asciz "data/eoo.dat" - .balign 4 - .global MOD83_0223A8D4 + .balign 4 + .global MOD83_0223A8D4 MOD83_0223A8D4: ; 0x0223A8D4 - .byte 0x16, 0x01, 0x15, 0x00 - .word MOD83_0223B870, MOD83_0223B860 + .byte 0x16, 0x01, 0x15, 0x00 + .word MOD83_0223B870, MOD83_0223B860 - .global MOD83_0223A8E0 + .global MOD83_0223A8E0 MOD83_0223A8E0: ; 0x0223A8E0 - .byte 0x00, 0x00, 0xFF, 0xFF, 0x21, 0x00, 0xE1, 0x00, 0x23, 0x00, 0xC0, 0x01, 0x25, 0x00, 0xD2, 0x01 - .byte 0x27, 0x00, 0xEA, 0x00, 0x28, 0x00, 0xEB, 0x00, 0x29, 0x00, 0xBF, 0x01, 0x2A, 0x00, 0xBD, 0x01 - .byte 0x2B, 0x00, 0xAD, 0x01, 0x2C, 0x00, 0xBE, 0x01, 0x2E, 0x00, 0xB1, 0x01, 0x30, 0x00, 0xA2, 0x00 - .byte 0x31, 0x00, 0xA3, 0x00, 0x32, 0x00, 0xA4, 0x00, 0x33, 0x00, 0xA5, 0x00, 0x34, 0x00, 0xA6, 0x00 - .byte 0x35, 0x00, 0xA7, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x37, 0x00, 0xA9, 0x00, 0x38, 0x00, 0xAA, 0x00 - .byte 0x39, 0x00, 0xAB, 0x00, 0x3A, 0x00, 0xC4, 0x01, 0x3B, 0x00, 0xC5, 0x01, 0x3C, 0x00, 0xEC, 0x00 - .byte 0x3E, 0x00, 0xED, 0x00, 0x3F, 0x00, 0xAC, 0x01, 0x41, 0x00, 0xAC, 0x00, 0x42, 0x00, 0xAD, 0x00 - .byte 0x43, 0x00, 0xAE, 0x00, 0x44, 0x00, 0xAF, 0x00, 0x45, 0x00, 0xB0, 0x00, 0x46, 0x00, 0xB1, 0x00 - .byte 0x47, 0x00, 0xB2, 0x00, 0x48, 0x00, 0xB3, 0x00, 0x49, 0x00, 0xB4, 0x00, 0x4A, 0x00, 0xB5, 0x00 - .byte 0x4B, 0x00, 0xB6, 0x00, 0x4C, 0x00, 0xB7, 0x00, 0x4D, 0x00, 0xB8, 0x00, 0x4E, 0x00, 0xB9, 0x00 - .byte 0x4F, 0x00, 0xBA, 0x00, 0x50, 0x00, 0xBB, 0x00, 0x51, 0x00, 0xBC, 0x00, 0x52, 0x00, 0xBD, 0x00 - .byte 0x53, 0x00, 0xBE, 0x00, 0x54, 0x00, 0xBF, 0x00, 0x55, 0x00, 0xC0, 0x00, 0x56, 0x00, 0xC1, 0x00 - .byte 0x57, 0x00, 0xC2, 0x00, 0x58, 0x00, 0xC3, 0x00, 0x59, 0x00, 0xC4, 0x00, 0x5A, 0x00, 0xC5, 0x00 - .byte 0x61, 0x00, 0xC6, 0x00, 0x62, 0x00, 0xC7, 0x00, 0x63, 0x00, 0xC8, 0x00, 0x64, 0x00, 0xC9, 0x00 - .byte 0x65, 0x00, 0xCA, 0x00, 0x66, 0x00, 0xCB, 0x00, 0x67, 0x00, 0xCC, 0x00, 0x68, 0x00, 0xCD, 0x00 - .byte 0x69, 0x00, 0xCE, 0x00, 0x6A, 0x00, 0xCF, 0x00, 0x6B, 0x00, 0xD0, 0x00, 0x6C, 0x00, 0xD1, 0x00 - .byte 0x6D, 0x00, 0xD2, 0x00, 0x6E, 0x00, 0xD3, 0x00, 0x6F, 0x00, 0xD4, 0x00, 0x70, 0x00, 0xD5, 0x00 - .byte 0x71, 0x00, 0xD6, 0x00, 0x72, 0x00, 0xD7, 0x00, 0x73, 0x00, 0xD8, 0x00, 0x74, 0x00, 0xD9, 0x00 - .byte 0x75, 0x00, 0xDA, 0x00, 0x76, 0x00, 0xDB, 0x00, 0x77, 0x00, 0xDC, 0x00, 0x78, 0x00, 0xDD, 0x00 - .byte 0x79, 0x00, 0xDE, 0x00, 0x7A, 0x00, 0xDF, 0x00, 0x81, 0x00, 0x02, 0x00, 0x82, 0x00, 0x03, 0x00 - .byte 0x83, 0x00, 0x04, 0x00, 0x84, 0x00, 0x05, 0x00, 0x85, 0x00, 0x06, 0x00, 0x86, 0x00, 0x07, 0x00 - .byte 0x87, 0x00, 0x08, 0x00, 0x88, 0x00, 0x09, 0x00, 0x89, 0x00, 0x0A, 0x00, 0x8A, 0x00, 0x0B, 0x00 - .byte 0x8B, 0x00, 0x0C, 0x00, 0x8C, 0x00, 0x0D, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x8E, 0x00, 0x0F, 0x00 - .byte 0x8F, 0x00, 0x10, 0x00, 0x90, 0x00, 0x11, 0x00, 0x91, 0x00, 0x12, 0x00, 0x92, 0x00, 0x13, 0x00 - .byte 0x93, 0x00, 0x14, 0x00, 0x94, 0x00, 0x15, 0x00, 0x95, 0x00, 0x16, 0x00, 0x96, 0x00, 0x17, 0x00 - .byte 0x97, 0x00, 0x18, 0x00, 0x98, 0x00, 0x19, 0x00, 0x99, 0x00, 0x1A, 0x00, 0x9A, 0x00, 0x1B, 0x00 - .byte 0x9B, 0x00, 0x1C, 0x00, 0x9C, 0x00, 0x1D, 0x00, 0x9D, 0x00, 0x1E, 0x00, 0x9E, 0x00, 0x1F, 0x00 - .byte 0x9F, 0x00, 0x20, 0x00, 0xA0, 0x00, 0x21, 0x00, 0xA1, 0x00, 0x22, 0x00, 0xA2, 0x00, 0x23, 0x00 - .byte 0xA3, 0x00, 0x24, 0x00, 0xA4, 0x00, 0x25, 0x00, 0xA5, 0x00, 0x26, 0x00, 0xA6, 0x00, 0x27, 0x00 - .byte 0xA7, 0x00, 0x28, 0x00, 0xA8, 0x00, 0x29, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0xAA, 0x00, 0x2B, 0x00 - .byte 0xAB, 0x00, 0x2C, 0x00, 0xAC, 0x00, 0x2D, 0x00, 0xAD, 0x00, 0x2E, 0x00, 0xAE, 0x00, 0x2F, 0x00 - .byte 0xAF, 0x00, 0x30, 0x00, 0xB0, 0x00, 0x31, 0x00, 0xB1, 0x00, 0x32, 0x00, 0xB2, 0x00, 0x33, 0x00 - .byte 0xB3, 0x00, 0x34, 0x00, 0xB4, 0x00, 0x35, 0x00, 0xB5, 0x00, 0x36, 0x00, 0xB6, 0x00, 0x37, 0x00 - .byte 0xB7, 0x00, 0x38, 0x00, 0xB8, 0x00, 0x39, 0x00, 0xB9, 0x00, 0x3A, 0x00, 0xBA, 0x00, 0x3B, 0x00 - .byte 0xBB, 0x00, 0x3C, 0x00, 0xBC, 0x00, 0x3D, 0x00, 0xBD, 0x00, 0x3E, 0x00, 0xBE, 0x00, 0x3F, 0x00 - .byte 0xBF, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x41, 0x00, 0xC1, 0x00, 0x42, 0x00, 0xC2, 0x00, 0x43, 0x00 - .byte 0xC3, 0x00, 0x44, 0x00, 0xC4, 0x00, 0x45, 0x00, 0xC5, 0x00, 0x46, 0x00, 0xC6, 0x00, 0x47, 0x00 - .byte 0xC7, 0x00, 0x48, 0x00, 0xC8, 0x00, 0x49, 0x00, 0xC9, 0x00, 0x4A, 0x00, 0xCA, 0x00, 0x4B, 0x00 - .byte 0xCB, 0x00, 0x4C, 0x00, 0xCC, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x4E, 0x00, 0xCF, 0x00, 0x4F, 0x00 - .byte 0xD2, 0x00, 0x50, 0x00, 0xD3, 0x00, 0x51, 0x00, 0xE1, 0x00, 0x52, 0x00, 0xE2, 0x00, 0x53, 0x00 - .byte 0xE3, 0x00, 0x54, 0x00, 0xE4, 0x00, 0x55, 0x00, 0xE5, 0x00, 0x56, 0x00, 0xE6, 0x00, 0x57, 0x00 - .byte 0xE7, 0x00, 0x58, 0x00, 0xE8, 0x00, 0x59, 0x00, 0xE9, 0x00, 0x5A, 0x00, 0xEA, 0x00, 0x5B, 0x00 - .byte 0xEB, 0x00, 0x5C, 0x00, 0xEC, 0x00, 0x5D, 0x00, 0xED, 0x00, 0x5E, 0x00, 0xEE, 0x00, 0x5F, 0x00 - .byte 0xEF, 0x00, 0x60, 0x00, 0xF0, 0x00, 0x61, 0x00, 0xF1, 0x00, 0x62, 0x00, 0xF2, 0x00, 0x63, 0x00 - .byte 0xF3, 0x00, 0x64, 0x00, 0xF4, 0x00, 0x65, 0x00, 0xF5, 0x00, 0x66, 0x00, 0xF6, 0x00, 0x67, 0x00 - .byte 0xF7, 0x00, 0x68, 0x00, 0xF8, 0x00, 0x69, 0x00, 0xF9, 0x00, 0x6A, 0x00, 0xFA, 0x00, 0x6B, 0x00 - .byte 0xFB, 0x00, 0x6C, 0x00, 0xFC, 0x00, 0x6D, 0x00, 0xFD, 0x00, 0x6E, 0x00, 0xFE, 0x00, 0x6F, 0x00 - .byte 0xFF, 0x00, 0x70, 0x00, 0x00, 0x01, 0x71, 0x00, 0x01, 0x01, 0x72, 0x00, 0x02, 0x01, 0x73, 0x00 - .byte 0x03, 0x01, 0x74, 0x00, 0x04, 0x01, 0x75, 0x00, 0x05, 0x01, 0x76, 0x00, 0x06, 0x01, 0x77, 0x00 - .byte 0x07, 0x01, 0x78, 0x00, 0x08, 0x01, 0x79, 0x00, 0x09, 0x01, 0x7A, 0x00, 0x0A, 0x01, 0x7B, 0x00 - .byte 0x0B, 0x01, 0x7C, 0x00, 0x0C, 0x01, 0x7D, 0x00, 0x0D, 0x01, 0x7E, 0x00, 0x0E, 0x01, 0x7F, 0x00 - .byte 0x0F, 0x01, 0x80, 0x00, 0x10, 0x01, 0x81, 0x00, 0x11, 0x01, 0x82, 0x00, 0x12, 0x01, 0x83, 0x00 - .byte 0x13, 0x01, 0x84, 0x00, 0x14, 0x01, 0x85, 0x00, 0x15, 0x01, 0x86, 0x00, 0x16, 0x01, 0x87, 0x00 - .byte 0x17, 0x01, 0x88, 0x00, 0x18, 0x01, 0x89, 0x00, 0x19, 0x01, 0x8A, 0x00, 0x1A, 0x01, 0x8B, 0x00 - .byte 0x1B, 0x01, 0x8C, 0x00, 0x1C, 0x01, 0x8D, 0x00, 0x1D, 0x01, 0x8E, 0x00, 0x1E, 0x01, 0x8F, 0x00 - .byte 0x1F, 0x01, 0x90, 0x00, 0x20, 0x01, 0x91, 0x00, 0x21, 0x01, 0x92, 0x00, 0x22, 0x01, 0x93, 0x00 - .byte 0x23, 0x01, 0x94, 0x00, 0x24, 0x01, 0x95, 0x00, 0x25, 0x01, 0x96, 0x00, 0x26, 0x01, 0x97, 0x00 - .byte 0x27, 0x01, 0x98, 0x00, 0x28, 0x01, 0x99, 0x00, 0x29, 0x01, 0x9A, 0x00, 0x2A, 0x01, 0x9B, 0x00 - .byte 0x2B, 0x01, 0x9C, 0x00, 0x2C, 0x01, 0x9D, 0x00, 0x2D, 0x01, 0x9E, 0x00, 0x2F, 0x01, 0x9F, 0x00 - .byte 0x32, 0x01, 0xA0, 0x00, 0x33, 0x01, 0xA1, 0x00, 0x40, 0x01, 0xEA, 0x00, 0x41, 0x01, 0xEB, 0x00 - .byte 0x42, 0x01, 0xE8, 0x00, 0x43, 0x01, 0xE9, 0x00, 0x46, 0x01, 0xE6, 0x00, 0x47, 0x01, 0xE5, 0x00 - .byte 0x48, 0x01, 0xEE, 0x00, 0x49, 0x01, 0xEF, 0x00, 0x4A, 0x01, 0xE4, 0x00, 0x4B, 0x01, 0x12, 0x01 - .byte 0x4D, 0x01, 0x1C, 0x01, 0x4E, 0x01, 0x1E, 0x01, 0x4F, 0x01, 0x1D, 0x01, 0x50, 0x01, 0x1B, 0x01 - .byte 0x7C, 0x01, 0x9F, 0x01, 0x7D, 0x01, 0xA0, 0x01, 0x80, 0x01, 0x5F, 0x01, 0x81, 0x01, 0x60, 0x01 - .byte 0x82, 0x01, 0x61, 0x01, 0x84, 0x01, 0x63, 0x01, 0x87, 0x01, 0x66, 0x01, 0x89, 0x01, 0x68, 0x01 - .byte 0x8A, 0x01, 0x69, 0x01, 0x8B, 0x01, 0x6A, 0x01, 0x8C, 0x01, 0x6B, 0x01, 0x8D, 0x01, 0x6C, 0x01 - .byte 0x8E, 0x01, 0x6D, 0x01, 0x8F, 0x01, 0x6E, 0x01, 0x93, 0x01, 0x72, 0x01, 0x94, 0x01, 0x73, 0x01 - .byte 0x96, 0x01, 0x75, 0x01, 0x9A, 0x01, 0x79, 0x01, 0x9B, 0x01, 0x7A, 0x01, 0x9C, 0x01, 0x7B, 0x01 - .byte 0x9F, 0x01, 0x7E, 0x01, 0xA0, 0x01, 0x7F, 0x01, 0xA1, 0x01, 0x80, 0x01, 0xA2, 0x01, 0x81, 0x01 - .byte 0xA4, 0x01, 0x83, 0x01, 0xA7, 0x01, 0x86, 0x01, 0xA9, 0x01, 0x88, 0x01, 0xAA, 0x01, 0x89, 0x01 - .byte 0xAB, 0x01, 0x8A, 0x01, 0xAC, 0x01, 0x8B, 0x01, 0xAD, 0x01, 0x8C, 0x01, 0xAE, 0x01, 0x8D, 0x01 - .byte 0xAF, 0x01, 0x8E, 0x01, 0xB3, 0x01, 0x92, 0x01, 0xB4, 0x01, 0x93, 0x01, 0xB6, 0x01, 0x95, 0x01 - .byte 0xBA, 0x01, 0x99, 0x01, 0xBB, 0x01, 0x9A, 0x01, 0xBC, 0x01, 0x9B, 0x01 - - .global MOD83_0223AD6C + .byte 0x00, 0x00, 0xFF, 0xFF, 0x21, 0x00, 0xE1, 0x00, 0x23, 0x00, 0xC0, 0x01, 0x25, 0x00, 0xD2, 0x01 + .byte 0x27, 0x00, 0xEA, 0x00, 0x28, 0x00, 0xEB, 0x00, 0x29, 0x00, 0xBF, 0x01, 0x2A, 0x00, 0xBD, 0x01 + .byte 0x2B, 0x00, 0xAD, 0x01, 0x2C, 0x00, 0xBE, 0x01, 0x2E, 0x00, 0xB1, 0x01, 0x30, 0x00, 0xA2, 0x00 + .byte 0x31, 0x00, 0xA3, 0x00, 0x32, 0x00, 0xA4, 0x00, 0x33, 0x00, 0xA5, 0x00, 0x34, 0x00, 0xA6, 0x00 + .byte 0x35, 0x00, 0xA7, 0x00, 0x36, 0x00, 0xA8, 0x00, 0x37, 0x00, 0xA9, 0x00, 0x38, 0x00, 0xAA, 0x00 + .byte 0x39, 0x00, 0xAB, 0x00, 0x3A, 0x00, 0xC4, 0x01, 0x3B, 0x00, 0xC5, 0x01, 0x3C, 0x00, 0xEC, 0x00 + .byte 0x3E, 0x00, 0xED, 0x00, 0x3F, 0x00, 0xAC, 0x01, 0x41, 0x00, 0xAC, 0x00, 0x42, 0x00, 0xAD, 0x00 + .byte 0x43, 0x00, 0xAE, 0x00, 0x44, 0x00, 0xAF, 0x00, 0x45, 0x00, 0xB0, 0x00, 0x46, 0x00, 0xB1, 0x00 + .byte 0x47, 0x00, 0xB2, 0x00, 0x48, 0x00, 0xB3, 0x00, 0x49, 0x00, 0xB4, 0x00, 0x4A, 0x00, 0xB5, 0x00 + .byte 0x4B, 0x00, 0xB6, 0x00, 0x4C, 0x00, 0xB7, 0x00, 0x4D, 0x00, 0xB8, 0x00, 0x4E, 0x00, 0xB9, 0x00 + .byte 0x4F, 0x00, 0xBA, 0x00, 0x50, 0x00, 0xBB, 0x00, 0x51, 0x00, 0xBC, 0x00, 0x52, 0x00, 0xBD, 0x00 + .byte 0x53, 0x00, 0xBE, 0x00, 0x54, 0x00, 0xBF, 0x00, 0x55, 0x00, 0xC0, 0x00, 0x56, 0x00, 0xC1, 0x00 + .byte 0x57, 0x00, 0xC2, 0x00, 0x58, 0x00, 0xC3, 0x00, 0x59, 0x00, 0xC4, 0x00, 0x5A, 0x00, 0xC5, 0x00 + .byte 0x61, 0x00, 0xC6, 0x00, 0x62, 0x00, 0xC7, 0x00, 0x63, 0x00, 0xC8, 0x00, 0x64, 0x00, 0xC9, 0x00 + .byte 0x65, 0x00, 0xCA, 0x00, 0x66, 0x00, 0xCB, 0x00, 0x67, 0x00, 0xCC, 0x00, 0x68, 0x00, 0xCD, 0x00 + .byte 0x69, 0x00, 0xCE, 0x00, 0x6A, 0x00, 0xCF, 0x00, 0x6B, 0x00, 0xD0, 0x00, 0x6C, 0x00, 0xD1, 0x00 + .byte 0x6D, 0x00, 0xD2, 0x00, 0x6E, 0x00, 0xD3, 0x00, 0x6F, 0x00, 0xD4, 0x00, 0x70, 0x00, 0xD5, 0x00 + .byte 0x71, 0x00, 0xD6, 0x00, 0x72, 0x00, 0xD7, 0x00, 0x73, 0x00, 0xD8, 0x00, 0x74, 0x00, 0xD9, 0x00 + .byte 0x75, 0x00, 0xDA, 0x00, 0x76, 0x00, 0xDB, 0x00, 0x77, 0x00, 0xDC, 0x00, 0x78, 0x00, 0xDD, 0x00 + .byte 0x79, 0x00, 0xDE, 0x00, 0x7A, 0x00, 0xDF, 0x00, 0x81, 0x00, 0x02, 0x00, 0x82, 0x00, 0x03, 0x00 + .byte 0x83, 0x00, 0x04, 0x00, 0x84, 0x00, 0x05, 0x00, 0x85, 0x00, 0x06, 0x00, 0x86, 0x00, 0x07, 0x00 + .byte 0x87, 0x00, 0x08, 0x00, 0x88, 0x00, 0x09, 0x00, 0x89, 0x00, 0x0A, 0x00, 0x8A, 0x00, 0x0B, 0x00 + .byte 0x8B, 0x00, 0x0C, 0x00, 0x8C, 0x00, 0x0D, 0x00, 0x8D, 0x00, 0x0E, 0x00, 0x8E, 0x00, 0x0F, 0x00 + .byte 0x8F, 0x00, 0x10, 0x00, 0x90, 0x00, 0x11, 0x00, 0x91, 0x00, 0x12, 0x00, 0x92, 0x00, 0x13, 0x00 + .byte 0x93, 0x00, 0x14, 0x00, 0x94, 0x00, 0x15, 0x00, 0x95, 0x00, 0x16, 0x00, 0x96, 0x00, 0x17, 0x00 + .byte 0x97, 0x00, 0x18, 0x00, 0x98, 0x00, 0x19, 0x00, 0x99, 0x00, 0x1A, 0x00, 0x9A, 0x00, 0x1B, 0x00 + .byte 0x9B, 0x00, 0x1C, 0x00, 0x9C, 0x00, 0x1D, 0x00, 0x9D, 0x00, 0x1E, 0x00, 0x9E, 0x00, 0x1F, 0x00 + .byte 0x9F, 0x00, 0x20, 0x00, 0xA0, 0x00, 0x21, 0x00, 0xA1, 0x00, 0x22, 0x00, 0xA2, 0x00, 0x23, 0x00 + .byte 0xA3, 0x00, 0x24, 0x00, 0xA4, 0x00, 0x25, 0x00, 0xA5, 0x00, 0x26, 0x00, 0xA6, 0x00, 0x27, 0x00 + .byte 0xA7, 0x00, 0x28, 0x00, 0xA8, 0x00, 0x29, 0x00, 0xA9, 0x00, 0x2A, 0x00, 0xAA, 0x00, 0x2B, 0x00 + .byte 0xAB, 0x00, 0x2C, 0x00, 0xAC, 0x00, 0x2D, 0x00, 0xAD, 0x00, 0x2E, 0x00, 0xAE, 0x00, 0x2F, 0x00 + .byte 0xAF, 0x00, 0x30, 0x00, 0xB0, 0x00, 0x31, 0x00, 0xB1, 0x00, 0x32, 0x00, 0xB2, 0x00, 0x33, 0x00 + .byte 0xB3, 0x00, 0x34, 0x00, 0xB4, 0x00, 0x35, 0x00, 0xB5, 0x00, 0x36, 0x00, 0xB6, 0x00, 0x37, 0x00 + .byte 0xB7, 0x00, 0x38, 0x00, 0xB8, 0x00, 0x39, 0x00, 0xB9, 0x00, 0x3A, 0x00, 0xBA, 0x00, 0x3B, 0x00 + .byte 0xBB, 0x00, 0x3C, 0x00, 0xBC, 0x00, 0x3D, 0x00, 0xBD, 0x00, 0x3E, 0x00, 0xBE, 0x00, 0x3F, 0x00 + .byte 0xBF, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x41, 0x00, 0xC1, 0x00, 0x42, 0x00, 0xC2, 0x00, 0x43, 0x00 + .byte 0xC3, 0x00, 0x44, 0x00, 0xC4, 0x00, 0x45, 0x00, 0xC5, 0x00, 0x46, 0x00, 0xC6, 0x00, 0x47, 0x00 + .byte 0xC7, 0x00, 0x48, 0x00, 0xC8, 0x00, 0x49, 0x00, 0xC9, 0x00, 0x4A, 0x00, 0xCA, 0x00, 0x4B, 0x00 + .byte 0xCB, 0x00, 0x4C, 0x00, 0xCC, 0x00, 0x4D, 0x00, 0xCD, 0x00, 0x4E, 0x00, 0xCF, 0x00, 0x4F, 0x00 + .byte 0xD2, 0x00, 0x50, 0x00, 0xD3, 0x00, 0x51, 0x00, 0xE1, 0x00, 0x52, 0x00, 0xE2, 0x00, 0x53, 0x00 + .byte 0xE3, 0x00, 0x54, 0x00, 0xE4, 0x00, 0x55, 0x00, 0xE5, 0x00, 0x56, 0x00, 0xE6, 0x00, 0x57, 0x00 + .byte 0xE7, 0x00, 0x58, 0x00, 0xE8, 0x00, 0x59, 0x00, 0xE9, 0x00, 0x5A, 0x00, 0xEA, 0x00, 0x5B, 0x00 + .byte 0xEB, 0x00, 0x5C, 0x00, 0xEC, 0x00, 0x5D, 0x00, 0xED, 0x00, 0x5E, 0x00, 0xEE, 0x00, 0x5F, 0x00 + .byte 0xEF, 0x00, 0x60, 0x00, 0xF0, 0x00, 0x61, 0x00, 0xF1, 0x00, 0x62, 0x00, 0xF2, 0x00, 0x63, 0x00 + .byte 0xF3, 0x00, 0x64, 0x00, 0xF4, 0x00, 0x65, 0x00, 0xF5, 0x00, 0x66, 0x00, 0xF6, 0x00, 0x67, 0x00 + .byte 0xF7, 0x00, 0x68, 0x00, 0xF8, 0x00, 0x69, 0x00, 0xF9, 0x00, 0x6A, 0x00, 0xFA, 0x00, 0x6B, 0x00 + .byte 0xFB, 0x00, 0x6C, 0x00, 0xFC, 0x00, 0x6D, 0x00, 0xFD, 0x00, 0x6E, 0x00, 0xFE, 0x00, 0x6F, 0x00 + .byte 0xFF, 0x00, 0x70, 0x00, 0x00, 0x01, 0x71, 0x00, 0x01, 0x01, 0x72, 0x00, 0x02, 0x01, 0x73, 0x00 + .byte 0x03, 0x01, 0x74, 0x00, 0x04, 0x01, 0x75, 0x00, 0x05, 0x01, 0x76, 0x00, 0x06, 0x01, 0x77, 0x00 + .byte 0x07, 0x01, 0x78, 0x00, 0x08, 0x01, 0x79, 0x00, 0x09, 0x01, 0x7A, 0x00, 0x0A, 0x01, 0x7B, 0x00 + .byte 0x0B, 0x01, 0x7C, 0x00, 0x0C, 0x01, 0x7D, 0x00, 0x0D, 0x01, 0x7E, 0x00, 0x0E, 0x01, 0x7F, 0x00 + .byte 0x0F, 0x01, 0x80, 0x00, 0x10, 0x01, 0x81, 0x00, 0x11, 0x01, 0x82, 0x00, 0x12, 0x01, 0x83, 0x00 + .byte 0x13, 0x01, 0x84, 0x00, 0x14, 0x01, 0x85, 0x00, 0x15, 0x01, 0x86, 0x00, 0x16, 0x01, 0x87, 0x00 + .byte 0x17, 0x01, 0x88, 0x00, 0x18, 0x01, 0x89, 0x00, 0x19, 0x01, 0x8A, 0x00, 0x1A, 0x01, 0x8B, 0x00 + .byte 0x1B, 0x01, 0x8C, 0x00, 0x1C, 0x01, 0x8D, 0x00, 0x1D, 0x01, 0x8E, 0x00, 0x1E, 0x01, 0x8F, 0x00 + .byte 0x1F, 0x01, 0x90, 0x00, 0x20, 0x01, 0x91, 0x00, 0x21, 0x01, 0x92, 0x00, 0x22, 0x01, 0x93, 0x00 + .byte 0x23, 0x01, 0x94, 0x00, 0x24, 0x01, 0x95, 0x00, 0x25, 0x01, 0x96, 0x00, 0x26, 0x01, 0x97, 0x00 + .byte 0x27, 0x01, 0x98, 0x00, 0x28, 0x01, 0x99, 0x00, 0x29, 0x01, 0x9A, 0x00, 0x2A, 0x01, 0x9B, 0x00 + .byte 0x2B, 0x01, 0x9C, 0x00, 0x2C, 0x01, 0x9D, 0x00, 0x2D, 0x01, 0x9E, 0x00, 0x2F, 0x01, 0x9F, 0x00 + .byte 0x32, 0x01, 0xA0, 0x00, 0x33, 0x01, 0xA1, 0x00, 0x40, 0x01, 0xEA, 0x00, 0x41, 0x01, 0xEB, 0x00 + .byte 0x42, 0x01, 0xE8, 0x00, 0x43, 0x01, 0xE9, 0x00, 0x46, 0x01, 0xE6, 0x00, 0x47, 0x01, 0xE5, 0x00 + .byte 0x48, 0x01, 0xEE, 0x00, 0x49, 0x01, 0xEF, 0x00, 0x4A, 0x01, 0xE4, 0x00, 0x4B, 0x01, 0x12, 0x01 + .byte 0x4D, 0x01, 0x1C, 0x01, 0x4E, 0x01, 0x1E, 0x01, 0x4F, 0x01, 0x1D, 0x01, 0x50, 0x01, 0x1B, 0x01 + .byte 0x7C, 0x01, 0x9F, 0x01, 0x7D, 0x01, 0xA0, 0x01, 0x80, 0x01, 0x5F, 0x01, 0x81, 0x01, 0x60, 0x01 + .byte 0x82, 0x01, 0x61, 0x01, 0x84, 0x01, 0x63, 0x01, 0x87, 0x01, 0x66, 0x01, 0x89, 0x01, 0x68, 0x01 + .byte 0x8A, 0x01, 0x69, 0x01, 0x8B, 0x01, 0x6A, 0x01, 0x8C, 0x01, 0x6B, 0x01, 0x8D, 0x01, 0x6C, 0x01 + .byte 0x8E, 0x01, 0x6D, 0x01, 0x8F, 0x01, 0x6E, 0x01, 0x93, 0x01, 0x72, 0x01, 0x94, 0x01, 0x73, 0x01 + .byte 0x96, 0x01, 0x75, 0x01, 0x9A, 0x01, 0x79, 0x01, 0x9B, 0x01, 0x7A, 0x01, 0x9C, 0x01, 0x7B, 0x01 + .byte 0x9F, 0x01, 0x7E, 0x01, 0xA0, 0x01, 0x7F, 0x01, 0xA1, 0x01, 0x80, 0x01, 0xA2, 0x01, 0x81, 0x01 + .byte 0xA4, 0x01, 0x83, 0x01, 0xA7, 0x01, 0x86, 0x01, 0xA9, 0x01, 0x88, 0x01, 0xAA, 0x01, 0x89, 0x01 + .byte 0xAB, 0x01, 0x8A, 0x01, 0xAC, 0x01, 0x8B, 0x01, 0xAD, 0x01, 0x8C, 0x01, 0xAE, 0x01, 0x8D, 0x01 + .byte 0xAF, 0x01, 0x8E, 0x01, 0xB3, 0x01, 0x92, 0x01, 0xB4, 0x01, 0x93, 0x01, 0xB6, 0x01, 0x95, 0x01 + .byte 0xBA, 0x01, 0x99, 0x01, 0xBB, 0x01, 0x9A, 0x01, 0xBC, 0x01, 0x9B, 0x01 + + .global MOD83_0223AD6C MOD83_0223AD6C: ; 0x0223AD6C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AD98 + .global MOD83_0223AD98 MOD83_0223AD98: ; 0x0223AD98 - .word 0x12, MOD83_022300AC - .word 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_022300AC + .word 0x13, MOD83_0222FDE8 - .global MOD83_0223ADA8 + .global MOD83_0223ADA8 MOD83_0223ADA8: ; 0x0223ADA8 - .word 0x12, MOD83_02230010 - .word 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_02230010 + .word 0x13, MOD83_0222FDE8 - .global MOD83_0223ADB8 + .global MOD83_0223ADB8 MOD83_0223ADB8: ; 0x0223ADB8 - .word 0x12, MOD83_02230048 - .word 0x13, MOD83_02230084 + .word 0x12, MOD83_02230048 + .word 0x13, MOD83_02230084 - .global MOD83_0223ADC8 + .global MOD83_0223ADC8 MOD83_0223ADC8: ; 0x0223ADC8 - .word 0x12, MOD83_0222FB5C, 0x13, MOD83_0222FDE8 + .word 0x12, MOD83_0222FB5C, 0x13, MOD83_0222FDE8 - .global MOD83_0223ADD8 + .global MOD83_0223ADD8 MOD83_0223ADD8: ; 0x0223ADD8 - .word 0x12, MOD83_0222FBBC - .word 0x13, MOD83_0222FFD8 - .word 0x0C, MOD83_02230118 - .word 0x0D, MOD83_0223019C - .word 0x0E, MOD83_022301D4 + .word 0x12, MOD83_0222FBBC + .word 0x13, MOD83_0222FFD8 + .word 0x0C, MOD83_02230118 + .word 0x0D, MOD83_0223019C + .word 0x0E, MOD83_022301D4 - .global MOD83_0223AE00 + .global MOD83_0223AE00 MOD83_0223AE00: ; 0x0223AE00 - .word 0x00, MOD83_02239414, 0x00, 0x00 - .byte 0x00, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 + .word 0x00, MOD83_02239414, 0x00, 0x00 + .byte 0x00, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AE20 + .global MOD83_0223AE20 MOD83_0223AE20: ; 0x0223AE20 - .word 0x0F, MOD83_0222FE24 - .word 0x14, MOD83_0222FF10 - .word 0x10, MOD83_0222FEA0 - .word 0x11, MOD83_022300F8 + .word 0x0F, MOD83_0222FE24 + .word 0x14, MOD83_0222FF10 + .word 0x10, MOD83_0222FEA0 + .word 0x11, MOD83_022300F8 - .global MOD83_0223AE40 + .global MOD83_0223AE40 MOD83_0223AE40: ; 0x0223AE40 - .word 0x40, MOD83_02231930 - .word 0x41, MOD83_022319D0 + .word 0x40, MOD83_02231930 + .word 0x41, MOD83_022319D0 - .global MOD83_0223AE50 + .global MOD83_0223AE50 MOD83_0223AE50: ; 0x0223AE50 - .byte 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00 - .word 0x41, MOD83_022319D0 + .byte 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00 + .word 0x41, MOD83_022319D0 - .global MOD83_0223AE60 + .global MOD83_0223AE60 MOD83_0223AE60: ; 0x0223AE60 - .byte 0x40, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .word 0x41, MOD83_022319D0 - .byte 0x2A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .word 0x2B, MOD83_022318B0 - .word 0x2C, MOD83_022318E0 - .byte 0x2D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x40, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 + .word 0x41, MOD83_022319D0 + .byte 0x2A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .word 0x2B, MOD83_022318B0 + .word 0x2C, MOD83_022318E0 + .byte 0x2D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .global MOD83_0223AE90 + .global MOD83_0223AE90 MOD83_0223AE90: ; 0x0223AE90 - .word 0x00, MOD83_02239414 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 + .word 0x00, MOD83_02239414 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223AEB0 + .global MOD83_0223AEB0 MOD83_0223AEB0: ; 0x0223AEB0 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x28, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0xA1, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x31, 0x00, 0x00, 0x00, 0x1D, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x85, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x29, 0x00, 0x00, 0x00, 0xD9, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x00 - .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x59, 0x1C, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x61, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x34, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x37, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x39, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x3A, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x38, 0x00, 0x00, 0x00, 0x9D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00 - .byte 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0x00, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x3B, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x3C, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD83_0223B240 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x28, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0xA1, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x31, 0x00, 0x00, 0x00, 0x1D, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x85, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x29, 0x00, 0x00, 0x00, 0xD9, 0x1B, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x00 + .byte 0x24, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 + .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x59, 0x1C, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x61, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x34, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x37, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x39, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x3A, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x38, 0x00, 0x00, 0x00, 0x9D, 0x1D, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00 + .byte 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0x00, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x3B, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x00 + .byte 0x3C, 0x00, 0x00, 0x00, 0x49, 0x1A, 0x23, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD83_0223B240 MOD83_0223B240: ; 0x0223B240 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00 - .byte 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x01, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00 + .byte 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global MOD83_0223B280 + .global MOD83_0223B280 MOD83_0223B280: ; 0x0223B280 - .byte 0x00, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00 + .byte 0x00, 0x02, 0x01, 0x03, 0x04, 0x05, 0x00, 0x00 - .global MOD83_0223B288 + .global MOD83_0223B288 MOD83_0223B288: ; 0x0223B288 - .word 0x00 - .ifdef DIAMOND - .word 0x14 - .word 0x12 - .word 0x16 - .word 0x18 - .word 0x1A - .else - .word 0x15 - .word 0x13 - .word 0x17 - .word 0x19 - .word 0x1B - .endif - - .global MOD83_0223B2A0 + .word 0x00 + .ifdef DIAMOND + .word 0x14 + .word 0x12 + .word 0x16 + .word 0x18 + .word 0x1A + .else + .word 0x15 + .word 0x13 + .word 0x17 + .word 0x19 + .word 0x1B + .endif + + .global MOD83_0223B2A0 MOD83_0223B2A0: ; 0x0223B2A0 - .word 0x00000000, 0x00000001, 0x00000000, 0x00000002 - .word 0x00000003, 0x00000004 + .word 0x00000000, 0x00000001, 0x00000000, 0x00000002 + .word 0x00000003, 0x00000004 - .global MOD83_0223B2B8 + .global MOD83_0223B2B8 MOD83_0223B2B8: ; 0x0223B2B8 - .word 0x0000000F, 0x00000013, 0x00000039, 0x00000046 - .word 0x00000094, 0x000000F9, 0x0000007F, 0x00000123 + .word 0x0000000F, 0x00000013, 0x00000039, 0x00000046 + .word 0x00000094, 0x000000F9, 0x0000007F, 0x00000123 - .global MOD83_0223B2D8 + .global MOD83_0223B2D8 MOD83_0223B2D8: ; 0x0223B2D8 - .word 0x00000000, 0x00000025, 0x0000001F, 0x00000020 - .word 0x00000020, 0x00000005, 0x00000007, 0x00000021 + .word 0x00000000, 0x00000025, 0x0000001F, 0x00000020 + .word 0x00000020, 0x00000005, 0x00000007, 0x00000021 - .global MOD83_InvalidItemIds + .global MOD83_InvalidItemIds MOD83_InvalidItemIds: ; 0x0223B2F8 - .short 0x0005 ; RS_ITEM_SAFARI_BALL - .short 0x0034 ; RS_ITEM_034 - .short 0x0035 ; RS_ITEM_035 - .short 0x0036 ; RS_ITEM_036 - .short 0x0037 ; RS_ITEM_037 - .short 0x0038 ; RS_ITEM_038 - .short 0x0039 ; RS_ITEM_039 - .short 0x003A ; RS_ITEM_03A - .short 0x003B ; RS_ITEM_03B - .short 0x003C ; RS_ITEM_03C - .short 0x003D ; RS_ITEM_03D - .short 0x003E ; RS_ITEM_03E - .short 0x0048 ; RS_ITEM_048 - .short 0x0052 ; RS_ITEM_052 - .short 0x0057 ; RS_ITEM_057 - .short 0x0058 ; RS_ITEM_058 - .short 0x0059 ; RS_ITEM_059 - .short 0x005A ; RS_ITEM_05A - .short 0x005B ; RS_ITEM_05B - .short 0x005C ; RS_ITEM_05C - .short 0x0063 ; RS_ITEM_063 - .short 0x0064 ; RS_ITEM_064 - .short 0x0065 ; RS_ITEM_065 - .short 0x0066 ; RS_ITEM_066 - .short 0x0069 ; RS_ITEM_069 - .short 0x0070 ; RS_ITEM_070 - .short 0x0071 ; RS_ITEM_071 - .short 0x0072 ; RS_ITEM_072 - .short 0x0073 ; RS_ITEM_073 - .short 0x0074 ; RS_ITEM_074 - .short 0x0075 ; RS_ITEM_075 - .short 0x0076 ; RS_ITEM_076 - .short 0x0077 ; RS_ITEM_077 - .short 0x0078 ; RS_ITEM_078 - .short 0x0079 ; RS_ITEM_ORANGE_MAIL - .short 0x007A ; RS_ITEM_HARBOR_MAIL - .short 0x007B ; RS_ITEM_GLITTER_MAIL - .short 0x007C ; RS_ITEM_MECH_MAIL - .short 0x007D ; RS_ITEM_WOOD_MAIL - .short 0x007E ; RS_ITEM_WAVE_MAIL - .short 0x007F ; RS_ITEM_BEAD_MAIL - .short 0x0080 ; RS_ITEM_SHADOW_MAIL - .short 0x0081 ; RS_ITEM_TROPIC_MAIL - .short 0x0082 ; RS_ITEM_DREAM_MAIL - .short 0x0083 ; RS_ITEM_FAB_MAIL - .short 0x0084 ; RS_ITEM_RETRO_MAIL - .short 0x00B0 ; RS_ITEM_0B0 - .short 0x00B1 ; RS_ITEM_0B1 - .short 0x00B2 ; RS_ITEM_0B2 - .short 0x00E2 ; RS_ITEM_0E2 - .short 0x00E3 ; RS_ITEM_0E3 - .short 0x00E4 ; RS_ITEM_0E4 - .short 0x00E5 ; RS_ITEM_0E5 - .short 0x00E6 ; RS_ITEM_0E6 - .short 0x00E7 ; RS_ITEM_0E7 - .short 0x00E8 ; RS_ITEM_0E8 - .short 0x00E9 ; RS_ITEM_0E9 - .short 0x00EA ; RS_ITEM_0EA - .short 0x00EB ; RS_ITEM_0EB - .short 0x00EC ; RS_ITEM_0EC - .short 0x00ED ; RS_ITEM_0ED - .short 0x00EE ; RS_ITEM_0EE - .short 0x00EF ; RS_ITEM_0EF - .short 0x00F0 ; RS_ITEM_0F0 - .short 0x00F1 ; RS_ITEM_0F1 - .short 0x00F2 ; RS_ITEM_0F2 - .short 0x00F3 ; RS_ITEM_0F3 - .short 0x00F4 ; RS_ITEM_0F4 - .short 0x00F5 ; RS_ITEM_0F5 - .short 0x00F6 ; RS_ITEM_0F6 - .short 0x00F7 ; RS_ITEM_0F7 - .short 0x00F8 ; RS_ITEM_0F8 - .short 0x00F9 ; RS_ITEM_0F9 - .short 0x00FA ; RS_ITEM_0FA - .short 0x00FB ; RS_ITEM_0FB - .short 0x00FC ; RS_ITEM_0FC - .short 0x00FD ; RS_ITEM_0FD - .short 0x0103 ; RS_ITEM_MACH_BIKE - .short 0x0104 ; RS_ITEM_COIN_CASE - .short 0x0105 ; RS_ITEM_ITEMFINDER - .short 0x0106 ; RS_ITEM_OLD_ROD - .short 0x0107 ; RS_ITEM_GOOD_ROD - .short 0x0108 ; RS_ITEM_SUPER_ROD - .short 0x0109 ; RS_ITEM_SS_TICKET - .short 0x010A ; RS_ITEM_CONTEST_PASS - .short 0x010B ; RS_ITEM_10B - .short 0x010C ; RS_ITEM_WAILMER_PAIL - .short 0x010D ; RS_ITEM_DEVON_GOODS - .short 0x010E ; RS_ITEM_SOOT_SACK - .short 0x010F ; RS_ITEM_BASEMENT_KEY - .short 0x0110 ; RS_ITEM_ACRO_BIKE - .short 0x0111 ; RS_ITEM_POKEBLOCK_CASE - .short 0x0112 ; RS_ITEM_LETTER - .short 0x0113 ; RS_ITEM_EON_TICKET - .short 0x0114 ; RS_ITEM_RED_ORB - .short 0x0115 ; RS_ITEM_BLUE_ORB - .short 0x0116 ; RS_ITEM_SCANNER - .short 0x0117 ; RS_ITEM_GO_GOGGLES - .short 0x0118 ; RS_ITEM_METEORITE - .short 0x0119 ; RS_ITEM_ROOM_1_KEY - .short 0x011A ; RS_ITEM_ROOM_2_KEY - .short 0x011B ; RS_ITEM_ROOM_4_KEY - .short 0x011C ; RS_ITEM_ROOM_6_KEY - .short 0x011D ; RS_ITEM_STORAGE_KEY - .short 0x011E ; RS_ITEM_ROOT_FOSSIL - .short 0x011F ; RS_ITEM_CLAW_FOSSIL - .short 0x0120 ; RS_ITEM_DEVON_SCOPE - .short 0x0153 ; RS_ITEM_HM01 - .short 0x0154 ; RS_ITEM_HM02 - .short 0x0155 ; RS_ITEM_HM03 - .short 0x0156 ; RS_ITEM_HM04 - .short 0x0157 ; RS_ITEM_HM05 - .short 0x0158 ; RS_ITEM_HM06 - .short 0x0159 ; RS_ITEM_HM07 - .short 0x015A ; RS_ITEM_HM08 - .short 0x015B ; RS_ITEM_15B - .short 0x015C ; RS_ITEM_15C - .short 0x015D ; RS_ITEM_OAKS_PARCEL - .short 0x015E ; RS_ITEM_POKE_FLUTE - .short 0x015F ; RS_ITEM_SECRET_KEY - .short 0x0160 ; RS_ITEM_BIKE_VOUCHER - .short 0x0161 ; RS_ITEM_GOLD_TEETH - .short 0x0162 ; RS_ITEM_OLD_AMBER - .short 0x0163 ; RS_ITEM_CARD_KEY - .short 0x0164 ; RS_ITEM_LIFT_KEY - .short 0x0165 ; RS_ITEM_HELIX_FOSSIL - .short 0x0166 ; RS_ITEM_DOME_FOSSIL - .short 0x0167 ; RS_ITEM_SILPH_SCOPE - .short 0x0168 ; RS_ITEM_BICYCLE - .short 0x0169 ; RS_ITEM_TOWN_MAP - .short 0x016A ; RS_ITEM_VS_SEEKER - .short 0x016B ; RS_ITEM_FAME_CHECKER - .short 0x016C ; RS_ITEM_TM_CASE - .short 0x016D ; RS_ITEM_BERRY_POUCH - .short 0x016E ; RS_ITEM_TEACHY_TV - .short 0x016F ; RS_ITEM_TRI_PASS - .short 0x0170 ; RS_ITEM_RAINBOW_PASS - .short 0x0171 ; RS_ITEM_TEA - .short 0x0172 ; RS_ITEM_MYSTIC_TICKET - .short 0x0173 ; RS_ITEM_AURORA_TICKET - .short 0x0174 ; RS_ITEM_POWDER_JAR - .short 0x0175 ; RS_ITEM_RUBY - .short 0x0176 ; RS_ITEM_SAPPHIRE - .short 0x0177 ; RS_ITEM_MAGMA_EMBLEM - .short 0x0178 ; RS_ITEM_OLD_SEA_MAP - .short 0x0000 ; RS_ITEM_NONE - - .global MOD83_0223B41C + .short 0x0005 ; RS_ITEM_SAFARI_BALL + .short 0x0034 ; RS_ITEM_034 + .short 0x0035 ; RS_ITEM_035 + .short 0x0036 ; RS_ITEM_036 + .short 0x0037 ; RS_ITEM_037 + .short 0x0038 ; RS_ITEM_038 + .short 0x0039 ; RS_ITEM_039 + .short 0x003A ; RS_ITEM_03A + .short 0x003B ; RS_ITEM_03B + .short 0x003C ; RS_ITEM_03C + .short 0x003D ; RS_ITEM_03D + .short 0x003E ; RS_ITEM_03E + .short 0x0048 ; RS_ITEM_048 + .short 0x0052 ; RS_ITEM_052 + .short 0x0057 ; RS_ITEM_057 + .short 0x0058 ; RS_ITEM_058 + .short 0x0059 ; RS_ITEM_059 + .short 0x005A ; RS_ITEM_05A + .short 0x005B ; RS_ITEM_05B + .short 0x005C ; RS_ITEM_05C + .short 0x0063 ; RS_ITEM_063 + .short 0x0064 ; RS_ITEM_064 + .short 0x0065 ; RS_ITEM_065 + .short 0x0066 ; RS_ITEM_066 + .short 0x0069 ; RS_ITEM_069 + .short 0x0070 ; RS_ITEM_070 + .short 0x0071 ; RS_ITEM_071 + .short 0x0072 ; RS_ITEM_072 + .short 0x0073 ; RS_ITEM_073 + .short 0x0074 ; RS_ITEM_074 + .short 0x0075 ; RS_ITEM_075 + .short 0x0076 ; RS_ITEM_076 + .short 0x0077 ; RS_ITEM_077 + .short 0x0078 ; RS_ITEM_078 + .short 0x0079 ; RS_ITEM_ORANGE_MAIL + .short 0x007A ; RS_ITEM_HARBOR_MAIL + .short 0x007B ; RS_ITEM_GLITTER_MAIL + .short 0x007C ; RS_ITEM_MECH_MAIL + .short 0x007D ; RS_ITEM_WOOD_MAIL + .short 0x007E ; RS_ITEM_WAVE_MAIL + .short 0x007F ; RS_ITEM_BEAD_MAIL + .short 0x0080 ; RS_ITEM_SHADOW_MAIL + .short 0x0081 ; RS_ITEM_TROPIC_MAIL + .short 0x0082 ; RS_ITEM_DREAM_MAIL + .short 0x0083 ; RS_ITEM_FAB_MAIL + .short 0x0084 ; RS_ITEM_RETRO_MAIL + .short 0x00B0 ; RS_ITEM_0B0 + .short 0x00B1 ; RS_ITEM_0B1 + .short 0x00B2 ; RS_ITEM_0B2 + .short 0x00E2 ; RS_ITEM_0E2 + .short 0x00E3 ; RS_ITEM_0E3 + .short 0x00E4 ; RS_ITEM_0E4 + .short 0x00E5 ; RS_ITEM_0E5 + .short 0x00E6 ; RS_ITEM_0E6 + .short 0x00E7 ; RS_ITEM_0E7 + .short 0x00E8 ; RS_ITEM_0E8 + .short 0x00E9 ; RS_ITEM_0E9 + .short 0x00EA ; RS_ITEM_0EA + .short 0x00EB ; RS_ITEM_0EB + .short 0x00EC ; RS_ITEM_0EC + .short 0x00ED ; RS_ITEM_0ED + .short 0x00EE ; RS_ITEM_0EE + .short 0x00EF ; RS_ITEM_0EF + .short 0x00F0 ; RS_ITEM_0F0 + .short 0x00F1 ; RS_ITEM_0F1 + .short 0x00F2 ; RS_ITEM_0F2 + .short 0x00F3 ; RS_ITEM_0F3 + .short 0x00F4 ; RS_ITEM_0F4 + .short 0x00F5 ; RS_ITEM_0F5 + .short 0x00F6 ; RS_ITEM_0F6 + .short 0x00F7 ; RS_ITEM_0F7 + .short 0x00F8 ; RS_ITEM_0F8 + .short 0x00F9 ; RS_ITEM_0F9 + .short 0x00FA ; RS_ITEM_0FA + .short 0x00FB ; RS_ITEM_0FB + .short 0x00FC ; RS_ITEM_0FC + .short 0x00FD ; RS_ITEM_0FD + .short 0x0103 ; RS_ITEM_MACH_BIKE + .short 0x0104 ; RS_ITEM_COIN_CASE + .short 0x0105 ; RS_ITEM_ITEMFINDER + .short 0x0106 ; RS_ITEM_OLD_ROD + .short 0x0107 ; RS_ITEM_GOOD_ROD + .short 0x0108 ; RS_ITEM_SUPER_ROD + .short 0x0109 ; RS_ITEM_SS_TICKET + .short 0x010A ; RS_ITEM_CONTEST_PASS + .short 0x010B ; RS_ITEM_10B + .short 0x010C ; RS_ITEM_WAILMER_PAIL + .short 0x010D ; RS_ITEM_DEVON_GOODS + .short 0x010E ; RS_ITEM_SOOT_SACK + .short 0x010F ; RS_ITEM_BASEMENT_KEY + .short 0x0110 ; RS_ITEM_ACRO_BIKE + .short 0x0111 ; RS_ITEM_POKEBLOCK_CASE + .short 0x0112 ; RS_ITEM_LETTER + .short 0x0113 ; RS_ITEM_EON_TICKET + .short 0x0114 ; RS_ITEM_RED_ORB + .short 0x0115 ; RS_ITEM_BLUE_ORB + .short 0x0116 ; RS_ITEM_SCANNER + .short 0x0117 ; RS_ITEM_GO_GOGGLES + .short 0x0118 ; RS_ITEM_METEORITE + .short 0x0119 ; RS_ITEM_ROOM_1_KEY + .short 0x011A ; RS_ITEM_ROOM_2_KEY + .short 0x011B ; RS_ITEM_ROOM_4_KEY + .short 0x011C ; RS_ITEM_ROOM_6_KEY + .short 0x011D ; RS_ITEM_STORAGE_KEY + .short 0x011E ; RS_ITEM_ROOT_FOSSIL + .short 0x011F ; RS_ITEM_CLAW_FOSSIL + .short 0x0120 ; RS_ITEM_DEVON_SCOPE + .short 0x0153 ; RS_ITEM_HM01 + .short 0x0154 ; RS_ITEM_HM02 + .short 0x0155 ; RS_ITEM_HM03 + .short 0x0156 ; RS_ITEM_HM04 + .short 0x0157 ; RS_ITEM_HM05 + .short 0x0158 ; RS_ITEM_HM06 + .short 0x0159 ; RS_ITEM_HM07 + .short 0x015A ; RS_ITEM_HM08 + .short 0x015B ; RS_ITEM_15B + .short 0x015C ; RS_ITEM_15C + .short 0x015D ; RS_ITEM_OAKS_PARCEL + .short 0x015E ; RS_ITEM_POKE_FLUTE + .short 0x015F ; RS_ITEM_SECRET_KEY + .short 0x0160 ; RS_ITEM_BIKE_VOUCHER + .short 0x0161 ; RS_ITEM_GOLD_TEETH + .short 0x0162 ; RS_ITEM_OLD_AMBER + .short 0x0163 ; RS_ITEM_CARD_KEY + .short 0x0164 ; RS_ITEM_LIFT_KEY + .short 0x0165 ; RS_ITEM_HELIX_FOSSIL + .short 0x0166 ; RS_ITEM_DOME_FOSSIL + .short 0x0167 ; RS_ITEM_SILPH_SCOPE + .short 0x0168 ; RS_ITEM_BICYCLE + .short 0x0169 ; RS_ITEM_TOWN_MAP + .short 0x016A ; RS_ITEM_VS_SEEKER + .short 0x016B ; RS_ITEM_FAME_CHECKER + .short 0x016C ; RS_ITEM_TM_CASE + .short 0x016D ; RS_ITEM_BERRY_POUCH + .short 0x016E ; RS_ITEM_TEACHY_TV + .short 0x016F ; RS_ITEM_TRI_PASS + .short 0x0170 ; RS_ITEM_RAINBOW_PASS + .short 0x0171 ; RS_ITEM_TEA + .short 0x0172 ; RS_ITEM_MYSTIC_TICKET + .short 0x0173 ; RS_ITEM_AURORA_TICKET + .short 0x0174 ; RS_ITEM_POWDER_JAR + .short 0x0175 ; RS_ITEM_RUBY + .short 0x0176 ; RS_ITEM_SAPPHIRE + .short 0x0177 ; RS_ITEM_MAGMA_EMBLEM + .short 0x0178 ; RS_ITEM_OLD_SEA_MAP + .short 0x0000 ; RS_ITEM_NONE + + .global MOD83_0223B41C MOD83_0223B41C: ; 0x0223B41C - .word 0, -1 + .word 0, -1 - .global MOD83_0223B424 + .global MOD83_0223B424 MOD83_0223B424: ; 0x0223B424 - .byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD - .byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 - .byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF - .byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC - .byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 - .byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD - .byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 - .byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 - .byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF - .byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 - - .global MOD83_SpeciesWithAbilityOverridesList + .byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD + .byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 + .byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF + .byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC + .byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 + .byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD + .byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 + .byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 + .byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF + .byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 + + .global MOD83_SpeciesWithAbilityOverridesList MOD83_SpeciesWithAbilityOverridesList: ; 0x0223B4C0 - .short SPECIES_PIDGEY - .short SPECIES_PIDGEOTTO - .short SPECIES_PIDGEOT - .short SPECIES_NIDORAN_F - .short SPECIES_NIDORINA - .short SPECIES_NIDOQUEEN - .short SPECIES_NIDORAN_M - .short SPECIES_NIDORINO - .short SPECIES_NIDOKING - .short SPECIES_CLEFAIRY - .short SPECIES_CLEFABLE - .short SPECIES_PARAS - .short SPECIES_PARASECT - .short SPECIES_VENONAT - .short SPECIES_VENOMOTH - .short SPECIES_MEOWTH - .short SPECIES_PERSIAN - .short SPECIES_MANKEY - .short SPECIES_PRIMEAPE - .short SPECIES_MACHOP - .short SPECIES_MACHOKE - .short SPECIES_MACHAMP - .short SPECIES_SEEL - .short SPECIES_DEWGONG - .short SPECIES_SHELLDER - .short SPECIES_CLOYSTER - .short SPECIES_DROWZEE - .short SPECIES_HYPNO - .short SPECIES_HITMONLEE - .short SPECIES_HITMONCHAN - .short SPECIES_TANGELA - .short SPECIES_KANGASKHAN - .short SPECIES_HORSEA - .short SPECIES_SEADRA - .short SPECIES_MR_MIME - .short SPECIES_SCYTHER - .short SPECIES_JYNX - .short SPECIES_PINSIR - .short SPECIES_TAUROS - .short SPECIES_EEVEE - .short SPECIES_VAPOREON - .short SPECIES_JOLTEON - .short SPECIES_FLAREON - .short SPECIES_PORYGON - .short SPECIES_CLEFFA - .short SPECIES_HOPPIP - .short SPECIES_SKIPLOOM - .short SPECIES_JUMPLUFF - .short SPECIES_SUNKERN - .short SPECIES_SUNFLORA - .short SPECIES_ESPEON - .short SPECIES_UMBREON - .short SPECIES_MURKROW - .short SPECIES_GRANBULL - .short SPECIES_SCIZOR - .short SPECIES_SHUCKLE - .short SPECIES_TEDDIURSA - .short SPECIES_URSARING - .short SPECIES_SWINUB - .short SPECIES_PILOSWINE - .short SPECIES_REMORAID - .short SPECIES_OCTILLERY - .short SPECIES_KINGDRA - .short SPECIES_PORYGON2 - .short SPECIES_STANTLER - .short SPECIES_SMEARGLE - .short SPECIES_TYROGUE - .short SPECIES_HITMONTOP - .short SPECIES_SMOOCHUM - .short SPECIES_MILTANK - .short SPECIES_POOCHYENA - .short SPECIES_MIGHTYENA - .short SPECIES_ZIGZAGOON - .short SPECIES_LINOONE - .short SPECIES_SHROOMISH - .short SPECIES_BRELOOM - .short SPECIES_SKITTY - .short SPECIES_DELCATTY - .short SPECIES_SABLEYE - .short SPECIES_ILLUMISE - .short SPECIES_NUMEL - .short SPECIES_CAMERUPT - .short SPECIES_SPINDA - .short SPECIES_BARBOACH - .short SPECIES_WHISCASH - .short SPECIES_SHUPPET - .short SPECIES_BANETTE - .short SPECIES_TROPIUS - .short SPECIES_ABSOL - .short SPECIES_SNORUNT - .short SPECIES_GLALIE - .short SPECIES_SPHEAL - .short SPECIES_SEALEO - .short SPECIES_WALREIN - - .global MOD83_UpConvertSpeciesLUT + .short SPECIES_PIDGEY + .short SPECIES_PIDGEOTTO + .short SPECIES_PIDGEOT + .short SPECIES_NIDORAN_F + .short SPECIES_NIDORINA + .short SPECIES_NIDOQUEEN + .short SPECIES_NIDORAN_M + .short SPECIES_NIDORINO + .short SPECIES_NIDOKING + .short SPECIES_CLEFAIRY + .short SPECIES_CLEFABLE + .short SPECIES_PARAS + .short SPECIES_PARASECT + .short SPECIES_VENONAT + .short SPECIES_VENOMOTH + .short SPECIES_MEOWTH + .short SPECIES_PERSIAN + .short SPECIES_MANKEY + .short SPECIES_PRIMEAPE + .short SPECIES_MACHOP + .short SPECIES_MACHOKE + .short SPECIES_MACHAMP + .short SPECIES_SEEL + .short SPECIES_DEWGONG + .short SPECIES_SHELLDER + .short SPECIES_CLOYSTER + .short SPECIES_DROWZEE + .short SPECIES_HYPNO + .short SPECIES_HITMONLEE + .short SPECIES_HITMONCHAN + .short SPECIES_TANGELA + .short SPECIES_KANGASKHAN + .short SPECIES_HORSEA + .short SPECIES_SEADRA + .short SPECIES_MR_MIME + .short SPECIES_SCYTHER + .short SPECIES_JYNX + .short SPECIES_PINSIR + .short SPECIES_TAUROS + .short SPECIES_EEVEE + .short SPECIES_VAPOREON + .short SPECIES_JOLTEON + .short SPECIES_FLAREON + .short SPECIES_PORYGON + .short SPECIES_CLEFFA + .short SPECIES_HOPPIP + .short SPECIES_SKIPLOOM + .short SPECIES_JUMPLUFF + .short SPECIES_SUNKERN + .short SPECIES_SUNFLORA + .short SPECIES_ESPEON + .short SPECIES_UMBREON + .short SPECIES_MURKROW + .short SPECIES_GRANBULL + .short SPECIES_SCIZOR + .short SPECIES_SHUCKLE + .short SPECIES_TEDDIURSA + .short SPECIES_URSARING + .short SPECIES_SWINUB + .short SPECIES_PILOSWINE + .short SPECIES_REMORAID + .short SPECIES_OCTILLERY + .short SPECIES_KINGDRA + .short SPECIES_PORYGON2 + .short SPECIES_STANTLER + .short SPECIES_SMEARGLE + .short SPECIES_TYROGUE + .short SPECIES_HITMONTOP + .short SPECIES_SMOOCHUM + .short SPECIES_MILTANK + .short SPECIES_POOCHYENA + .short SPECIES_MIGHTYENA + .short SPECIES_ZIGZAGOON + .short SPECIES_LINOONE + .short SPECIES_SHROOMISH + .short SPECIES_BRELOOM + .short SPECIES_SKITTY + .short SPECIES_DELCATTY + .short SPECIES_SABLEYE + .short SPECIES_ILLUMISE + .short SPECIES_NUMEL + .short SPECIES_CAMERUPT + .short SPECIES_SPINDA + .short SPECIES_BARBOACH + .short SPECIES_WHISCASH + .short SPECIES_SHUPPET + .short SPECIES_BANETTE + .short SPECIES_TROPIUS + .short SPECIES_ABSOL + .short SPECIES_SNORUNT + .short SPECIES_GLALIE + .short SPECIES_SPHEAL + .short SPECIES_SEALEO + .short SPECIES_WALREIN + + .global MOD83_UpConvertSpeciesLUT MOD83_UpConvertSpeciesLUT: ; 0x0223B57C - .short SPECIES_TREECKO - .short SPECIES_GROVYLE - .short SPECIES_SCEPTILE - .short SPECIES_TORCHIC - .short SPECIES_COMBUSKEN - .short SPECIES_BLAZIKEN - .short SPECIES_MUDKIP - .short SPECIES_MARSHTOMP - .short SPECIES_SWAMPERT - .short SPECIES_POOCHYENA - .short SPECIES_MIGHTYENA - .short SPECIES_ZIGZAGOON - .short SPECIES_LINOONE - .short SPECIES_WURMPLE - .short SPECIES_SILCOON - .short SPECIES_BEAUTIFLY - .short SPECIES_CASCOON - .short SPECIES_DUSTOX - .short SPECIES_LOTAD - .short SPECIES_LOMBRE - .short SPECIES_LUDICOLO - .short SPECIES_SEEDOT - .short SPECIES_NUZLEAF - .short SPECIES_SHIFTRY - .short SPECIES_NINCADA - .short SPECIES_NINJASK - .short SPECIES_SHEDINJA - .short SPECIES_TAILLOW - .short SPECIES_SWELLOW - .short SPECIES_SHROOMISH - .short SPECIES_BRELOOM - .short SPECIES_SPINDA - .short SPECIES_WINGULL - .short SPECIES_PELIPPER - .short SPECIES_SURSKIT - .short SPECIES_MASQUERAIN - .short SPECIES_WAILMER - .short SPECIES_WAILORD - .short SPECIES_SKITTY - .short SPECIES_DELCATTY - .short SPECIES_KECLEON - .short SPECIES_BALTOY - .short SPECIES_CLAYDOL - .short SPECIES_NOSEPASS - .short SPECIES_TORKOAL - .short SPECIES_SABLEYE - .short SPECIES_BARBOACH - .short SPECIES_WHISCASH - .short SPECIES_LUVDISC - .short SPECIES_CORPHISH - .short SPECIES_CRAWDAUNT - .short SPECIES_FEEBAS - .short SPECIES_MILOTIC - .short SPECIES_CARVANHA - .short SPECIES_SHARPEDO - .short SPECIES_TRAPINCH - .short SPECIES_VIBRAVA - .short SPECIES_FLYGON - .short SPECIES_MAKUHITA - .short SPECIES_HARIYAMA - .short SPECIES_ELECTRIKE - .short SPECIES_MANECTRIC - .short SPECIES_NUMEL - .short SPECIES_CAMERUPT - .short SPECIES_SPHEAL - .short SPECIES_SEALEO - .short SPECIES_WALREIN - .short SPECIES_CACNEA - .short SPECIES_CACTURNE - .short SPECIES_SNORUNT - .short SPECIES_GLALIE - .short SPECIES_LUNATONE - .short SPECIES_SOLROCK - .short SPECIES_AZURILL - .short SPECIES_SPOINK - .short SPECIES_GRUMPIG - .short SPECIES_PLUSLE - .short SPECIES_MINUN - .short SPECIES_MAWILE - .short SPECIES_MEDITITE - .short SPECIES_MEDICHAM - .short SPECIES_SWABLU - .short SPECIES_ALTARIA - .short SPECIES_WYNAUT - .short SPECIES_DUSKULL - .short SPECIES_DUSCLOPS - .short SPECIES_ROSELIA - .short SPECIES_SLAKOTH - .short SPECIES_VIGOROTH - .short SPECIES_SLAKING - .short SPECIES_GULPIN - .short SPECIES_SWALOT - .short SPECIES_TROPIUS - .short SPECIES_WHISMUR - .short SPECIES_LOUDRED - .short SPECIES_EXPLOUD - .short SPECIES_CLAMPERL - .short SPECIES_HUNTAIL - .short SPECIES_GOREBYSS - .short SPECIES_ABSOL - .short SPECIES_SHUPPET - .short SPECIES_BANETTE - .short SPECIES_SEVIPER - .short SPECIES_ZANGOOSE - .short SPECIES_RELICANTH - .short SPECIES_ARON - .short SPECIES_LAIRON - .short SPECIES_AGGRON - .short SPECIES_CASTFORM - .short SPECIES_VOLBEAT - .short SPECIES_ILLUMISE - .short SPECIES_LILEEP - .short SPECIES_CRADILY - .short SPECIES_ANORITH - .short SPECIES_ARMALDO - .short SPECIES_RALTS - .short SPECIES_KIRLIA - .short SPECIES_GARDEVOIR - .short SPECIES_BAGON - .short SPECIES_SHELGON - .short SPECIES_SALAMENCE - .short SPECIES_BELDUM - .short SPECIES_METANG - .short SPECIES_METAGROSS - .short SPECIES_REGIROCK - .short SPECIES_REGICE - .short SPECIES_REGISTEEL - .short SPECIES_KYOGRE - .short SPECIES_GROUDON - .short SPECIES_RAYQUAZA - .short SPECIES_LATIAS - .short SPECIES_LATIOS - .short SPECIES_JIRACHI - .short SPECIES_DEOXYS - .short SPECIES_CHIMECHO - .short SPECIES_BURMY - .short SPECIES_WORMADAM - .short SPECIES_MOTHIM - .short SPECIES_COMBEE - .short SPECIES_VESPIQUEN - .short SPECIES_PACHIRISU - .short SPECIES_BUIZEL - .short SPECIES_FLOATZEL - .short SPECIES_CHERUBI - - .global MOD83_0223B69C + .short SPECIES_TREECKO + .short SPECIES_GROVYLE + .short SPECIES_SCEPTILE + .short SPECIES_TORCHIC + .short SPECIES_COMBUSKEN + .short SPECIES_BLAZIKEN + .short SPECIES_MUDKIP + .short SPECIES_MARSHTOMP + .short SPECIES_SWAMPERT + .short SPECIES_POOCHYENA + .short SPECIES_MIGHTYENA + .short SPECIES_ZIGZAGOON + .short SPECIES_LINOONE + .short SPECIES_WURMPLE + .short SPECIES_SILCOON + .short SPECIES_BEAUTIFLY + .short SPECIES_CASCOON + .short SPECIES_DUSTOX + .short SPECIES_LOTAD + .short SPECIES_LOMBRE + .short SPECIES_LUDICOLO + .short SPECIES_SEEDOT + .short SPECIES_NUZLEAF + .short SPECIES_SHIFTRY + .short SPECIES_NINCADA + .short SPECIES_NINJASK + .short SPECIES_SHEDINJA + .short SPECIES_TAILLOW + .short SPECIES_SWELLOW + .short SPECIES_SHROOMISH + .short SPECIES_BRELOOM + .short SPECIES_SPINDA + .short SPECIES_WINGULL + .short SPECIES_PELIPPER + .short SPECIES_SURSKIT + .short SPECIES_MASQUERAIN + .short SPECIES_WAILMER + .short SPECIES_WAILORD + .short SPECIES_SKITTY + .short SPECIES_DELCATTY + .short SPECIES_KECLEON + .short SPECIES_BALTOY + .short SPECIES_CLAYDOL + .short SPECIES_NOSEPASS + .short SPECIES_TORKOAL + .short SPECIES_SABLEYE + .short SPECIES_BARBOACH + .short SPECIES_WHISCASH + .short SPECIES_LUVDISC + .short SPECIES_CORPHISH + .short SPECIES_CRAWDAUNT + .short SPECIES_FEEBAS + .short SPECIES_MILOTIC + .short SPECIES_CARVANHA + .short SPECIES_SHARPEDO + .short SPECIES_TRAPINCH + .short SPECIES_VIBRAVA + .short SPECIES_FLYGON + .short SPECIES_MAKUHITA + .short SPECIES_HARIYAMA + .short SPECIES_ELECTRIKE + .short SPECIES_MANECTRIC + .short SPECIES_NUMEL + .short SPECIES_CAMERUPT + .short SPECIES_SPHEAL + .short SPECIES_SEALEO + .short SPECIES_WALREIN + .short SPECIES_CACNEA + .short SPECIES_CACTURNE + .short SPECIES_SNORUNT + .short SPECIES_GLALIE + .short SPECIES_LUNATONE + .short SPECIES_SOLROCK + .short SPECIES_AZURILL + .short SPECIES_SPOINK + .short SPECIES_GRUMPIG + .short SPECIES_PLUSLE + .short SPECIES_MINUN + .short SPECIES_MAWILE + .short SPECIES_MEDITITE + .short SPECIES_MEDICHAM + .short SPECIES_SWABLU + .short SPECIES_ALTARIA + .short SPECIES_WYNAUT + .short SPECIES_DUSKULL + .short SPECIES_DUSCLOPS + .short SPECIES_ROSELIA + .short SPECIES_SLAKOTH + .short SPECIES_VIGOROTH + .short SPECIES_SLAKING + .short SPECIES_GULPIN + .short SPECIES_SWALOT + .short SPECIES_TROPIUS + .short SPECIES_WHISMUR + .short SPECIES_LOUDRED + .short SPECIES_EXPLOUD + .short SPECIES_CLAMPERL + .short SPECIES_HUNTAIL + .short SPECIES_GOREBYSS + .short SPECIES_ABSOL + .short SPECIES_SHUPPET + .short SPECIES_BANETTE + .short SPECIES_SEVIPER + .short SPECIES_ZANGOOSE + .short SPECIES_RELICANTH + .short SPECIES_ARON + .short SPECIES_LAIRON + .short SPECIES_AGGRON + .short SPECIES_CASTFORM + .short SPECIES_VOLBEAT + .short SPECIES_ILLUMISE + .short SPECIES_LILEEP + .short SPECIES_CRADILY + .short SPECIES_ANORITH + .short SPECIES_ARMALDO + .short SPECIES_RALTS + .short SPECIES_KIRLIA + .short SPECIES_GARDEVOIR + .short SPECIES_BAGON + .short SPECIES_SHELGON + .short SPECIES_SALAMENCE + .short SPECIES_BELDUM + .short SPECIES_METANG + .short SPECIES_METAGROSS + .short SPECIES_REGIROCK + .short SPECIES_REGICE + .short SPECIES_REGISTEEL + .short SPECIES_KYOGRE + .short SPECIES_GROUDON + .short SPECIES_RAYQUAZA + .short SPECIES_LATIAS + .short SPECIES_LATIOS + .short SPECIES_JIRACHI + .short SPECIES_DEOXYS + .short SPECIES_CHIMECHO + .short SPECIES_BURMY + .short SPECIES_WORMADAM + .short SPECIES_MOTHIM + .short SPECIES_COMBEE + .short SPECIES_VESPIQUEN + .short SPECIES_PACHIRISU + .short SPECIES_BUIZEL + .short SPECIES_FLOATZEL + .short SPECIES_CHERUBI + + .global MOD83_0223B69C MOD83_0223B69C: ; 0x0223B69C - .word 0x42354245 ; "EB5B" - .word 0x42354345 ; "EC5B" - .word 0x42354445 ; "ED5B" - .word 0x42354545 ; "EE5B" - .word 0x42354645 ; "EF5B" - .word 0x42354745 ; "EG5B" - .word 0x42354845 ; "EH5B" - .word 0x42354945 ; "EI5B" - .word 0x42354A45 ; "EJ5B" - .word 0x42354B45 ; "EK5B" - .word 0x42354C45 ; "EL5B" - .word 0x42354D45 ; "EM5B" - .word 0x42355045 ; "EP5B" - .word 0x42355145 ; "EQ5B" - .word 0x42355245 ; "ER5B" - .word 0x42355345 ; "ES5B" - .word 0x42355445 ; "ET5B" - .word 0x42355545 ; "EU5B" - .word 0x42355645 ; "EV5B" - .word 0x42355745 ; "EW5B" - .word 0x00000000 - - .global MOD83_0223B6F0 + .word 0x42354245 ; "EB5B" + .word 0x42354345 ; "EC5B" + .word 0x42354445 ; "ED5B" + .word 0x42354545 ; "EE5B" + .word 0x42354645 ; "EF5B" + .word 0x42354745 ; "EG5B" + .word 0x42354845 ; "EH5B" + .word 0x42354945 ; "EI5B" + .word 0x42354A45 ; "EJ5B" + .word 0x42354B45 ; "EK5B" + .word 0x42354C45 ; "EL5B" + .word 0x42354D45 ; "EM5B" + .word 0x42355045 ; "EP5B" + .word 0x42355145 ; "EQ5B" + .word 0x42355245 ; "ER5B" + .word 0x42355345 ; "ES5B" + .word 0x42355445 ; "ET5B" + .word 0x42355545 ; "EU5B" + .word 0x42355645 ; "EV5B" + .word 0x42355745 ; "EW5B" + .word 0x00000000 + + .global MOD83_0223B6F0 MOD83_0223B6F0: ; 0x0223B6F0 - .asciz "mywh_SYSSTATE_IDLE" + .asciz "mywh_SYSSTATE_IDLE" - .balign 4 - .global MOD83_0223B704 + .balign 4 + .global MOD83_0223B704 MOD83_0223B704: ; 0x0223B704 - .asciz "mywh_SYSSTATE_BUSY" + .asciz "mywh_SYSSTATE_BUSY" - .balign 4 - .global MOD83_0223B718 + .balign 4 + .global MOD83_0223B718 MOD83_0223B718: ; 0x0223B718 - .asciz "mywh_SYSSTATE_STOP" + .asciz "mywh_SYSSTATE_STOP" - .balign 4 - .global MOD83_0223B72C + .balign 4 + .global MOD83_0223B72C MOD83_0223B72C: ; 0x0223B72C - .asciz "mywh_SYSSTATE_ERROR" + .asciz "mywh_SYSSTATE_ERROR" - .balign 4 - .global MOD83_0223B740 + .balign 4 + .global MOD83_0223B740 MOD83_0223B740: ; 0x0223B740 - .asciz "mywh_SYSSTATE_SCANNING" + .asciz "mywh_SYSSTATE_SCANNING" - .balign 4 - .global MOD83_0223B758 + .balign 4 + .global MOD83_0223B758 MOD83_0223B758: ; 0x0223B758 - .asciz "mywh_SYSSTATE_CONNECTED" + .asciz "mywh_SYSSTATE_CONNECTED" - .balign 4 - .global MOD83_0223B770 + .balign 4 + .global MOD83_0223B770 MOD83_0223B770: ; 0x0223B770 - .asciz "mywh_SYSSTATE_KEYSHARING" + .asciz "mywh_SYSSTATE_KEYSHARING" - .balign 4 - .global MOD83_0223B78C + .balign 4 + .global MOD83_0223B78C MOD83_0223B78C: ; 0x0223B78C - .asciz "mywh_SYSSTATE_DATASHARING" + .asciz "mywh_SYSSTATE_DATASHARING" - .balign 4 - .global MOD83_0223B7A8 + .balign 4 + .global MOD83_0223B7A8 MOD83_0223B7A8: ; 0x0223B7A8 - .asciz "mywh_SYSSTATE_CONNECT_FAIL" + .asciz "mywh_SYSSTATE_CONNECT_FAIL" - .balign 4 - .global MOD83_0223B7C4 + .balign 4 + .global MOD83_0223B7C4 MOD83_0223B7C4: ; 0x0223B7C4 - .asciz "mywh_SYSSTATE_MEASURECHANNEL" + .asciz "mywh_SYSSTATE_MEASURECHANNEL" - .balign 4 - .global MOD83_0223B7E4 + .balign 4 + .global MOD83_0223B7E4 MOD83_0223B7E4: ; 0x0223B7E4 - .word MOD83_0223B718, MOD83_0223B6F0, MOD83_0223B740, MOD83_0223B704 - .word MOD83_0223B758, MOD83_0223B78C, MOD83_0223B770, MOD83_0223B7C4 - .word MOD83_0223B7A8, MOD83_0223B72C + .word MOD83_0223B718, MOD83_0223B6F0, MOD83_0223B740, MOD83_0223B704 + .word MOD83_0223B758, MOD83_0223B78C, MOD83_0223B770, MOD83_0223B7C4 + .word MOD83_0223B7A8, MOD83_0223B72C - .global MOD83_0223B80C + .global MOD83_0223B80C MOD83_0223B80C: ; 0x0223B80C - .asciz "%s -> " + .asciz "%s -> " - .balign 4 - .global MOD83_0223B814 + .balign 4 + .global MOD83_0223B814 MOD83_0223B814: ; 0x0223B814 - .asciz "%s\n" + .asciz "%s\n" - .balign 4 - .global MOD83_0223B818 + .balign 4 + .global MOD83_0223B818 MOD83_0223B818: ; 0x0223B818 - .asciz "not my parent ggid (%d != %d)\n" + .asciz "not my parent ggid (%d != %d)\n" - .balign 4 - .global MOD83_0223B838 + .balign 4 + .global MOD83_0223B838 MOD83_0223B838: ; 0x0223B838 - .asciz "ADAE" + .asciz "ADAE" - .balign 4 - .global MOD83_0223B840 + .balign 4 + .global MOD83_0223B840 MOD83_0223B840: ; 0x0223B840 - .asciz "Sx439tCkbrWyR8X2" + .asciz "Sx439tCkbrWyR8X2" - .balign 4 - .global MOD83_0223B854 + .balign 4 + .global MOD83_0223B854 MOD83_0223B854: ; 0x0223B854 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .bss - .global MOD83_0223B860 + .bss + .global MOD83_0223B860 MOD83_0223B860: ; 0x0223B860 - .space 0x10 + .space 0x10 - .global MOD83_0223B870 + .global MOD83_0223B870 MOD83_0223B870: ; 0x0223B870 - .space 0x14 + .space 0x14 - .global MOD83_0223B884 + .global MOD83_0223B884 MOD83_0223B884: ; 0x0223B884 - .space 0x4 + .space 0x4 - .global MOD83_0223B888 + .global MOD83_0223B888 MOD83_0223B888: ; 0x0223B888 - .space 0x14 + .space 0x14 - .global MOD83_0223B89C + .global MOD83_0223B89C MOD83_0223B89C: ; 0x0223B89C - .space 0x4 + .space 0x4 - .global MOD83_0223B8A0 + .global MOD83_0223B8A0 MOD83_0223B8A0: ; 0x0223B8A0 - .space 0x274 + .space 0x274 - .global MOD83_0223BB14 + .global MOD83_0223BB14 MOD83_0223BB14: ; 0x0223BB14 - .space 0x4 + .space 0x4 - .global MOD83_0223BB18 + .global MOD83_0223BB18 MOD83_0223BB18: ; 0x0223BB18 - .space 0x10 + .space 0x10 - .global MOD83_0223BB28 + .global MOD83_0223BB28 MOD83_0223BB28: ; 0x0223BB28 - .space 0x8 + .space 0x8 - .global MOD83_0223BB30 + .global MOD83_0223BB30 MOD83_0223BB30: ; 0x0223BB30 - .space 0x68 + .space 0x68 - .global MOD83_0223BB98 + .global MOD83_0223BB98 MOD83_0223BB98: ; 0x0223BB98 - .space 0x94 + .space 0x94 - .global heap_id + .global heap_id heap_id: ; 0x0223BC2C - .space 0x4 + .space 0x4 - .global MOD83_0223BC30 + .global MOD83_0223BC30 MOD83_0223BC30: ; 0x0223BC30 - .space 0x30 + .space 0x30 - .global MOD83_0223BC60 + .global MOD83_0223BC60 MOD83_0223BC60: ; 0x0223BC60 - .space 0x4 + .space 0x4 - .global MOD83_0223BC64 + .global MOD83_0223BC64 MOD83_0223BC64: ; 0x0223BC64 - .space 0x1CC + .space 0x1CC - .global MOD83_0223BE30 + .global MOD83_0223BE30 MOD83_0223BE30: ; 0x0223BE30 - .space 0xC80 + .space 0xC80 - .global MOD83_0223CAB0 + .global MOD83_0223CAB0 MOD83_0223CAB0: ; 0x0223CAB0 - .space 0x24 + .space 0x24 - .global MOD83_0223CAD4 + .global MOD83_0223CAD4 MOD83_0223CAD4: ; 0x0223CAD4 - .space 0x8 + .space 0x8 - .global MOD83_0223CADC + .global MOD83_0223CADC MOD83_0223CADC: ; 0x0223CADC - .space 0x10 + .space 0x10 - .global MOD83_0223CAEC + .global MOD83_0223CAEC MOD83_0223CAEC: ; 0x0223CAEC - .space 0x6F4 + .space 0x6F4 diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c index 3425384e..7984fcc2 100644 --- a/arm9/src/unk_02022450.c +++ b/arm9/src/unk_02022450.c @@ -35,11 +35,11 @@ THUMB_FUNC void FUN_02022450 () { } THUMB_FUNC void Reset_To_File (const char* path) { - FSFile file; - FS_InitFile(&file); - if (FS_OpenFile(&file, path)) { - *(u32*)HW_ROM_BASE_OFFSET_BUF = file.prop.file.top; - OS_ResetSystem(0); - } - return; + FSFile file; + FS_InitFile(&file); + if (FS_OpenFile(&file, path)) { + *(u32*)HW_ROM_BASE_OFFSET_BUF = file.prop.file.top; + OS_ResetSystem(0); + } + return; } -- cgit v1.2.3 From 795f3323f2649e89e3cfe89676bf0d0f182a6c5d Mon Sep 17 00:00:00 2001 From: SNBeast Date: Sat, 10 Jul 2021 03:07:05 +0000 Subject: Fix the merge conflict right this time --- arm9/src/game_init.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 020d4b75..44dcc111 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -15,18 +15,6 @@ #pragma thumb on -typedef volatile struct -{ - u8 sys_and_irq_stack[0x3F80]; - u8 svc_stack[0x40]; - u8 reserved[0x38]; - u32 intr_check; - void * intr_vector; -} -OS_DTCM; - -#define DTCM (*(OS_DTCM *)HW_DTCM) - static struct { void * contents; u32 name_hash; -- cgit v1.2.3 From 76cc2fbb6c049f4f087e85fae629e4879fdb0f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 11 Jul 2021 10:56:21 +0200 Subject: decompile unk_020051F4.s --- arm9/asm/unk_020051F4.s | 1319 ---------------------------------------- arm9/lib/include/NNS_SND_arc.h | 2 +- arm9/src/sound.c | 4 +- arm9/src/unk_020040F4.c | 9 +- arm9/src/unk_020051F4.c | 736 ++++++++++++++++++++++ include/sound.h | 1 + include/unk_020040F4.h | 4 +- 7 files changed, 745 insertions(+), 1330 deletions(-) delete mode 100644 arm9/asm/unk_020051F4.s create mode 100644 arm9/src/unk_020051F4.c diff --git a/arm9/asm/unk_020051F4.s b/arm9/asm/unk_020051F4.s deleted file mode 100644 index 6e6cec72..00000000 --- a/arm9/asm/unk_020051F4.s +++ /dev/null @@ -1,1319 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_020051F4 -FUN_020051F4: ; 0x020051F4 - push {r4-r6, lr} - add r5, r0, #0x0 - bl FUN_020048D0 - bl FUN_02004018 - add r4, r0, #0x0 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndArcPlayerStartSeq - add r6, r0, #0x0 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_0200526C - add r0, r6, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0200521C -FUN_0200521C: ; 0x0200521C - push {r4-r6, lr} - add r5, r0, #0x0 - bl FUN_020048D0 - add r4, r0, #0x0 - bl FUN_02004018 - add r6, r0, #0x0 - cmp r4, #0x7 - bne _0200523E - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02005288 - add r4, r0, #0x0 - b _02005258 -_0200523E: - cmp r4, #0x1 - bne _02005250 - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_020052B8 - add r4, r0, #0x0 - b _02005258 -_02005250: - bl GF_AssertFail - mov r0, #0x0 - pop {r4-r6, pc} -_02005258: - mov r0, #0x0 - bl FUN_02004DBC - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_0200526C - add r0, r4, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0200526C -FUN_0200526C: ; 0x0200526C - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl FUN_02004110 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_02004858 - mov r0, #0x1 - bl FUN_02003CE8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02005288 -FUN_02005288: ; 0x02005288 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x3 - add r4, r2, #0x0 - bl FUN_02004748 - bl GF_Snd_RestoreState - add r0, r5, #0x0 - bl GF_Snd_LoadSeq - mov r0, #0x1a - bl FUN_02003D38 - bl GF_Snd_SaveState - add r0, r4, #0x0 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndArcPlayerStartSeq - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020052B8 -FUN_020052B8: ; 0x020052B8 - push {r3-r6, lr} - sub sp, #0x4 - add r5, r0, #0x0 - mov r0, #0x12 - add r6, r2, #0x0 - bl FUN_02003D38 - mov r0, #0x1f - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x0 - bl GetSoundPlayer - bl GF_SndPlayerGetSeqNo - bl FUN_02004900 - add r1, r0, #0x0 - add r0, r5, #0x0 - bl FUN_020045C4 - add r0, r6, #0x0 - bl GetSoundPlayer - add r6, r0, #0x0 - ldrh r0, [r4, #0x0] - bl FUN_02004900 - mov r1, #0x0 - mvn r1, r1 - add r2, r0, #0x0 - add r0, r6, #0x0 - add r3, r1, #0x0 - str r5, [sp, #0x0] - bl NNS_SndArcPlayerStartSeqEx - add sp, #0x4 - pop {r3-r6, pc} - .balign 4 - - thumb_func_start FUN_02005308 -FUN_02005308: ; 0x02005308 - push {r3-r5, lr} - add r5, r1, #0x0 - cmp r0, #0x4 - beq _02005318 - bl GF_AssertFail - mov r0, #0x0 - pop {r3-r5, pc} -_02005318: - add r0, r5, #0x0 - bl FUN_020048D0 - cmp r0, #0x7 - beq _0200532A - bl GF_AssertFail - mov r0, #0x0 - pop {r3-r5, pc} -_0200532A: - add r0, r5, #0x0 - mov r1, #0x1 - bl GF_Snd_LoadSeqEx - mov r0, #0x7 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndArcPlayerStartSeq - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02004110 - mov r0, #0x1 - bl FUN_02003CE8 - add r0, r4, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02005350 -FUN_02005350: ; 0x02005350 - push {r4, lr} - add r4, r0, #0x0 - bl NNS_SndPlayerStopSeqBySeqNo - add r0, r4, #0x0 - bl FUN_020048D0 - cmp r0, #0xff - beq _0200536E - bl FUN_02004018 - bl GetSoundPlayer - bl NNS_SndHandleReleaseSeq -_0200536E: - bl FUN_02005374 - pop {r4, pc} - - thumb_func_start FUN_02005374 -FUN_02005374: ; 0x02005374 - push {r3, lr} - mov r0, #0x0 - bl FUN_02004110 - mov r0, #0x0 - bl FUN_02004130 - mov r0, #0x0 - bl FUN_02003CE8 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0200538C -FUN_0200538C: ; 0x0200538C - push {r3-r7, lr} - add r6, r0, #0x0 - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_02004124 - bl FUN_020048D0 - cmp r0, #0xff - beq _020053C8 - bl FUN_02004018 - add r7, r0, #0x0 - cmp r4, #0x0 - bne _020053B2 - mov r1, #0x0 - add r2, r1, #0x0 - bl GF_SndPlayerMoveVolume -_020053B2: - add r0, r7, #0x0 - add r1, r6, #0x0 - add r2, r5, #0x0 - bl GF_SndPlayerMoveVolume - add r0, r5, #0x0 - bl FUN_02004D74 - mov r0, #0x3 - bl FUN_02003CE8 -_020053C8: - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_020053CC -FUN_020053CC: ; 0x020053CC - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl FUN_02004124 - bl FUN_020048D0 - add r6, r0, #0x0 - cmp r6, #0xff - beq _02005402 - bl FUN_02005404 - cmp r0, #0x0 - bne _020053FC - add r0, r6, #0x0 - bl FUN_02004018 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl GF_SndPlayerMoveVolume - add r0, r4, #0x0 - bl FUN_02004D74 -_020053FC: - mov r0, #0x4 - bl FUN_02003CE8 -_02005402: - pop {r4-r6, pc} - - thumb_func_start FUN_02005404 -FUN_02005404: ; 0x02005404 - push {r3, lr} - mov r0, #0x6 - bl FUN_02003D38 - ldrh r0, [r0, #0x0] - pop {r3, pc} - - thumb_func_start FUN_02005410 -FUN_02005410: ; 0x02005410 - push {r3, lr} - bl FUN_020048D0 - bl GF_SndPlayerCountPlayingSeqByPlayerNo - pop {r3, pc} - - thumb_func_start FUN_0200541C -FUN_0200541C: ; 0x0200541C - push {r3-r5, lr} - mov r0, #0xf - bl FUN_02003D38 - add r5, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x0 - bl NNS_SndPlayerStopSeqAll - ldrb r0, [r5, #0x0] - cmp r0, #0x1 - bne _02005440 - mov r0, #0xe - bl FUN_02004AAC -_02005440: - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _0200544C - mov r0, #0xf - bl FUN_02004AAC -_0200544C: - mov r0, #0x0 - bl FUN_02003CE8 - pop {r3-r5, pc} - - thumb_func_start FUN_02005454 -FUN_02005454: ; 0x02005454 - push {r3-r7, lr} - mov r0, #0xf - bl FUN_02003D38 - add r7, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x7 - bl GetSoundPlayer - mov r1, #0x0 - bl NNS_SndPlayerStopSeq - bl FUN_02005374 - mov r5, #0x0 - add r4, r5, #0x0 -_0200547A: - add r0, r5, #0x3 - add r1, r4, #0x0 - bl FUN_020054F8 - add r5, r5, #0x1 - cmp r5, #0x4 - blt _0200547A - mov r0, #0x0 - bl FUN_02005614 - ldrb r0, [r7, #0x0] - cmp r0, #0x1 - bne _0200549A - mov r0, #0xe - bl FUN_02004AAC -_0200549A: - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - bne _020054A6 - mov r0, #0xf - bl FUN_02004AAC -_020054A6: - pop {r3-r7, pc} - - thumb_func_start FUN_020054A8 -FUN_020054A8: ; 0x020054A8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl PlaySE - add r6, r0, #0x0 - ldr r1, _020054C4 ; =0x0000FFFF - add r0, r5, #0x0 - add r2, r4, #0x0 - bl FUN_02005530 - add r0, r6, #0x0 - pop {r4-r6, pc} - nop -_020054C4: .word 0x0000FFFF - - thumb_func_start PlaySE -PlaySE: ; 0x020054C8 - push {r4-r6, lr} - add r5, r0, #0x0 - bl FUN_020048D0 - bl FUN_02004018 - add r4, r0, #0x0 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndArcPlayerStartSeq - add r6, r0, #0x0 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_02004858 - add r0, r6, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020054F0 -FUN_020054F0: ; 0x020054F0 - ldr r3, _020054F4 ; =NNS_SndPlayerStopSeqBySeqNo - bx r3 - .balign 4 -_020054F4: .word NNS_SndPlayerStopSeqBySeqNo - - thumb_func_start FUN_020054F8 -FUN_020054F8: ; 0x020054F8 - push {r4, lr} - add r4, r1, #0x0 - bl GetSoundPlayer - add r1, r4, #0x0 - bl NNS_SndPlayerStopSeq - pop {r4, pc} - - thumb_func_start FUN_02005508 -FUN_02005508: ; 0x02005508 - push {r3, lr} - bl FUN_020048D0 - bl GF_SndPlayerCountPlayingSeqByPlayerNo - pop {r3, pc} - - thumb_func_start FUN_02005514 -FUN_02005514: ; 0x02005514 - push {r4, lr} - mov r4, #0x0 -_02005518: - add r0, r4, #0x3 - bl GF_SndPlayerCountPlayingSeqByPlayerNo - cmp r0, #0x1 - bne _02005526 - mov r0, #0x1 - pop {r4, pc} -_02005526: - add r4, r4, #0x1 - cmp r4, #0x4 - blt _02005518 - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start FUN_02005530 -FUN_02005530: ; 0x02005530 - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r2, #0x0 - bl FUN_020048D0 - bl FUN_02004018 - bl GetSoundPlayer - add r1, r5, #0x0 - add r2, r4, #0x0 - bl NNS_SndPlayerSetTrackPan - pop {r3-r5, pc} - - thumb_func_start FUN_0200554C -FUN_0200554C: ; 0x0200554C - push {r3-r7, lr} - add r6, r0, #0x0 - mov r0, #0x3 - bl FUN_02004018 - ldr r7, _02005574 ; =0x0000FFFF - add r4, r0, #0x0 - mov r5, #0x0 -_0200555C: - add r0, r4, r5 - bl GetSoundPlayer - add r1, r7, #0x0 - add r2, r6, #0x0 - bl NNS_SndPlayerSetTrackPan - add r5, r5, #0x1 - cmp r5, #0x4 - blt _0200555C - pop {r3-r7, pc} - nop -_02005574: .word 0x0000FFFF - - thumb_func_start FUN_02005578 -FUN_02005578: ; 0x02005578 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x11 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x23 - bl FUN_02003D38 - ldr r1, _02005610 ; =0x000001B9 - cmp r5, r1 - beq _0200559C - add r1, #0x36 - cmp r5, r1 - bhi _0200559A - cmp r5, #0x0 - bne _0200559C -_0200559A: - mov r5, #0x1 -_0200559C: - ldr r1, _02005610 ; =0x000001B9 - cmp r5, r1 - bne _020055BC - mov r1, #0x0 - ldr r0, [r0, #0x0] - mov r2, #0x7f - add r3, r1, #0x0 - bl FUN_02005D48 - cmp r0, #0x1 - bne _020055BC - mov r0, #0x0 - bl FUN_02005E80 - mov r0, #0x1 - pop {r3-r5, pc} -_020055BC: - ldrb r0, [r4, #0x0] - cmp r0, #0x0 - bne _020055E8 - mov r0, #0x0 - bl FUN_02005614 - mov r0, #0x1 - bl GetSoundPlayer - mov r1, #0x2 - str r1, [sp, #0x0] - sub r1, r1, #0x3 - add r2, r5, #0x0 - add r3, r1, #0x0 - bl NNS_SndArcPlayerStartSeqEx - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x1 - bl FUN_02004858 - b _02005606 -_020055E8: - mov r0, #0x8 - bl GetSoundPlayer - mov r1, #0x2 - str r1, [sp, #0x0] - sub r1, r1, #0x3 - add r2, r5, #0x0 - add r3, r1, #0x0 - bl NNS_SndArcPlayerStartSeqEx - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - bl FUN_02004858 -_02005606: - mov r0, #0x0 - bl FUN_02005E80 - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 -_02005610: .word 0x000001B9 - - thumb_func_start FUN_02005614 -FUN_02005614: ; 0x02005614 - push {r4-r6, lr} - add r5, r0, #0x0 - mov r0, #0xf - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0xe - bl FUN_02003D38 - mov r0, #0x1 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndPlayerStopSeq - mov r0, #0x8 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndPlayerStopSeq - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - bne _02005658 - mov r0, #0xe - bl FUN_02004C3C - mov r0, #0xe - bl FUN_02004A04 -_02005658: - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _0200566A - mov r0, #0xf - bl FUN_02004C3C - mov r0, #0xf - bl FUN_02004A04 -_0200566A: - bl FUN_02005DFC - pop {r4-r6, pc} - - thumb_func_start FUN_02005670 -FUN_02005670: ; 0x02005670 - push {r3-r5, lr} - mov r0, #0xf - bl FUN_02003D38 - add r5, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0xe - bl FUN_02003D38 - ldrb r0, [r5, #0x0] - cmp r0, #0x1 - bne _02005696 - mov r0, #0xe - bl FUN_02004ABC - pop {r3-r5, pc} -_02005696: - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _020056A4 - mov r0, #0xf - bl FUN_02004ABC - pop {r3-r5, pc} -_020056A4: - mov r0, #0x0 - bl GF_SndPlayerCountPlayingSeqByPlayerNo - pop {r3-r5, pc} - - thumb_func_start FUN_020056AC -FUN_020056AC: ; 0x020056AC - push {r3-r7, lr} - sub sp, #0x20 - str r0, [sp, #0x4] - mov r0, #0xf - str r1, [sp, #0x8] - add r5, r2, #0x0 - add r6, r3, #0x0 - ldr r7, [sp, #0x38] - bl FUN_02003D38 - str r0, [sp, #0x14] - mov r0, #0x10 - bl FUN_02003D38 - str r0, [sp, #0x10] - mov r0, #0x11 - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x1d - bl FUN_02003D38 - str r0, [sp, #0xc] - mov r0, #0x23 - bl FUN_02003D38 - lsr r0, r5, #0x1f - add r0, r5, r0 - asr r0, r0, #0x1 - str r0, [sp, #0x1c] - add r0, #0x40 - str r0, [sp, #0x1c] - add r0, r6, #0x0 - str r0, [sp, #0x18] - sub r0, #0x1e - str r0, [sp, #0x18] - cmp r0, #0x0 - bgt _020056FC - mov r0, #0x1 - str r0, [sp, #0x18] -_020056FC: - mov r0, #0x0 - strb r0, [r4, #0x0] - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x0] - cmp r0, #0x1 - bne _02005714 - mov r0, #0xe - bl FUN_02004C3C - mov r0, #0xe - bl FUN_02004A04 -_02005714: - ldr r0, [sp, #0x10] - ldrb r0, [r0, #0x0] - cmp r0, #0x1 - bne _02005728 - mov r0, #0xf - bl FUN_02004C3C - mov r0, #0xf - bl FUN_02004A04 -_02005728: - ldr r4, [sp, #0x8] - ldr r0, _02005AB4 ; =0x000001B9 - add r1, r4, #0x0 - cmp r1, r0 - beq _0200573E - add r0, #0x36 - cmp r1, r0 - bhi _0200573C - add r0, r4, #0x0 - bne _0200573E -_0200573C: - mov r4, #0x1 -_0200573E: - ldr r0, _02005AB4 ; =0x000001B9 - ldr r1, [sp, #0x8] - cmp r1, r0 - bne _020057B4 - ldr r1, [sp, #0x4] - cmp r1, #0xc - bhi _020057AE - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02005758: ; jump table (using 16-bit offset) - .short _02005772 - _02005758 - 2; case 0 - .short _02005772 - _02005758 - 2; case 1 - .short _02005772 - _02005758 - 2; case 2 - .short _020057AE - _02005758 - 2; case 3 - .short _020057AE - _02005758 - 2; case 4 - .short _02005772 - _02005758 - 2; case 5 - .short _020057AE - _02005758 - 2; case 6 - .short _020057AE - _02005758 - 2; case 7 - .short _020057AE - _02005758 - 2; case 8 - .short _020057AE - _02005758 - 2; case 9 - .short _020057AE - _02005758 - 2; case 10 - .short _02005772 - _02005758 - 2; case 11 - .short _02005772 - _02005758 - 2; case 12 -_02005772: - bl FUN_02005578 - ldr r0, [sp, #0xc] - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _02005794 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - b _020057A8 -_02005794: - ldr r1, [sp, #0x1c] - mov r0, #0xe - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FUN_02004ACC - mov r0, #0xe - add r1, r6, #0x0 - bl FUN_02004AF8 -_020057A8: - add sp, #0x20 - mov r0, #0x1 - pop {r3-r7, pc} -_020057AE: - mov r0, #0x1 - bl FUN_02005E80 -_020057B4: - ldr r0, [sp, #0x4] - cmp r0, #0xe - bls _020057BC - b _02005AC2 -_020057BC: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_020057C8: ; jump table (using 16-bit offset) - .short _020057E6 - _020057C8 - 2; case 0 - .short _02005802 - _020057C8 - 2; case 1 - .short _02005826 - _020057C8 - 2; case 2 - .short _02005868 - _020057C8 - 2; case 3 - .short _020058B2 - _020057C8 - 2; case 4 - .short _02005900 - _020057C8 - 2; case 5 - .short _02005928 - _020057C8 - 2; case 6 - .short _0200596C - _020057C8 - 2; case 7 - .short _0200599C - _020057C8 - 2; case 8 - .short _020059CA - _020057C8 - 2; case 9 - .short _020059FE - _020057C8 - 2; case 10 - .short _02005A2E - _020057C8 - 2; case 11 - .short _02005A56 - _020057C8 - 2; case 12 - .short _02005A86 - _020057C8 - 2; case 13 - .short _02005ABC - _020057C8 - 2; case 14 -_020057E6: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - b _02005AC2 -_02005802: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x14 - add r1, r7, #0x0 - bl FUN_02005AE0 - b _02005AC2 -_02005826: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - mov r2, #0x40 - bl GF_SndPlayerSetTrackPitch - add r0, r4, #0x0 - mov r1, #0x14 - bl FUN_02005BC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x8 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - ldr r2, [sp, #0x18] - add r0, r4, #0x0 - mov r1, #0x8 - bl FUN_02005AC8 - b _02005AC2 -_02005868: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x1e - add r1, r7, #0x0 - bl FUN_02005AE0 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - mov r2, #0xc0 - bl GF_SndPlayerSetTrackPitch - add r0, r4, #0x0 - mov r1, #0x10 - bl FUN_02005BC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x8 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - ldr r2, [sp, #0x18] - add r0, r4, #0x0 - mov r1, #0x8 - bl FUN_02005AC8 - b _02005AC2 -_020058B2: - mov r0, #0xe - bl FUN_02004984 - ldr r2, [sp, #0x1c] - add r0, r4, #0x0 - add r1, r6, #0x0 - mov r3, #0xe - str r7, [sp, #0x0] - bl FUN_02004B30 - ldr r1, [sp, #0x1c] - mov r0, #0xe - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FUN_02004ACC - mov r0, #0xf - add r1, r7, #0x0 - bl FUN_02005AE0 - mov r1, #0x86 - mov r0, #0xe - lsl r1, r1, #0x8 - bl FUN_02004AE4 - mov r1, #0x3f - ldr r2, [sp, #0x18] - ldr r3, [sp, #0x1c] - add r0, r4, #0x0 - mvn r1, r1 - str r7, [sp, #0x0] - bl FUN_02005BF8 - mov r1, #0x86 - mov r0, #0xf - lsl r1, r1, #0x8 - bl FUN_02004AE4 - b _02005AC2 -_02005900: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x1 - add r2, r0, #0x0 - ldr r1, _02005AB8 ; =0x0000FFFF - sub r2, #0xe1 - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_02005928: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - mov r2, #0x2c - bl GF_SndPlayerSetTrackPitch - mov r1, #0x3f - add r0, r4, #0x0 - mvn r1, r1 - bl FUN_02005BC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x8 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - ldr r2, [sp, #0x18] - add r0, r4, #0x0 - mov r1, #0x8 - bl FUN_02005AC8 - b _02005AC2 -_0200596C: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0xb - add r1, r7, #0x0 - bl FUN_02005AE0 - mov r0, #0x1 - add r2, r0, #0x0 - ldr r1, _02005AB8 ; =0x0000FFFF - sub r2, #0x81 - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_0200599C: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x3c - add r1, r7, #0x0 - bl FUN_02005AE0 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - mov r2, #0x3c - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_020059CA: - mov r0, #0xe - bl FUN_02004984 - ldr r2, [sp, #0x1c] - add r0, r4, #0x0 - add r1, r6, #0x0 - mov r3, #0xe - str r7, [sp, #0x0] - bl FUN_02004B30 - ldr r1, [sp, #0x1c] - mov r0, #0xe - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl FUN_02004ACC - mov r0, #0xd - add r1, r7, #0x0 - bl FUN_02005AE0 - mov r1, #0x1a - mov r0, #0xe - lsl r1, r1, #0xa - bl FUN_02004AE4 - b _02005AC2 -_020059FE: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x64 - add r1, r7, #0x0 - bl FUN_02005AE0 - mov r0, #0x1 - add r2, r0, #0x0 - ldr r1, _02005AB8 ; =0x0000FFFF - sub r2, #0x2d - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_02005A2E: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x1 - add r2, r0, #0x0 - ldr r1, _02005AB8 ; =0x0000FFFF - sub r2, #0x61 - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_02005A56: - add r0, r4, #0x0 - bl FUN_02005578 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x1 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - add r0, r4, #0x0 - mov r1, #0x1 - add r2, r6, #0x0 - bl FUN_02005AC8 - mov r0, #0x14 - add r1, r7, #0x0 - bl FUN_02005AE0 - mov r0, #0x1 - add r2, r0, #0x0 - ldr r1, _02005AB8 ; =0x0000FFFF - sub r2, #0x61 - bl GF_SndPlayerSetTrackPitch - b _02005AC2 -_02005A86: - add r0, r4, #0x0 - bl FUN_02005578 - add r0, r4, #0x0 - mov r1, #0x1 - mov r2, #0x7f - bl FUN_02005AC8 - add r0, r4, #0x0 - mov r1, #0x14 - bl FUN_02005BC8 - ldr r1, _02005AB8 ; =0x0000FFFF - mov r0, #0x8 - add r2, r5, #0x0 - bl GF_SndPlayerSetTrackPan - mov r0, #0x8 - add r1, r6, #0x0 - mov r2, #0x0 - bl GF_SndPlayerMoveVolume - b _02005AC2 - .balign 4 -_02005AB4: .word 0x000001B9 -_02005AB8: .word 0x0000FFFF -_02005ABC: - add r0, r4, #0x0 - bl FUN_02005578 -_02005AC2: - mov r0, #0x1 - add sp, #0x20 - pop {r3-r7, pc} - - thumb_func_start FUN_02005AC8 -FUN_02005AC8: ; 0x02005AC8 - push {r3-r5, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - add r1, r2, #0x0 - bl GF_SndPlayerSetInitialVolume - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_02004858 - pop {r3-r5, pc} - - thumb_func_start FUN_02005AE0 -FUN_02005AE0: ; 0x02005AE0 - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - mov r0, #0x22 - bl FUN_02003D38 - add r6, r0, #0x0 - bl FUN_02005BA0 - add r0, r4, #0x0 - mov r1, #0x8 - bl AllocFromHeap - add r4, r0, #0x0 - bne _02005B04 - bl GF_AssertFail - pop {r4-r6, pc} -_02005B04: - mov r2, #0x0 - strb r2, [r4, #0x0] - strb r2, [r4, #0x1] - strb r2, [r4, #0x2] - strb r2, [r4, #0x3] - strb r2, [r4, #0x4] - strb r2, [r4, #0x5] - strb r2, [r4, #0x6] - strb r2, [r4, #0x7] - ldr r0, _02005B28 ; =FUN_02005B2C - add r1, r4, #0x0 - str r5, [r4, #0x0] - bl FUN_0200CA44 - str r0, [r4, #0x4] - str r0, [r6, #0x0] - pop {r4-r6, pc} - nop -_02005B28: .word FUN_02005B2C - - thumb_func_start FUN_02005B2C -FUN_02005B2C: ; 0x02005B2C - push {r4-r6, lr} - mov r0, #0xf - add r5, r1, #0x0 - bl FUN_02003D38 - add r6, r0, #0x0 - mov r0, #0x10 - bl FUN_02003D38 - ldr r2, [r5, #0x0] - add r4, r0, #0x0 - cmp r2, #0xa - bne _02005B58 - mov r0, #0x1 - mov r1, #0x0 - bl GF_SndPlayerMoveVolume - ldr r2, [r5, #0x0] - mov r0, #0x8 - mov r1, #0x0 - bl GF_SndPlayerMoveVolume -_02005B58: - ldr r0, [r5, #0x0] - sub r0, r0, #0x1 - str r0, [r5, #0x0] - bl FUN_02005670 - cmp r0, #0x0 - bne _02005B6A - mov r0, #0x0 - str r0, [r5, #0x0] -_02005B6A: - ldr r0, [r5, #0x0] - cmp r0, #0x0 - bgt _02005B9E - mov r0, #0x0 - bl FUN_02005614 - ldrb r0, [r6, #0x0] - cmp r0, #0x1 - bne _02005B88 - mov r0, #0xe - bl FUN_02004C3C - mov r0, #0xe - bl FUN_02004A04 -_02005B88: - ldrb r0, [r4, #0x0] - cmp r0, #0x1 - bne _02005B9A - mov r0, #0xf - bl FUN_02004C3C - mov r0, #0xf - bl FUN_02004A04 -_02005B9A: - bl FUN_02005BA0 -_02005B9E: - pop {r4-r6, pc} - - thumb_func_start FUN_02005BA0 -FUN_02005BA0: ; 0x02005BA0 - push {r3-r5, lr} - mov r0, #0x22 - bl FUN_02003D38 - add r4, r0, #0x0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - beq _02005BC2 - bl FUN_0201B6C8 - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - bl FUN_0200CAB4 - add r0, r5, #0x0 - bl FreeToHeap -_02005BC2: - mov r0, #0x0 - str r0, [r4, #0x0] - pop {r3-r5, pc} - - thumb_func_start FUN_02005BC8 -FUN_02005BC8: ; 0x02005BC8 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x11 - add r4, r1, #0x0 - bl FUN_02003D38 - mov r1, #0x1 - strb r1, [r0, #0x0] - add r0, r1, #0x0 - bl FUN_02005E80 - add r0, r5, #0x0 - bl FUN_02005578 - add r5, r0, #0x0 - ldr r1, _02005BF4 ; =0x0000FFFF - mov r0, #0x8 - add r2, r4, #0x0 - bl GF_SndPlayerSetTrackPitch - add r0, r5, #0x0 - pop {r3-r5, pc} - .balign 4 -_02005BF4: .word 0x0000FFFF - - thumb_func_start FUN_02005BF8 -FUN_02005BF8: ; 0x02005BF8 - push {r3-r6, lr} - sub sp, #0x4 - add r5, r0, #0x0 - mov r0, #0x11 - add r4, r2, #0x0 - add r6, r3, #0x0 - bl FUN_02003D38 - mov r1, #0x1 - strb r1, [r0, #0x0] - mov r0, #0xf - bl FUN_02004984 - ldr r0, [sp, #0x18] - add r1, r4, #0x0 - str r0, [sp, #0x0] - add r0, r5, #0x0 - add r2, r6, #0x0 - mov r3, #0xf - bl FUN_02004B30 - add sp, #0x4 - pop {r3-r6, pc} - .balign 4 - - thumb_func_start PlaySound -PlaySound: ; 0x02005C28 - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_020048F4 - add r0, r5, #0x0 - bl FUN_02005CEC - bl FUN_02004124 - bl FUN_020048D0 - cmp r0, #0xff - beq _02005C48 - mov r1, #0x1 - bl FUN_020047C8 -_02005C48: - mov r0, #0x1c - bl FUN_02003D38 - bl GF_Snd_SaveState - add r0, r5, #0x0 - mov r1, #0x3 - bl GF_Snd_LoadSeqEx - mov r0, #0x2 - bl GetSoundPlayer - add r1, r5, #0x0 - bl NNS_SndArcPlayerStartSeq - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x2 - bl FUN_02004858 - add r0, r4, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02005C74 -FUN_02005C74: ; 0x02005C74 - push {r4, lr} - mov r0, #0xd - bl FUN_02003D38 - add r4, r0, #0x0 - mov r0, #0x2 - bl GF_SndPlayerCountPlayingSeqByPlayerNo - cmp r0, #0x0 - beq _02005C8C - mov r0, #0x1 - pop {r4, pc} -_02005C8C: - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _02005C9A - sub r0, r0, #0x1 - strh r0, [r4, #0x0] - mov r0, #0x1 - pop {r4, pc} -_02005C9A: - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02005CA0 -FUN_02005CA0: ; 0x02005CA0 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x2 - bl GetSoundPlayer - add r1, r4, #0x0 - bl NNS_SndPlayerStopSeq - mov r0, #0x6 - bl FUN_02004748 - bl GF_Snd_RestoreState - pop {r4, pc} - - thumb_func_start FUN_02005CBC -FUN_02005CBC: ; 0x02005CBC - push {r3, lr} - mov r0, #0xd - bl FUN_02003D38 - bl FUN_02005C74 - cmp r0, #0x1 - bne _02005CD0 - mov r0, #0x1 - pop {r3, pc} -_02005CD0: - mov r0, #0x0 - bl FUN_02005CA0 - bl FUN_02004124 - bl FUN_020048D0 - cmp r0, #0xff - beq _02005CE8 - mov r1, #0x0 - bl FUN_020047C8 -_02005CE8: - mov r0, #0x0 - pop {r3, pc} - - thumb_func_start FUN_02005CEC -FUN_02005CEC: ; 0x02005CEC - push {r3, lr} - mov r0, #0xd - bl FUN_02003D38 - mov r1, #0xf - strh r1, [r0, #0x0] - pop {r3, pc} - .balign 4 diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h index 95b33141..1d283816 100644 --- a/arm9/lib/include/NNS_SND_arc.h +++ b/arm9/lib/include/NNS_SND_arc.h @@ -33,6 +33,6 @@ void NNS_SndArcPlayerSetup(void *); void NNS_SndMain(void); void NNS_SndHandleInit(u32 *); void NNS_SndPlayerStopSeqByPlayerNo(int playerNo, int fadeFrame); -void NNS_SndHandleReleaseSeq(void); +void NNS_SndHandleReleaseSeq(u32 *); #endif //GUARD_NNS_SND_ARC_H diff --git a/arm9/src/sound.c b/arm9/src/sound.c index 6efef50a..cf151a0d 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -16,7 +16,6 @@ void GF_InitMic(void); void GF_SoundDataInit(struct SoundData *); void FUN_02004088(struct SoundData *); void FUN_020040A4(struct SoundData *); -void FUN_02003CE8(int); void FUN_020040DC(void); extern void FUN_0200521C(int); @@ -315,6 +314,5 @@ void GF_InitMic(void) void FUN_020040DC(void) { NNS_SndPlayerStopSeqByPlayerNo(7, 0); - GetSoundPlayer(7); - NNS_SndHandleReleaseSeq(); + NNS_SndHandleReleaseSeq(GetSoundPlayer(7)); } diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 0cbd5e23..e6ec0127 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -29,7 +29,7 @@ extern u32 NNS_SndWaveOutAllocChannel(u32); extern void NNS_SndWaveOutFreeChannel(u32); extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, u32); extern void NNS_SndWaveOutStop(u32); -extern void NNS_SndWaveOutIsPlaying(u32); +extern BOOL NNS_SndWaveOutIsPlaying(u32); extern void NNS_SndWaveOutSetPan(u32, u32); extern void NNS_SndWaveOutSetSpeed(u32, u32); extern void NNS_SndWaveOutSetVolume(u32, s32); @@ -45,7 +45,6 @@ extern void NNS_SndCaptureStopEffect(); extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); extern void NNS_SndSetMonoFlag(u32 param0); -extern void FUN_02003CE8(u32); extern void FUN_020053CC(u32, u32); extern u32 NNS_SndArcGetFileAddress(u32); extern u32 SND_GetWaveDataAddress(u32, u32); @@ -640,7 +639,7 @@ THUMB_FUNC u32 FUN_020048F4(u16 param0) return NNS_SndArcGetBankInfo(FUN_02004900(param0)); } -THUMB_FUNC u16 FUN_02004900(u16 param0) +THUMB_FUNC u16 FUN_02004900(int param0) { u16 *ptr = NNS_SndArcGetSeqParam(param0); if (ptr == NULL) @@ -794,9 +793,9 @@ THUMB_FUNC void FUN_02004AAC(u32 param0) NNS_SndWaveOutStop(*(u32 *)FUN_02004930(param0)); } -THUMB_FUNC void FUN_02004ABC(u32 param0) +THUMB_FUNC BOOL FUN_02004ABC(u32 param0) { - NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); + return NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); } THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) diff --git a/arm9/src/unk_020051F4.c b/arm9/src/unk_020051F4.c new file mode 100644 index 00000000..49f74eee --- /dev/null +++ b/arm9/src/unk_020051F4.c @@ -0,0 +1,736 @@ +#include "global.h" +#include "FS_file.h" +#include "NNS_SND_arc.h" +#include "constants/species.h" +#include "heap.h" +#include "sound.h" +#include "unk_020040F4.h" +#include "unk_0200CA44.h" + +extern u32 NNS_SndArcPlayerStartSeq(u32 *, u32); +extern void FUN_0200526C(u16, u32); + +THUMB_FUNC u32 FUN_020051F4(u16 param0) +{ + u32 r4 = FUN_02004018(FUN_020048D0(param0)); + + u32 ret = NNS_SndArcPlayerStartSeq(GetSoundPlayer(r4), param0); + + FUN_0200526C(param0, r4); + + return ret; +} + +extern u32 FUN_02005288(u16, u32, u32); +extern u32 FUN_020052B8(u16, u32, u32); + +THUMB_FUNC u32 FUN_0200521C(u16 param0) +{ + u8 r4 = FUN_020048D0(param0); + u32 r6 = FUN_02004018(r4); + + u32 ret; + if (r4 == 7) + { + ret = FUN_02005288(param0, r4, r6); + } + else if (r4 == 1) + { + ret = FUN_020052B8(param0, r4, r6); + } + else + { + GF_AssertFail(); + return 0; + } + + FUN_02004DBC(0); + FUN_0200526C(param0, r6); + + return ret; +} + +THUMB_FUNC void FUN_0200526C(u16 param0, u32 param1) +{ + FUN_02004110(param0); + FUN_02004858(param0, param1); + + FUN_02003CE8(1); +} + +THUMB_FUNC u32 FUN_02005288(u16 param0, u32 param1, u32 param2) +{ + GF_Snd_RestoreState(FUN_02004748(3)); + GF_Snd_LoadSeq(param0); + GF_Snd_SaveState(FUN_02003D38(26)); + return NNS_SndArcPlayerStartSeq(GetSoundPlayer(param2), param0); +} + +extern u32 NNS_SndArcPlayerStartSeqEx(u32 *, s32, s32, s32, u32); + +THUMB_FUNC u32 FUN_020052B8(u16 param0, u32 param1, u32 param2) +{ + FUN_02003D38(18); + u16 *r4 = FUN_02003D38(31); + + FUN_020045C4(param0, FUN_02004900(GF_SndPlayerGetSeqNo(GetSoundPlayer(0)))); + + return NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(param2), -1, FUN_02004900(*r4), -1, param0); +} + +THUMB_FUNC u32 FUN_02005308(u32 param0, u16 param1) +{ + if (param0 != 4) + { + GF_AssertFail(); + return 0; + } + + if (FUN_020048D0(param1) != 7) + { + GF_AssertFail(); + return 0; + } + + GF_Snd_LoadSeqEx(param1, 1); + + u32 r4 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(7), param1); + FUN_02004110(param1); + FUN_02003CE8(1); + + return r4; +} + +extern void NNS_SndPlayerStopSeqBySeqNo(u32, u32); +extern void FUN_02005374(); + +THUMB_FUNC void FUN_02005350(u16 param0, u32 param1) +{ + NNS_SndPlayerStopSeqBySeqNo(param0, param1); + + u8 r0 = FUN_020048D0(param0); + if (r0 != 0xff) + { + NNS_SndHandleReleaseSeq(GetSoundPlayer(FUN_02004018(r0))); + } + + FUN_02005374(); +} + +THUMB_FUNC void FUN_02005374() +{ + FUN_02004110(0); + FUN_02004130(0); + FUN_02003CE8(0); +} + +THUMB_FUNC void FUN_0200538C(u32 param0, u16 param1, u32 param2) +{ + u8 r0 = FUN_020048D0(FUN_02004124()); + if (r0 == 0xff) + { + return; + } + + u32 r7 = FUN_02004018(r0); + if (param2 == 0) + { + GF_SndPlayerMoveVolume(r7, 0, 0); + } + + GF_SndPlayerMoveVolume(r7, param0, param1); + FUN_02004D74(param1); + FUN_02003CE8(3); +} + +extern u16 FUN_02005404(void); + +THUMB_FUNC void FUN_020053CC(u32 param0, u32 param1) +{ + u8 r6 = FUN_020048D0(FUN_02004124()); + if (r6 == 0xff) + { + return; + } + + if (!FUN_02005404()) + { + GF_SndPlayerMoveVolume(FUN_02004018(r6), param0, param1); + FUN_02004D74(param1); + } + + FUN_02003CE8(4); +} + +THUMB_FUNC u16 FUN_02005404() +{ + return *(u16 *)FUN_02003D38(6); +} + +THUMB_FUNC u16 FUN_02005410(u16 param0) +{ + return GF_SndPlayerCountPlayingSeqByPlayerNo(FUN_020048D0(param0)); +} + +extern void NNS_SndPlayerStopSeqAll(u32); + +THUMB_FUNC void FUN_0200541C() +{ + u8 *r5 = FUN_02003D38(15); + u8 *r4 = FUN_02003D38(16); + NNS_SndPlayerStopSeqAll(0); + + if (*r5 == 1) + { + FUN_02004AAC(14); + } + + if (*r4 == 1) + { + FUN_02004AAC(15); + } + + FUN_02003CE8(0); +} + +extern void NNS_SndPlayerStopSeq(u32 *, u32); +extern void FUN_020054F8(s32, u32); +extern void FUN_02005614(u32); + +THUMB_FUNC void FUN_02005454() +{ + u8 *r5 = FUN_02003D38(15); + u8 *r4 = FUN_02003D38(16); + + NNS_SndPlayerStopSeq(GetSoundPlayer(7), 0); + FUN_02005374(); + + for (s32 i = 0; i < 4; i++) + { + FUN_020054F8(i + 3, 0); + } + + FUN_02005614(0); + + if (*r5 == 1) + { + FUN_02004AAC(14); + } + + if (*r4 == 1) + { + FUN_02004AAC(15); + } +} + +extern u32 PlaySE(u16); +extern void FUN_02005530(u16, u32, u32); + +THUMB_FUNC u32 FUN_020054A8(u16 param0, u32 param1) +{ + u32 r6 = PlaySE(param0); + FUN_02005530(param0, 0xFFFF, param1); + + return r6; +} + +THUMB_FUNC u32 PlaySE(u16 param0) +{ + u32 r4 = FUN_02004018(FUN_020048D0(param0)); + + u32 r6 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(r4), param0); + FUN_02004858(param0, r4); + + return r6; +} + +THUMB_FUNC void FUN_020054F0(u32 param0, u32 param1) +{ + NNS_SndPlayerStopSeqBySeqNo(param0, param1); +} + +THUMB_FUNC void FUN_020054F8(s32 param0, u32 param1) +{ + NNS_SndPlayerStopSeq(GetSoundPlayer(param0), param1); +} + +THUMB_FUNC u16 FUN_02005508(u16 param0) +{ + return GF_SndPlayerCountPlayingSeqByPlayerNo(FUN_020048D0(param0)); +} + +THUMB_FUNC BOOL FUN_02005514() +{ + for (s32 i = 0; i < 4; i++) + { + if (GF_SndPlayerCountPlayingSeqByPlayerNo(i + 3) == 1) + { + return TRUE; + } + } + + return FALSE; +} + +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); + +THUMB_FUNC void FUN_02005530(u16 param0, u32 param1, u32 param2) +{ + NNS_SndPlayerSetTrackPan(GetSoundPlayer(FUN_02004018(FUN_020048D0(param0))), param1, param2); +} + +THUMB_FUNC void FUN_0200554C(u32 param0) +{ + u32 r4 = FUN_02004018(3); + + for (s32 i = 0; i < 4; i++) + { + NNS_SndPlayerSetTrackPan(GetSoundPlayer(r4 + i), 0xFFFF, param0); + } +} + +extern u32 FUN_02005D48(u32, u32, u32, u32); +extern void FUN_02005E80(u32); + +THUMB_FUNC u32 FUN_02005578(u16 species) +{ + u8 *r4 = FUN_02003D38(17); + u32 *r0 = FUN_02003D38(35); + + if (species != SPECIES_CHATOT) + { + if (species > SPECIES_MANAPHY_EGG || species == SPECIES_NONE) + { + species = SPECIES_BULBASAUR; + } + } + + if (species == SPECIES_CHATOT) + { + if (FUN_02005D48(*r0, 0, 127, 0) == 1) + { + FUN_02005E80(0); + + return 1; + } + } + + u32 res; + if (*r4 == 0) + { + FUN_02005614(0); + res = NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(1), -1, species, -1, 2); + FUN_02004858(species, 1); + } + else + { + res = NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(8), -1, species, -1, 2); + FUN_02004858(species, 8); + } + + FUN_02005E80(0); + + return res; +} + +extern void FUN_02005DFC(); + +THUMB_FUNC void FUN_02005614(u32 param0) +{ + u8 *r6 = FUN_02003D38(15); + u8 *r4 = FUN_02003D38(16); + FUN_02003D38(14); + + NNS_SndPlayerStopSeq(GetSoundPlayer(1), param0); + NNS_SndPlayerStopSeq(GetSoundPlayer(8), param0); + + if (*r6 == 1) + { + FUN_02004C3C(14); + FUN_02004A04(14); + } + + if (*r4 == 1) + { + FUN_02004C3C(15); + FUN_02004A04(15); + } + + FUN_02005DFC(); +} + +THUMB_FUNC BOOL FUN_02005670() +{ + u8 *r5 = FUN_02003D38(15); + u8 *r4 = FUN_02003D38(16); + FUN_02003D38(14); + + if (*r5 == 1) + { + return FUN_02004ABC(14); + } + + if (*r4 == 1) + { + return FUN_02004ABC(15); + } + + return GF_SndPlayerCountPlayingSeqByPlayerNo(0); +} + +extern void FUN_02005AC8(u32, u32, u32); +extern void FUN_02005AE0(u32, u32); +extern u32 FUN_02005BC8(u16, u32); +extern void FUN_02005BF8(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4); + +THUMB_FUNC u32 FUN_020056AC(u32 param0, u16 param1, s32 param2, s32 param3, u32 param4) +{ + s32 st1c, st18; + u8 *st14 = FUN_02003D38(15); + u8 *st10 = FUN_02003D38(16); + u8 *r4 = FUN_02003D38(17); + u8 *stc = FUN_02003D38(29); + FUN_02003D38(35); + + st1c = 64 + (param2 / 2); + st18 = param3 - 30; + + if (st18 <= 0) + { + st18 = 1; + } + + *r4 = 0; + if (*st14 == 1) + { + FUN_02004C3C(14); + FUN_02004A04(14); + } + + if (*st10 == 1) + { + FUN_02004C3C(15); + FUN_02004A04(15); + } + + u16 species = param1; + if (species != SPECIES_CHATOT) + { + if (species > SPECIES_MANAPHY_EGG || species == SPECIES_NONE) + { + species = SPECIES_BULBASAUR; + } + } + + if (param1 == SPECIES_CHATOT) + { + switch (param0) + { + case 0: + case 1: + case 2: + case 5: + case 11: + case 12: + FUN_02005578(SPECIES_CHATOT); + if (*stc == 0) + { + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + } + else + { + FUN_02004ACC(14, (u8)st1c); + FUN_02004AF8(14, param3); + } + + return 1; + + default: + FUN_02005E80(1); + } + } + + switch (param0) + { + case 0: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + break; + case 1: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(20, param4); + break; + case 2: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, 64); + FUN_02005BC8(species, 20); + GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); + FUN_02005AC8(species, 8, st18); + break; + case 3: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(30, param4); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, 192); + FUN_02005BC8(species, 16); + GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); + FUN_02005AC8(species, 8, st18); + break; + case 4: + FUN_02004984(14); + FUN_02004B30(species, param3, st1c, 14, param4); + FUN_02004ACC(14, (u8)st1c); + FUN_02005AE0(15, param4); + FUN_02004AE4(14, 34304); + FUN_02005BF8(species, -64, st18, st1c, param4); + FUN_02004AE4(15, 34304); + break; + case 5: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, -224); + break; + case 6: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, 44); + FUN_02005BC8(species, -64); + GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); + FUN_02005AC8(species, 8, st18); + break; + case 7: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(11, param4); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, -128); + break; + case 8: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(60, param4); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, 60); + break; + case 9: + FUN_02004984(14); + FUN_02004B30(species, param3, st1c, 14, param4); + FUN_02004ACC(14, (u8)st1c); + FUN_02005AE0(13, param4); + FUN_02004AE4(14, 26624); + break; + case 10: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(100, param4); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, -44); + break; + case 11: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, -96); + break; + case 12: + FUN_02005578(species); + GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); + FUN_02005AC8(species, 1, param3); + FUN_02005AE0(20, param4); + GF_SndPlayerSetTrackPitch(1, 0xFFFF, -96); + break; + case 13: + FUN_02005578(species); + FUN_02005AC8(species, 1, 127); + FUN_02005BC8(species, 20); + GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); + GF_SndPlayerMoveVolume(8, param3, 0); + break; + case 14: + FUN_02005578(species); + break; + } + + return 1; +} + +THUMB_FUNC void FUN_02005AC8(u32 param0, u32 param1, u32 param2) +{ + GF_SndPlayerSetInitialVolume(param1, param2); + FUN_02004858(param0, param1); +} + +extern void FUN_02005BA0(); +extern void FUN_02005B2C(); + +THUMB_FUNC void FUN_02005AE0(u32 param0, u32 param1) +{ + u32 *r6 = FUN_02003D38(34); + FUN_02005BA0(); + + u32 *ptr = AllocFromHeap(param1, 2 * sizeof(u32)); + if (ptr == NULL) + { + GF_AssertFail(); + return; + } + + ((u8 *)ptr)[0] = 0; + ((u8 *)ptr)[1] = 0; + ((u8 *)ptr)[2] = 0; + ((u8 *)ptr)[3] = 0; + ((u8 *)ptr)[4] = 0; + ((u8 *)ptr)[5] = 0; + ((u8 *)ptr)[6] = 0; + ((u8 *)ptr)[7] = 0; + + ptr[0] = param0; + u32 r0 = FUN_0200CA44(FUN_02005B2C, (struct TextPrinter *)ptr, 0); + ptr[1] = r0; + *r6 = r0; +} + +THUMB_FUNC void FUN_02005B2C(u32 param0, s32 *param1) +{ + u8 *r6 = FUN_02003D38(15); + u8 *r4 = FUN_02003D38(16); + + if (*param1 == 10) + { + GF_SndPlayerMoveVolume(1, 0, *param1); + GF_SndPlayerMoveVolume(8, 0, *param1); + } + + (*param1)--; + + if (!FUN_02005670()) + { + *param1 = 0; + } + + if (*param1 <= 0) + { + FUN_02005614(0); + if (*r6 == 1) + { + FUN_02004C3C(14); + FUN_02004A04(14); + } + if (*r4 == 1) + { + FUN_02004C3C(15); + FUN_02004A04(15); + } + + FUN_02005BA0(); + } +} + + +extern void *FUN_0201B6C8(u32 *); + + +THUMB_FUNC void FUN_02005BA0() { + u32 **r4 = FUN_02003D38(34); + if (*r4 != NULL) { + void *r5 = FUN_0201B6C8(*r4); + FUN_0200CAB4(*r4); + FreeToHeap(r5); + } + + *r4 = 0; +} + + +THUMB_FUNC u32 FUN_02005BC8(u16 param0, u32 param1) { + *(u8 *)FUN_02003D38(17) = 1; + + FUN_02005E80(1); + u32 res = FUN_02005578(param0); + + GF_SndPlayerSetTrackPitch(8, 0xFFFF, param1); + + return res; +} + + +THUMB_FUNC void FUN_02005BF8(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) { + *(u8 *)FUN_02003D38(17) = 1; + + FUN_02004984(15); + FUN_02004B30(param0, param2, param3, 15, param4); +} + +extern void FUN_02005CEC(u16); + +THUMB_FUNC u32 PlaySound(u16 param0) { + FUN_020048F4(param0); + FUN_02005CEC(param0); + + u8 r0 = FUN_020048D0(FUN_02004124()); + if (r0 != 0xff) { + FUN_020047C8(r0, 1); + } + + GF_Snd_SaveState((int*)FUN_02003D38(28)); + GF_Snd_LoadSeqEx(param0, 3); + u32 res = NNS_SndArcPlayerStartSeq(GetSoundPlayer(2), param0); + FUN_02004858(param0, 2); + + return res; +} + + +THUMB_FUNC BOOL FUN_02005C74() { + u16 *r4 = FUN_02003D38(13); + + + if (GF_SndPlayerCountPlayingSeqByPlayerNo(2) != 0) { + return TRUE; + } + + if (*r4 != 0) { + (*r4)--; + return TRUE; + } + + return FALSE; +} + + +THUMB_FUNC void FUN_02005CA0(u32 param0) { + NNS_SndPlayerStopSeq(GetSoundPlayer(2), param0); + GF_Snd_RestoreState(FUN_02004748(6)); +} + + +THUMB_FUNC BOOL FUN_02005CBC() { + FUN_02003D38(13); + + if (FUN_02005C74() == TRUE) { + return TRUE; + } + + FUN_02005CA0(0); + u8 r0 = FUN_020048D0(FUN_02004124()); + + if (r0 != 0xff) { + FUN_020047C8(r0, 0); + } + + return FALSE; +} + + +THUMB_FUNC void FUN_02005CEC(u16 param0) { + *(u16*)FUN_02003D38(13) = 15; +} diff --git a/include/sound.h b/include/sound.h index aa2f1641..e4485c58 100644 --- a/include/sound.h +++ b/include/sound.h @@ -65,5 +65,6 @@ BOOL GF_Snd_LoadBank(int bankNo); u32 * GetSoundPlayer(int playerNo); u32 FUN_02004018(u32 a0); void DoSoundUpdateFrame(void); +void FUN_02003CE8(int); #endif //POKEDIAMOND_SOUND_H diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 641decb7..6ea51b6c 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -64,7 +64,7 @@ u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int playerNo); u8 FUN_020048D0(u16 param0); u32 GF_SndPlayerGetSeqNo(u32 *param0); u32 FUN_020048F4(u16 param0); -u16 FUN_02004900(u16 param0); +u16 FUN_02004900(int param0); u32 GF_MIC_StartAutoSampling(u32 param0); u32 GF_MIC_StopAutoSampling(u32 param0); u32 GF_MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); @@ -73,7 +73,7 @@ BOOL FUN_02004984(u32 param0); void FUN_02004A04(u32 param0); u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1); void FUN_02004AAC(u32 param0); -void FUN_02004ABC(u32 param0); +BOOL FUN_02004ABC(u32 param0); void FUN_02004ACC(u32 param0, u32 param1); void FUN_02004AE4(u32 param0, u32 param1); void FUN_02004AF8(u32 param0, s32 param1); -- cgit v1.2.3 From 23e3a5ed1f7817e6fc7608074f70e9d2a6931bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 11 Jul 2021 12:35:10 +0200 Subject: fix warnings --- arm9/lib/include/NNS_SND_arc.h | 1 + arm9/src/sound.c | 2 +- arm9/src/unk_020040F4.c | 28 +++---- arm9/src/unk_020051F4.c | 169 ++++++++++++++++++----------------------- include/sound.h | 2 +- include/unk_020040F4.h | 16 ++-- include/unk_020051F4.h | 45 +++++++++++ 7 files changed, 145 insertions(+), 118 deletions(-) create mode 100644 include/unk_020051F4.h diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h index 1d283816..5298d805 100644 --- a/arm9/lib/include/NNS_SND_arc.h +++ b/arm9/lib/include/NNS_SND_arc.h @@ -2,6 +2,7 @@ #define GUARD_NNS_SND_ARC_H #include "SND_main.h" +#include "FS_file.h" typedef struct NNSSndArcHeader { diff --git a/arm9/src/sound.c b/arm9/src/sound.c index cf151a0d..ec65dd06 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -254,7 +254,7 @@ u32 * GetSoundPlayer(int playerNo) return &sdat->players[playerNo]; } -u32 FUN_02004018(u32 a0) +int FUN_02004018(u32 a0) { switch (a0) { diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index e6ec0127..5713ddf0 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -15,7 +15,7 @@ extern void FUN_0200541C(); extern void FUN_0200521C(int); extern void FUN_0200538C(u32, u16, u32); extern void NNS_SndPlayerPause(u32 *, u8); -extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); +extern void NNS_SndPlayerMoveVolume(u32 *, s32, s32); extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); extern void *NNS_SndArcGetSeqParam(u32); extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); @@ -27,7 +27,7 @@ extern u32 MIC_StopAutoSampling(); extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); extern u32 NNS_SndWaveOutAllocChannel(u32); extern void NNS_SndWaveOutFreeChannel(u32); -extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, u32); +extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, s32); extern void NNS_SndWaveOutStop(u32); extern BOOL NNS_SndWaveOutIsPlaying(u32); extern void NNS_SndWaveOutSetPan(u32, u32); @@ -42,8 +42,8 @@ extern void NNS_SndCaptureStopReverb(u32); extern void NNS_SndCaptureSetReverbVolume(u32, u32); extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *); extern void NNS_SndCaptureStopEffect(); -extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); -extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); +extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, s32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, s32); extern void NNS_SndSetMonoFlag(u32 param0); extern void FUN_020053CC(u32, u32); extern u32 NNS_SndArcGetFileAddress(u32); @@ -552,7 +552,7 @@ THUMB_FUNC void FUN_02004810() *ptr2 = 0; } -THUMB_FUNC void GF_SndPlayerMoveVolume(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerMoveVolume(int playerNo, s32 param1, s32 param2) { NNS_SndPlayerMoveVolume(GetSoundPlayer(playerNo), param1, param2); } @@ -598,7 +598,7 @@ THUMB_FUNC void FUN_02004858(u32 param0, int playerNo) THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) { - GF_SndPlayerSetInitialVolume((int)FUN_02004018(FUN_020048D0(param0)), param1); + GF_SndPlayerSetInitialVolume(FUN_02004018(FUN_020048D0(param0)), param1); } THUMB_FUNC void GF_SndArcPlayerStartSeqEx(int playerNo, u32 param1, u32 param2) @@ -639,7 +639,7 @@ THUMB_FUNC u32 FUN_020048F4(u16 param0) return NNS_SndArcGetBankInfo(FUN_02004900(param0)); } -THUMB_FUNC u16 FUN_02004900(int param0) +THUMB_FUNC u16 FUN_02004900(u32 param0) { u16 *ptr = NNS_SndArcGetSeqParam(param0); if (ptr == NULL) @@ -824,7 +824,7 @@ THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1); } -THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) +THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, s32 param2, u32 param3, u32 param4) { GetSoundDataPointer(); @@ -969,17 +969,17 @@ THUMB_FUNC void FUN_02004D04(s32 param0) *ptr = (u8)param0; } -THUMB_FUNC void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, s32 param2) { NNS_SndPlayerSetTrackPitch(GetSoundPlayer(playerNo), param1, param2); } -THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, s32 param2) { - GF_SndPlayerSetTrackPitch((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); + GF_SndPlayerSetTrackPitch(FUN_02004018(FUN_020048D0(param0)), param1, param2); } -THUMB_FUNC void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, s32 param2) { NNS_SndPlayerSetTrackPan(GetSoundPlayer(playerNo), param1, param2); } @@ -990,9 +990,9 @@ THUMB_FUNC void GF_SndSetMonoFlag(u32 param0) UNK_021C3DD8[0] = param0; } -THUMB_FUNC void FUN_02004D74(u32 param0) +THUMB_FUNC void FUN_02004D74(s32 param0) { - *(u32 *)FUN_02003D38(6) = param0; + *(s32 *)FUN_02003D38(6) = param0; } THUMB_FUNC void FUN_02004D84(u32 param0) diff --git a/arm9/src/unk_020051F4.c b/arm9/src/unk_020051F4.c index 49f74eee..1d3679c8 100644 --- a/arm9/src/unk_020051F4.c +++ b/arm9/src/unk_020051F4.c @@ -1,5 +1,5 @@ #include "global.h" -#include "FS_file.h" +#include "unk_020051F4.h" #include "NNS_SND_arc.h" #include "constants/species.h" #include "heap.h" @@ -8,35 +8,40 @@ #include "unk_0200CA44.h" extern u32 NNS_SndArcPlayerStartSeq(u32 *, u32); -extern void FUN_0200526C(u16, u32); +extern u32 NNS_SndArcPlayerStartSeqEx(u32 *, s32, s32, s32, u32); +extern void NNS_SndPlayerStopSeqBySeqNo(u32, u32); +extern void NNS_SndPlayerStopSeqAll(u32); +extern void NNS_SndPlayerStopSeq(u32 *, u32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); +extern u32 FUN_02005D48(u32, u32, u32, u32); +extern void FUN_02005E80(u32); +extern void FUN_02005DFC(); +extern void *FUN_0201B6C8(u32 *); THUMB_FUNC u32 FUN_020051F4(u16 param0) { - u32 r4 = FUN_02004018(FUN_020048D0(param0)); + int playerNo = FUN_02004018(FUN_020048D0(param0)); - u32 ret = NNS_SndArcPlayerStartSeq(GetSoundPlayer(r4), param0); + u32 ret = NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); - FUN_0200526C(param0, r4); + FUN_0200526C(param0, playerNo); return ret; } -extern u32 FUN_02005288(u16, u32, u32); -extern u32 FUN_020052B8(u16, u32, u32); - THUMB_FUNC u32 FUN_0200521C(u16 param0) { u8 r4 = FUN_020048D0(param0); - u32 r6 = FUN_02004018(r4); + int playerNo = FUN_02004018(r4); u32 ret; if (r4 == 7) { - ret = FUN_02005288(param0, r4, r6); + ret = FUN_02005288(param0, r4, playerNo); } else if (r4 == 1) { - ret = FUN_020052B8(param0, r4, r6); + ret = FUN_020052B8(param0, r4, playerNo); } else { @@ -45,37 +50,37 @@ THUMB_FUNC u32 FUN_0200521C(u16 param0) } FUN_02004DBC(0); - FUN_0200526C(param0, r6); + FUN_0200526C(param0, playerNo); return ret; } -THUMB_FUNC void FUN_0200526C(u16 param0, u32 param1) +THUMB_FUNC void FUN_0200526C(u16 param0, int playerNo) { FUN_02004110(param0); - FUN_02004858(param0, param1); + FUN_02004858(param0, playerNo); FUN_02003CE8(1); } -THUMB_FUNC u32 FUN_02005288(u16 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_02005288(u16 param0, u32 param1, int playerNo) { +#pragma unused(param1) GF_Snd_RestoreState(FUN_02004748(3)); GF_Snd_LoadSeq(param0); GF_Snd_SaveState(FUN_02003D38(26)); - return NNS_SndArcPlayerStartSeq(GetSoundPlayer(param2), param0); + return NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); } -extern u32 NNS_SndArcPlayerStartSeqEx(u32 *, s32, s32, s32, u32); - -THUMB_FUNC u32 FUN_020052B8(u16 param0, u32 param1, u32 param2) +THUMB_FUNC u32 FUN_020052B8(u16 param0, u32 param1, int playerNo) { +#pragma unused(param1) FUN_02003D38(18); u16 *r4 = FUN_02003D38(31); FUN_020045C4(param0, FUN_02004900(GF_SndPlayerGetSeqNo(GetSoundPlayer(0)))); - return NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(param2), -1, FUN_02004900(*r4), -1, param0); + return NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(playerNo), -1, FUN_02004900(*r4), -1, param0); } THUMB_FUNC u32 FUN_02005308(u32 param0, u16 param1) @@ -101,9 +106,6 @@ THUMB_FUNC u32 FUN_02005308(u32 param0, u16 param1) return r4; } -extern void NNS_SndPlayerStopSeqBySeqNo(u32, u32); -extern void FUN_02005374(); - THUMB_FUNC void FUN_02005350(u16 param0, u32 param1) { NNS_SndPlayerStopSeqBySeqNo(param0, param1); @@ -124,7 +126,7 @@ THUMB_FUNC void FUN_02005374() FUN_02003CE8(0); } -THUMB_FUNC void FUN_0200538C(u32 param0, u16 param1, u32 param2) +THUMB_FUNC void FUN_0200538C(s32 param0, u16 param1, u32 param2) { u8 r0 = FUN_020048D0(FUN_02004124()); if (r0 == 0xff) @@ -132,20 +134,18 @@ THUMB_FUNC void FUN_0200538C(u32 param0, u16 param1, u32 param2) return; } - u32 r7 = FUN_02004018(r0); + int playerNo = FUN_02004018(r0); if (param2 == 0) { - GF_SndPlayerMoveVolume(r7, 0, 0); + GF_SndPlayerMoveVolume(playerNo, 0, 0); } - GF_SndPlayerMoveVolume(r7, param0, param1); + GF_SndPlayerMoveVolume(playerNo, param0, param1); FUN_02004D74(param1); FUN_02003CE8(3); } -extern u16 FUN_02005404(void); - -THUMB_FUNC void FUN_020053CC(u32 param0, u32 param1) +THUMB_FUNC void FUN_020053CC(s32 param0, s32 param1) { u8 r6 = FUN_020048D0(FUN_02004124()); if (r6 == 0xff) @@ -172,8 +172,6 @@ THUMB_FUNC u16 FUN_02005410(u16 param0) return GF_SndPlayerCountPlayingSeqByPlayerNo(FUN_020048D0(param0)); } -extern void NNS_SndPlayerStopSeqAll(u32); - THUMB_FUNC void FUN_0200541C() { u8 *r5 = FUN_02003D38(15); @@ -193,10 +191,6 @@ THUMB_FUNC void FUN_0200541C() FUN_02003CE8(0); } -extern void NNS_SndPlayerStopSeq(u32 *, u32); -extern void FUN_020054F8(s32, u32); -extern void FUN_02005614(u32); - THUMB_FUNC void FUN_02005454() { u8 *r5 = FUN_02003D38(15); @@ -223,9 +217,6 @@ THUMB_FUNC void FUN_02005454() } } -extern u32 PlaySE(u16); -extern void FUN_02005530(u16, u32, u32); - THUMB_FUNC u32 FUN_020054A8(u16 param0, u32 param1) { u32 r6 = PlaySE(param0); @@ -236,10 +227,10 @@ THUMB_FUNC u32 FUN_020054A8(u16 param0, u32 param1) THUMB_FUNC u32 PlaySE(u16 param0) { - u32 r4 = FUN_02004018(FUN_020048D0(param0)); + int playerNo = FUN_02004018(FUN_020048D0(param0)); - u32 r6 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(r4), param0); - FUN_02004858(param0, r4); + u32 r6 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); + FUN_02004858(param0, playerNo); return r6; } @@ -272,8 +263,6 @@ THUMB_FUNC BOOL FUN_02005514() return FALSE; } -extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); - THUMB_FUNC void FUN_02005530(u16 param0, u32 param1, u32 param2) { NNS_SndPlayerSetTrackPan(GetSoundPlayer(FUN_02004018(FUN_020048D0(param0))), param1, param2); @@ -281,17 +270,14 @@ THUMB_FUNC void FUN_02005530(u16 param0, u32 param1, u32 param2) THUMB_FUNC void FUN_0200554C(u32 param0) { - u32 r4 = FUN_02004018(3); + int playerNo = FUN_02004018(3); - for (s32 i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { - NNS_SndPlayerSetTrackPan(GetSoundPlayer(r4 + i), 0xFFFF, param0); + NNS_SndPlayerSetTrackPan(GetSoundPlayer(playerNo + i), 0xFFFF, param0); } } -extern u32 FUN_02005D48(u32, u32, u32, u32); -extern void FUN_02005E80(u32); - THUMB_FUNC u32 FUN_02005578(u16 species) { u8 *r4 = FUN_02003D38(17); @@ -333,8 +319,6 @@ THUMB_FUNC u32 FUN_02005578(u16 species) return res; } -extern void FUN_02005DFC(); - THUMB_FUNC void FUN_02005614(u32 param0) { u8 *r6 = FUN_02003D38(15); @@ -378,11 +362,6 @@ THUMB_FUNC BOOL FUN_02005670() return GF_SndPlayerCountPlayingSeqByPlayerNo(0); } -extern void FUN_02005AC8(u32, u32, u32); -extern void FUN_02005AE0(u32, u32); -extern u32 FUN_02005BC8(u16, u32); -extern void FUN_02005BF8(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4); - THUMB_FUNC u32 FUN_020056AC(u32 param0, u16 param1, s32 param2, s32 param3, u32 param4) { s32 st1c, st18; @@ -563,15 +542,12 @@ THUMB_FUNC u32 FUN_020056AC(u32 param0, u16 param1, s32 param2, s32 param3, u32 return 1; } -THUMB_FUNC void FUN_02005AC8(u32 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02005AC8(u32 param0, int playerNo, s32 param2) { - GF_SndPlayerSetInitialVolume(param1, param2); - FUN_02004858(param0, param1); + GF_SndPlayerSetInitialVolume(playerNo, param2); + FUN_02004858(param0, playerNo); } -extern void FUN_02005BA0(); -extern void FUN_02005B2C(); - THUMB_FUNC void FUN_02005AE0(u32 param0, u32 param1) { u32 *r6 = FUN_02003D38(34); @@ -594,13 +570,15 @@ THUMB_FUNC void FUN_02005AE0(u32 param0, u32 param1) ((u8 *)ptr)[7] = 0; ptr[0] = param0; - u32 r0 = FUN_0200CA44(FUN_02005B2C, (struct TextPrinter *)ptr, 0); + u32 r0 = (u32)FUN_0200CA44( + (void (*)(u32, struct TextPrinter *))FUN_02005B2C, (struct TextPrinter *)ptr, 0); ptr[1] = r0; *r6 = r0; } THUMB_FUNC void FUN_02005B2C(u32 param0, s32 *param1) { +#pragma unused(param0) u8 *r6 = FUN_02003D38(15); u8 *r4 = FUN_02003D38(16); @@ -635,23 +613,21 @@ THUMB_FUNC void FUN_02005B2C(u32 param0, s32 *param1) } } - -extern void *FUN_0201B6C8(u32 *); - - -THUMB_FUNC void FUN_02005BA0() { +THUMB_FUNC void FUN_02005BA0() +{ u32 **r4 = FUN_02003D38(34); - if (*r4 != NULL) { + if (*r4 != NULL) + { void *r5 = FUN_0201B6C8(*r4); - FUN_0200CAB4(*r4); + FUN_0200CAB4((s32)(*r4)); FreeToHeap(r5); } *r4 = 0; } - -THUMB_FUNC u32 FUN_02005BC8(u16 param0, u32 param1) { +THUMB_FUNC u32 FUN_02005BC8(u16 param0, s32 param1) +{ *(u8 *)FUN_02003D38(17) = 1; FUN_02005E80(1); @@ -662,26 +638,27 @@ THUMB_FUNC u32 FUN_02005BC8(u16 param0, u32 param1) { return res; } - -THUMB_FUNC void FUN_02005BF8(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) { +THUMB_FUNC void FUN_02005BF8(u32 param0, s32 param1, s32 param2, s32 param3, u32 param4) +{ +#pragma unused(param1) *(u8 *)FUN_02003D38(17) = 1; FUN_02004984(15); FUN_02004B30(param0, param2, param3, 15, param4); } -extern void FUN_02005CEC(u16); - -THUMB_FUNC u32 PlaySound(u16 param0) { +THUMB_FUNC u32 PlaySound(u16 param0) +{ FUN_020048F4(param0); FUN_02005CEC(param0); u8 r0 = FUN_020048D0(FUN_02004124()); - if (r0 != 0xff) { + if (r0 != 0xff) + { FUN_020047C8(r0, 1); } - GF_Snd_SaveState((int*)FUN_02003D38(28)); + GF_Snd_SaveState((int *)FUN_02003D38(28)); GF_Snd_LoadSeqEx(param0, 3); u32 res = NNS_SndArcPlayerStartSeq(GetSoundPlayer(2), param0); FUN_02004858(param0, 2); @@ -689,16 +666,17 @@ THUMB_FUNC u32 PlaySound(u16 param0) { return res; } - -THUMB_FUNC BOOL FUN_02005C74() { +THUMB_FUNC BOOL FUN_02005C74() +{ u16 *r4 = FUN_02003D38(13); - - if (GF_SndPlayerCountPlayingSeqByPlayerNo(2) != 0) { + if (GF_SndPlayerCountPlayingSeqByPlayerNo(2) != 0) + { return TRUE; } - if (*r4 != 0) { + if (*r4 != 0) + { (*r4)--; return TRUE; } @@ -706,31 +684,34 @@ THUMB_FUNC BOOL FUN_02005C74() { return FALSE; } - -THUMB_FUNC void FUN_02005CA0(u32 param0) { +THUMB_FUNC void FUN_02005CA0(u32 param0) +{ NNS_SndPlayerStopSeq(GetSoundPlayer(2), param0); GF_Snd_RestoreState(FUN_02004748(6)); } - -THUMB_FUNC BOOL FUN_02005CBC() { +THUMB_FUNC BOOL FUN_02005CBC() +{ FUN_02003D38(13); - if (FUN_02005C74() == TRUE) { + if (FUN_02005C74() == TRUE) + { return TRUE; } FUN_02005CA0(0); u8 r0 = FUN_020048D0(FUN_02004124()); - if (r0 != 0xff) { + if (r0 != 0xff) + { FUN_020047C8(r0, 0); } return FALSE; } - -THUMB_FUNC void FUN_02005CEC(u16 param0) { - *(u16*)FUN_02003D38(13) = 15; +THUMB_FUNC void FUN_02005CEC(u16 param0) +{ +#pragma unused(param0) + *(u16 *)FUN_02003D38(13) = 15; } diff --git a/include/sound.h b/include/sound.h index e4485c58..11053cd6 100644 --- a/include/sound.h +++ b/include/sound.h @@ -63,7 +63,7 @@ BOOL GF_Snd_LoadSeqEx(int seqNo, u32 loadFlag); BOOL GF_Snd_LoadWaveArc(int waveArcNo); BOOL GF_Snd_LoadBank(int bankNo); u32 * GetSoundPlayer(int playerNo); -u32 FUN_02004018(u32 a0); +int FUN_02004018(u32 a0); void DoSoundUpdateFrame(void); void FUN_02003CE8(int); diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h index 6ea51b6c..413e853f 100644 --- a/include/unk_020040F4.h +++ b/include/unk_020040F4.h @@ -19,7 +19,7 @@ struct UnkStruct_020040F4_1 u32 unk18; s32 unk1c; u32 unk20; - u32 unk24; + s32 unk24; }; struct UnkStruct_020040F4_2 @@ -55,7 +55,7 @@ void FUN_02004738(); int FUN_02004748(s32 param0); void FUN_020047C8(u8 param0, u8 param1); void FUN_02004810(); -void GF_SndPlayerMoveVolume(int playerNo, u32 param1, u32 param2); +void GF_SndPlayerMoveVolume(int playerNo, s32 param1, s32 param2); void GF_SndPlayerSetInitialVolume(int playerNo, s32 param1); void FUN_02004858(u32 param0, int playerNo); void FUN_0200488C(u16 param0, u16 param1); @@ -64,7 +64,7 @@ u16 GF_SndPlayerCountPlayingSeqByPlayerNo(int playerNo); u8 FUN_020048D0(u16 param0); u32 GF_SndPlayerGetSeqNo(u32 *param0); u32 FUN_020048F4(u16 param0); -u16 FUN_02004900(int param0); +u16 FUN_02004900(u32 param0); u32 GF_MIC_StartAutoSampling(u32 param0); u32 GF_MIC_StopAutoSampling(u32 param0); u32 GF_MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); @@ -77,7 +77,7 @@ BOOL FUN_02004ABC(u32 param0); void FUN_02004ACC(u32 param0, u32 param1); void FUN_02004AE4(u32 param0, u32 param1); void FUN_02004AF8(u32 param0, s32 param1); -u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4); +u32 FUN_02004B30(u32 param0, s32 param1, s32 param2, u32 param3, u32 param4); void FUN_02004C1C(u8 *param0, u32 param1); void FUN_02004C3C(u32 param0); BOOL GF_SndCaptureIsActive(); @@ -87,11 +87,11 @@ void GF_SndCaptureSetReverbVolume(u32 param0, u32 param1); void FUN_02004CB4(); void GF_SndCaptureStopEffect(); void FUN_02004D04(s32 param0); -void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, u32 param2); -void FUN_02004D34(u16 param0, u32 param1, u32 param2); -void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, u32 param2); +void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, s32 param2); +void FUN_02004D34(u16 param0, u32 param1, s32 param2); +void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, s32 param2); void GF_SndSetMonoFlag(u32 param0); -void FUN_02004D74(u32 param0); +void FUN_02004D74(s32 param0); void FUN_02004D84(u32 param0); u16 FUN_02004D94(); u8 *FUN_02004DB4(); diff --git a/include/unk_020051F4.h b/include/unk_020051F4.h new file mode 100644 index 00000000..05be8db7 --- /dev/null +++ b/include/unk_020051F4.h @@ -0,0 +1,45 @@ +#ifndef POKEDIAMOND_UNK_020051F4_H +#define POKEDIAMOND_UNK_020051F4_H + +#include "global.h" + + +u32 FUN_020051F4(u16 param0); +u32 FUN_0200521C(u16 param0); +void FUN_0200526C(u16 param0, int playerNo); +u32 FUN_02005288(u16 param0, u32 param1, int playerNo); +u32 FUN_020052B8(u16 param0, u32 param1, int playerNo); +u32 FUN_02005308(u32 param0, u16 param1); +void FUN_02005350(u16 param0, u32 param1); +void FUN_02005374(); +void FUN_0200538C(s32 param0, u16 param1, u32 param2); +void FUN_020053CC(s32 param0, s32 param1); +u16 FUN_02005404(); +u16 FUN_02005410(u16 param0); +void FUN_0200541C(); +void FUN_02005454(); +u32 FUN_020054A8(u16 param0, u32 param1); +u32 PlaySE(u16 param0); +void FUN_020054F0(u32 param0, u32 param1); +void FUN_020054F8(s32 param0, u32 param1); +u16 FUN_02005508(u16 param0); +BOOL FUN_02005514(); +void FUN_02005530(u16 param0, u32 param1, u32 param2); +void FUN_0200554C(u32 param0); +u32 FUN_02005578(u16 species); +void FUN_02005614(u32 param0); +BOOL FUN_02005670(); +u32 FUN_020056AC(u32 param0, u16 param1, s32 param2, s32 param3, u32 param4); +void FUN_02005AC8(u32 param0, int playerNo, s32 param2); +void FUN_02005AE0(u32 param0, u32 param1); +void FUN_02005B2C(u32 param0, s32 *param1); +void FUN_02005BA0(); +u32 FUN_02005BC8(u16 param0, s32 param1); +void FUN_02005BF8(u32 param0, s32 param1, s32 param2, s32 param3, u32 param4); +u32 PlaySound(u16 param0); +BOOL FUN_02005C74(); +void FUN_02005CA0(u32 param0); +BOOL FUN_02005CBC(); +void FUN_02005CEC(u16 param0); + +#endif //POKEDIAMOND_UNK_020051F4_H -- cgit v1.2.3 From 3758f5b9693372f3ea8ae5d6b02026b87774e962 Mon Sep 17 00:00:00 2001 From: tgsm Date: Tue, 20 Jul 2021 16:01:11 -0500 Subject: Split module 33 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 7 + arm9/modules/33/asm/mod33_02254854.s | 212 +++++++++++++++++++ arm9/modules/33/asm/mod33_022549AC.s | 192 +++++++++++++++++ arm9/modules/33/asm/module_33.s | 398 ----------------------------------- 5 files changed, 413 insertions(+), 399 deletions(-) create mode 100644 arm9/modules/33/asm/mod33_02254854.s create mode 100644 arm9/modules/33/asm/mod33_022549AC.s delete mode 100644 arm9/modules/33/asm/module_33.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 2f0ec1af..8a0117e0 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -901,7 +901,8 @@ Overlay MODULE_33 { After MODULE_20 Object module_33_sinit.o - Object module_33.o + Object mod33_02254854.o + Object mod33_022549AC.o } Overlay MODULE_34 diff --git a/arm9/global.inc b/arm9/global.inc index 63ec31b2..a310c250 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7444,6 +7444,13 @@ .extern MOD21_02254B10 .extern MOD21_02254B34 .extern MOD21_02254B40 +.extern MOD33_022549AC +.extern MOD33_022549DC +.extern MOD33_022549E8 +.extern MOD33_02254A0C +.extern MOD33_02254A18 +.extern MOD33_02254A38 +.extern MOD33_02254AD8 .extern MOD51_02254A68 .extern MOD51_02254AB8 .extern MOD52_021D76C8 diff --git a/arm9/modules/33/asm/mod33_02254854.s b/arm9/modules/33/asm/mod33_02254854.s new file mode 100644 index 00000000..a3b102fb --- /dev/null +++ b/arm9/modules/33/asm/mod33_02254854.s @@ -0,0 +1,212 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD33_02254854 +MOD33_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x10 + add r7, r2, #0 + str r3, [sp] + bl AllocFromHeap + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD33_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD33_022548D4 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FreeToHeap +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD33_022548D4 + thumb_func_end MOD33_02254854 + + thumb_func_start MOD33_0225489C +MOD33_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #8 + add r1, r5, #4 + bl MOD33_022549AC + cmp r0, #0 + beq _022548BC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0xc] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548BC: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD33_0225489C + + thumb_func_start MOD33_022548C0 +MOD33_022548C0: ; 0x022548C0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + bl MOD33_022549DC + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_022548C0 + + thumb_func_start MOD33_022548D4 +MOD33_022548D4: ; 0x022548D4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254900 + lsl r2, r1, #2 + ldr r1, _02254904 ; =MOD33_02254AF4 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254900 + add r0, r4, #0 + bl MOD33_022548C0 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0xc] + bl MOD20_022529A0 +_02254900: + pop {r3, r4, r5, pc} + nop +_02254904: .word MOD33_02254AF4 + thumb_func_end MOD33_022548D4 + + thumb_func_start MOD33_02254908 +MOD33_02254908: ; 0x02254908 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD33_02254908 + + thumb_func_start MOD33_02254910 +MOD33_02254910: ; 0x02254910 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254918 + b _0225491A +_02254918: + mov r1, #2 +_0225491A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD33_02254910 + + thumb_func_start MOD33_02254924 +MOD33_02254924: ; 0x02254924 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254934 + cmp r0, #1 + beq _02254944 + b _0225495E +_02254934: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD33_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225495E +_02254944: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD33_02254A0C + cmp r0, #0 + beq _0225495E + ldr r0, [r4, #0xc] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD33_02254910 +_0225495E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254924 + + thumb_func_start MOD33_02254964 +MOD33_02254964: ; 0x02254964 + push {r3, lr} + ldrb r1, [r0, #2] + cmp r1, #0 + beq _02254972 + mov r1, #2 + bl MOD33_02254910 +_02254972: + mov r0, #0 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD33_02254964 + + thumb_func_start MOD33_02254978 +MOD33_02254978: ; 0x02254978 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254988 + cmp r0, #1 + beq _02254998 + b _022549A6 +_02254988: + ldr r0, [r4, #8] + mov r1, #1 + bl MOD33_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549A6 +_02254998: + ldr r0, [r4, #8] + bl MOD33_02254A18 + cmp r0, #0 + beq _022549A6 + mov r0, #1 + pop {r4, pc} +_022549A6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254978 + + .section .rodata + + .global MOD33_02254AF4 +MOD33_02254AF4: ; 0x02254AF4 + .word MOD33_02254924, MOD33_02254964, MOD33_02254978 diff --git a/arm9/modules/33/asm/mod33_022549AC.s b/arm9/modules/33/asm/mod33_022549AC.s new file mode 100644 index 00000000..c280b622 --- /dev/null +++ b/arm9/modules/33/asm/mod33_022549AC.s @@ -0,0 +1,192 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD33_022549AC +MOD33_022549AC: ; 0x022549AC + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl AllocFromHeap + add r4, r0, #0 + beq _022549D8 + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _022549D8 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_022549D8: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD33_022549AC + + thumb_func_start MOD33_022549DC +MOD33_022549DC: ; 0x022549DC + push {r3, lr} + cmp r0, #0 + beq _022549E6 + bl FreeToHeap +_022549E6: + pop {r3, pc} + thumb_func_end MOD33_022549DC + + thumb_func_start MOD33_022549E8 +MOD33_022549E8: ; 0x022549E8 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254A08 ; =MOD33_02254B1C + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254A08: .word MOD33_02254B1C + thumb_func_end MOD33_022549E8 + + thumb_func_start MOD33_02254A0C +MOD33_02254A0C: ; 0x02254A0C + ldr r3, _02254A14 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254A14: .word MOD20_02253794 + thumb_func_end MOD33_02254A0C + + thumb_func_start MOD33_02254A18 +MOD33_02254A18: ; 0x02254A18 + ldr r3, _02254A20 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254A20: .word MOD20_022537B8 + thumb_func_end MOD33_02254A18 + + thumb_func_start MOD33_02254A24 +MOD33_02254A24: ; 0x02254A24 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254A24 + + thumb_func_start MOD33_02254A38 +MOD33_02254A38: ; 0x02254A38 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254ACC ; =MOD33_02254B00 + mov r1, #6 + mov r3, #0 + bl InitBgFromTemplate + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r3, #6 + bl GfGfxLoader_LoadCharData + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r5, #4] + mov r1, #6 + add r3, r2, #0 + bl FillBgTilemapRect + mov r0, #0x20 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0xc + mov r1, #9 + mov r2, #4 + mov r3, #0 + bl GfGfxLoader_GXLoadPal + ldr r0, [r5, #4] + mov r1, #0xc + mov r2, #6 + bl MOD20_02253AA4 + ldr r0, [r5, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + ldr r1, _02254AD0 ; =0x04001000 + ldr r0, _02254AD4 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD33_02254A24 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254ACC: .word MOD33_02254B00 +_02254AD0: .word 0x04001000 +_02254AD4: .word 0xFFFFE0FF + thumb_func_end MOD33_02254A38 + + thumb_func_start MOD33_02254AD8 +MOD33_02254AD8: ; 0x02254AD8 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FreeBgTilemapBuffer + add r0, r4, #0 + bl MOD33_02254A24 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD33_02254AD8 + + .section .rodata + + .global MOD33_02254B00 +MOD33_02254B00: ; 0x02254B00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 + .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD33_02254B1C +MOD33_02254B1C: ; 0x02254B1C + .word 0x00, MOD33_02254A38, 0x00 + .word 0x01, MOD33_02254AD8, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/33/asm/module_33.s b/arm9/modules/33/asm/module_33.s deleted file mode 100644 index a0c3782f..00000000 --- a/arm9/modules/33/asm/module_33.s +++ /dev/null @@ -1,398 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD33_02254854 -MOD33_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x10 - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD33_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD33_022548D4 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD33_022548D4 - thumb_func_end MOD33_02254854 - - thumb_func_start MOD33_0225489C -MOD33_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r0, #8 - add r1, r5, #4 - bl MOD33_022549AC - cmp r0, #0 - beq _022548BC - mov r0, #0 - strb r0, [r5] - strb r0, [r5, #1] - strb r0, [r5, #2] - str r4, [r5, #0xc] - mov r0, #1 - pop {r3, r4, r5, pc} -_022548BC: - mov r0, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD33_0225489C - - thumb_func_start MOD33_022548C0 -MOD33_022548C0: ; 0x022548C0 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - bl MOD33_022549DC - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD33_022548C0 - - thumb_func_start MOD33_022548D4 -MOD33_022548D4: ; 0x022548D4 - push {r3, r4, r5, lr} - add r4, r1, #0 - ldrb r1, [r4] - add r5, r0, #0 - cmp r1, #3 - bhs _02254900 - lsl r2, r1, #2 - ldr r1, _02254904 ; =MOD33_02254AF4 - add r0, r4, #0 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254900 - add r0, r4, #0 - bl MOD33_022548C0 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0xc] - bl MOD20_022529A0 -_02254900: - pop {r3, r4, r5, pc} - nop -_02254904: .word MOD33_02254AF4 - thumb_func_end MOD33_022548D4 - - thumb_func_start MOD33_02254908 -MOD33_02254908: ; 0x02254908 - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD33_02254908 - - thumb_func_start MOD33_02254910 -MOD33_02254910: ; 0x02254910 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254918 - b _0225491A -_02254918: - mov r1, #2 -_0225491A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD33_02254910 - - thumb_func_start MOD33_02254924 -MOD33_02254924: ; 0x02254924 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254934 - cmp r0, #1 - beq _02254944 - b _0225495E -_02254934: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD33_022549E8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _0225495E -_02254944: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD33_02254A0C - cmp r0, #0 - beq _0225495E - ldr r0, [r4, #0xc] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD33_02254910 -_0225495E: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD33_02254924 - - thumb_func_start MOD33_02254964 -MOD33_02254964: ; 0x02254964 - push {r3, lr} - ldrb r1, [r0, #2] - cmp r1, #0 - beq _02254972 - mov r1, #2 - bl MOD33_02254910 -_02254972: - mov r0, #0 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD33_02254964 - - thumb_func_start MOD33_02254978 -MOD33_02254978: ; 0x02254978 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254988 - cmp r0, #1 - beq _02254998 - b _022549A6 -_02254988: - ldr r0, [r4, #8] - mov r1, #1 - bl MOD33_022549E8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549A6 -_02254998: - ldr r0, [r4, #8] - bl MOD33_02254A18 - cmp r0, #0 - beq _022549A6 - mov r0, #1 - pop {r4, pc} -_022549A6: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD33_02254978 - - thumb_func_start MOD33_022549AC -MOD33_022549AC: ; 0x022549AC - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x30 - bl AllocFromHeap - add r4, r0, #0 - beq _022549D8 - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - str r6, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - cmp r0, #0 - beq _022549D8 - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_022549D8: - mov r0, #0 - pop {r4, r5, r6, pc} - thumb_func_end MOD33_022549AC - - thumb_func_start MOD33_022549DC -MOD33_022549DC: ; 0x022549DC - push {r3, lr} - cmp r0, #0 - beq _022549E6 - bl FreeToHeap -_022549E6: - pop {r3, pc} - thumb_func_end MOD33_022549DC - - thumb_func_start MOD33_022549E8 -MOD33_022549E8: ; 0x022549E8 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254A08 ; =MOD33_02254B1C - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254A08: .word MOD33_02254B1C - thumb_func_end MOD33_022549E8 - - thumb_func_start MOD33_02254A0C -MOD33_02254A0C: ; 0x02254A0C - ldr r3, _02254A14 ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254A14: .word MOD20_02253794 - thumb_func_end MOD33_02254A0C - - thumb_func_start MOD33_02254A18 -MOD33_02254A18: ; 0x02254A18 - ldr r3, _02254A20 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254A20: .word MOD20_022537B8 - thumb_func_end MOD33_02254A18 - - thumb_func_start MOD33_02254A24 -MOD33_02254A24: ; 0x02254A24 - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD33_02254A24 - - thumb_func_start MOD33_02254A38 -MOD33_02254A38: ; 0x02254A38 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254ACC ; =MOD33_02254B00 - mov r1, #6 - mov r3, #0 - bl InitBgFromTemplate - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - mov r1, #8 - str r1, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r3, #6 - bl GfGfxLoader_LoadCharData - mov r2, #0 - str r2, [sp] - mov r0, #0x20 - str r0, [sp, #4] - mov r0, #0x18 - str r0, [sp, #8] - str r2, [sp, #0xc] - ldr r0, [r5, #4] - mov r1, #6 - add r3, r2, #0 - bl FillBgTilemapRect - mov r0, #0x20 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #0xc - mov r1, #9 - mov r2, #4 - mov r3, #0 - bl GfGfxLoader_GXLoadPal - ldr r0, [r5, #4] - mov r1, #0xc - mov r2, #6 - bl MOD20_02253AA4 - ldr r0, [r5, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - ldr r1, _02254AD0 ; =0x04001000 - ldr r0, _02254AD4 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD33_02254A24 - add sp, #0x14 - pop {r4, r5, pc} - nop -_02254ACC: .word MOD33_02254B00 -_02254AD0: .word 0x04001000 -_02254AD4: .word 0xFFFFE0FF - thumb_func_end MOD33_02254A38 - - thumb_func_start MOD33_02254AD8 -MOD33_02254AD8: ; 0x02254AD8 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - add r0, r4, #0 - bl MOD33_02254A24 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD33_02254AD8 - - .section .rodata - - .global MOD33_02254AF4 -MOD33_02254AF4: ; 0x02254AF4 - .word MOD33_02254924, MOD33_02254964, MOD33_02254978 - - .global MOD33_02254B00 -MOD33_02254B00: ; 0x02254B00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 - .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD33_02254B1C -MOD33_02254B1C: ; 0x02254B1C - .word 0x00, MOD33_02254A38, 0x00 - .word 0x01, MOD33_02254AD8, 0x00 - .word 0x00, 0x00000000, 0x00 -- cgit v1.2.3 From d96fa9a00eee4c10f4030333d0355d5be3631741 Mon Sep 17 00:00:00 2001 From: tgsm Date: Tue, 20 Jul 2021 18:15:35 -0500 Subject: Split module 46 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 5 + arm9/modules/46/asm/mod46_02254854.s | 212 +++++++++++++++++++ arm9/modules/46/asm/mod46_022549AC.s | 192 +++++++++++++++++ arm9/modules/46/asm/module_46.s | 398 ----------------------------------- 5 files changed, 411 insertions(+), 399 deletions(-) create mode 100644 arm9/modules/46/asm/mod46_02254854.s create mode 100644 arm9/modules/46/asm/mod46_022549AC.s delete mode 100644 arm9/modules/46/asm/module_46.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 8a0117e0..98efa645 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -998,7 +998,8 @@ Overlay MODULE_46 { After MODULE_20 Object module_46_sinit.o - Object module_46.o + Object mod46_02254854.o + Object mod46_022549AC.o } Overlay MODULE_47 diff --git a/arm9/global.inc b/arm9/global.inc index a310c250..9a0d051e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7451,6 +7451,11 @@ .extern MOD33_02254A18 .extern MOD33_02254A38 .extern MOD33_02254AD8 +.extern MOD46_022549AC +.extern MOD46_022549DC +.extern MOD46_022549E8 +.extern MOD46_02254A0C +.extern MOD46_02254A18 .extern MOD51_02254A68 .extern MOD51_02254AB8 .extern MOD52_021D76C8 diff --git a/arm9/modules/46/asm/mod46_02254854.s b/arm9/modules/46/asm/mod46_02254854.s new file mode 100644 index 00000000..931d2e3e --- /dev/null +++ b/arm9/modules/46/asm/mod46_02254854.s @@ -0,0 +1,212 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD46_02254854 +MOD46_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x10 + add r7, r2, #0 + str r3, [sp] + bl AllocFromHeap + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD46_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD46_022548D4 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FreeToHeap +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD46_022548D4 + thumb_func_end MOD46_02254854 + + thumb_func_start MOD46_0225489C +MOD46_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #8 + add r1, r5, #4 + bl MOD46_022549AC + cmp r0, #0 + beq _022548BC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0xc] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548BC: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD46_0225489C + + thumb_func_start MOD46_022548C0 +MOD46_022548C0: ; 0x022548C0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + bl MOD46_022549DC + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD46_022548C0 + + thumb_func_start MOD46_022548D4 +MOD46_022548D4: ; 0x022548D4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254900 + lsl r2, r1, #2 + ldr r1, _02254904 ; =MOD46_02254AF4 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254900 + add r0, r4, #0 + bl MOD46_022548C0 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0xc] + bl MOD20_022529A0 +_02254900: + pop {r3, r4, r5, pc} + nop +_02254904: .word MOD46_02254AF4 + thumb_func_end MOD46_022548D4 + + thumb_func_start MOD46_02254908 +MOD46_02254908: ; 0x02254908 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD46_02254908 + + thumb_func_start MOD46_02254910 +MOD46_02254910: ; 0x02254910 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254918 + b _0225491A +_02254918: + mov r1, #2 +_0225491A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD46_02254910 + + thumb_func_start MOD46_02254924 +MOD46_02254924: ; 0x02254924 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254934 + cmp r0, #1 + beq _02254944 + b _0225495E +_02254934: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD46_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225495E +_02254944: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD46_02254A0C + cmp r0, #0 + beq _0225495E + ldr r0, [r4, #0xc] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD46_02254910 +_0225495E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD46_02254924 + + thumb_func_start MOD46_02254964 +MOD46_02254964: ; 0x02254964 + push {r3, lr} + ldrb r1, [r0, #2] + cmp r1, #0 + beq _02254972 + mov r1, #2 + bl MOD46_02254910 +_02254972: + mov r0, #0 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD46_02254964 + + thumb_func_start MOD46_02254978 +MOD46_02254978: ; 0x02254978 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254988 + cmp r0, #1 + beq _02254998 + b _022549A6 +_02254988: + ldr r0, [r4, #8] + mov r1, #1 + bl MOD46_022549E8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549A6 +_02254998: + ldr r0, [r4, #8] + bl MOD46_02254A18 + cmp r0, #0 + beq _022549A6 + mov r0, #1 + pop {r4, pc} +_022549A6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD46_02254978 + + .section .rodata + + .global MOD46_02254AF4 +MOD46_02254AF4: ; 0x02254AF4 + .word MOD46_02254924, MOD46_02254964, MOD46_02254978 diff --git a/arm9/modules/46/asm/mod46_022549AC.s b/arm9/modules/46/asm/mod46_022549AC.s new file mode 100644 index 00000000..d3290c07 --- /dev/null +++ b/arm9/modules/46/asm/mod46_022549AC.s @@ -0,0 +1,192 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD46_022549AC +MOD46_022549AC: ; 0x022549AC + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl AllocFromHeap + add r4, r0, #0 + beq _022549D8 + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _022549D8 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_022549D8: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD46_022549AC + + thumb_func_start MOD46_022549DC +MOD46_022549DC: ; 0x022549DC + push {r3, lr} + cmp r0, #0 + beq _022549E6 + bl FreeToHeap +_022549E6: + pop {r3, pc} + thumb_func_end MOD46_022549DC + + thumb_func_start MOD46_022549E8 +MOD46_022549E8: ; 0x022549E8 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254A08 ; =MOD46_02254B1C + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254A08: .word MOD46_02254B1C + thumb_func_end MOD46_022549E8 + + thumb_func_start MOD46_02254A0C +MOD46_02254A0C: ; 0x02254A0C + ldr r3, _02254A14 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254A14: .word MOD20_02253794 + thumb_func_end MOD46_02254A0C + + thumb_func_start MOD46_02254A18 +MOD46_02254A18: ; 0x02254A18 + ldr r3, _02254A20 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254A20: .word MOD20_022537B8 + thumb_func_end MOD46_02254A18 + + thumb_func_start MOD46_02254A24 +MOD46_02254A24: ; 0x02254A24 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD46_02254A24 + + thumb_func_start MOD46_02254A38 +MOD46_02254A38: ; 0x02254A38 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254ACC ; =MOD46_02254B00 + mov r1, #6 + mov r3, #0 + bl InitBgFromTemplate + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r3, #6 + bl GfGfxLoader_LoadCharData + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r5, #4] + mov r1, #6 + add r3, r2, #0 + bl FillBgTilemapRect + mov r0, #0x20 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0xc + mov r1, #9 + mov r2, #4 + mov r3, #0 + bl GfGfxLoader_GXLoadPal + ldr r0, [r5, #4] + mov r1, #0x1a + mov r2, #6 + bl MOD20_02253AA4 + ldr r0, [r5, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + ldr r1, _02254AD0 ; =0x04001000 + ldr r0, _02254AD4 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD46_02254A24 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254ACC: .word MOD46_02254B00 +_02254AD0: .word 0x04001000 +_02254AD4: .word 0xFFFFE0FF + thumb_func_end MOD46_02254A38 + + thumb_func_start MOD46_02254AD8 +MOD46_02254AD8: ; 0x02254AD8 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FreeBgTilemapBuffer + add r0, r4, #0 + bl MOD46_02254A24 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD46_02254AD8 + + .section .rodata + + .global MOD46_02254B00 +MOD46_02254B00: ; 0x02254B00 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 + .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD46_02254B1C +MOD46_02254B1C: ; 0x02254B1C + .word 0x00, MOD46_02254A38, 0x00 + .word 0x01, MOD46_02254AD8, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/46/asm/module_46.s b/arm9/modules/46/asm/module_46.s deleted file mode 100644 index aecfd51d..00000000 --- a/arm9/modules/46/asm/module_46.s +++ /dev/null @@ -1,398 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD46_02254854 -MOD46_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x10 - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD46_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD46_022548D4 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD46_022548D4 - thumb_func_end MOD46_02254854 - - thumb_func_start MOD46_0225489C -MOD46_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r0, #8 - add r1, r5, #4 - bl MOD46_022549AC - cmp r0, #0 - beq _022548BC - mov r0, #0 - strb r0, [r5] - strb r0, [r5, #1] - strb r0, [r5, #2] - str r4, [r5, #0xc] - mov r0, #1 - pop {r3, r4, r5, pc} -_022548BC: - mov r0, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD46_0225489C - - thumb_func_start MOD46_022548C0 -MOD46_022548C0: ; 0x022548C0 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - bl MOD46_022549DC - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD46_022548C0 - - thumb_func_start MOD46_022548D4 -MOD46_022548D4: ; 0x022548D4 - push {r3, r4, r5, lr} - add r4, r1, #0 - ldrb r1, [r4] - add r5, r0, #0 - cmp r1, #3 - bhs _02254900 - lsl r2, r1, #2 - ldr r1, _02254904 ; =MOD46_02254AF4 - add r0, r4, #0 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254900 - add r0, r4, #0 - bl MOD46_022548C0 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0xc] - bl MOD20_022529A0 -_02254900: - pop {r3, r4, r5, pc} - nop -_02254904: .word MOD46_02254AF4 - thumb_func_end MOD46_022548D4 - - thumb_func_start MOD46_02254908 -MOD46_02254908: ; 0x02254908 - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD46_02254908 - - thumb_func_start MOD46_02254910 -MOD46_02254910: ; 0x02254910 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254918 - b _0225491A -_02254918: - mov r1, #2 -_0225491A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD46_02254910 - - thumb_func_start MOD46_02254924 -MOD46_02254924: ; 0x02254924 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254934 - cmp r0, #1 - beq _02254944 - b _0225495E -_02254934: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD46_022549E8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _0225495E -_02254944: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD46_02254A0C - cmp r0, #0 - beq _0225495E - ldr r0, [r4, #0xc] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD46_02254910 -_0225495E: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD46_02254924 - - thumb_func_start MOD46_02254964 -MOD46_02254964: ; 0x02254964 - push {r3, lr} - ldrb r1, [r0, #2] - cmp r1, #0 - beq _02254972 - mov r1, #2 - bl MOD46_02254910 -_02254972: - mov r0, #0 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD46_02254964 - - thumb_func_start MOD46_02254978 -MOD46_02254978: ; 0x02254978 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254988 - cmp r0, #1 - beq _02254998 - b _022549A6 -_02254988: - ldr r0, [r4, #8] - mov r1, #1 - bl MOD46_022549E8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549A6 -_02254998: - ldr r0, [r4, #8] - bl MOD46_02254A18 - cmp r0, #0 - beq _022549A6 - mov r0, #1 - pop {r4, pc} -_022549A6: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD46_02254978 - - thumb_func_start MOD46_022549AC -MOD46_022549AC: ; 0x022549AC - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x30 - bl AllocFromHeap - add r4, r0, #0 - beq _022549D8 - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - str r6, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - cmp r0, #0 - beq _022549D8 - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_022549D8: - mov r0, #0 - pop {r4, r5, r6, pc} - thumb_func_end MOD46_022549AC - - thumb_func_start MOD46_022549DC -MOD46_022549DC: ; 0x022549DC - push {r3, lr} - cmp r0, #0 - beq _022549E6 - bl FreeToHeap -_022549E6: - pop {r3, pc} - thumb_func_end MOD46_022549DC - - thumb_func_start MOD46_022549E8 -MOD46_022549E8: ; 0x022549E8 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254A08 ; =MOD46_02254B1C - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254A08: .word MOD46_02254B1C - thumb_func_end MOD46_022549E8 - - thumb_func_start MOD46_02254A0C -MOD46_02254A0C: ; 0x02254A0C - ldr r3, _02254A14 ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254A14: .word MOD20_02253794 - thumb_func_end MOD46_02254A0C - - thumb_func_start MOD46_02254A18 -MOD46_02254A18: ; 0x02254A18 - ldr r3, _02254A20 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254A20: .word MOD20_022537B8 - thumb_func_end MOD46_02254A18 - - thumb_func_start MOD46_02254A24 -MOD46_02254A24: ; 0x02254A24 - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD46_02254A24 - - thumb_func_start MOD46_02254A38 -MOD46_02254A38: ; 0x02254A38 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254ACC ; =MOD46_02254B00 - mov r1, #6 - mov r3, #0 - bl InitBgFromTemplate - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - mov r1, #8 - str r1, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r3, #6 - bl GfGfxLoader_LoadCharData - mov r2, #0 - str r2, [sp] - mov r0, #0x20 - str r0, [sp, #4] - mov r0, #0x18 - str r0, [sp, #8] - str r2, [sp, #0xc] - ldr r0, [r5, #4] - mov r1, #6 - add r3, r2, #0 - bl FillBgTilemapRect - mov r0, #0x20 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #0xc - mov r1, #9 - mov r2, #4 - mov r3, #0 - bl GfGfxLoader_GXLoadPal - ldr r0, [r5, #4] - mov r1, #0x1a - mov r2, #6 - bl MOD20_02253AA4 - ldr r0, [r5, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - ldr r1, _02254AD0 ; =0x04001000 - ldr r0, _02254AD4 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD46_02254A24 - add sp, #0x14 - pop {r4, r5, pc} - nop -_02254ACC: .word MOD46_02254B00 -_02254AD0: .word 0x04001000 -_02254AD4: .word 0xFFFFE0FF - thumb_func_end MOD46_02254A38 - - thumb_func_start MOD46_02254AD8 -MOD46_02254AD8: ; 0x02254AD8 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - add r0, r4, #0 - bl MOD46_02254A24 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD46_02254AD8 - - .section .rodata - - .global MOD46_02254AF4 -MOD46_02254AF4: ; 0x02254AF4 - .word MOD46_02254924, MOD46_02254964, MOD46_02254978 - - .global MOD46_02254B00 -MOD46_02254B00: ; 0x02254B00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 - .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD46_02254B1C -MOD46_02254B1C: ; 0x02254B1C - .word 0x00, MOD46_02254A38, 0x00 - .word 0x01, MOD46_02254AD8, 0x00 - .word 0x00, 0x00000000, 0x00 -- cgit v1.2.3 From 170851c800b6fe34ba466318e4f1c177bf50a84a Mon Sep 17 00:00:00 2001 From: tgsm Date: Tue, 20 Jul 2021 18:29:50 -0500 Subject: Split module 50 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 7 + arm9/modules/50/asm/mod50_02254854.s | 213 ++++++++++++++++++ arm9/modules/50/asm/mod50_022549AC.s | 201 +++++++++++++++++ arm9/modules/50/asm/module_50.s | 408 ----------------------------------- 5 files changed, 423 insertions(+), 409 deletions(-) create mode 100644 arm9/modules/50/asm/mod50_02254854.s create mode 100644 arm9/modules/50/asm/mod50_022549AC.s delete mode 100644 arm9/modules/50/asm/module_50.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 98efa645..3f9b8806 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -1029,7 +1029,8 @@ Overlay MODULE_50 { After MODULE_20 Object module_50_sinit.o - Object module_50.o + Object mod50_02254854.o + Object mod50_022549AC.o } Overlay MODULE_51 diff --git a/arm9/global.inc b/arm9/global.inc index 9a0d051e..077162c4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7456,6 +7456,13 @@ .extern MOD46_022549E8 .extern MOD46_02254A0C .extern MOD46_02254A18 +.extern MOD50_022549AC +.extern MOD50_022549E0 +.extern MOD50_022549F8 +.extern MOD50_02254A1C +.extern MOD50_02254A28 +.extern MOD50_02254A48 +.extern MOD50_02254AE8 .extern MOD51_02254A68 .extern MOD51_02254AB8 .extern MOD52_021D76C8 diff --git a/arm9/modules/50/asm/mod50_02254854.s b/arm9/modules/50/asm/mod50_02254854.s new file mode 100644 index 00000000..aeca2cc0 --- /dev/null +++ b/arm9/modules/50/asm/mod50_02254854.s @@ -0,0 +1,213 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD50_02254854 +MOD50_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + add r7, r1, #0 + mov r0, #8 + mov r1, #0x10 + str r2, [sp] + add r5, r3, #0 + bl AllocFromHeap + add r4, r0, #0 + beq _02254894 + ldr r2, [sp] + add r1, r7, #0 + add r3, r5, #0 + bl MOD50_0225489C + cmp r0, #0 + beq _0225488E + ldr r0, _02254898 ; =MOD50_022548D4 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488E + str r4, [r6] + str r5, [r4, #4] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488E: + add r0, r4, #0 + bl FreeToHeap +_02254894: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254898: .word MOD50_022548D4 + thumb_func_end MOD50_02254854 + + thumb_func_start MOD50_0225489C +MOD50_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #8 + add r1, r5, #4 + bl MOD50_022549AC + cmp r0, #0 + beq _022548BC + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0xc] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548BC: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD50_0225489C + + thumb_func_start MOD50_022548C0 +MOD50_022548C0: ; 0x022548C0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + bl MOD50_022549E0 + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD50_022548C0 + + thumb_func_start MOD50_022548D4 +MOD50_022548D4: ; 0x022548D4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254900 + lsl r2, r1, #2 + ldr r1, _02254904 ; =MOD50_02254B04 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254900 + add r0, r4, #0 + bl MOD50_022548C0 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0xc] + bl MOD20_022529A0 +_02254900: + pop {r3, r4, r5, pc} + nop +_02254904: .word MOD50_02254B04 + thumb_func_end MOD50_022548D4 + + thumb_func_start MOD50_02254908 +MOD50_02254908: ; 0x02254908 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD50_02254908 + + thumb_func_start MOD50_02254910 +MOD50_02254910: ; 0x02254910 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254918 + b _0225491A +_02254918: + mov r1, #2 +_0225491A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD50_02254910 + + thumb_func_start MOD50_02254924 +MOD50_02254924: ; 0x02254924 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254934 + cmp r0, #1 + beq _02254944 + b _0225495E +_02254934: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD50_022549F8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225495E +_02254944: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD50_02254A1C + cmp r0, #0 + beq _0225495E + ldr r0, [r4, #0xc] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD50_02254910 +_0225495E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD50_02254924 + + thumb_func_start MOD50_02254964 +MOD50_02254964: ; 0x02254964 + push {r3, lr} + ldrb r1, [r0, #2] + cmp r1, #0 + beq _02254972 + mov r1, #2 + bl MOD50_02254910 +_02254972: + mov r0, #0 + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD50_02254964 + + thumb_func_start MOD50_02254978 +MOD50_02254978: ; 0x02254978 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254988 + cmp r0, #1 + beq _02254998 + b _022549A6 +_02254988: + ldr r0, [r4, #8] + mov r1, #1 + bl MOD50_022549F8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549A6 +_02254998: + ldr r0, [r4, #8] + bl MOD50_02254A28 + cmp r0, #0 + beq _022549A6 + mov r0, #1 + pop {r4, pc} +_022549A6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD50_02254978 + + .section .rodata + + .global MOD50_02254B04 +MOD50_02254B04: ; 0x02254B04 + .word MOD50_02254924, MOD50_02254964, MOD50_02254978 diff --git a/arm9/modules/50/asm/mod50_022549AC.s b/arm9/modules/50/asm/mod50_022549AC.s new file mode 100644 index 00000000..8051918a --- /dev/null +++ b/arm9/modules/50/asm/mod50_022549AC.s @@ -0,0 +1,201 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD50_022549AC +MOD50_022549AC: ; 0x022549AC + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl AllocFromHeap + add r4, r0, #0 + beq _022549DA + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + mov r0, #8 + str r6, [r4] + bl BgConfig_Alloc + str r0, [r4, #4] + cmp r0, #0 + beq _022549DA + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_022549DA: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD50_022549AC + + thumb_func_start MOD50_022549E0 +MOD50_022549E0: ; 0x022549E0 + push {r4, lr} + add r4, r0, #0 + beq _022549F6 + ldr r0, [r4, #4] + cmp r0, #0 + beq _022549F0 + bl FreeToHeap +_022549F0: + add r0, r4, #0 + bl FreeToHeap +_022549F6: + pop {r4, pc} + thumb_func_end MOD50_022549E0 + + thumb_func_start MOD50_022549F8 +MOD50_022549F8: ; 0x022549F8 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254A18 ; =MOD50_02254B2C + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254A18: .word MOD50_02254B2C + thumb_func_end MOD50_022549F8 + + thumb_func_start MOD50_02254A1C +MOD50_02254A1C: ; 0x02254A1C + ldr r3, _02254A24 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254A24: .word MOD20_02253794 + thumb_func_end MOD50_02254A1C + + thumb_func_start MOD50_02254A28 +MOD50_02254A28: ; 0x02254A28 + ldr r3, _02254A30 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254A30: .word MOD20_022537B8 + thumb_func_end MOD50_02254A28 + + thumb_func_start MOD50_02254A34 +MOD50_02254A34: ; 0x02254A34 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD50_02254A34 + + thumb_func_start MOD50_02254A48 +MOD50_02254A48: ; 0x02254A48 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254ADC ; =MOD50_02254B10 + mov r1, #6 + mov r3, #0 + bl InitBgFromTemplate + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + mov r1, #8 + str r1, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r3, #6 + bl GfGfxLoader_LoadCharData + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r5, #4] + mov r1, #6 + add r3, r2, #0 + bl FillBgTilemapRect + mov r0, #0x20 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #0xc + mov r1, #9 + mov r2, #4 + mov r3, #0 + bl GfGfxLoader_GXLoadPal + ldr r1, [r5] + ldr r0, [r5, #4] + ldr r1, [r1] + mov r2, #6 + bl MOD20_02253AA4 + ldr r0, [r5, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + ldr r1, _02254AE0 ; =0x04001000 + ldr r0, _02254AE4 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD50_02254A34 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 +_02254ADC: .word MOD50_02254B10 +_02254AE0: .word 0x04001000 +_02254AE4: .word 0xFFFFE0FF + thumb_func_end MOD50_02254A48 + + thumb_func_start MOD50_02254AE8 +MOD50_02254AE8: ; 0x02254AE8 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FreeBgTilemapBuffer + add r0, r4, #0 + bl MOD50_02254A34 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD50_02254AE8 + + .section .rodata + + .global MOD50_02254B10 +MOD50_02254B10: ; 0x02254B10 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 + .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD50_02254B2C +MOD50_02254B2C: ; 0x02254B2C + .word 0x00, MOD50_02254A48, 0x00 + .word 0x01, MOD50_02254AE8, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/50/asm/module_50.s b/arm9/modules/50/asm/module_50.s deleted file mode 100644 index fc52f7fa..00000000 --- a/arm9/modules/50/asm/module_50.s +++ /dev/null @@ -1,408 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD50_02254854 -MOD50_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - add r7, r1, #0 - mov r0, #8 - mov r1, #0x10 - str r2, [sp] - add r5, r3, #0 - bl AllocFromHeap - add r4, r0, #0 - beq _02254894 - ldr r2, [sp] - add r1, r7, #0 - add r3, r5, #0 - bl MOD50_0225489C - cmp r0, #0 - beq _0225488E - ldr r0, _02254898 ; =MOD50_022548D4 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488E - str r4, [r6] - str r5, [r4, #4] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488E: - add r0, r4, #0 - bl FreeToHeap -_02254894: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02254898: .word MOD50_022548D4 - thumb_func_end MOD50_02254854 - - thumb_func_start MOD50_0225489C -MOD50_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r0, #8 - add r1, r5, #4 - bl MOD50_022549AC - cmp r0, #0 - beq _022548BC - mov r0, #0 - strb r0, [r5] - strb r0, [r5, #1] - strb r0, [r5, #2] - str r4, [r5, #0xc] - mov r0, #1 - pop {r3, r4, r5, pc} -_022548BC: - mov r0, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD50_0225489C - - thumb_func_start MOD50_022548C0 -MOD50_022548C0: ; 0x022548C0 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - bl MOD50_022549E0 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD50_022548C0 - - thumb_func_start MOD50_022548D4 -MOD50_022548D4: ; 0x022548D4 - push {r3, r4, r5, lr} - add r4, r1, #0 - ldrb r1, [r4] - add r5, r0, #0 - cmp r1, #3 - bhs _02254900 - lsl r2, r1, #2 - ldr r1, _02254904 ; =MOD50_02254B04 - add r0, r4, #0 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254900 - add r0, r4, #0 - bl MOD50_022548C0 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0xc] - bl MOD20_022529A0 -_02254900: - pop {r3, r4, r5, pc} - nop -_02254904: .word MOD50_02254B04 - thumb_func_end MOD50_022548D4 - - thumb_func_start MOD50_02254908 -MOD50_02254908: ; 0x02254908 - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD50_02254908 - - thumb_func_start MOD50_02254910 -MOD50_02254910: ; 0x02254910 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254918 - b _0225491A -_02254918: - mov r1, #2 -_0225491A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD50_02254910 - - thumb_func_start MOD50_02254924 -MOD50_02254924: ; 0x02254924 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254934 - cmp r0, #1 - beq _02254944 - b _0225495E -_02254934: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD50_022549F8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _0225495E -_02254944: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD50_02254A1C - cmp r0, #0 - beq _0225495E - ldr r0, [r4, #0xc] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD50_02254910 -_0225495E: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD50_02254924 - - thumb_func_start MOD50_02254964 -MOD50_02254964: ; 0x02254964 - push {r3, lr} - ldrb r1, [r0, #2] - cmp r1, #0 - beq _02254972 - mov r1, #2 - bl MOD50_02254910 -_02254972: - mov r0, #0 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD50_02254964 - - thumb_func_start MOD50_02254978 -MOD50_02254978: ; 0x02254978 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254988 - cmp r0, #1 - beq _02254998 - b _022549A6 -_02254988: - ldr r0, [r4, #8] - mov r1, #1 - bl MOD50_022549F8 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549A6 -_02254998: - ldr r0, [r4, #8] - bl MOD50_02254A28 - cmp r0, #0 - beq _022549A6 - mov r0, #1 - pop {r4, pc} -_022549A6: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD50_02254978 - - thumb_func_start MOD50_022549AC -MOD50_022549AC: ; 0x022549AC - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x30 - bl AllocFromHeap - add r4, r0, #0 - beq _022549DA - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - mov r0, #8 - str r6, [r4] - bl BgConfig_Alloc - str r0, [r4, #4] - cmp r0, #0 - beq _022549DA - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_022549DA: - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD50_022549AC - - thumb_func_start MOD50_022549E0 -MOD50_022549E0: ; 0x022549E0 - push {r4, lr} - add r4, r0, #0 - beq _022549F6 - ldr r0, [r4, #4] - cmp r0, #0 - beq _022549F0 - bl FreeToHeap -_022549F0: - add r0, r4, #0 - bl FreeToHeap -_022549F6: - pop {r4, pc} - thumb_func_end MOD50_022549E0 - - thumb_func_start MOD50_022549F8 -MOD50_022549F8: ; 0x022549F8 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254A18 ; =MOD50_02254B2C - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254A18: .word MOD50_02254B2C - thumb_func_end MOD50_022549F8 - - thumb_func_start MOD50_02254A1C -MOD50_02254A1C: ; 0x02254A1C - ldr r3, _02254A24 ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254A24: .word MOD20_02253794 - thumb_func_end MOD50_02254A1C - - thumb_func_start MOD50_02254A28 -MOD50_02254A28: ; 0x02254A28 - ldr r3, _02254A30 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254A30: .word MOD20_022537B8 - thumb_func_end MOD50_02254A28 - - thumb_func_start MOD50_02254A34 -MOD50_02254A34: ; 0x02254A34 - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD50_02254A34 - - thumb_func_start MOD50_02254A48 -MOD50_02254A48: ; 0x02254A48 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254ADC ; =MOD50_02254B10 - mov r1, #6 - mov r3, #0 - bl InitBgFromTemplate - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - mov r1, #8 - str r1, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r3, #6 - bl GfGfxLoader_LoadCharData - mov r2, #0 - str r2, [sp] - mov r0, #0x20 - str r0, [sp, #4] - mov r0, #0x18 - str r0, [sp, #8] - str r2, [sp, #0xc] - ldr r0, [r5, #4] - mov r1, #6 - add r3, r2, #0 - bl FillBgTilemapRect - mov r0, #0x20 - str r0, [sp] - mov r0, #8 - str r0, [sp, #4] - mov r0, #0xc - mov r1, #9 - mov r2, #4 - mov r3, #0 - bl GfGfxLoader_GXLoadPal - ldr r1, [r5] - ldr r0, [r5, #4] - ldr r1, [r1] - mov r2, #6 - bl MOD20_02253AA4 - ldr r0, [r5, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - ldr r1, _02254AE0 ; =0x04001000 - ldr r0, _02254AE4 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD50_02254A34 - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 -_02254ADC: .word MOD50_02254B10 -_02254AE0: .word 0x04001000 -_02254AE4: .word 0xFFFFE0FF - thumb_func_end MOD50_02254A48 - - thumb_func_start MOD50_02254AE8 -MOD50_02254AE8: ; 0x02254AE8 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - add r0, r4, #0 - bl MOD50_02254A34 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD50_02254AE8 - - .section .rodata - - .global MOD50_02254B04 -MOD50_02254B04: ; 0x02254B04 - .word MOD50_02254924, MOD50_02254964, MOD50_02254978 - - .global MOD50_02254B10 -MOD50_02254B10: ; 0x02254B10 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 - .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD50_02254B2C -MOD50_02254B2C: ; 0x02254B2C - .word 0x00, MOD50_02254A48, 0x00 - .word 0x01, MOD50_02254AE8, 0x00 - .word 0x00, 0x00000000, 0x00 -- cgit v1.2.3 From 51257b335ba14a59818a670870e939b8765fd14d Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 22 Jul 2021 23:42:20 +0100 Subject: fix some types --- arm9/modules/21/src/mod21_02254854.c | 2 +- arm9/src/palette.c | 5 ++--- arm9/src/text.c | 4 ++-- arm9/src/unk_020061E8.c | 2 +- arm9/src/unk_0200CA44.c | 10 +++++----- include/text.h | 2 +- include/unk_020061E8.h | 2 +- include/unk_0200CA44.h | 8 ++++---- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 1c91afde..8e7ddb7d 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -29,7 +29,7 @@ THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { - if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, struct TextPrinter *))MOD21_02254930, (struct TextPrinter *)alloced, 1)) + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, (struct TextPrinter *)alloced, 1)) { *param0 = alloced; return TRUE; diff --git a/arm9/src/palette.c b/arm9/src/palette.c index 82252594..902bb386 100644 --- a/arm9/src/palette.c +++ b/arm9/src/palette.c @@ -209,9 +209,8 @@ THUMB_FUNC u32 FUN_02003210(struct PaletteData *paletteData, paletteData->unk118_0 = 1; paletteData->unk11c = 0; - // wtf is that? - FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, - (struct TextPrinter *)paletteData, + FUN_0200CA44((void (*)(u32, void *))FUN_02003464, + (void *)paletteData, (u32)(-2)); } } diff --git a/arm9/src/text.c b/arm9/src/text.c index 8ca16d55..e8c76722 100644 --- a/arm9/src/text.c +++ b/arm9/src/text.c @@ -29,7 +29,7 @@ THUMB_FUNC void SetFontsPointer(const struct FontInfo *fonts) gFonts = fonts; } -THUMB_FUNC u8 FUN_0201BCC8(void (*func)(u32, struct TextPrinter *), struct TextPrinter *printer, u32 param2) +THUMB_FUNC u8 FUN_0201BCC8(void (*func)(u32, void *), void *printer, u32 param2) { u32 *r4 = UNK_021C5714; s32 i; @@ -192,7 +192,7 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s { printer->textSpeedBottom--; printer->textSpeedTop = 1; - printer->minLetterSpacing = FUN_0201BCC8(RunTextPrinter, printer, 1); + printer->minLetterSpacing = FUN_0201BCC8((void (*)(u32, void *))RunTextPrinter, printer, 1); return printer->minLetterSpacing; } else diff --git a/arm9/src/unk_020061E8.c b/arm9/src/unk_020061E8.c index 424fea34..6b9f8ead 100644 --- a/arm9/src/unk_020061E8.c +++ b/arm9/src/unk_020061E8.c @@ -5,7 +5,7 @@ extern struct TextPrinter *FUN_0201B6C8(void); -THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 r2, u32 r3) +THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3) { void * r4; if(r1 != 0) diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c index 6ffed8be..a9a9f7c6 100644 --- a/arm9/src/unk_0200CA44.c +++ b/arm9/src/unk_0200CA44.c @@ -2,25 +2,25 @@ #include "main.h" #include "unk_0200CA44.h" -extern BOOL FUN_0201B60C(void *, void (*)(u32, struct TextPrinter *), struct TextPrinter *, u32); +extern BOOL FUN_0201B60C(void *, void (*)(u32, void *), void *, u32); extern void FUN_0201B6A0(s32); -THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2) +THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, u32 r2) { return FUN_0201B60C(gMain.unk18, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2) +THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, u32 r2) { return FUN_0201B60C(gMain.unk1C, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2) +THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, u32 r2) { return FUN_0201B60C(gMain.unk24, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2) +THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, u32 r2) { return FUN_0201B60C(gMain.unk20, r0, r1, r2); } diff --git a/include/text.h b/include/text.h index ad0698a0..6ecf1b08 100644 --- a/include/text.h +++ b/include/text.h @@ -76,7 +76,7 @@ struct FontInfo }; void SetFontsPointer(const struct FontInfo *fonts); -u8 FUN_0201BCC8(void (*func)(u32, struct TextPrinter *), struct TextPrinter *printer, u32 param2); +u8 FUN_0201BCC8(void (*func)(u32, void *), void *printer, u32 param2); void FUN_0201BCFC(u32 param0); BOOL FUN_0201BD44(u32 param0); void FUN_0201BD5C(void); diff --git a/include/unk_020061E8.h b/include/unk_020061E8.h index d94ea88f..121900c3 100644 --- a/include/unk_020061E8.h +++ b/include/unk_020061E8.h @@ -4,7 +4,7 @@ #include "nitro/types.h" #include "text.h" -BOOL FUN_020061E8(void (*r0)(u32, struct TextPrinter *), u32 r1, u32 r2, u32 r3); +BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3); void FUN_0200621C(s32 r0); #endif // POKEDIAMOND_UNK_020061E8_H diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h index 6dd208c3..065f3fc0 100644 --- a/include/unk_0200CA44.h +++ b/include/unk_0200CA44.h @@ -3,10 +3,10 @@ #include "text.h" -BOOL FUN_0200CA44(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2); -BOOL FUN_0200CA60(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2); -BOOL FUN_0200CA7C(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2); -BOOL FUN_0200CA98(void (*r0)(u32, struct TextPrinter *), struct TextPrinter * r1, u32 r2); +BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, u32 r2); +BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, u32 r2); +BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, u32 r2); +BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, u32 r2); void FUN_0200CAB4(s32 unk1); #endif //POKEDIAMOND_UNK_0200CA44_H -- cgit v1.2.3 From bba8b863d1c93b621fc4a918239a3074e6c41321 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 22 Jul 2021 23:48:04 +0100 Subject: fix one mroe cast --- arm9/modules/21/src/mod21_02254854.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 8e7ddb7d..2b7e36ec 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -29,7 +29,7 @@ THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { - if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, (struct TextPrinter *)alloced, 1)) + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, (void *)alloced, 1)) { *param0 = alloced; return TRUE; -- cgit v1.2.3 From 7202adb89485125c22e41ff937008e0f8357dfa2 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 22 Jul 2021 23:58:43 +0100 Subject: fix build --- arm9/src/unk_020051F4.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arm9/src/unk_020051F4.c b/arm9/src/unk_020051F4.c index 1d3679c8..6da250d5 100644 --- a/arm9/src/unk_020051F4.c +++ b/arm9/src/unk_020051F4.c @@ -570,8 +570,7 @@ THUMB_FUNC void FUN_02005AE0(u32 param0, u32 param1) ((u8 *)ptr)[7] = 0; ptr[0] = param0; - u32 r0 = (u32)FUN_0200CA44( - (void (*)(u32, struct TextPrinter *))FUN_02005B2C, (struct TextPrinter *)ptr, 0); + u32 r0 = (u32)FUN_0200CA44((void (*)(u32, void *))FUN_02005B2C, (void *)ptr, 0); ptr[1] = r0; *r6 = r0; } -- cgit v1.2.3 From 5bf13c7f48fe91c7902ce50250bc1a5a2398a2ae Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 23 Jul 2021 01:11:15 +0100 Subject: separate out libs to libc, libnns and NitroSDK --- Makefile | 6 +- arm9/CMakeLists.txt | 2 +- arm9/Makefile | 10 +- arm9/lib/Makefile | 18 +- arm9/lib/NitroSDK/Makefile | 80 + arm9/lib/NitroSDK/include/CARD_backup.h | 31 + arm9/lib/NitroSDK/include/CARD_common.h | 233 ++ arm9/lib/NitroSDK/include/CARD_pullOut.h | 13 + arm9/lib/NitroSDK/include/CARD_request.h | 12 + arm9/lib/NitroSDK/include/CARD_rom.h | 101 + arm9/lib/NitroSDK/include/CARD_spi.h | 8 + arm9/lib/NitroSDK/include/CP_context.h | 17 + arm9/lib/NitroSDK/include/CTRDG_backup.h | 50 + arm9/lib/NitroSDK/include/CTRDG_common.h | 137 + arm9/lib/NitroSDK/include/CTRDG_flash.h | 27 + arm9/lib/NitroSDK/include/CTRDG_flash_AT29LV512.h | 23 + arm9/lib/NitroSDK/include/CTRDG_task.h | 25 + arm9/lib/NitroSDK/include/DGT_common.h | 6 + arm9/lib/NitroSDK/include/DGT_dgt.h | 8 + arm9/lib/NitroSDK/include/FS_archive.h | 220 ++ arm9/lib/NitroSDK/include/FS_command.h | 11 + arm9/lib/NitroSDK/include/FS_command_default.h | 27 + arm9/lib/NitroSDK/include/FS_file.h | 226 ++ arm9/lib/NitroSDK/include/FS_mw_dtor.h | 16 + arm9/lib/NitroSDK/include/FS_overlay.h | 73 + arm9/lib/NitroSDK/include/FS_rom.h | 24 + arm9/lib/NitroSDK/include/FSi_util.h | 46 + arm9/lib/NitroSDK/include/GX_asm.h | 6 + arm9/lib/NitroSDK/include/GX_bgcnt.h | 761 ++++ arm9/lib/NitroSDK/include/GX_dma.h | 53 + arm9/lib/NitroSDK/include/GX_g2.h | 126 + arm9/lib/NitroSDK/include/GX_g3.h | 184 + arm9/lib/NitroSDK/include/GX_g3_util.h | 11 + arm9/lib/NitroSDK/include/GX_g3b.h | 21 + arm9/lib/NitroSDK/include/GX_g3imm.h | 10 + arm9/lib/NitroSDK/include/GX_g3x.h | 86 + arm9/lib/NitroSDK/include/GX_load2d.h | 41 + arm9/lib/NitroSDK/include/GX_load3d.h | 15 + arm9/lib/NitroSDK/include/GX_state.h | 24 + arm9/lib/NitroSDK/include/GX_struct_2d.h | 243 ++ arm9/lib/NitroSDK/include/GX_vramcnt.h | 57 + arm9/lib/NitroSDK/include/GXcommon.h | 29 + arm9/lib/NitroSDK/include/MATH_crc.h | 45 + arm9/lib/NitroSDK/include/MATH_dgt.h | 45 + arm9/lib/NitroSDK/include/MATH_pop.h | 8 + arm9/lib/NitroSDK/include/MB_mb.h | 41 + arm9/lib/NitroSDK/include/MI_byteAccess.h | 14 + arm9/lib/NitroSDK/include/MI_dma.h | 80 + arm9/lib/NitroSDK/include/MI_dma_card.h | 8 + arm9/lib/NitroSDK/include/MI_dma_gxcommand.h | 34 + arm9/lib/NitroSDK/include/MI_dma_hblank.h | 9 + arm9/lib/NitroSDK/include/MI_exMemory.h | 75 + arm9/lib/NitroSDK/include/MI_init.h | 6 + arm9/lib/NitroSDK/include/MI_memory.h | 68 + arm9/lib/NitroSDK/include/MI_swap.h | 6 + arm9/lib/NitroSDK/include/MI_uncompress.h | 7 + arm9/lib/NitroSDK/include/MI_wram.h | 14 + arm9/lib/NitroSDK/include/OS_alarm.h | 22 + arm9/lib/NitroSDK/include/OS_alloc.h | 14 + arm9/lib/NitroSDK/include/OS_arena.h | 18 + arm9/lib/NitroSDK/include/OS_cache.h | 16 + arm9/lib/NitroSDK/include/OS_context.h | 22 + arm9/lib/NitroSDK/include/OS_emulator.h | 13 + arm9/lib/NitroSDK/include/OS_entropy.h | 21 + arm9/lib/NitroSDK/include/OS_exception.h | 21 + arm9/lib/NitroSDK/include/OS_init.h | 33 + arm9/lib/NitroSDK/include/OS_interrupt.h | 60 + arm9/lib/NitroSDK/include/OS_irqHandler.h | 21 + arm9/lib/NitroSDK/include/OS_irqTable.h | 23 + arm9/lib/NitroSDK/include/OS_message.h | 15 + arm9/lib/NitroSDK/include/OS_mutex.h | 17 + arm9/lib/NitroSDK/include/OS_ownerInfo.h | 28 + arm9/lib/NitroSDK/include/OS_printf.h | 15 + arm9/lib/NitroSDK/include/OS_protectionRegion.h | 48 + arm9/lib/NitroSDK/include/OS_protectionUnit.h | 11 + arm9/lib/NitroSDK/include/OS_reset.h | 16 + arm9/lib/NitroSDK/include/OS_spinLock.h | 42 + arm9/lib/NitroSDK/include/OS_system.h | 18 + arm9/lib/NitroSDK/include/OS_tcm.h | 12 + arm9/lib/NitroSDK/include/OS_terminate_proc.h | 9 + arm9/lib/NitroSDK/include/OS_thread.h | 30 + arm9/lib/NitroSDK/include/OS_tick.h | 15 + arm9/lib/NitroSDK/include/OS_timer.h | 9 + arm9/lib/NitroSDK/include/OS_valarm.h | 25 + arm9/lib/NitroSDK/include/OS_vramExclusive.h | 10 + arm9/lib/NitroSDK/include/PAD_pad.h | 45 + arm9/lib/NitroSDK/include/PXI_fifo.h | 36 + arm9/lib/NitroSDK/include/PXI_init.h | 6 + arm9/lib/NitroSDK/include/RTC_api.h | 111 + arm9/lib/NitroSDK/include/RTC_convert.h | 12 + arm9/lib/NitroSDK/include/RTC_internal.h | 11 + arm9/lib/NitroSDK/include/SND_alarm.h | 14 + arm9/lib/NitroSDK/include/SND_bank.h | 95 + arm9/lib/NitroSDK/include/SND_command.h | 67 + arm9/lib/NitroSDK/include/SND_interface.h | 63 + arm9/lib/NitroSDK/include/SND_main.h | 26 + arm9/lib/NitroSDK/include/SND_util.h | 14 + arm9/lib/NitroSDK/include/SND_work.h | 68 + arm9/lib/NitroSDK/include/SPI_mic.h | 6 + arm9/lib/NitroSDK/include/SPI_pm.h | 40 + arm9/lib/NitroSDK/include/WM.h | 61 + arm9/lib/NitroSDK/include/WM_ks.h | 9 + arm9/lib/NitroSDK/include/consts.h | 63 + arm9/lib/NitroSDK/include/custom_allocator.h | 13 + arm9/lib/NitroSDK/include/dgt.h | 37 + arm9/lib/NitroSDK/include/fx.h | 177 + arm9/lib/NitroSDK/include/gx.h | 234 ++ arm9/lib/NitroSDK/include/math.h | 9 + arm9/lib/NitroSDK/include/mmap.h | 102 + arm9/lib/NitroSDK/include/nitro.h | 20 + arm9/lib/NitroSDK/include/registers.h | 1069 ++++++ arm9/lib/NitroSDK/include/syscall.h | 19 + arm9/lib/NitroSDK/include/systemWork.h | 6 + arm9/lib/NitroSDK/include/tp.h | 45 + arm9/lib/NitroSDK/include/userInfo.h | 92 + arm9/lib/NitroSDK/src/CARD_backup.c | 159 + arm9/lib/NitroSDK/src/CARD_common.c | 181 + arm9/lib/NitroSDK/src/CARD_pullOut.c | 105 + arm9/lib/NitroSDK/src/CARD_request.c | 76 + arm9/lib/NitroSDK/src/CARD_rom.c | 280 ++ arm9/lib/NitroSDK/src/CARD_spi.c | 123 + arm9/lib/NitroSDK/src/CP_context.c | 48 + arm9/lib/NitroSDK/src/CTRDG_backup.c | 94 + arm9/lib/NitroSDK/src/CTRDG_common.c | 350 ++ arm9/lib/NitroSDK/src/CTRDG_flash_AT29LV512.c | 327 ++ arm9/lib/NitroSDK/src/FS_archive.c | 445 +++ arm9/lib/NitroSDK/src/FS_command.c | 77 + arm9/lib/NitroSDK/src/FS_command_default.c | 453 +++ arm9/lib/NitroSDK/src/FS_file.c | 244 ++ arm9/lib/NitroSDK/src/FS_overlay.c | 320 ++ arm9/lib/NitroSDK/src/FS_rom.c | 126 + arm9/lib/NitroSDK/src/FX.c | 19 + arm9/lib/NitroSDK/src/FX_atan.c | 289 ++ arm9/lib/NitroSDK/src/FX_cp.c | 71 + arm9/lib/NitroSDK/src/FX_mtx22.c | 28 + arm9/lib/NitroSDK/src/FX_mtx33.c | 129 + arm9/lib/NitroSDK/src/FX_mtx43.c | 200 + arm9/lib/NitroSDK/src/FX_mtx44.c | 166 + arm9/lib/NitroSDK/src/FX_sincos.c | 4105 +++++++++++++++++++++ arm9/lib/NitroSDK/src/FX_vec.c | 109 + arm9/lib/NitroSDK/src/GX.c | 126 + arm9/lib/NitroSDK/src/GX_asm.c | 16 + arm9/lib/NitroSDK/src/GX_bgcnt.c | 194 + arm9/lib/NitroSDK/src/GX_g2.c | 65 + arm9/lib/NitroSDK/src/GX_g3.c | 35 + arm9/lib/NitroSDK/src/GX_g3_util.c | 259 ++ arm9/lib/NitroSDK/src/GX_g3b.c | 119 + arm9/lib/NitroSDK/src/GX_g3imm.c | 17 + arm9/lib/NitroSDK/src/GX_g3x.c | 235 ++ arm9/lib/NitroSDK/src/GX_load2d.c | 223 ++ arm9/lib/NitroSDK/src/GX_load3d.c | 150 + arm9/lib/NitroSDK/src/GX_state.c | 25 + arm9/lib/NitroSDK/src/GX_vramcnt.c | 578 +++ arm9/lib/NitroSDK/src/MATH_crc.c | 150 + arm9/lib/NitroSDK/src/MATH_dgt.c | 16 + arm9/lib/NitroSDK/src/MATH_pop.c | 12 + arm9/lib/NitroSDK/src/MI_dma.c | 307 ++ arm9/lib/NitroSDK/src/MI_dma_card.c | 24 + arm9/lib/NitroSDK/src/MI_dma_gxcommand.c | 155 + arm9/lib/NitroSDK/src/MI_dma_hblank.c | 31 + arm9/lib/NitroSDK/src/MI_init.c | 11 + arm9/lib/NitroSDK/src/MI_memory.c | 339 ++ arm9/lib/NitroSDK/src/MI_swap.c | 16 + arm9/lib/NitroSDK/src/MI_uncompress.c | 59 + arm9/lib/NitroSDK/src/MI_wram.c | 9 + arm9/lib/NitroSDK/src/OS_alarm.c | 254 ++ arm9/lib/NitroSDK/src/OS_alloc.c | 167 + arm9/lib/NitroSDK/src/OS_arena.c | 168 + arm9/lib/NitroSDK/src/OS_cache.c | 126 + arm9/lib/NitroSDK/src/OS_context.c | 92 + arm9/lib/NitroSDK/src/OS_emulator.c | 18 + arm9/lib/NitroSDK/src/OS_entropy.c | 25 + arm9/lib/NitroSDK/src/OS_exception.c | 164 + arm9/lib/NitroSDK/src/OS_init.c | 26 + arm9/lib/NitroSDK/src/OS_interrupt.c | 141 + arm9/lib/NitroSDK/src/OS_irqHandler.c | 143 + arm9/lib/NitroSDK/src/OS_irqTable.c | 110 + arm9/lib/NitroSDK/src/OS_message.c | 124 + arm9/lib/NitroSDK/src/OS_mutex.c | 142 + arm9/lib/NitroSDK/src/OS_ownerInfo.c | 29 + arm9/lib/NitroSDK/src/OS_printf.c | 492 +++ arm9/lib/NitroSDK/src/OS_protectionRegion.c | 23 + arm9/lib/NitroSDK/src/OS_protectionUnit.c | 18 + arm9/lib/NitroSDK/src/OS_reset.c | 239 ++ arm9/lib/NitroSDK/src/OS_spinLock.c | 218 ++ arm9/lib/NitroSDK/src/OS_system.c | 77 + arm9/lib/NitroSDK/src/OS_tcm.c | 9 + arm9/lib/NitroSDK/src/OS_terminate_proc.c | 19 + arm9/lib/NitroSDK/src/OS_thread.c | 734 ++++ arm9/lib/NitroSDK/src/OS_tick.c | 70 + arm9/lib/NitroSDK/src/OS_timer.c | 9 + arm9/lib/NitroSDK/src/OS_valarm.c | 30 + arm9/lib/NitroSDK/src/OS_vramExclusive.c | 88 + arm9/lib/NitroSDK/src/PXI_fifo.c | 185 + arm9/lib/NitroSDK/src/PXI_init.c | 8 + arm9/lib/NitroSDK/src/RTC_convert.c | 164 + arm9/lib/NitroSDK/src/RTC_internal.c | 31 + arm9/lib/NitroSDK/src/SND_alarm.c | 40 + arm9/lib/NitroSDK/src/SND_bank.c | 174 + arm9/lib/NitroSDK/src/SND_command.c | 333 ++ arm9/lib/NitroSDK/src/SND_interface.c | 172 + arm9/lib/NitroSDK/src/SND_main.c | 26 + arm9/lib/NitroSDK/src/SND_util.c | 238 ++ arm9/lib/NitroSDK/src/SND_work.c | 113 + arm9/lib/NitroSDK/src/WM_ks.c | 15 + arm9/lib/NitroSDK/src/crt0.c | 378 ++ arm9/lib/NitroSDK/src/custom_allocator.c | 32 + arm9/lib/NitroSDK/src/version_1_dwc.c | 5 + arm9/lib/NitroSDK/src/version_2_wifi.c | 5 + arm9/lib/NitroSDK/src/version_3_cps.c | 5 + arm9/lib/NitroSDK/src/version_4_ssl.c | 5 + arm9/lib/NitroSDK/src/version_5_vct.c | 5 + arm9/lib/NitroSDK/src/version_6_backup.c | 5 + arm9/lib/include/CARD_backup.h | 31 - arm9/lib/include/CARD_common.h | 233 -- arm9/lib/include/CARD_pullOut.h | 13 - arm9/lib/include/CARD_request.h | 12 - arm9/lib/include/CARD_rom.h | 101 - arm9/lib/include/CARD_spi.h | 8 - arm9/lib/include/CP_context.h | 17 - arm9/lib/include/CTRDG_backup.h | 50 - arm9/lib/include/CTRDG_common.h | 137 - arm9/lib/include/CTRDG_flash.h | 27 - arm9/lib/include/CTRDG_flash_AT29LV512.h | 23 - arm9/lib/include/CTRDG_task.h | 25 - arm9/lib/include/DGT_common.h | 6 - arm9/lib/include/DGT_dgt.h | 8 - arm9/lib/include/FS_archive.h | 220 -- arm9/lib/include/FS_command.h | 11 - arm9/lib/include/FS_command_default.h | 27 - arm9/lib/include/FS_file.h | 226 -- arm9/lib/include/FS_mw_dtor.h | 16 - arm9/lib/include/FS_overlay.h | 73 - arm9/lib/include/FS_rom.h | 24 - arm9/lib/include/FSi_util.h | 46 - arm9/lib/include/GX_asm.h | 6 - arm9/lib/include/GX_bgcnt.h | 761 ---- arm9/lib/include/GX_dma.h | 53 - arm9/lib/include/GX_g2.h | 126 - arm9/lib/include/GX_g3.h | 184 - arm9/lib/include/GX_g3_util.h | 11 - arm9/lib/include/GX_g3b.h | 21 - arm9/lib/include/GX_g3imm.h | 10 - arm9/lib/include/GX_g3x.h | 86 - arm9/lib/include/GX_load2d.h | 41 - arm9/lib/include/GX_load3d.h | 15 - arm9/lib/include/GX_state.h | 24 - arm9/lib/include/GX_struct_2d.h | 243 -- arm9/lib/include/GX_vramcnt.h | 57 - arm9/lib/include/GXcommon.h | 29 - arm9/lib/include/MATH_crc.h | 45 - arm9/lib/include/MATH_dgt.h | 45 - arm9/lib/include/MATH_pop.h | 8 - arm9/lib/include/MB_mb.h | 41 - arm9/lib/include/MI_byteAccess.h | 14 - arm9/lib/include/MI_dma.h | 80 - arm9/lib/include/MI_dma_card.h | 8 - arm9/lib/include/MI_dma_gxcommand.h | 34 - arm9/lib/include/MI_dma_hblank.h | 9 - arm9/lib/include/MI_exMemory.h | 75 - arm9/lib/include/MI_init.h | 6 - arm9/lib/include/MI_memory.h | 68 - arm9/lib/include/MI_swap.h | 6 - arm9/lib/include/MI_uncompress.h | 7 - arm9/lib/include/MI_wram.h | 14 - arm9/lib/include/MSL.h | 8 - arm9/lib/include/MSL_Common_arith.h | 8 - arm9/lib/include/NNS_FND_allocator.h | 34 - arm9/lib/include/NNS_FND_expheap.h | 55 - arm9/lib/include/NNS_FND_heapcommon.h | 26 - arm9/lib/include/NNS_FND_list.h | 20 - arm9/lib/include/NNS_SND_arc.h | 39 - arm9/lib/include/NNS_SND_arc_loader.h | 12 - arm9/lib/include/NNS_SND_heap.h | 11 - arm9/lib/include/NNS_g2d.h | 212 -- arm9/lib/include/OS_alarm.h | 22 - arm9/lib/include/OS_alloc.h | 14 - arm9/lib/include/OS_arena.h | 18 - arm9/lib/include/OS_cache.h | 16 - arm9/lib/include/OS_context.h | 22 - arm9/lib/include/OS_emulator.h | 13 - arm9/lib/include/OS_entropy.h | 21 - arm9/lib/include/OS_exception.h | 21 - arm9/lib/include/OS_init.h | 33 - arm9/lib/include/OS_interrupt.h | 60 - arm9/lib/include/OS_irqHandler.h | 21 - arm9/lib/include/OS_irqTable.h | 23 - arm9/lib/include/OS_message.h | 15 - arm9/lib/include/OS_mutex.h | 17 - arm9/lib/include/OS_ownerInfo.h | 28 - arm9/lib/include/OS_printf.h | 15 - arm9/lib/include/OS_protectionRegion.h | 48 - arm9/lib/include/OS_protectionUnit.h | 11 - arm9/lib/include/OS_reset.h | 16 - arm9/lib/include/OS_spinLock.h | 42 - arm9/lib/include/OS_system.h | 18 - arm9/lib/include/OS_tcm.h | 12 - arm9/lib/include/OS_terminate_proc.h | 9 - arm9/lib/include/OS_thread.h | 30 - arm9/lib/include/OS_tick.h | 15 - arm9/lib/include/OS_timer.h | 9 - arm9/lib/include/OS_valarm.h | 25 - arm9/lib/include/OS_vramExclusive.h | 10 - arm9/lib/include/PAD_pad.h | 45 - arm9/lib/include/PXI_fifo.h | 36 - arm9/lib/include/PXI_init.h | 6 - arm9/lib/include/RTC_api.h | 111 - arm9/lib/include/RTC_convert.h | 12 - arm9/lib/include/RTC_internal.h | 11 - arm9/lib/include/SND_alarm.h | 14 - arm9/lib/include/SND_bank.h | 95 - arm9/lib/include/SND_command.h | 67 - arm9/lib/include/SND_interface.h | 63 - arm9/lib/include/SND_main.h | 26 - arm9/lib/include/SND_util.h | 14 - arm9/lib/include/SND_work.h | 68 - arm9/lib/include/SPI_mic.h | 6 - arm9/lib/include/SPI_pm.h | 40 - arm9/lib/include/WM.h | 61 - arm9/lib/include/WM_ks.h | 9 - arm9/lib/include/consts.h | 63 - arm9/lib/include/custom_allocator.h | 13 - arm9/lib/include/dgt.h | 37 - arm9/lib/include/fx.h | 177 - arm9/lib/include/gx.h | 234 -- arm9/lib/include/math.h | 9 - arm9/lib/include/mmap.h | 102 - arm9/lib/include/nitro.h | 20 - arm9/lib/include/registers.h | 1069 ------ arm9/lib/include/syscall.h | 19 - arm9/lib/include/systemWork.h | 6 - arm9/lib/include/tp.h | 45 - arm9/lib/include/userInfo.h | 92 - arm9/lib/libc/Makefile | 80 + arm9/lib/libc/include/MSL.h | 8 + arm9/lib/libc/include/MSL_Common_arith.h | 8 + arm9/lib/libc/src/MSL_Common_arith.c | 7 + arm9/lib/libnns/Makefile | 81 + arm9/lib/libnns/include/NNS_FND_allocator.h | 34 + arm9/lib/libnns/include/NNS_FND_expheap.h | 55 + arm9/lib/libnns/include/NNS_FND_heapcommon.h | 26 + arm9/lib/libnns/include/NNS_FND_list.h | 20 + arm9/lib/libnns/include/NNS_SND_arc.h | 39 + arm9/lib/libnns/include/NNS_SND_arc_loader.h | 12 + arm9/lib/libnns/include/NNS_SND_heap.h | 11 + arm9/lib/libnns/include/NNS_g2d.h | 212 ++ arm9/lib/libnns/src/.gitkeep | 0 arm9/lib/src/CARD_backup.c | 159 - arm9/lib/src/CARD_common.c | 181 - arm9/lib/src/CARD_pullOut.c | 105 - arm9/lib/src/CARD_request.c | 76 - arm9/lib/src/CARD_rom.c | 280 -- arm9/lib/src/CARD_spi.c | 123 - arm9/lib/src/CP_context.c | 48 - arm9/lib/src/CTRDG_backup.c | 94 - arm9/lib/src/CTRDG_common.c | 350 -- arm9/lib/src/CTRDG_flash_AT29LV512.c | 327 -- arm9/lib/src/FS_archive.c | 445 --- arm9/lib/src/FS_command.c | 77 - arm9/lib/src/FS_command_default.c | 453 --- arm9/lib/src/FS_file.c | 244 -- arm9/lib/src/FS_overlay.c | 320 -- arm9/lib/src/FS_rom.c | 126 - arm9/lib/src/FX.c | 19 - arm9/lib/src/FX_atan.c | 289 -- arm9/lib/src/FX_cp.c | 71 - arm9/lib/src/FX_mtx22.c | 28 - arm9/lib/src/FX_mtx33.c | 129 - arm9/lib/src/FX_mtx43.c | 200 - arm9/lib/src/FX_mtx44.c | 166 - arm9/lib/src/FX_sincos.c | 4105 --------------------- arm9/lib/src/FX_vec.c | 109 - arm9/lib/src/GX.c | 126 - arm9/lib/src/GX_asm.c | 16 - arm9/lib/src/GX_bgcnt.c | 194 - arm9/lib/src/GX_g2.c | 65 - arm9/lib/src/GX_g3.c | 35 - arm9/lib/src/GX_g3_util.c | 259 -- arm9/lib/src/GX_g3b.c | 119 - arm9/lib/src/GX_g3imm.c | 17 - arm9/lib/src/GX_g3x.c | 235 -- arm9/lib/src/GX_load2d.c | 223 -- arm9/lib/src/GX_load3d.c | 150 - arm9/lib/src/GX_state.c | 25 - arm9/lib/src/GX_vramcnt.c | 578 --- arm9/lib/src/MATH_crc.c | 150 - arm9/lib/src/MATH_dgt.c | 16 - arm9/lib/src/MATH_pop.c | 12 - arm9/lib/src/MI_dma.c | 307 -- arm9/lib/src/MI_dma_card.c | 24 - arm9/lib/src/MI_dma_gxcommand.c | 155 - arm9/lib/src/MI_dma_hblank.c | 31 - arm9/lib/src/MI_init.c | 11 - arm9/lib/src/MI_memory.c | 339 -- arm9/lib/src/MI_swap.c | 16 - arm9/lib/src/MI_uncompress.c | 59 - arm9/lib/src/MI_wram.c | 9 - arm9/lib/src/MSL_Common_arith.c | 7 - arm9/lib/src/OS_alarm.c | 254 -- arm9/lib/src/OS_alloc.c | 167 - arm9/lib/src/OS_arena.c | 168 - arm9/lib/src/OS_cache.c | 126 - arm9/lib/src/OS_context.c | 92 - arm9/lib/src/OS_emulator.c | 18 - arm9/lib/src/OS_entropy.c | 25 - arm9/lib/src/OS_exception.c | 164 - arm9/lib/src/OS_init.c | 26 - arm9/lib/src/OS_interrupt.c | 141 - arm9/lib/src/OS_irqHandler.c | 143 - arm9/lib/src/OS_irqTable.c | 110 - arm9/lib/src/OS_message.c | 124 - arm9/lib/src/OS_mutex.c | 142 - arm9/lib/src/OS_ownerInfo.c | 29 - arm9/lib/src/OS_printf.c | 492 --- arm9/lib/src/OS_protectionRegion.c | 23 - arm9/lib/src/OS_protectionUnit.c | 18 - arm9/lib/src/OS_reset.c | 239 -- arm9/lib/src/OS_spinLock.c | 218 -- arm9/lib/src/OS_system.c | 77 - arm9/lib/src/OS_tcm.c | 9 - arm9/lib/src/OS_terminate_proc.c | 19 - arm9/lib/src/OS_thread.c | 734 ---- arm9/lib/src/OS_tick.c | 70 - arm9/lib/src/OS_timer.c | 9 - arm9/lib/src/OS_valarm.c | 30 - arm9/lib/src/OS_vramExclusive.c | 88 - arm9/lib/src/PXI_fifo.c | 185 - arm9/lib/src/PXI_init.c | 8 - arm9/lib/src/RTC_convert.c | 164 - arm9/lib/src/RTC_internal.c | 31 - arm9/lib/src/SND_alarm.c | 40 - arm9/lib/src/SND_bank.c | 174 - arm9/lib/src/SND_command.c | 333 -- arm9/lib/src/SND_interface.c | 172 - arm9/lib/src/SND_main.c | 26 - arm9/lib/src/SND_util.c | 238 -- arm9/lib/src/SND_work.c | 113 - arm9/lib/src/WM_ks.c | 15 - arm9/lib/src/crt0.c | 378 -- arm9/lib/src/custom_allocator.c | 32 - arm9/lib/src/version_1_dwc.c | 5 - arm9/lib/src/version_2_wifi.c | 5 - arm9/lib/src/version_3_cps.c | 5 - arm9/lib/src/version_4_ssl.c | 5 - arm9/lib/src/version_5_vct.c | 5 - arm9/lib/src/version_6_backup.c | 5 - arm9/modules/06/include/module_06.h | 28 +- arm9/modules/19/src/module_19.c | 94 +- 448 files changed, 24779 insertions(+), 24532 deletions(-) create mode 100644 arm9/lib/NitroSDK/Makefile create mode 100644 arm9/lib/NitroSDK/include/CARD_backup.h create mode 100644 arm9/lib/NitroSDK/include/CARD_common.h create mode 100644 arm9/lib/NitroSDK/include/CARD_pullOut.h create mode 100644 arm9/lib/NitroSDK/include/CARD_request.h create mode 100644 arm9/lib/NitroSDK/include/CARD_rom.h create mode 100644 arm9/lib/NitroSDK/include/CARD_spi.h create mode 100644 arm9/lib/NitroSDK/include/CP_context.h create mode 100644 arm9/lib/NitroSDK/include/CTRDG_backup.h create mode 100644 arm9/lib/NitroSDK/include/CTRDG_common.h create mode 100644 arm9/lib/NitroSDK/include/CTRDG_flash.h create mode 100644 arm9/lib/NitroSDK/include/CTRDG_flash_AT29LV512.h create mode 100644 arm9/lib/NitroSDK/include/CTRDG_task.h create mode 100644 arm9/lib/NitroSDK/include/DGT_common.h create mode 100644 arm9/lib/NitroSDK/include/DGT_dgt.h create mode 100644 arm9/lib/NitroSDK/include/FS_archive.h create mode 100644 arm9/lib/NitroSDK/include/FS_command.h create mode 100644 arm9/lib/NitroSDK/include/FS_command_default.h create mode 100644 arm9/lib/NitroSDK/include/FS_file.h create mode 100644 arm9/lib/NitroSDK/include/FS_mw_dtor.h create mode 100644 arm9/lib/NitroSDK/include/FS_overlay.h create mode 100644 arm9/lib/NitroSDK/include/FS_rom.h create mode 100644 arm9/lib/NitroSDK/include/FSi_util.h create mode 100644 arm9/lib/NitroSDK/include/GX_asm.h create mode 100644 arm9/lib/NitroSDK/include/GX_bgcnt.h create mode 100644 arm9/lib/NitroSDK/include/GX_dma.h create mode 100644 arm9/lib/NitroSDK/include/GX_g2.h create mode 100644 arm9/lib/NitroSDK/include/GX_g3.h create mode 100644 arm9/lib/NitroSDK/include/GX_g3_util.h create mode 100644 arm9/lib/NitroSDK/include/GX_g3b.h create mode 100644 arm9/lib/NitroSDK/include/GX_g3imm.h create mode 100644 arm9/lib/NitroSDK/include/GX_g3x.h create mode 100644 arm9/lib/NitroSDK/include/GX_load2d.h create mode 100644 arm9/lib/NitroSDK/include/GX_load3d.h create mode 100644 arm9/lib/NitroSDK/include/GX_state.h create mode 100644 arm9/lib/NitroSDK/include/GX_struct_2d.h create mode 100644 arm9/lib/NitroSDK/include/GX_vramcnt.h create mode 100644 arm9/lib/NitroSDK/include/GXcommon.h create mode 100644 arm9/lib/NitroSDK/include/MATH_crc.h create mode 100644 arm9/lib/NitroSDK/include/MATH_dgt.h create mode 100644 arm9/lib/NitroSDK/include/MATH_pop.h create mode 100644 arm9/lib/NitroSDK/include/MB_mb.h create mode 100644 arm9/lib/NitroSDK/include/MI_byteAccess.h create mode 100644 arm9/lib/NitroSDK/include/MI_dma.h create mode 100644 arm9/lib/NitroSDK/include/MI_dma_card.h create mode 100644 arm9/lib/NitroSDK/include/MI_dma_gxcommand.h create mode 100644 arm9/lib/NitroSDK/include/MI_dma_hblank.h create mode 100644 arm9/lib/NitroSDK/include/MI_exMemory.h create mode 100644 arm9/lib/NitroSDK/include/MI_init.h create mode 100644 arm9/lib/NitroSDK/include/MI_memory.h create mode 100644 arm9/lib/NitroSDK/include/MI_swap.h create mode 100644 arm9/lib/NitroSDK/include/MI_uncompress.h create mode 100644 arm9/lib/NitroSDK/include/MI_wram.h create mode 100644 arm9/lib/NitroSDK/include/OS_alarm.h create mode 100644 arm9/lib/NitroSDK/include/OS_alloc.h create mode 100644 arm9/lib/NitroSDK/include/OS_arena.h create mode 100644 arm9/lib/NitroSDK/include/OS_cache.h create mode 100644 arm9/lib/NitroSDK/include/OS_context.h create mode 100644 arm9/lib/NitroSDK/include/OS_emulator.h create mode 100644 arm9/lib/NitroSDK/include/OS_entropy.h create mode 100644 arm9/lib/NitroSDK/include/OS_exception.h create mode 100644 arm9/lib/NitroSDK/include/OS_init.h create mode 100644 arm9/lib/NitroSDK/include/OS_interrupt.h create mode 100644 arm9/lib/NitroSDK/include/OS_irqHandler.h create mode 100644 arm9/lib/NitroSDK/include/OS_irqTable.h create mode 100644 arm9/lib/NitroSDK/include/OS_message.h create mode 100644 arm9/lib/NitroSDK/include/OS_mutex.h create mode 100644 arm9/lib/NitroSDK/include/OS_ownerInfo.h create mode 100644 arm9/lib/NitroSDK/include/OS_printf.h create mode 100644 arm9/lib/NitroSDK/include/OS_protectionRegion.h create mode 100644 arm9/lib/NitroSDK/include/OS_protectionUnit.h create mode 100644 arm9/lib/NitroSDK/include/OS_reset.h create mode 100644 arm9/lib/NitroSDK/include/OS_spinLock.h create mode 100644 arm9/lib/NitroSDK/include/OS_system.h create mode 100644 arm9/lib/NitroSDK/include/OS_tcm.h create mode 100644 arm9/lib/NitroSDK/include/OS_terminate_proc.h create mode 100644 arm9/lib/NitroSDK/include/OS_thread.h create mode 100644 arm9/lib/NitroSDK/include/OS_tick.h create mode 100644 arm9/lib/NitroSDK/include/OS_timer.h create mode 100644 arm9/lib/NitroSDK/include/OS_valarm.h create mode 100644 arm9/lib/NitroSDK/include/OS_vramExclusive.h create mode 100644 arm9/lib/NitroSDK/include/PAD_pad.h create mode 100644 arm9/lib/NitroSDK/include/PXI_fifo.h create mode 100644 arm9/lib/NitroSDK/include/PXI_init.h create mode 100644 arm9/lib/NitroSDK/include/RTC_api.h create mode 100644 arm9/lib/NitroSDK/include/RTC_convert.h create mode 100644 arm9/lib/NitroSDK/include/RTC_internal.h create mode 100644 arm9/lib/NitroSDK/include/SND_alarm.h create mode 100644 arm9/lib/NitroSDK/include/SND_bank.h create mode 100644 arm9/lib/NitroSDK/include/SND_command.h create mode 100644 arm9/lib/NitroSDK/include/SND_interface.h create mode 100644 arm9/lib/NitroSDK/include/SND_main.h create mode 100644 arm9/lib/NitroSDK/include/SND_util.h create mode 100644 arm9/lib/NitroSDK/include/SND_work.h create mode 100644 arm9/lib/NitroSDK/include/SPI_mic.h create mode 100644 arm9/lib/NitroSDK/include/SPI_pm.h create mode 100644 arm9/lib/NitroSDK/include/WM.h create mode 100644 arm9/lib/NitroSDK/include/WM_ks.h create mode 100644 arm9/lib/NitroSDK/include/consts.h create mode 100644 arm9/lib/NitroSDK/include/custom_allocator.h create mode 100644 arm9/lib/NitroSDK/include/dgt.h create mode 100644 arm9/lib/NitroSDK/include/fx.h create mode 100644 arm9/lib/NitroSDK/include/gx.h create mode 100644 arm9/lib/NitroSDK/include/math.h create mode 100644 arm9/lib/NitroSDK/include/mmap.h create mode 100644 arm9/lib/NitroSDK/include/nitro.h create mode 100644 arm9/lib/NitroSDK/include/registers.h create mode 100644 arm9/lib/NitroSDK/include/syscall.h create mode 100644 arm9/lib/NitroSDK/include/systemWork.h create mode 100644 arm9/lib/NitroSDK/include/tp.h create mode 100644 arm9/lib/NitroSDK/include/userInfo.h create mode 100644 arm9/lib/NitroSDK/src/CARD_backup.c create mode 100644 arm9/lib/NitroSDK/src/CARD_common.c create mode 100644 arm9/lib/NitroSDK/src/CARD_pullOut.c create mode 100644 arm9/lib/NitroSDK/src/CARD_request.c create mode 100644 arm9/lib/NitroSDK/src/CARD_rom.c create mode 100644 arm9/lib/NitroSDK/src/CARD_spi.c create mode 100644 arm9/lib/NitroSDK/src/CP_context.c create mode 100644 arm9/lib/NitroSDK/src/CTRDG_backup.c create mode 100644 arm9/lib/NitroSDK/src/CTRDG_common.c create mode 100644 arm9/lib/NitroSDK/src/CTRDG_flash_AT29LV512.c create mode 100644 arm9/lib/NitroSDK/src/FS_archive.c create mode 100644 arm9/lib/NitroSDK/src/FS_command.c create mode 100644 arm9/lib/NitroSDK/src/FS_command_default.c create mode 100644 arm9/lib/NitroSDK/src/FS_file.c create mode 100644 arm9/lib/NitroSDK/src/FS_overlay.c create mode 100644 arm9/lib/NitroSDK/src/FS_rom.c create mode 100644 arm9/lib/NitroSDK/src/FX.c create mode 100644 arm9/lib/NitroSDK/src/FX_atan.c create mode 100644 arm9/lib/NitroSDK/src/FX_cp.c create mode 100644 arm9/lib/NitroSDK/src/FX_mtx22.c create mode 100644 arm9/lib/NitroSDK/src/FX_mtx33.c create mode 100644 arm9/lib/NitroSDK/src/FX_mtx43.c create mode 100644 arm9/lib/NitroSDK/src/FX_mtx44.c create mode 100644 arm9/lib/NitroSDK/src/FX_sincos.c create mode 100644 arm9/lib/NitroSDK/src/FX_vec.c create mode 100644 arm9/lib/NitroSDK/src/GX.c create mode 100644 arm9/lib/NitroSDK/src/GX_asm.c create mode 100644 arm9/lib/NitroSDK/src/GX_bgcnt.c create mode 100644 arm9/lib/NitroSDK/src/GX_g2.c create mode 100644 arm9/lib/NitroSDK/src/GX_g3.c create mode 100644 arm9/lib/NitroSDK/src/GX_g3_util.c create mode 100644 arm9/lib/NitroSDK/src/GX_g3b.c create mode 100644 arm9/lib/NitroSDK/src/GX_g3imm.c create mode 100644 arm9/lib/NitroSDK/src/GX_g3x.c create mode 100644 arm9/lib/NitroSDK/src/GX_load2d.c create mode 100644 arm9/lib/NitroSDK/src/GX_load3d.c create mode 100644 arm9/lib/NitroSDK/src/GX_state.c create mode 100644 arm9/lib/NitroSDK/src/GX_vramcnt.c create mode 100644 arm9/lib/NitroSDK/src/MATH_crc.c create mode 100644 arm9/lib/NitroSDK/src/MATH_dgt.c create mode 100644 arm9/lib/NitroSDK/src/MATH_pop.c create mode 100644 arm9/lib/NitroSDK/src/MI_dma.c create mode 100644 arm9/lib/NitroSDK/src/MI_dma_card.c create mode 100644 arm9/lib/NitroSDK/src/MI_dma_gxcommand.c create mode 100644 arm9/lib/NitroSDK/src/MI_dma_hblank.c create mode 100644 arm9/lib/NitroSDK/src/MI_init.c create mode 100644 arm9/lib/NitroSDK/src/MI_memory.c create mode 100644 arm9/lib/NitroSDK/src/MI_swap.c create mode 100644 arm9/lib/NitroSDK/src/MI_uncompress.c create mode 100644 arm9/lib/NitroSDK/src/MI_wram.c create mode 100644 arm9/lib/NitroSDK/src/OS_alarm.c create mode 100644 arm9/lib/NitroSDK/src/OS_alloc.c create mode 100644 arm9/lib/NitroSDK/src/OS_arena.c create mode 100644 arm9/lib/NitroSDK/src/OS_cache.c create mode 100644 arm9/lib/NitroSDK/src/OS_context.c create mode 100644 arm9/lib/NitroSDK/src/OS_emulator.c create mode 100644 arm9/lib/NitroSDK/src/OS_entropy.c create mode 100644 arm9/lib/NitroSDK/src/OS_exception.c create mode 100644 arm9/lib/NitroSDK/src/OS_init.c create mode 100644 arm9/lib/NitroSDK/src/OS_interrupt.c create mode 100644 arm9/lib/NitroSDK/src/OS_irqHandler.c create mode 100644 arm9/lib/NitroSDK/src/OS_irqTable.c create mode 100644 arm9/lib/NitroSDK/src/OS_message.c create mode 100644 arm9/lib/NitroSDK/src/OS_mutex.c create mode 100644 arm9/lib/NitroSDK/src/OS_ownerInfo.c create mode 100644 arm9/lib/NitroSDK/src/OS_printf.c create mode 100644 arm9/lib/NitroSDK/src/OS_protectionRegion.c create mode 100644 arm9/lib/NitroSDK/src/OS_protectionUnit.c create mode 100644 arm9/lib/NitroSDK/src/OS_reset.c create mode 100644 arm9/lib/NitroSDK/src/OS_spinLock.c create mode 100644 arm9/lib/NitroSDK/src/OS_system.c create mode 100644 arm9/lib/NitroSDK/src/OS_tcm.c create mode 100644 arm9/lib/NitroSDK/src/OS_terminate_proc.c create mode 100644 arm9/lib/NitroSDK/src/OS_thread.c create mode 100644 arm9/lib/NitroSDK/src/OS_tick.c create mode 100644 arm9/lib/NitroSDK/src/OS_timer.c create mode 100644 arm9/lib/NitroSDK/src/OS_valarm.c create mode 100644 arm9/lib/NitroSDK/src/OS_vramExclusive.c create mode 100644 arm9/lib/NitroSDK/src/PXI_fifo.c create mode 100644 arm9/lib/NitroSDK/src/PXI_init.c create mode 100644 arm9/lib/NitroSDK/src/RTC_convert.c create mode 100644 arm9/lib/NitroSDK/src/RTC_internal.c create mode 100644 arm9/lib/NitroSDK/src/SND_alarm.c create mode 100644 arm9/lib/NitroSDK/src/SND_bank.c create mode 100644 arm9/lib/NitroSDK/src/SND_command.c create mode 100644 arm9/lib/NitroSDK/src/SND_interface.c create mode 100644 arm9/lib/NitroSDK/src/SND_main.c create mode 100644 arm9/lib/NitroSDK/src/SND_util.c create mode 100644 arm9/lib/NitroSDK/src/SND_work.c create mode 100644 arm9/lib/NitroSDK/src/WM_ks.c create mode 100644 arm9/lib/NitroSDK/src/crt0.c create mode 100644 arm9/lib/NitroSDK/src/custom_allocator.c create mode 100644 arm9/lib/NitroSDK/src/version_1_dwc.c create mode 100644 arm9/lib/NitroSDK/src/version_2_wifi.c create mode 100644 arm9/lib/NitroSDK/src/version_3_cps.c create mode 100644 arm9/lib/NitroSDK/src/version_4_ssl.c create mode 100644 arm9/lib/NitroSDK/src/version_5_vct.c create mode 100644 arm9/lib/NitroSDK/src/version_6_backup.c delete mode 100644 arm9/lib/include/CARD_backup.h delete mode 100644 arm9/lib/include/CARD_common.h delete mode 100644 arm9/lib/include/CARD_pullOut.h delete mode 100644 arm9/lib/include/CARD_request.h delete mode 100644 arm9/lib/include/CARD_rom.h delete mode 100644 arm9/lib/include/CARD_spi.h delete mode 100644 arm9/lib/include/CP_context.h delete mode 100644 arm9/lib/include/CTRDG_backup.h delete mode 100644 arm9/lib/include/CTRDG_common.h delete mode 100644 arm9/lib/include/CTRDG_flash.h delete mode 100644 arm9/lib/include/CTRDG_flash_AT29LV512.h delete mode 100644 arm9/lib/include/CTRDG_task.h delete mode 100644 arm9/lib/include/DGT_common.h delete mode 100644 arm9/lib/include/DGT_dgt.h delete mode 100644 arm9/lib/include/FS_archive.h delete mode 100644 arm9/lib/include/FS_command.h delete mode 100644 arm9/lib/include/FS_command_default.h delete mode 100644 arm9/lib/include/FS_file.h delete mode 100644 arm9/lib/include/FS_mw_dtor.h delete mode 100644 arm9/lib/include/FS_overlay.h delete mode 100644 arm9/lib/include/FS_rom.h delete mode 100644 arm9/lib/include/FSi_util.h delete mode 100644 arm9/lib/include/GX_asm.h delete mode 100644 arm9/lib/include/GX_bgcnt.h delete mode 100644 arm9/lib/include/GX_dma.h delete mode 100644 arm9/lib/include/GX_g2.h delete mode 100644 arm9/lib/include/GX_g3.h delete mode 100644 arm9/lib/include/GX_g3_util.h delete mode 100644 arm9/lib/include/GX_g3b.h delete mode 100644 arm9/lib/include/GX_g3imm.h delete mode 100644 arm9/lib/include/GX_g3x.h delete mode 100644 arm9/lib/include/GX_load2d.h delete mode 100644 arm9/lib/include/GX_load3d.h delete mode 100644 arm9/lib/include/GX_state.h delete mode 100644 arm9/lib/include/GX_struct_2d.h delete mode 100644 arm9/lib/include/GX_vramcnt.h delete mode 100644 arm9/lib/include/GXcommon.h delete mode 100644 arm9/lib/include/MATH_crc.h delete mode 100644 arm9/lib/include/MATH_dgt.h delete mode 100644 arm9/lib/include/MATH_pop.h delete mode 100644 arm9/lib/include/MB_mb.h delete mode 100644 arm9/lib/include/MI_byteAccess.h delete mode 100644 arm9/lib/include/MI_dma.h delete mode 100644 arm9/lib/include/MI_dma_card.h delete mode 100644 arm9/lib/include/MI_dma_gxcommand.h delete mode 100644 arm9/lib/include/MI_dma_hblank.h delete mode 100644 arm9/lib/include/MI_exMemory.h delete mode 100644 arm9/lib/include/MI_init.h delete mode 100644 arm9/lib/include/MI_memory.h delete mode 100644 arm9/lib/include/MI_swap.h delete mode 100644 arm9/lib/include/MI_uncompress.h delete mode 100644 arm9/lib/include/MI_wram.h delete mode 100644 arm9/lib/include/MSL.h delete mode 100644 arm9/lib/include/MSL_Common_arith.h delete mode 100644 arm9/lib/include/NNS_FND_allocator.h delete mode 100644 arm9/lib/include/NNS_FND_expheap.h delete mode 100644 arm9/lib/include/NNS_FND_heapcommon.h delete mode 100644 arm9/lib/include/NNS_FND_list.h delete mode 100644 arm9/lib/include/NNS_SND_arc.h delete mode 100644 arm9/lib/include/NNS_SND_arc_loader.h delete mode 100644 arm9/lib/include/NNS_SND_heap.h delete mode 100644 arm9/lib/include/NNS_g2d.h delete mode 100644 arm9/lib/include/OS_alarm.h delete mode 100644 arm9/lib/include/OS_alloc.h delete mode 100644 arm9/lib/include/OS_arena.h delete mode 100644 arm9/lib/include/OS_cache.h delete mode 100644 arm9/lib/include/OS_context.h delete mode 100644 arm9/lib/include/OS_emulator.h delete mode 100644 arm9/lib/include/OS_entropy.h delete mode 100644 arm9/lib/include/OS_exception.h delete mode 100644 arm9/lib/include/OS_init.h delete mode 100644 arm9/lib/include/OS_interrupt.h delete mode 100644 arm9/lib/include/OS_irqHandler.h delete mode 100644 arm9/lib/include/OS_irqTable.h delete mode 100644 arm9/lib/include/OS_message.h delete mode 100644 arm9/lib/include/OS_mutex.h delete mode 100644 arm9/lib/include/OS_ownerInfo.h delete mode 100644 arm9/lib/include/OS_printf.h delete mode 100644 arm9/lib/include/OS_protectionRegion.h delete mode 100644 arm9/lib/include/OS_protectionUnit.h delete mode 100644 arm9/lib/include/OS_reset.h delete mode 100644 arm9/lib/include/OS_spinLock.h delete mode 100644 arm9/lib/include/OS_system.h delete mode 100644 arm9/lib/include/OS_tcm.h delete mode 100644 arm9/lib/include/OS_terminate_proc.h delete mode 100644 arm9/lib/include/OS_thread.h delete mode 100644 arm9/lib/include/OS_tick.h delete mode 100644 arm9/lib/include/OS_timer.h delete mode 100644 arm9/lib/include/OS_valarm.h delete mode 100644 arm9/lib/include/OS_vramExclusive.h delete mode 100644 arm9/lib/include/PAD_pad.h delete mode 100644 arm9/lib/include/PXI_fifo.h delete mode 100644 arm9/lib/include/PXI_init.h delete mode 100644 arm9/lib/include/RTC_api.h delete mode 100644 arm9/lib/include/RTC_convert.h delete mode 100644 arm9/lib/include/RTC_internal.h delete mode 100644 arm9/lib/include/SND_alarm.h delete mode 100644 arm9/lib/include/SND_bank.h delete mode 100644 arm9/lib/include/SND_command.h delete mode 100644 arm9/lib/include/SND_interface.h delete mode 100644 arm9/lib/include/SND_main.h delete mode 100644 arm9/lib/include/SND_util.h delete mode 100644 arm9/lib/include/SND_work.h delete mode 100644 arm9/lib/include/SPI_mic.h delete mode 100644 arm9/lib/include/SPI_pm.h delete mode 100644 arm9/lib/include/WM.h delete mode 100644 arm9/lib/include/WM_ks.h delete mode 100644 arm9/lib/include/consts.h delete mode 100644 arm9/lib/include/custom_allocator.h delete mode 100644 arm9/lib/include/dgt.h delete mode 100644 arm9/lib/include/fx.h delete mode 100644 arm9/lib/include/gx.h delete mode 100644 arm9/lib/include/math.h delete mode 100644 arm9/lib/include/mmap.h delete mode 100644 arm9/lib/include/nitro.h delete mode 100644 arm9/lib/include/registers.h delete mode 100644 arm9/lib/include/syscall.h delete mode 100644 arm9/lib/include/systemWork.h delete mode 100644 arm9/lib/include/tp.h delete mode 100644 arm9/lib/include/userInfo.h create mode 100644 arm9/lib/libc/Makefile create mode 100644 arm9/lib/libc/include/MSL.h create mode 100644 arm9/lib/libc/include/MSL_Common_arith.h create mode 100644 arm9/lib/libc/src/MSL_Common_arith.c create mode 100644 arm9/lib/libnns/Makefile create mode 100644 arm9/lib/libnns/include/NNS_FND_allocator.h create mode 100644 arm9/lib/libnns/include/NNS_FND_expheap.h create mode 100644 arm9/lib/libnns/include/NNS_FND_heapcommon.h create mode 100644 arm9/lib/libnns/include/NNS_FND_list.h create mode 100644 arm9/lib/libnns/include/NNS_SND_arc.h create mode 100644 arm9/lib/libnns/include/NNS_SND_arc_loader.h create mode 100644 arm9/lib/libnns/include/NNS_SND_heap.h create mode 100644 arm9/lib/libnns/include/NNS_g2d.h create mode 100644 arm9/lib/libnns/src/.gitkeep delete mode 100644 arm9/lib/src/CARD_backup.c delete mode 100644 arm9/lib/src/CARD_common.c delete mode 100644 arm9/lib/src/CARD_pullOut.c delete mode 100644 arm9/lib/src/CARD_request.c delete mode 100644 arm9/lib/src/CARD_rom.c delete mode 100644 arm9/lib/src/CARD_spi.c delete mode 100644 arm9/lib/src/CP_context.c delete mode 100644 arm9/lib/src/CTRDG_backup.c delete mode 100644 arm9/lib/src/CTRDG_common.c delete mode 100644 arm9/lib/src/CTRDG_flash_AT29LV512.c delete mode 100644 arm9/lib/src/FS_archive.c delete mode 100644 arm9/lib/src/FS_command.c delete mode 100644 arm9/lib/src/FS_command_default.c delete mode 100644 arm9/lib/src/FS_file.c delete mode 100644 arm9/lib/src/FS_overlay.c delete mode 100644 arm9/lib/src/FS_rom.c delete mode 100644 arm9/lib/src/FX.c delete mode 100644 arm9/lib/src/FX_atan.c delete mode 100644 arm9/lib/src/FX_cp.c delete mode 100644 arm9/lib/src/FX_mtx22.c delete mode 100644 arm9/lib/src/FX_mtx33.c delete mode 100644 arm9/lib/src/FX_mtx43.c delete mode 100644 arm9/lib/src/FX_mtx44.c delete mode 100644 arm9/lib/src/FX_sincos.c delete mode 100644 arm9/lib/src/FX_vec.c delete mode 100644 arm9/lib/src/GX.c delete mode 100644 arm9/lib/src/GX_asm.c delete mode 100644 arm9/lib/src/GX_bgcnt.c delete mode 100644 arm9/lib/src/GX_g2.c delete mode 100644 arm9/lib/src/GX_g3.c delete mode 100644 arm9/lib/src/GX_g3_util.c delete mode 100644 arm9/lib/src/GX_g3b.c delete mode 100644 arm9/lib/src/GX_g3imm.c delete mode 100644 arm9/lib/src/GX_g3x.c delete mode 100644 arm9/lib/src/GX_load2d.c delete mode 100644 arm9/lib/src/GX_load3d.c delete mode 100644 arm9/lib/src/GX_state.c delete mode 100644 arm9/lib/src/GX_vramcnt.c delete mode 100644 arm9/lib/src/MATH_crc.c delete mode 100644 arm9/lib/src/MATH_dgt.c delete mode 100644 arm9/lib/src/MATH_pop.c delete mode 100644 arm9/lib/src/MI_dma.c delete mode 100644 arm9/lib/src/MI_dma_card.c delete mode 100644 arm9/lib/src/MI_dma_gxcommand.c delete mode 100644 arm9/lib/src/MI_dma_hblank.c delete mode 100644 arm9/lib/src/MI_init.c delete mode 100644 arm9/lib/src/MI_memory.c delete mode 100644 arm9/lib/src/MI_swap.c delete mode 100644 arm9/lib/src/MI_uncompress.c delete mode 100644 arm9/lib/src/MI_wram.c delete mode 100644 arm9/lib/src/MSL_Common_arith.c delete mode 100644 arm9/lib/src/OS_alarm.c delete mode 100644 arm9/lib/src/OS_alloc.c delete mode 100644 arm9/lib/src/OS_arena.c delete mode 100644 arm9/lib/src/OS_cache.c delete mode 100644 arm9/lib/src/OS_context.c delete mode 100644 arm9/lib/src/OS_emulator.c delete mode 100644 arm9/lib/src/OS_entropy.c delete mode 100644 arm9/lib/src/OS_exception.c delete mode 100644 arm9/lib/src/OS_init.c delete mode 100644 arm9/lib/src/OS_interrupt.c delete mode 100644 arm9/lib/src/OS_irqHandler.c delete mode 100644 arm9/lib/src/OS_irqTable.c delete mode 100644 arm9/lib/src/OS_message.c delete mode 100644 arm9/lib/src/OS_mutex.c delete mode 100644 arm9/lib/src/OS_ownerInfo.c delete mode 100644 arm9/lib/src/OS_printf.c delete mode 100644 arm9/lib/src/OS_protectionRegion.c delete mode 100644 arm9/lib/src/OS_protectionUnit.c delete mode 100644 arm9/lib/src/OS_reset.c delete mode 100644 arm9/lib/src/OS_spinLock.c delete mode 100644 arm9/lib/src/OS_system.c delete mode 100644 arm9/lib/src/OS_tcm.c delete mode 100644 arm9/lib/src/OS_terminate_proc.c delete mode 100644 arm9/lib/src/OS_thread.c delete mode 100644 arm9/lib/src/OS_tick.c delete mode 100644 arm9/lib/src/OS_timer.c delete mode 100644 arm9/lib/src/OS_valarm.c delete mode 100644 arm9/lib/src/OS_vramExclusive.c delete mode 100644 arm9/lib/src/PXI_fifo.c delete mode 100644 arm9/lib/src/PXI_init.c delete mode 100644 arm9/lib/src/RTC_convert.c delete mode 100644 arm9/lib/src/RTC_internal.c delete mode 100644 arm9/lib/src/SND_alarm.c delete mode 100644 arm9/lib/src/SND_bank.c delete mode 100644 arm9/lib/src/SND_command.c delete mode 100644 arm9/lib/src/SND_interface.c delete mode 100644 arm9/lib/src/SND_main.c delete mode 100644 arm9/lib/src/SND_util.c delete mode 100644 arm9/lib/src/SND_work.c delete mode 100644 arm9/lib/src/WM_ks.c delete mode 100644 arm9/lib/src/crt0.c delete mode 100644 arm9/lib/src/custom_allocator.c delete mode 100644 arm9/lib/src/version_1_dwc.c delete mode 100644 arm9/lib/src/version_2_wifi.c delete mode 100644 arm9/lib/src/version_3_cps.c delete mode 100644 arm9/lib/src/version_4_ssl.c delete mode 100644 arm9/lib/src/version_5_vct.c delete mode 100644 arm9/lib/src/version_6_backup.c diff --git a/Makefile b/Makefile index e1a40cdb..c9be64f8 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/include -W all +CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/libc/include -ir arm9/lib/libnns/include -ir arm9/lib/NitroSDK/include -W all LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start ####################### Other Tools ######################### @@ -129,7 +129,7 @@ TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) export LM_LICENSE_FILE := $(TOOLS_DIR)/mwccarm/license.dat -export MWCIncludes := arm9/lib/include +export MWCIncludes := arm9/lib/libc/include arm9/lib/NitroSDK/include arm9/lib/libnns/include export MWLibraries := arm9/lib ######################### Targets ########################### @@ -194,7 +194,7 @@ patch_mwasmarm: tools/mwasmarm_patcher ALL_DIRS := $(BUILD_DIR) ifeq (,$(NODEP)) -$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I include -I include-mw -I arm9/lib/include $(filter $*.c,$(C_FILES)) $(filter $*.cpp,$(CXX_FILES)) $(filter $*.s,$(S_FILES))) +$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I include -I include-mw -I arm9/lib/libc/include -I arm9/lib/libnns/include -I arm9/lib/NitroSDK/include $(filter $*.c,$(C_FILES)) $(filter $*.cpp,$(CXX_FILES)) $(filter $*.s,$(S_FILES))) else $(BUILD_DIR)/%.o: dep := endif diff --git a/arm9/CMakeLists.txt b/arm9/CMakeLists.txt index 8bdaeba1..417dff56 100644 --- a/arm9/CMakeLists.txt +++ b/arm9/CMakeLists.txt @@ -15,5 +15,5 @@ file(GLOB_RECURSE SOURCES "*.c" "*.cpp" "*.s") file(GLOB MODULE_INC modules/*/include) add_executable(DP_Arm9 ${SOURCES}) -target_include_directories(DP_Arm9 PRIVATE ../include ../include-mw lib/include ${MODULE_INC} ../files) +target_include_directories(DP_Arm9 PRIVATE ../include ../include-mw lib/NitroSDK/include lib/libc/include lib/libnns/include ${MODULE_INC} ../files) target_compile_definitions(DP_Arm9 PUBLIC __CLION_IDE__) diff --git a/arm9/Makefile b/arm9/Makefile index 2ad29363..b48ac56c 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -50,10 +50,10 @@ LD_TEMPLATE := ARM9-TS.lcf.template # Directories containing source files # sorting wildcards required for versions of make >= 3.8.2 and < 4.3 for consistent builds -SRC_DIRS := src lib lib/src $(sort $(wildcard modules/*/src)) +SRC_DIRS := src lib lib/libnns/src lib/NitroSDK/src lib/libc/src $(sort $(wildcard modules/*/src)) ASM_DIRS := asm data files $(sort $(wildcard modules/*/asm)) LIBASM_DIRS := lib/syscall -INCLUDE_RECURSIVE_DIRS := ../include-mw lib/include +INCLUDE_RECURSIVE_DIRS := ../include-mw lib/libc/include lib/libnns/include lib/NitroSDK/include INCLUDE_DIRS := ../include $(sort $(wildcard modules/*/include)) ../files C_FILES := $(foreach dir,$(SRC_DIRS),$(sort $(wildcard $(dir)/*.c))) @@ -140,7 +140,7 @@ TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) export LM_LICENSE_FILE := $(TOOLS_DIR)/mwccarm/license.dat -export MWCIncludes := $(CURDIR)/lib/include +export MWCIncludes := $(CURDIR)/lib/libc/include $(CURDIR)/lib/NitroSDK/include $(CURDIR)/lib/libnns/include export MWLibraries := $(CURDIR)/lib ######################### Targets ########################### @@ -192,7 +192,7 @@ ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS) $(LIB # TODO: Move out to lib/Makefile $(BUILD_DIR)/lib/%.o: MWCCVERSION = 1.2/sp2p3 -$(BUILD_DIR)/lib/%.o: CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -interworking -DFS_IMPLEMENT -enum int -W all -i ../include -ir ../include-mw -ir lib/include +$(BUILD_DIR)/lib/%.o: CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -interworking -DFS_IMPLEMENT -enum int -W all -i ../include -ir ../include-mw -ir lib/libc/include -ir lib/libnns/include -ir lib/NitroSDK/include # FIXME: Using -ipa file breaks .rodata alignment $(BUILD_DIR)/src/math_util.o: CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off $(foreach dir,$(INCLUDE_DIRS),-i $(dir)) $(foreach dir,$(INCLUDE_RECURSIVE_DIRS),-ir $(dir)) -interworking -DFS_IMPLEMENT -enum int -W all -D$(GAME_VERSION) -D$(GAME_LANGUAGE) @@ -200,7 +200,7 @@ $(BUILD_DIR)/src/math_util.o: CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft - ####################### Everything Else ###################### ifeq (,$(NODEP)) -$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I ../include -I ../include-mw -I lib/include $(filter $*.c,$(C_FILES)) $(filter $*.cpp,$(CXX_FILES)) $(filter $*.s,$(S_FILES)) $(filter $*.s,$(LIBS_FILES))) +$(BUILD_DIR)/%.o: dep = $(shell $(SCANINC) -I ../include -I ../include-mw -I lib/libc/include -I lib/libnns/include -I lib/NitroSDK/include $(filter $*.c,$(C_FILES)) $(filter $*.cpp,$(CXX_FILES)) $(filter $*.s,$(S_FILES)) $(filter $*.s,$(LIBS_FILES))) else $(BUILD_DIR)/%.o: dep := endif diff --git a/arm9/lib/Makefile b/arm9/lib/Makefile index 0ff7e9e4..ebe143f2 100644 --- a/arm9/lib/Makefile +++ b/arm9/lib/Makefile @@ -1,5 +1,3 @@ - - # Try to include devkitarm if installed TOOLCHAIN := $(DEVKITARM) @@ -56,22 +54,30 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o ASFLAGS = -proc arm5te -ir ../.. -CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/include -W all +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/libc/include -ir arm9/lib/libnns/include -ir arm9/lib/NitroSDK/include -W all LDFLAGS = -library -nodead -w off -proc v5te -interworking -pic ARFLAGS = rcS -export MWCIncludes := include +export MWCIncludes := libc/include libnns/include NitroSDK/include ################ Targets ################# LIBS := libsyscall.a .PHONY: all clean -all: $(LIBS) +all: libs $(LIBS) @: +libs: + $(MAKE) -C libc + $(MAKE) -C libnns + $(MAKE) -C NitroSDK + clean: - $(RM) $(LIBS) $(LIBS:%.a=%/*.o) + $(MAKE) clean -C libc + $(MAKE) clean -C libnns + $(MAKE) clean -C NitroSDK + $(RM) $(LIBS) libsyscall.a: syscall/_svc_mw.o diff --git a/arm9/lib/NitroSDK/Makefile b/arm9/lib/NitroSDK/Makefile new file mode 100644 index 00000000..37490838 --- /dev/null +++ b/arm9/lib/NitroSDK/Makefile @@ -0,0 +1,80 @@ +# Try to include devkitarm if installed +TOOLCHAIN := $(DEVKITARM) + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +endif + +# If you are using WSL, it is recommended you build with NOWINE=1. +WSLENV ?= no +ifeq ($(WSLENV),) +NOWINE = 1 +else +NOWINE = 0 +endif + +ifeq ($(OS),Windows_NT) +EXE := .exe +WINE := +else +EXE := +WINE := wine +endif + +ifeq ($(NOWINE),1) +WINE := +endif + +# Compare result of arm9, arm7, and ROM to sha1 hash(s) +COMPARE ?= 1 + +##################### Compiler Options ####################### + +MWCCVERSION = 1.2/sp2p3 + +CROSS := arm-none-eabi- + +MWCCARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwccarm.exe +# Argh... due to EABI version shenanigans, we can't use GNU LD to link together +# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we +# have to use mwldarm for now. +# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the +# only dependency should be MWCCARM. +MWLDARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe +SCANINC = ../../../tools/scaninc/scaninc$(EXE) + +AS = $(WINE) $(MWASMARM) +CC = $(WINE) $(MWCCARM) +CPP := cpp -P +LD = $(WINE) $(MWLDARM) +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy + +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +ASFLAGS = -proc arm5te -ir ../../.. +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/libc/include -ir arm9/lib/libnns/include -ir arm9/lib/NitroSDK/include -W all +LDFLAGS = -library -nodead -w off -proc v5te -interworking -pic +ARFLAGS = rcS + +export MWCIncludes := include + +################ Targets ################# + +.PHONY: all clean + +all: + @: + +clean: + $(RM) $(%.a=%/*.o) + +%.a: + $(AR) $(ARFLAGS) -o $@ $^ + +%.o: %.c + $(CC) $(CFLAGS) -o $@ $< + +%.o: %.s + $(AS) $(ASFLAGS) -o $@ $< diff --git a/arm9/lib/NitroSDK/include/CARD_backup.h b/arm9/lib/NitroSDK/include/CARD_backup.h new file mode 100644 index 00000000..e5c0c0cd --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_backup.h @@ -0,0 +1,31 @@ +#ifndef POKEDIAMOND_CARD_BACKUP_H +#define POKEDIAMOND_CARD_BACKUP_H + +#include "nitro/types.h" +#include "MI_dma.h" +#include "CARD_common.h" + +BOOL CARDi_RequestStreamCommand(u32 src, u32 dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async, + CARDRequest req_type, int req_retry, CARDRequestMode req_mode); +u32 CARD_GetBackupSectorSize(void); +BOOL CARD_IdentifyBackup(CARDBackupType type); +BOOL CARD_WaitBackupAsync(void); +BOOL CARD_TryWaitBackupAsync(void); +void CARD_CancelBackupAsync(void); + +static inline BOOL CARDi_ReadBackup(u32 src, void * dst, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) +{ + return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_READ_BACKUP, 1, CARD_REQUEST_MODE_RECV); +} + +static inline BOOL CARDi_WriteBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) +{ + return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND); +} + +static inline BOOL CARDi_WriteAndVerifyBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) +{ + return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND_VERIFY); +} + +#endif //POKEDIAMOND_CARD_BACKUP_H diff --git a/arm9/lib/NitroSDK/include/CARD_common.h b/arm9/lib/NitroSDK/include/CARD_common.h new file mode 100644 index 00000000..1ae31b7a --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_common.h @@ -0,0 +1,233 @@ +#ifndef POKEDIAMOND_CARD_COMMON_H +#define POKEDIAMOND_CARD_COMMON_H + +#include "nitro/types.h" +#include "OS_thread.h" +#include "OS_system.h" +#include "MI_dma.h" +#include "PXI_fifo.h" + +#define CARD_PXI_COMMAND_MASK 0x3f +#define CARD_PXI_COMMAND_PULLED_OUT 0x0011 +#define CARD_PXI_COMMAND_TERMINATE 0x0001 + +#define CARD_THREAD_PRIORITY_DEFAULT 4 + +#define CARD_BACKUP_TYPE_DEVICE_SHIFT 0 +#define CARD_BACKUP_TYPE_DEVICE_MASK 0xFF +#define CARD_BACKUP_TYPE_DEVICE_EEPROM 1 +#define CARD_BACKUP_TYPE_DEVICE_FLASH 2 +#define CARD_BACKUP_TYPE_DEVICE_FRAM 3 +#define CARD_BACKUP_TYPE_SIZEBIT_SHIFT 8 +#define CARD_BACKUP_TYPE_SIZEBIT_MASK 0xFF +#define CARD_BACKUP_TYPE_VENDER_SHIFT 16 +#define CARD_BACKUP_TYPE_DEFINE(type, size, vender) \ + (((CARD_BACKUP_TYPE_DEVICE_ ## type) << CARD_BACKUP_TYPE_DEVICE_SHIFT) | \ + ((size) << CARD_BACKUP_TYPE_SIZEBIT_SHIFT) | \ + ((vender) << CARD_BACKUP_TYPE_VENDER_SHIFT)) + +#define ALIGN_MASK(a) ((a) - 1) +#define CARD_ALIGN_HI_BIT(n) (((u32)(n)) & ~ALIGN_MASK(CARD_ROM_PAGE_SIZE)) +#define CARD_ALIGN_LO_BIT(n) (((u32)(n)) & ALIGN_MASK(CARD_ROM_PAGE_SIZE)) + +#define CARD_BACKUP_CAPS_AVAILABLE (u32)(CARD_BACKUP_CAPS_READ - 1) +#define CARD_BACKUP_CAPS_READ (u32)(1 << CARD_REQ_READ_BACKUP) +#define CARD_BACKUP_CAPS_WRITE (u32)(1 << CARD_REQ_WRITE_BACKUP) +#define CARD_BACKUP_CAPS_PROGRAM (u32)(1 << CARD_REQ_PROGRAM_BACKUP) +#define CARD_BACKUP_CAPS_VERIFY (u32)(1 << CARD_REQ_VERIFY_BACKUP) +#define CARD_BACKUP_CAPS_ERASE_PAGE (u32)(1 << CARD_REQ_ERASE_PAGE_BACKUP) +#define CARD_BACKUP_CAPS_ERASE_SECTOR (u32)(1 << CARD_REQ_ERASE_SECTOR_BACKUP) +#define CARD_BACKUP_CAPS_ERASE_CHIP (u32)(1 << CARD_REQ_ERASE_CHIP_BACKUP) + +typedef enum +{ + CARD_BACKUP_TYPE_EEPROM_4KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 9, 0), + CARD_BACKUP_TYPE_EEPROM_64KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 13, 0), + CARD_BACKUP_TYPE_EEPROM_512KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 16, 0), + CARD_BACKUP_TYPE_FLASH_2MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 18, 0), + CARD_BACKUP_TYPE_FLASH_4MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 19, 0), + CARD_BACKUP_TYPE_FLASH_8MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 20, 0), + CARD_BACKUP_TYPE_FRAM_256KBITS = CARD_BACKUP_TYPE_DEFINE(FRAM, 15, 0), + CARD_BACKUP_TYPE_NOT_USE = 0 +} CARDBackupType; + +typedef enum +{ + CARD_RESULT_SUCCESS = 0, + CARD_RESULT_FAILURE, + CARD_RESULT_INVALID_PARAM, + CARD_RESULT_UNSUPPORTED, + CARD_RESULT_TIMEOUT, + CARD_RESULT_ERROR, + CARD_RESULT_NO_RESPONSE, + CARD_RESULT_CANCELED +} CARDResult; + +typedef enum +{ + CARD_TARGET_NONE, + CARD_TARGET_ROM, + CARD_TARGET_BACKUP +} CARDTargetMode; + +typedef enum +{ + CARD_REQ_INIT = 0, + CARD_REQ_ACK, + CARD_REQ_IDENTIFY, + CARD_REQ_READ_ID, + CARD_REQ_READ_ROM, + CARD_REQ_WRITE_ROM, + CARD_REQ_READ_BACKUP, + CARD_REQ_WRITE_BACKUP, + CARD_REQ_PROGRAM_BACKUP, + CARD_REQ_VERIFY_BACKUP, + CARD_REQ_ERASE_PAGE_BACKUP, + CARD_REQ_ERASE_SECTOR_BACKUP, + CARD_REQ_ERASE_CHIP_BACKUP, + CARD_REQ_MAX +} CARDRequest; + +typedef enum +{ + CARD_REQUEST_MODE_RECV, + CARD_REQUEST_MODE_SEND, + CARD_REQUEST_MODE_SEND_VERIFY, + CARD_REQUEST_MODE_SPECIAL +} CARDRequestMode; + +enum +{ + CARD_STAT_INIT = (1 << 0), + CARD_STAT_INIT_CMD = (1 << 1), + CARD_STAT_BUSY = (1 << 2), + CARD_STAT_TASK = (1 << 3), + CARD_STAT_RECV = (1 << 4), + CARD_STAT_REQ = (1 << 5), + CARD_STAT_CANCEL = (1 << 6) +}; + +typedef s32 CARDiOwner; + +typedef struct CARDiCommandArg +{ + CARDResult result; + CARDBackupType type; + u32 id; + u32 src; + u32 dest; + u32 len; + + struct + { + u32 total_size; + u32 sect_size; + u32 page_size; + u32 addr_width; + u32 program_page; + u32 write_page; + u32 write_page_total; + u32 erase_chip; + u32 erase_chip_total; + u32 erase_sector; + u32 erase_sector_total; + u32 erase_page; + u8 initial_status; + u8 padding1[3]; + u32 caps; + u8 padding2[16]; + } spec; +} CARDiCommandArg; + +typedef struct CARDiCommon +{ + CARDiCommandArg *cmd; + s32 command; + + volatile CARDiOwner lock_owner; + volatile s32 lock_ref; + OSThreadQueue lock_queue[1]; + CARDTargetMode lock_target; + + u32 src; + u32 dst; + u32 len; + u32 dma; + CARDRequest req_type; + s32 req_retry; + CARDRequestMode req_mode; + MIDmaCallback callback; + void *callback_arg; + void (*task_func) (struct CARDiCommon *); + + OSThread thread[1]; + OSThread *cur_th; + + u32 priority; + OSThreadQueue busy_q[1]; + + volatile u32 flag; + + u8 dummy[8]; + + u8 backup_cache_page_buf[256] ALIGN(32); +} CARDiCommon; + +static inline void CARDi_EndTask(CARDiCommon *p, BOOL is_own_task) +{ + const MIDmaCallback func = p->callback; + void *const arg = p->callback_arg; + + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + + p->flag &= ~(CARD_STAT_BUSY | CARD_STAT_TASK | CARD_STAT_CANCEL); + OS_WakeupThread(p->busy_q); + if ((p->flag & CARD_STAT_RECV) != 0) + { + OS_WakeupThreadDirect(p->thread); + } + (void)OS_RestoreInterrupts(bak_psr); + } + + if (is_own_task && func) + { + (*func)(arg); + } +} + +static inline void CARDi_WaitTask(CARDiCommon *p, MIDmaCallback callback, void *callback_arg) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_BUSY) != 0) + { + OS_SleepThread(p->busy_q); + } + p->flag |= CARD_STAT_BUSY; + p->callback = callback; + p->callback_arg = callback_arg; + (void)OS_RestoreInterrupts(bak_psr); +} + +void CARDi_SetTask(void (*task) (CARDiCommon *)); +void CARDi_InitCommon(void); +BOOL CARD_IsEnabled(void); +void CARD_CheckEnabled(void); +void CARD_Enable(BOOL enable); +BOOL CARDi_WaitAsync(void); +BOOL CARDi_TryWaitAsync(void); +CARDResult CARD_GetResultCode(void); +void CARD_LockRom(u16 lock_id); +void CARD_UnlockRom(u16 lock_id); +void CARD_LockBackup(u16 lock_id); +void CARD_UnlockBackup(u16 lock_id); + +#define CARD_RETRY_COUNT_MAX 10 + +static inline void CARDi_SendPxi(u32 data) +{ + while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0) + ; +} + +#endif //POKEDIAMOND_CARD_COMMON_H diff --git a/arm9/lib/NitroSDK/include/CARD_pullOut.h b/arm9/lib/NitroSDK/include/CARD_pullOut.h new file mode 100644 index 00000000..bfc0e6d2 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_pullOut.h @@ -0,0 +1,13 @@ +#ifndef POKEDIAMOND_CARD_PULLOUT_H +#define POKEDIAMOND_CARD_PULLOUT_H + +#include "nitro/types.h" + +typedef BOOL (*CARDPulledOutCallback) (void); + +void CARD_InitPulledOutCallback(void); +BOOL CARD_IsPulledOut(void); +void CARD_TerminateForPulledOut(void); +void CARDi_CheckPulledOutCore(u32 id); + +#endif //POKEDIAMOND_CARD_PULLOUT_H diff --git a/arm9/lib/NitroSDK/include/CARD_request.h b/arm9/lib/NitroSDK/include/CARD_request.h new file mode 100644 index 00000000..1bae75d0 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_request.h @@ -0,0 +1,12 @@ +#ifndef POKEDIAMOND_CARD_REQUEST_H +#define POKEDIAMOND_CARD_REQUEST_H + +#include "nitro/types.h" +#include "PXI_fifo.h" +#include "CARD_common.h" + +void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err); +void CARDi_TaskThread(void *arg); +BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count); + +#endif //POKEDIAMOND_CARD_REQUEST_H diff --git a/arm9/lib/NitroSDK/include/CARD_rom.h b/arm9/lib/NitroSDK/include/CARD_rom.h new file mode 100644 index 00000000..b6fca60b --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_rom.h @@ -0,0 +1,101 @@ +#ifndef POKEDIAMOND_CARD_ROM_H +#define POKEDIAMOND_CARD_ROM_H + +#include "nitro/types.h" +#include "MI_exMemory.h" +#include "MI_dma.h" +#include "CARD_common.h" +#include "OS_tcm.h" +#include "mmap.h" + +#define CARD_ROM_PAGE_SIZE 512 + +#define CARDMST_SEL_ROM 0x00 +#define CARDMST_IF_ENABLE 0x40 +#define CARDMST_ENABLE 0x80 + +#define CARD_DATA_READY 0x00800000 +#define CARD_COMMAND_PAGE 0x01000000 +#define CARD_COMMAND_ID 0x07000000 +#define CARD_COMMAND_MASK 0x07000000 +#define CARD_RESET_HI 0x20000000 +#define CARD_READ_MODE 0x00000000 +#define CARD_START 0x80000000 +#define CARD_LATENCY1_MASK 0x00001FFF + +#define MROMOP_G_READ_PAGE 0xB7000000 +#define MROMOP_G_READ_ID 0xB8000000 + +extern CARDiCommon cardi_common; + +typedef struct +{ + u32 offset; + u32 length; +} +CARDRomRegion; + +typedef struct CARDRomStat +{ + void (*read_func) (struct CARDRomStat *); + u32 ctrl; + u8 *cache_page; + u32 dummy[5]; + u8 cache_buf[CARD_ROM_PAGE_SIZE]; +} CARDRomStat; + +static inline const CARDRomRegion * CARD_GetRomRegionOVT(MIProcessor target) +{ + return (target == MI_PROCESSOR_ARM9) + ? (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x50) + : (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x58); +} + +BOOL CARDi_TryReadCardDma(CARDRomStat *p); +void CARDi_ReadCard(CARDRomStat *p); +u32 CARDi_ReadRomIDCore(void); +void CARDi_CheckPulledOutCore(u32 id); +void CARDi_ReadRom(u32 dma, const void *src, void *dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async); +void CARD_Init(void); +void CARD_WaitRomAsync(void); +void (*CARDi_GetRomAccessor(void)) (CARDRomStat *); + +static inline void CARD_ReadRomAsync(u32 dma, const void * src, void * dst, u32 len, MIDmaCallback callback, void * arg) +{ + CARDi_ReadRom(dma, src, dst, len, callback, arg, TRUE); +} + +static inline const CARDRomRegion * CARD_GetRomRegionFNT() { + return (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x40); +} + +static inline const CARDRomRegion * CARD_GetRomRegionFAT() { + return (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x48); +} + +static inline void CARDi_ReadEnd(void) +{ + CARDiCommon *const p = &cardi_common; + CARDi_CheckPulledOutCore(CARDi_ReadRomIDCore()); + p->cmd->result = CARD_RESULT_SUCCESS; + CARDi_EndTask(p, TRUE); +} + +static inline BOOL CARDi_IsInTcm(u32 buf, u32 len) +{ + const u32 i = (u32)HW_ITCM; + const u32 d = OS_GetDTCMAddress(); + return ((i < buf + len) && (i + HW_ITCM_SIZE > buf)) || + ((d < buf + len) && (d + HW_DTCM_SIZE > buf)); +} + +extern u32 cardi_rom_header_addr; + +static inline u32 CARDi_GetRomFlag(u32 flag) +{ + const u32 rom_ctrl = *(vu32 *)(cardi_rom_header_addr + 0x60); + return (u32)((rom_ctrl & ~CARD_COMMAND_MASK) | flag | + CARD_READ_MODE | CARD_START | CARD_RESET_HI); +} + +#endif //POKEDIAMOND_CARD_ROM_H diff --git a/arm9/lib/NitroSDK/include/CARD_spi.h b/arm9/lib/NitroSDK/include/CARD_spi.h new file mode 100644 index 00000000..0181e39f --- /dev/null +++ b/arm9/lib/NitroSDK/include/CARD_spi.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_CARD_SPI_H +#define POKEDIAMOND_CARD_SPI_H + +#include "CARD_common.h" + +void CARDi_IdentifyBackupCore(CARDBackupType type); + +#endif //POKEDIAMOND_CARD_SPI_H diff --git a/arm9/lib/NitroSDK/include/CP_context.h b/arm9/lib/NitroSDK/include/CP_context.h new file mode 100644 index 00000000..9d392352 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CP_context.h @@ -0,0 +1,17 @@ +#ifndef POKEDIAMOND_CP_CONTEXT_H +#define POKEDIAMOND_CP_CONTEXT_H + +#include "nitro/types.h" + +typedef struct CPContext { + u64 div_numer; + u64 div_denom; + u64 sqrt; + u16 div_mode; + u16 sqrt_mode; +} CPContext; + +void CP_SaveContext(register CPContext *context); +void CPi_RestoreContext(const CPContext* context); + +#endif //POKEDIAMOND_CP_CONTEXT_H diff --git a/arm9/lib/NitroSDK/include/CTRDG_backup.h b/arm9/lib/NitroSDK/include/CTRDG_backup.h new file mode 100644 index 00000000..8b95a7aa --- /dev/null +++ b/arm9/lib/NitroSDK/include/CTRDG_backup.h @@ -0,0 +1,50 @@ +#ifndef POKEDIAMOND_CTRDG_BACKUP_H +#define POKEDIAMOND_CTRDG_BACKUP_H + +#include "nitro/types.h" +#include "CTRDG_flash.h" +#include "CTRDG_task.h" + +#define CTRDG_BACKUP_PHASE_PROGRAM 0x0001 +#define CTRDG_BACKUP_PHASE_SECTOR_ERASE 0x0002 +#define CTRDG_BACKUP_PHASE_CHIP_ERASE 0x0003 +#define CTRDG_BACKUP_PHASE_PARAMETER_CHECK 0x00ff + +#define CTRDG_BACKUP_RESULT_ERROR 0x8000 + +extern u16 ctrdg_flash_remainder; + +typedef struct CTRDGiFlashTypePlusTag +{ + u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); + u16 (*CTRDGi_EraseAgbFlashChip)(void); + u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); + void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); + void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); + void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); + u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); + const u16 (*maxtime); + CTRDGFlashType type; +} CTRDGiFlashTypePlus; + +typedef enum +{ + CTRDG_BACKUP_TYPE_FLASH_512K, + CTRDG_BACKUP_TYPE_FLASH_1M, + CTRDG_BACKUP_TYPE_SRAM +} CTRDGBackupType; + +extern const u16 (*ctrdgi_fl_maxtime); + +extern u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); +extern const CTRDGFlashType *AgbFlash; +extern u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); +extern u16 (*CTRDGi_EraseAgbFlashChip)(void); +extern u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); +extern void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); +extern void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); +extern void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); + +u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type); + +#endif //POKEDIAMOND_CTRDG_BACKUP_H diff --git a/arm9/lib/NitroSDK/include/CTRDG_common.h b/arm9/lib/NitroSDK/include/CTRDG_common.h new file mode 100644 index 00000000..2d37c6f8 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CTRDG_common.h @@ -0,0 +1,137 @@ +#ifndef POKEDIAMOND_CTRDG_COMMON_H +#define POKEDIAMOND_CTRDG_COMMON_H + +#include "consts.h" +#include "OS_spinLock.h" +#include "OS_system.h" +#include "MI_exMemory.h" + +typedef struct CTRDGWork +{ + vu16 subpInitialized; + u16 lockID; + +} CTRDGWork; + +typedef struct CTRDGModuleID +{ + union + { + struct + { + u8 bitID; + u8 numberID:5; + u8 :2; + u8 disableExLsiID:1; + }; + u16 raw; + }; +} CTRDGModuleID; + +typedef struct CTRDGModuleInfo +{ + CTRDGModuleID moduleID; + u8 exLsiID[3]; + u8 isAgbCartridge:1; + u8 detectPullOut:1; + u8 :0; //?? + u16 makerCode; + u32 gameCode; +} CTRDGModuleInfo; + +typedef struct CTRDGLockByProc +{ + BOOL locked; + OSIntrMode irq; +} CTRDGLockByProc; + +typedef struct CTRDGHeader +{ + u32 startAddress; + u8 nintendoLogo[0x9c]; + + u8 titleName[12]; + u32 gameCode; + u16 makerCode; + + u8 isRomCode; + + u8 machineCode; + u8 deviceType; + + u8 exLsiID[3]; + + u8 reserved[4]; + u8 softVersion; + u8 complement; + + u16 moduleID; +} CTRDGHeader; + +typedef struct CTRDGRomCycle +{ + MICartridgeRomCycle1st c1; + MICartridgeRomCycle2nd c2; +} CTRDGRomCycle; + +#define CTRDGi_GetModuleInfoAddr() ((CTRDGModuleInfo *)HW_CTRDG_MODULE_INFO_BUF) +#define CTRDGi_GetHeaderAddr() ((CTRDGHeader *)HW_CTRDG_ROM) +#define CTRDGi_GetModuleIDImageAddr() ((u16 *)(HW_CTRDG_ROM + 0x0001fffe)) + +#define CTRDG_IS_ROM_CODE 0x96 +#define CTRDG_LOCKED_BY_MYPROC_FLAG OS_MAINP_LOCKED_FLAG + +#define CTRDGi_FORWARD_TYPE_DMA 0x00000000 +#define CTRDGi_FORWARD_TYPE_CPU 0x00000001 +#define CTRDGi_FORWARD_TYPE_MASK 0x00000001 + +#define CTRDGi_FORWARD_WIDTH_8 0x00000000 +#define CTRDGi_FORWARD_WIDTH_16 0x00000010 +#define CTRDGi_FORWARD_WIDTH_32 0x00000020 + +#define CTRDGi_FORWARD_DMA16 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_16) +#define CTRDGi_FORWARD_DMA32 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_32) +#define CTRDGi_FORWARD_CPU8 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_8) +#define CTRDGi_FORWARD_CPU16 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_16) +#define CTRDGi_FORWARD_CPU32 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_32) + +#define CTRDGi_ACCESS_DIR_WRITE 0x00000000 +#define CTRDGi_ACCESS_DIR_READ 0x00000001 + +#define CTRDGi_ACCESS_WIDTH_8 0x00000010 +#define CTRDGi_ACCESS_WIDTH_16 0x00000020 +#define CTRDGi_ACCESS_WIDTH_32 0x00000040 + +#define CTRDGi_ACCESS_WRITE8 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_8) +#define CTRDGi_ACCESS_WRITE16 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_16) +#define CTRDGi_ACCESS_WRITE32 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_32) +#define CTRDGi_ACCESS_READ8 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_8) +#define CTRDGi_ACCESS_READ16 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_16) +#define CTRDGi_ACCESS_READ32 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_32) + +void CTRDGi_InitCommon(void); +BOOL CTRDG_IsAgbCartridge(void); +BOOL CTRDG_IsOptionCartridge(void); +BOOL CTRDGi_IsAgbCartridgeAtInit(void); +u32 CTRDG_GetAgbGameCode(void); +u32 CTRDGi_GetAgbGameCodeAtInit(void); +u16 CTRDG_GetAgbMakerCode(void); +u16 CTRDGi_GetAgbMakerCodeAtInit(void); +BOOL CTRDG_IsPulledOut(void); +BOOL CTRDG_IsExisting(void); +void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r); +void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r); +void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info); +void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info); +void CTRDGi_SendtoPxi(u32 data); +BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size); +BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size); +BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size); +BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType); +BOOL CTRDG_Read32(const u32 *address, u32 *rdata); +BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType); +BOOL CTRDG_IsEnabled(void); +void CTRDG_Enable(BOOL enable); +void CTRDG_CheckEnabled(void); + +#endif //POKEDIAMOND_CTRDG_COMMON_H diff --git a/arm9/lib/NitroSDK/include/CTRDG_flash.h b/arm9/lib/NitroSDK/include/CTRDG_flash.h new file mode 100644 index 00000000..aa02d951 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CTRDG_flash.h @@ -0,0 +1,27 @@ +#ifndef POKEDIAMOND_CTRDG_FLASH_H +#define POKEDIAMOND_CTRDG_FLASH_H + +#include "nitro/types.h" +#include "MI_exMemory.h" + +#define CTRDG_AGB_FLASH_ADR 0x0A000000 + +typedef struct CTRDGiFlashSectorTag +{ + u32 size; + u16 shift; + u16 count; + u16 top; + u8 reserved[2]; +} CTRDGiFlashSector; + +typedef struct CTRDGFlashTypeTag +{ + u32 romSize; + CTRDGiFlashSector sector; + MICartridgeRamCycle agbWait[2]; + u16 makerID; + u16 deviceID; +} CTRDGFlashType; + +#endif //POKEDIAMOND_CTRDG_FLASH_H diff --git a/arm9/lib/NitroSDK/include/CTRDG_flash_AT29LV512.h b/arm9/lib/NitroSDK/include/CTRDG_flash_AT29LV512.h new file mode 100644 index 00000000..64f3efdb --- /dev/null +++ b/arm9/lib/NitroSDK/include/CTRDG_flash_AT29LV512.h @@ -0,0 +1,23 @@ +#ifndef POKEDIAMOND_CTRDG_FLASH_AT29LV512_H +#define POKEDIAMOND_CTRDG_FLASH_AT29LV512_H + +#include "nitro/types.h" +#include "CTRDG_task.h" + +u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg); +u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg); +u32 CTRDGi_EraseFlash4KBCoreAT(CTRDGTaskInfo *arg); +u32 CTRDGi_WriteFlashSectorCoreAT(CTRDGTaskInfo *arg); +u32 CTRDGi_WriteFlash4KBCoreAT(CTRDGTaskInfo *arg); +u16 CTRDGi_EraseFlashChipAT(void); +u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo); +u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src); +void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback); +void CTRDGi_EraseFlash4KBAsyncAT(u16 l_secNo, CTRDG_TASK_FUNC callback); +void CTRDGi_WriteFlash4KBAsyncAT(u16 l_secNo, u8 *src, CTRDG_TASK_FUNC callback); +u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo); +u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src); +void CTRDGi_EraseFlashSectorAsyncAT(u16 p_secNo, CTRDG_TASK_FUNC callback); +void CTRDGi_WriteFlashSectorAsyncAT(u16 p_secNo, u8 *src, CTRDG_TASK_FUNC callback); + +#endif //POKEDIAMOND_CTRDG_FLASH_AT29LV512_H diff --git a/arm9/lib/NitroSDK/include/CTRDG_task.h b/arm9/lib/NitroSDK/include/CTRDG_task.h new file mode 100644 index 00000000..2cf7a233 --- /dev/null +++ b/arm9/lib/NitroSDK/include/CTRDG_task.h @@ -0,0 +1,25 @@ +#ifndef POKEDIAMOND_CTRDG_TASK_H +#define POKEDIAMOND_CTRDG_TASK_H + +#include "nitro/types.h" + +struct CTRDGTaskInfo_tag; + +typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGTaskInfo_tag *); + +typedef struct CTRDGTaskInfo_tag +{ + CTRDG_TASK_FUNC task; + CTRDG_TASK_FUNC callback; + u32 result; + u8 *data; + u8 *adr; + u32 offset; + u32 size; + u8 *dst; + u16 sec_num; + u8 busy; + u8 param[1]; +} CTRDGTaskInfo; + +#endif //POKEDIAMOND_CTRDG_TASK_H diff --git a/arm9/lib/NitroSDK/include/DGT_common.h b/arm9/lib/NitroSDK/include/DGT_common.h new file mode 100644 index 00000000..c74ae7cd --- /dev/null +++ b/arm9/lib/NitroSDK/include/DGT_common.h @@ -0,0 +1,6 @@ +#ifndef NITRO_DGT_COMMON_H_ +#define NITRO_DGT_COMMON_H_ + +#define DGT_HASH2_DIGEST_SIZE (160/8) + +#endif //NITRO_DGT_COMMON_H_ diff --git a/arm9/lib/NitroSDK/include/DGT_dgt.h b/arm9/lib/NitroSDK/include/DGT_dgt.h new file mode 100644 index 00000000..95c7c4e2 --- /dev/null +++ b/arm9/lib/NitroSDK/include/DGT_dgt.h @@ -0,0 +1,8 @@ +#ifndef NITRO_DGT_DGT_H_ +#define NITRO_DGT_DGT_H_ + +#include "nitro/types.h" + +void DGT_Hash2CalcHmac(void* digest, void* bin_ptr, u32 bin_len, void* key_ptr, u32 keylen); + +#endif //NITRO_DGT_DGT_H_ diff --git a/arm9/lib/NitroSDK/include/FS_archive.h b/arm9/lib/NitroSDK/include/FS_archive.h new file mode 100644 index 00000000..3987341c --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_archive.h @@ -0,0 +1,220 @@ +#ifndef NITRO_FS_ARCHIVE_H_ +#define NITRO_FS_ARCHIVE_H_ + +#include "nitro.h" + +#include "OS_thread.h" + +struct FSFile; +struct FSArchive; + +#define FS_ARCHIVE_NAME_LEN_MAX 3 + +#define FS_ARCHIVE_FLAG_REGISTER 0x00000001 +#define FS_ARCHIVE_FLAG_LOADED 0x00000002 +#define FS_ARCHIVE_FLAG_TABLE_LOAD 0x00000004 +#define FS_ARCHIVE_FLAG_SUSPEND 0x00000008 +#define FS_ARCHIVE_FLAG_RUNNING 0x00000010 +#define FS_ARCHIVE_FLAG_CANCELING 0x00000020 +#define FS_ARCHIVE_FLAG_SUSPENDING 0x00000040 +#define FS_ARCHIVE_FLAG_UNLOADING 0x00000080 +#define FS_ARCHIVE_FLAG_IS_ASYNC 0x00000100 +#define FS_ARCHIVE_FLAG_IS_SYNC 0x00000200 + +typedef enum { + FS_COMMAND_ASYNC_BEGIN = 0, + FS_COMMAND_READFILE = FS_COMMAND_ASYNC_BEGIN, + FS_COMMAND_WRITEFILE, + FS_COMMAND_ASYNC_END, + + FS_COMMAND_SYNC_BEGIN = FS_COMMAND_ASYNC_END, + FS_COMMAND_SEEKDIR = FS_COMMAND_SYNC_BEGIN, + FS_COMMAND_READDIR, + FS_COMMAND_FINDPATH, + FS_COMMAND_GETPATH, + FS_COMMAND_OPENFILEFAST, + FS_COMMAND_OPENFILEDIRECT, + FS_COMMAND_CLOSEFILE, + FS_COMMAND_SYNC_END, + + FS_COMMAND_STATUS_BEGIN = FS_COMMAND_SYNC_END, + FS_COMMAND_ACTIVATE = FS_COMMAND_STATUS_BEGIN, + FS_COMMAND_IDLE, + FS_COMMAND_SUSPEND, + FS_COMMAND_RESUME, + FS_COMMAND_STATUS_END, + + FS_COMMAND_INVALID +} FSCommandType; + +/* Asynchronous commands*/ +#define FS_ARCHIVE_PROC_READFILE (1 << FS_COMMAND_READFILE) +#define FS_ARCHIVE_PROC_WRITEFILE (1 << FS_COMMAND_WRITEFILE) +/* All asynchronous commands*/ +#define FS_ARCHIVE_PROC_ASYNC \ + (FS_ARCHIVE_PROC_READFILE | FS_ARCHIVE_PROC_WRITEFILE) + +/* Synchronous commands*/ +#define FS_ARCHIVE_PROC_SEEKDIR (1 << FS_COMMAND_SEEKDIR) +#define FS_ARCHIVE_PROC_READDIR (1 << FS_COMMAND_READDIR) +#define FS_ARCHIVE_PROC_FINDPATH (1 << FS_COMMAND_FINDPATH) +#define FS_ARCHIVE_PROC_GETPATH (1 << FS_COMMAND_GETPATH) +#define FS_ARCHIVE_PROC_OPENFILEFAST (1 << FS_COMMAND_OPENFILEFAST) +#define FS_ARCHIVE_PROC_OPENFILEDIRECT (1 << FS_COMMAND_OPENFILEDIRECT) +#define FS_ARCHIVE_PROC_CLOSEFILE (1 << FS_COMMAND_CLOSEFILE) +/* All synchronous commands*/ +#define FS_ARCHIVE_PROC_SYNC \ + (FS_ARCHIVE_PROC_SEEKDIR | FS_ARCHIVE_PROC_READDIR | \ + FS_ARCHIVE_PROC_FINDPATH | FS_ARCHIVE_PROC_GETPATH | \ + FS_ARCHIVE_PROC_OPENFILEFAST | FS_ARCHIVE_PROC_OPENFILEDIRECT | FS_ARCHIVE_PROC_CLOSEFILE) + +/* Messages when status changes*/ +#define FS_ARCHIVE_PROC_ACTIVATE (1 << FS_COMMAND_ACTIVATE) +#define FS_ARCHIVE_PROC_IDLE (1 << FS_COMMAND_IDLE) +#define FS_ARCHIVE_PROC_SUSPENDING (1 << FS_COMMAND_SUSPEND) +#define FS_ARCHIVE_PROC_RESUME (1 << FS_COMMAND_RESUME) +/* All messages when status changes*/ +#define FS_ARCHIVE_PROC_STATUS \ + (FS_ARCHIVE_PROC_ACTIVATE | FS_ARCHIVE_PROC_IDLE | \ + FS_ARCHIVE_PROC_SUSPENDING | FS_ARCHIVE_PROC_RESUME) + +#define FS_ARCHIVE_PROC_ALL (~0) + +typedef enum { + FS_RESULT_SUCCESS = 0, + FS_RESULT_FAILURE, + FS_RESULT_BUSY, + FS_RESULT_CANCELED, + FS_RESULT_CANCELLED = FS_RESULT_CANCELED, // SDK alias + FS_RESULT_UNSUPPORTED, + FS_RESULT_ERROR, + FS_RESULT_PROC_ASYNC, + FS_RESULT_PROC_DEFAULT, + FS_RESULT_PROC_UNKNOWN +} +FSResult; + +typedef FSResult (*FS_ARCHIVE_READ_FUNC) (struct FSArchive *p, void *dst, u32 pos, u32 size); +typedef FSResult (*FS_ARCHIVE_WRITE_FUNC) (struct FSArchive *p, const void *src, u32 pos, u32 size); +typedef FSResult (*FS_ARCHIVE_PROC_FUNC) (struct FSFile *, FSCommandType); + +typedef struct +{ + struct FSFile * prev; + struct FSFile * next; +} +FSFileLink; + +typedef struct +{ + u32 start; + u16 index; + u16 parent; +} FSArchiveFNT; + +typedef struct +{ + u32 top; + u32 bottom; +} FSArchiveFAT; + +typedef struct FSArchive +{ + union + { + char ptr[4]; + u32 pack; + } name; + struct FSArchive * next; + struct FSArchive * prev; + OSThreadQueue sync_q; + OSThreadQueue stat_q; + u32 flag; + FSFileLink list; + u32 base; + u32 fat; + u32 fat_size; + u32 fnt; + u32 fnt_size; + u32 fat_bak; + u32 fnt_bak; + void * load_mem; + FS_ARCHIVE_READ_FUNC read_func; + FS_ARCHIVE_WRITE_FUNC write_func; + FS_ARCHIVE_READ_FUNC table_func; + FS_ARCHIVE_PROC_FUNC proc; + u32 proc_flag; +} FSArchive; + +static inline BOOL FS_IsArchiveLoaded(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_LOADED) ? TRUE : FALSE; +} + +static inline u32 FS_GetArchiveOffset(const FSArchive * p_arc, u32 pos) +{ + return p_arc->base + pos; +} + +static inline BOOL FSi_IsArchiveCanceling(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_CANCELING) != 0; +} + +static inline BOOL FS_IsArchiveSuspended(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_SUSPEND) ? TRUE : FALSE; +} + +static inline BOOL FSi_IsArchiveSuspending(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_SUSPENDING) != 0; +} + +static inline BOOL FSi_IsArchiveRunning(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_RUNNING) != 0; +} + +static inline BOOL FSi_IsArchiveUnloading(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_UNLOADING) != 0; +} + +static inline BOOL FSi_IsArchiveAsync(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_IS_ASYNC) != 0; +} + +static inline BOOL FSi_IsArchiveSync(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_IS_SYNC) != 0; +} + +static inline BOOL FS_IsArchiveTableLoaded(volatile const FSArchive * p_arc) +{ + return (p_arc->flag & FS_ARCHIVE_FLAG_TABLE_LOAD) ? TRUE : FALSE; +} + +u32 FSi_GetPackedName(const char * name, int name_len); +FSResult FSi_ReadMemCallback(struct FSArchive * p_arc, void * dest, u32 pos, u32 size); +FSResult FSi_WriteMemCallback(struct FSArchive * p_arc, const void * src, u32 pos, u32 size); +FSResult FSi_ReadMemoryCore(struct FSArchive * p_arc, void * dest, u32 pos, u32 size); +struct FSFile * FSi_NextCommand(struct FSArchive * p_arc); +void FSi_ExecuteAsyncCommand(struct FSFile * p_file); +BOOL FSi_ExecuteSyncCommand(struct FSFile * file); +BOOL FSi_SendCommand(struct FSFile * file, FSCommandType command); +void FS_InitArchive(struct FSArchive * p_arc); +struct FSArchive * const FS_FindArchive(const char * path, int offset); +BOOL FS_RegisterArchiveName(struct FSArchive * p_arc, const char * name, int name_len); +void FS_ReleaseArchiveName(struct FSArchive * p_arc); +BOOL FS_LoadArchive(struct FSArchive * p_arc, u32 base, u32 fat, u32 fat_size, u32 fnt, u32 fnt_size, FS_ARCHIVE_READ_FUNC read_func, FS_ARCHIVE_WRITE_FUNC write_func); +BOOL FS_UnloadArchive(struct FSArchive * p_arc); +u32 FS_LoadArchiveTables(struct FSArchive *p_arc, void *p_mem, u32 max_size); +void * FS_UnloadArchiveTables(struct FSArchive * p_arc); +BOOL FS_SuspendArchive(struct FSArchive * p_arc); +BOOL FS_ResumeArchive(struct FSArchive * p_arc); +void FS_SetArchiveProc(struct FSArchive * p_arc, FS_ARCHIVE_PROC_FUNC proc, u32 flags); +void FS_NotifyArchiveAsyncEnd(struct FSArchive *p_arc, FSResult ret); + +#endif //NITRO_FS_ARCHIVE_H_ diff --git a/arm9/lib/NitroSDK/include/FS_command.h b/arm9/lib/NitroSDK/include/FS_command.h new file mode 100644 index 00000000..b5e73bcf --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_command.h @@ -0,0 +1,11 @@ +#ifndef NITRO_FS_COMMAND_H_ +#define NITRO_FS_COMMAND_H_ + +#include "FS_file.h" + +extern FSResult (*const fsi_default_command[])(FSFile *); + +void FSi_ReleaseCommand(FSFile * file, FSResult signal); +FSResult FSi_TranslateCommand(FSFile * file, FSCommandType command); + +#endif //NITRO_FS_COMMAND_H_ diff --git a/arm9/lib/NitroSDK/include/FS_command_default.h b/arm9/lib/NitroSDK/include/FS_command_default.h new file mode 100644 index 00000000..20e20f8f --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_command_default.h @@ -0,0 +1,27 @@ +#ifndef POKEDIAMOND_FS_COMMAND_DEFAULT_H +#define POKEDIAMOND_FS_COMMAND_DEFAULT_H + +#include "nitro/types.h" +#include "FS_archive.h" + +typedef struct +{ + FSArchive *arc; + u32 pos; +} FSiSyncReadParam; + + +u32 FSi_StrNICmp(const char * str1, const char * str2, u32 len); +FSResult FSi_ReadTable(FSiSyncReadParam * p, void * dst, u32 len); +FSResult FSi_SeekDirDirect(FSFile * p_dir, u32 id); +FSResult FSi_ReadFileCommand(FSFile * p_file); +FSResult FSi_WriteFileCommand(FSFile * p_file); +FSResult FSi_SeekDirCommand(FSFile * p_dir); +FSResult FSi_ReadDirCommand(FSFile *p_dir); +FSResult FSi_FindPathCommand(FSFile *p_dir); +FSResult FSi_GetPathCommand(FSFile *p_file); +FSResult FSi_OpenFileFastCommand(FSFile * p_file); +FSResult FSi_OpenFileDirectCommand(FSFile * p_file); +FSResult FSi_CloseFileCommand(FSFile * p_file); + +#endif //POKEDIAMOND_FS_COMMAND_DEFAULT_H diff --git a/arm9/lib/NitroSDK/include/FS_file.h b/arm9/lib/NitroSDK/include/FS_file.h new file mode 100644 index 00000000..f870ad2a --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_file.h @@ -0,0 +1,226 @@ +#ifndef NITRO_FS_FILE_H_ +#define NITRO_FS_FILE_H_ + +#include "nitro.h" + +#include "FS_archive.h" + +#define FS_FILE_STATUS_BUSY 0x00000001 +#define FS_FILE_STATUS_CANCEL 0x00000002 +#define FS_FILE_STATUS_SYNC 0x00000004 +#define FS_FILE_STATUS_ASYNC 0x00000008 +#define FS_FILE_STATUS_IS_FILE 0x00000010 +#define FS_FILE_STATUS_IS_DIR 0x00000020 +#define FS_FILE_STATUS_OPERATING 0x00000040 + +#define FS_FILE_NAME_MAX 127 + +typedef enum FSSeekFileMode +{ + FS_SEEK_SET = 0, + FS_SEEK_CUR, + FS_SEEK_END +} FSSeekFileMode; + +struct FSFile; + +#define FS_DMA_NOT_USE ((u32)~0) + +typedef struct FSDirPos +{ + struct FSArchive *arc; + u16 own_id; + u16 index; + u32 pos; +} +FSDirPos; // size = 0xC + +typedef struct FSFileID +{ + struct FSArchive *arc; + u32 file_id; +} +FSFileID; + +typedef struct +{ + union + { + FSFileID file_id; + FSDirPos dir_id; + }; + u32 is_directory; + u32 name_len; + char name[128]; +} +FSDirEntry; + + +typedef struct +{ + FSDirPos pos; +} +FSSeekDirInfo; + + +typedef struct +{ + FSDirEntry *p_entry; + BOOL skip_string; +} +FSReadDirInfo; + + +typedef struct +{ + FSDirPos pos; + const char *path; + BOOL find_directory; + union + { + FSFileID *file; + FSDirPos *dir; + } + result; +} +FSFindPathInfo; + + +typedef struct +{ + u8 *buf; + u32 buf_len; + u16 total_len; + u16 dir_id; +} +FSGetPathInfo; + + +typedef struct +{ + FSFileID id; +} +FSOpenFileFastInfo; + + +typedef struct +{ + u32 top; + u32 bottom; + u32 index; +} +FSOpenFileDirectInfo; + + +typedef struct +{ + u32 reserved; +} +FSCloseFileInfo; + + +typedef struct +{ + void *dst; + u32 len_org; + u32 len; +} +FSReadFileInfo; + + +typedef struct +{ + const void *src; + u32 len_org; + u32 len; +} +FSWriteFileInfo; + +typedef struct FSFile +{ + FSFileLink link; // 0x00 + struct FSArchive *arc; // 0x08 + u32 stat; // 0xC + FSCommandType command; // 0x10 + FSResult error; // 0x14 + OSThreadQueue queue[1]; // 0x18 + union { + struct + { + u32 own_id; // 0x20 + u32 top; // 0x24 + u32 bottom; // 0x28 + u32 pos; // 0x2C + } file; + struct + { + FSDirPos pos; // 0x20 + u32 parent; // 0x2C + } dir; + } prop; // 0x20 + + union { + FSReadFileInfo readfile; // 0x30 + FSWriteFileInfo writefile; // 0x30 + + FSSeekDirInfo seekdir; // 0x30 + FSReadDirInfo readdir; // 0x30 + FSFindPathInfo findpath; // 0x30 + FSGetPathInfo getpath; // 0x30 + FSOpenFileFastInfo openfilefast; // 0x30 + FSOpenFileDirectInfo openfiledirect; // 0x30 + FSCloseFileInfo closefile; // 0x30 + } arg; // 0x30 +} +FSFile; // size = 0x50 + +void FS_Init(u32 default_dma_no); +BOOL FS_IsAvailable(void); +void FS_InitFile(FSFile * p_file); +int FSi_ReadFileCore(FSFile * p_file, void * dst, s32 len, BOOL async); +BOOL FS_ConvertPathToFileID(FSFileID * p_file_id, const char * path); +BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index); +BOOL FS_OpenFileFast(FSFile * p_file, FSFileID file_id); +BOOL FS_OpenFile(FSFile * p_file, const char * path); +BOOL FS_CloseFile(FSFile * p_file); +BOOL FS_WaitAsync(FSFile * p_file); +int FS_ReadFileAsync(FSFile * p_file, void * dst, s32 len); +int FS_ReadFile(FSFile * p_file, void * dst, s32 len); +BOOL FS_SeekFile(FSFile * p_file, s32 offset, FSSeekFileMode origin); +BOOL FS_ChangeDir(const char * path); + +static inline u32 const FS_GetFileImageTop(volatile const FSFile * p_file) { + return p_file->prop.file.top; +} + +static inline u32 const FS_GetLength(volatile const FSFile * p_file) +{ + return p_file->prop.file.bottom - p_file->prop.file.top; +} + +static inline BOOL FS_IsCanceling(volatile const FSFile * p_file) +{ + return (p_file->stat & FS_FILE_STATUS_CANCEL) ? TRUE : FALSE; +} + +static inline BOOL FS_IsFileSyncMode(volatile const FSFile * p_file) +{ + return (p_file->stat & FS_FILE_STATUS_SYNC) ? TRUE : FALSE; +} + +static inline BOOL FS_IsBusy(volatile const FSFile * p_file) +{ + return p_file->stat & FS_FILE_STATUS_BUSY ? TRUE : FALSE; +} + +static inline BOOL FS_IsSucceeded(volatile const FSFile * p_file) +{ + return (p_file->error == FS_RESULT_SUCCESS) ? TRUE : FALSE; +} + +static inline BOOL FS_IsDir(volatile const FSFile * p_file) +{ + return (p_file->stat & FS_FILE_STATUS_IS_DIR) ? TRUE : FALSE; +} + +#endif //NITRO_FS_FILE_H_ diff --git a/arm9/lib/NitroSDK/include/FS_mw_dtor.h b/arm9/lib/NitroSDK/include/FS_mw_dtor.h new file mode 100644 index 00000000..a746ed19 --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_mw_dtor.h @@ -0,0 +1,16 @@ +#ifndef NITRO_FS_MW_DTOR_H_ +#define NITRO_FS_MW_DTOR_H_ + +typedef void (*MWI_DESTRUCTOR_FUNC) (void *); + +typedef struct MWiDestructorChain +{ + struct MWiDestructorChain *next; + MWI_DESTRUCTOR_FUNC dtor; + void *obj; +} +MWiDestructorChain; + +extern MWiDestructorChain *__global_destructor_chain; + +#endif //NITRO_FS_MW_DTOR_H_ diff --git a/arm9/lib/NitroSDK/include/FS_overlay.h b/arm9/lib/NitroSDK/include/FS_overlay.h new file mode 100644 index 00000000..7853e4ae --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_overlay.h @@ -0,0 +1,73 @@ +#ifndef NITRO_FS_OVERLAY_H_ +#define NITRO_FS_OVERLAY_H_ + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "nitro.h" +#include "MI_exMemory.h" +#include "FS_file.h" +#include "CARD_rom.h" + +typedef u32 FSOverlayID; + +#define FS_EXTERN_OVERLAY(name) extern u32 SDK_OVERLAY_ ## name ## _ID[1] +#define FS_OVERLAY_ID(name) ((u32)&(SDK_OVERLAY_ ## name ## _ID)) + +typedef void (*FSOverlayInitFunc)(void); + +typedef struct FSOverlayInfoHeader +{ + u32 id; + u8 *ram_address; + u32 ram_size; + u32 bss_size; + FSOverlayInitFunc *sinit_init; + FSOverlayInitFunc *sinit_init_end; + u32 file_id; + u32 compressed: 24; + u32 flag: 8; +} FSOverlayInfoHeader; + +typedef struct FSOverlayInfo +{ + FSOverlayInfoHeader header; + MIProcessor target; + CARDRomRegion file_pos; +} FSOverlayInfo; + +static inline u8 *const FS_GetOverlayAddress(FSOverlayInfo *p_ovi) +{ + return p_ovi->header.ram_address; +} + +static inline u32 const FS_GetOverlayImageSize(FSOverlayInfo *p_ovi) +{ + return p_ovi->header.ram_size; +} + +static inline u32 const FS_GetOverlayTotalSize(FSOverlayInfo *p_ovi) +{ + return p_ovi->header.ram_size + p_ovi->header.bss_size; +} + +u32 FSi_GetOverlayBinarySize(FSOverlayInfo * p_ovi); +void FS_ClearOverlayImage(FSOverlayInfo * p_ovi); +FSFileID FS_GetOverlayFileID(FSOverlayInfo * p_ovi); +BOOL FSi_LoadOverlayInfoCore(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id, FSArchive * arc, u32 offset_arm9, u32 len_arm9, u32 offset_arm7, u32 len_arm7); +BOOL FS_LoadOverlayInfo(FSOverlayInfo *p_ovi, MIProcessor target, FSOverlayID id); +BOOL FS_LoadOverlayImageAsync(FSOverlayInfo *p_ovi, FSFile *p_file); +BOOL FS_LoadOverlayImage(FSOverlayInfo *p_ovi); +BOOL FSi_CompareDigest(const u8 *spec_digest, void *src, u32 len); +void FS_StartOverlay(FSOverlayInfo *p_ovi); +void FS_EndOverlay(FSOverlayInfo *p_ovi); +BOOL FS_UnloadOverlayImage(FSOverlayInfo * p_ovi); +BOOL FS_LoadOverlay(MIProcessor target, FSOverlayID id); +BOOL FS_UnloadOverlay(MIProcessor target, FSOverlayID id); + +#if defined(__cplusplus) +} +#endif + +#endif //NITRO_FS_OVERLAY_H_ diff --git a/arm9/lib/NitroSDK/include/FS_rom.h b/arm9/lib/NitroSDK/include/FS_rom.h new file mode 100644 index 00000000..bd0cd73b --- /dev/null +++ b/arm9/lib/NitroSDK/include/FS_rom.h @@ -0,0 +1,24 @@ +#ifndef NITRO_FS_ROM_H_ +#define NITRO_FS_ROM_H_ + +#include "FS_archive.h" +#include "FS_file.h" +#include "CARD_rom.h" +#include "nitro/types.h" + +extern FSArchive fsi_arc_rom; +extern s32 fsi_card_lock_id; +extern CARDRomRegion fsi_ovt7; +extern CARDRomRegion fsi_ovt9; + +void FSi_OnRomReadDone(void * p_arc); +FSResult FSi_ReadRomCallback(FSArchive * p_arc, void * dst, u32 src, u32 len); +FSResult FSi_WriteDummyCallback(FSArchive * p_arc, const void *src, u32 dst, u32 len); +FSResult FSi_RomArchiveProc(FSFile * p_arc, FSCommandType cmd); +FSResult FSi_ReadDummyCallback(FSArchive *p_arc, void *dst, u32 src, u32 len); +FSResult FSi_EmptyArchiveProc(FSFile *p_file, FSCommandType cmd); +void FSi_InitRom(u32 default_dma_no); +u32 FS_SetDefaultDMA(u32 dma_no); +u32 FS_TryLoadTable(void * p_mem, u32 size); + +#endif //NITRO_FS_ROM_H_ diff --git a/arm9/lib/NitroSDK/include/FSi_util.h b/arm9/lib/NitroSDK/include/FSi_util.h new file mode 100644 index 00000000..2357b446 --- /dev/null +++ b/arm9/lib/NitroSDK/include/FSi_util.h @@ -0,0 +1,46 @@ +#ifndef NITRO_FSI_UTIL_H_ +#define NITRO_FSI_UTIL_H_ + +#include "CARD_common.h" + +#define ALIGN_BYTE(n, a) (((u32)(n) + ALIGN_MASK(a)) & ~ALIGN_MASK(a)) + +#define BIT_MASK(a) ((u32)((1 << (a)) - 1)) + +static inline BOOL FSi_IsSlash(u32 c) +{ + return (c == '/') || (c == '\\'); +} + +static inline void FSi_CutFromListCore(FSFileLink *trg) +{ + FSFile *const pr = trg->prev; + FSFile *const nx = trg->next; + if (pr) + pr->link.next = nx; + if (nx) + nx->link.prev = pr; +} + +static inline void FSi_CutFromList(FSFile *elem) +{ + FSFileLink *const trg = &elem->link; + FSi_CutFromListCore(trg); + trg->next = trg->prev = NULL; +} + +static inline void FSi_AppendToList(FSFile *elem, FSFile *list) +{ + FSFileLink *const trg = &elem->link; + FSi_CutFromListCore(trg); + { + while (list->link.next) + list = list->link.next; + list->link.next = elem; + trg->prev = list; + trg->next = NULL; + } +} + + +#endif //NITRO_FSI_UTIL_H_ diff --git a/arm9/lib/NitroSDK/include/GX_asm.h b/arm9/lib/NitroSDK/include/GX_asm.h new file mode 100644 index 00000000..d2622508 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_asm.h @@ -0,0 +1,6 @@ +#ifndef GUARD_GX_ASM_H +#define GUARD_GX_ASM_H + +void GX_SendFifo48B(register void *pSrc, register void *pDest); + +#endif //GUARD_GX_ASM_H diff --git a/arm9/lib/NitroSDK/include/GX_bgcnt.h b/arm9/lib/NitroSDK/include/GX_bgcnt.h new file mode 100644 index 00000000..b64d4432 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_bgcnt.h @@ -0,0 +1,761 @@ +#ifndef GUARD_GX_BGCNT_H +#define GUARD_GX_BGCNT_H + +void *G2_GetBG0ScrPtr(); +void *G2S_GetBG0ScrPtr(); +void *G2_GetBG1ScrPtr(); +void *G2S_GetBG1ScrPtr(); +void *G2_GetBG2ScrPtr(); +void *G2S_GetBG2ScrPtr(); +void *G2_GetBG3ScrPtr(); +void *G2S_GetBG3ScrPtr(); +void *G2_GetBG0CharPtr(); +void *G2S_GetBG0CharPtr(); +void *G2_GetBG1CharPtr(); +void *G2S_GetBG1CharPtr(); +void *G2_GetBG2CharPtr(); +void *G2S_GetBG2CharPtr(); +void *G2_GetBG3CharPtr(); +void *G2S_GetBG3CharPtr(); + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 bgExtPltt:1; + u16 screenSize:2; + }; +} +GXBg01Control; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 _reserve:1; + u16 screenSize:2; + }; +} +GXBg23ControlText; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 _reserve:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23ControlAffine; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:1; + u16 charBase:3; + u16 mosaic:1; + u16 _reserve2:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23Control256x16Pltt; + + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:4; + u16 mosaic:1; + u16 _reserve2:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23Control256Bmp, GXBg23ControlDCBmp; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:4; + u16 mosaic:1; + u16 _reserve2:6; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg2ControlLargeBmp; + + + +typedef enum +{ + GX_BG_SCRSIZE_TEXT_256x256 = 0, + GX_BG_SCRSIZE_TEXT_512x256 = 1, + GX_BG_SCRSIZE_TEXT_256x512 = 2, + GX_BG_SCRSIZE_TEXT_512x512 = 3 +} +GXBGScrSizeText; + +typedef enum +{ + GX_BG_SCRSIZE_AFFINE_128x128 = 0, + GX_BG_SCRSIZE_AFFINE_256x256 = 1, + GX_BG_SCRSIZE_AFFINE_512x512 = 2, + GX_BG_SCRSIZE_AFFINE_1024x1024 = 3 +} +GXBGScrSizeAffine; + +typedef enum +{ + GX_BG_SCRSIZE_256x16PLTT_128x128 = 0, + GX_BG_SCRSIZE_256x16PLTT_256x256 = 1, + GX_BG_SCRSIZE_256x16PLTT_512x512 = 2, + GX_BG_SCRSIZE_256x16PLTT_1024x1024 = 3 +} +GXBGScrSize256x16Pltt; + +typedef enum +{ + GX_BG_SCRSIZE_256BMP_128x128 = 0, + GX_BG_SCRSIZE_256BMP_256x256 = 1, + GX_BG_SCRSIZE_256BMP_512x256 = 2, + GX_BG_SCRSIZE_256BMP_512x512 = 3 +} +GXBGScrSize256Bmp; + +typedef enum +{ + GX_BG_SCRSIZE_DCBMP_128x128 = 0, + GX_BG_SCRSIZE_DCBMP_256x256 = 1, + GX_BG_SCRSIZE_DCBMP_512x256 = 2, + GX_BG_SCRSIZE_DCBMP_512x512 = 3 +} +GXBGScrSizeDcBmp; + +typedef enum +{ + GX_BG_SCRSIZE_LARGEBMP_512x1024 = 0, + GX_BG_SCRSIZE_LARGEBMP_1024x512 = 1 +} +GXBGScrSizeLargeBmp; + +typedef enum +{ + GX_BG_COLORMODE_16 = 0, + GX_BG_COLORMODE_256 = 1 +} +GXBGColorMode; + +typedef enum +{ + GX_BG_AREAOVER_XLU = 0, + GX_BG_AREAOVER_REPEAT = 1 +} +GXBGAreaOver; + +typedef enum +{ + GX_BG_CHARBASE_0x00000 = 0, + GX_BG_CHARBASE_0x04000 = 1, + GX_BG_CHARBASE_0x08000 = 2, + GX_BG_CHARBASE_0x0c000 = 3, + GX_BG_CHARBASE_0x10000 = 4, + GX_BG_CHARBASE_0x14000 = 5, + GX_BG_CHARBASE_0x18000 = 6, + GX_BG_CHARBASE_0x1c000 = 7, + GX_BG_CHARBASE_0x20000 = 8, + GX_BG_CHARBASE_0x24000 = 9, + GX_BG_CHARBASE_0x28000 = 10, + GX_BG_CHARBASE_0x2c000 = 11, + GX_BG_CHARBASE_0x30000 = 12, + GX_BG_CHARBASE_0x34000 = 13, + GX_BG_CHARBASE_0x38000 = 14, + GX_BG_CHARBASE_0x3c000 = 15 +} +GXBGCharBase; + +typedef enum +{ + GX_BG_SCRBASE_0x0000 = 0, + GX_BG_SCRBASE_0x0800 = 1, + GX_BG_SCRBASE_0x1000 = 2, + GX_BG_SCRBASE_0x1800 = 3, + GX_BG_SCRBASE_0x2000 = 4, + GX_BG_SCRBASE_0x2800 = 5, + GX_BG_SCRBASE_0x3000 = 6, + GX_BG_SCRBASE_0x3800 = 7, + GX_BG_SCRBASE_0x4000 = 8, + GX_BG_SCRBASE_0x4800 = 9, + GX_BG_SCRBASE_0x5000 = 10, + GX_BG_SCRBASE_0x5800 = 11, + GX_BG_SCRBASE_0x6000 = 12, + GX_BG_SCRBASE_0x6800 = 13, + GX_BG_SCRBASE_0x7000 = 14, + GX_BG_SCRBASE_0x7800 = 15, + GX_BG_SCRBASE_0x8000 = 16, + GX_BG_SCRBASE_0x8800 = 17, + GX_BG_SCRBASE_0x9000 = 18, + GX_BG_SCRBASE_0x9800 = 19, + GX_BG_SCRBASE_0xa000 = 20, + GX_BG_SCRBASE_0xa800 = 21, + GX_BG_SCRBASE_0xb000 = 22, + GX_BG_SCRBASE_0xb800 = 23, + GX_BG_SCRBASE_0xc000 = 24, + GX_BG_SCRBASE_0xc800 = 25, + GX_BG_SCRBASE_0xd000 = 26, + GX_BG_SCRBASE_0xd800 = 27, + GX_BG_SCRBASE_0xe000 = 28, + GX_BG_SCRBASE_0xe800 = 29, + GX_BG_SCRBASE_0xf000 = 30, + GX_BG_SCRBASE_0xf800 = 31 +} +GXBGScrBase; + +typedef enum +{ + GX_BG_BMPSCRBASE_0x00000 = 0, + GX_BG_BMPSCRBASE_0x04000 = 1, + GX_BG_BMPSCRBASE_0x08000 = 2, + GX_BG_BMPSCRBASE_0x0c000 = 3, + GX_BG_BMPSCRBASE_0x10000 = 4, + GX_BG_BMPSCRBASE_0x14000 = 5, + GX_BG_BMPSCRBASE_0x18000 = 6, + GX_BG_BMPSCRBASE_0x1c000 = 7, + GX_BG_BMPSCRBASE_0x20000 = 8, + GX_BG_BMPSCRBASE_0x24000 = 9, + GX_BG_BMPSCRBASE_0x28000 = 10, + GX_BG_BMPSCRBASE_0x2c000 = 11, + GX_BG_BMPSCRBASE_0x30000 = 12, + GX_BG_BMPSCRBASE_0x34000 = 13, + GX_BG_BMPSCRBASE_0x38000 = 14, + GX_BG_BMPSCRBASE_0x3c000 = 15, + GX_BG_BMPSCRBASE_0x40000 = 16, + GX_BG_BMPSCRBASE_0x44000 = 17, + GX_BG_BMPSCRBASE_0x48000 = 18, + GX_BG_BMPSCRBASE_0x4c000 = 19, + GX_BG_BMPSCRBASE_0x50000 = 20, + GX_BG_BMPSCRBASE_0x54000 = 21, + GX_BG_BMPSCRBASE_0x58000 = 22, + GX_BG_BMPSCRBASE_0x5c000 = 23, + GX_BG_BMPSCRBASE_0x60000 = 24, + GX_BG_BMPSCRBASE_0x64000 = 25, + GX_BG_BMPSCRBASE_0x68000 = 26, + GX_BG_BMPSCRBASE_0x6c000 = 27, + GX_BG_BMPSCRBASE_0x70000 = 28, + GX_BG_BMPSCRBASE_0x74000 = 29, + GX_BG_BMPSCRBASE_0x78000 = 30, + GX_BG_BMPSCRBASE_0x7c000 = 31 +} +GXBGBmpScrBase; + +typedef enum +{ + GX_BG_EXTPLTT_01 = 0, + GX_BG_EXTPLTT_23 = 1 +} +GXBGExtPltt; + +typedef enum +{ + GX_BG_EXTMODE_256x16PLTT = (0 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (0 << REG_G2_BG2CNT_COLORMODE_SHIFT), + GX_BG_EXTMODE_256BITMAP = (0 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (1 << REG_G2_BG2CNT_COLORMODE_SHIFT), + GX_BG_EXTMODE_DCBITMAP = (1 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (1 << REG_G2_BG2CNT_COLORMODE_SHIFT) +} +GXBGExtMode; + +//GX_capture +typedef enum +{ + GX_CAPTURE_DEST_VRAM_A_0x00000 = 0, + GX_CAPTURE_DEST_VRAM_B_0x00000 = 1, + GX_CAPTURE_DEST_VRAM_C_0x00000 = 2, + GX_CAPTURE_DEST_VRAM_D_0x00000 = 3, + + GX_CAPTURE_DEST_VRAM_A_0x08000 = 4, + GX_CAPTURE_DEST_VRAM_B_0x08000 = 5, + GX_CAPTURE_DEST_VRAM_C_0x08000 = 6, + GX_CAPTURE_DEST_VRAM_D_0x08000 = 7, + + GX_CAPTURE_DEST_VRAM_A_0x10000 = 8, + GX_CAPTURE_DEST_VRAM_B_0x10000 = 9, + GX_CAPTURE_DEST_VRAM_C_0x10000 = 10, + GX_CAPTURE_DEST_VRAM_D_0x10000 = 11, + + GX_CAPTURE_DEST_VRAM_A_0x18000 = 12, + GX_CAPTURE_DEST_VRAM_B_0x18000 = 13, + GX_CAPTURE_DEST_VRAM_C_0x18000 = 14, + GX_CAPTURE_DEST_VRAM_D_0x18000 = 15 +} +GXCaptureDest; + +typedef enum +{ + GX_CAPTURE_SIZE_128x128 = 0, + GX_CAPTURE_SIZE_256x64 = 1, + GX_CAPTURE_SIZE_256x128 = 2, + GX_CAPTURE_SIZE_256x192 = 3 +} +GXCaptureSize; + +typedef enum +{ + GX_CAPTURE_SRCA_2D3D = 0, + GX_CAPTURE_SRCA_3D = 1 +} +GXCaptureSrcA; + +typedef enum +{ + GX_CAPTURE_SRCB_VRAM_0x00000 = 0, + GX_CAPTURE_SRCB_MRAM = 1, + GX_CAPTURE_SRCB_VRAM_0x08000 = 2, + GX_CAPTURE_SRCB_VRAM_0x10000 = 4, + GX_CAPTURE_SRCB_VRAM_0x18000 = 6 +} +GXCaptureSrcB; + +typedef enum +{ + GX_CAPTURE_MODE_A = 0, + GX_CAPTURE_MODE_B = 1, + GX_CAPTURE_MODE_AB = 2 +} +GXCaptureMode; + +static inline void G2_SetBG0Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) +{ + reg_G2_BG0CNT = (u16)((reg_G2_BG0CNT & (REG_G2_BG0CNT_PRIORITY_MASK | REG_G2_BG0CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG0CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG0CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG0CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG0CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2_BG0CNT_BGPLTTSLOT_SHIFT)); +} + +static inline void G2S_SetBG0Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) +{ + reg_G2S_DB_BG0CNT = (u16)((reg_G2S_DB_BG0CNT & (REG_G2S_DB_BG0CNT_PRIORITY_MASK | REG_G2S_DB_BG0CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG0CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG0CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG0CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG0CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2S_DB_BG0CNT_BGPLTTSLOT_SHIFT)); +} + +static inline void G2_SetBG1Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) +{ + reg_G2_BG1CNT = (u16)((reg_G2_BG1CNT & (REG_G2_BG1CNT_PRIORITY_MASK | REG_G2_BG1CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG1CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG1CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG1CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG1CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2_BG1CNT_BGPLTTSLOT_SHIFT)); +} + +static inline void G2S_SetBG1Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) +{ + reg_G2S_DB_BG1CNT = (u16)((reg_G2S_DB_BG1CNT & (REG_G2S_DB_BG1CNT_PRIORITY_MASK | REG_G2S_DB_BG1CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG1CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG1CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG1CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG1CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2S_DB_BG1CNT_BGPLTTSLOT_SHIFT)); +} + +static inline void G2_SetBG2ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ((REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG2CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT)); +} + +static inline void G2S_SetBG2ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ((REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG2CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT)); +} + +static inline void G2_SetBG2ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ((REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG2ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ((REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG2Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG2Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG2Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG2Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG2ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG2ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG2ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG2ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG3ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ((REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG3CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT)); +} + +static inline void G2S_SetBG3ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ((REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG3CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT)); +} + +static inline void G2_SetBG3ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ((REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG3ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ((REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG3Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG3Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG3Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG3Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG3ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG3ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2_SetBG3ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2S_SetBG3ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); +} + +static inline void G2_BG0Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2_BG0CNT |= REG_G2_BG0CNT_MOSAIC_MASK; + } + else + { + reg_G2_BG0CNT &= ~REG_G2_BG0CNT_MOSAIC_MASK; + } +} + +static inline void G2S_BG0Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2S_DB_BG0CNT |= REG_G2S_DB_BG0CNT_MOSAIC_MASK; + } + else + { + reg_G2S_DB_BG0CNT &= ~REG_G2S_DB_BG0CNT_MOSAIC_MASK; + } +} + +static inline void G2_BG1Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2_BG1CNT |= REG_G2_BG1CNT_MOSAIC_MASK; + } + else + { + reg_G2_BG1CNT &= ~REG_G2_BG1CNT_MOSAIC_MASK; + } +} + +static inline void G2S_BG1Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2S_DB_BG1CNT |= REG_G2S_DB_BG1CNT_MOSAIC_MASK; + } + else + { + reg_G2S_DB_BG1CNT &= ~REG_G2S_DB_BG1CNT_MOSAIC_MASK; + } +} + +static inline void G2_BG2Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2_BG2CNT |= REG_G2_BG2CNT_MOSAIC_MASK; + } + else + { + reg_G2_BG2CNT &= ~REG_G2_BG2CNT_MOSAIC_MASK; + } +} + +static inline void G2S_BG2Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2S_DB_BG2CNT |= REG_G2S_DB_BG2CNT_MOSAIC_MASK; + } + else + { + reg_G2S_DB_BG2CNT &= ~REG_G2S_DB_BG2CNT_MOSAIC_MASK; + } +} + +static inline void G2_BG3Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2_BG3CNT |= REG_G2_BG3CNT_MOSAIC_MASK; + } + else + { + reg_G2_BG3CNT &= ~REG_G2_BG3CNT_MOSAIC_MASK; + } +} + +static inline void G2S_BG3Mosaic(BOOL enable) +{ + if (enable) + { + reg_G2S_DB_BG3CNT |= REG_G2S_DB_BG3CNT_MOSAIC_MASK; + } + else + { + reg_G2S_DB_BG3CNT &= ~REG_G2S_DB_BG3CNT_MOSAIC_MASK; + } +} + +static inline void G2_SetBG0Priority(int priority) +{ + reg_G2_BG0CNT = (u16)((reg_G2_BG0CNT & ~REG_G2_BG0CNT_PRIORITY_MASK) | (priority << REG_G2_BG0CNT_PRIORITY_SHIFT)); +} + +static inline void G2S_SetBG0Priority(int priority) +{ + reg_G2S_DB_BG0CNT = (u16)((reg_G2S_DB_BG0CNT & ~REG_G2S_DB_BG0CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG0CNT_PRIORITY_SHIFT)); +} + +static inline void G2_SetBG1Priority(int priority) +{ + reg_G2_BG1CNT = (u16)((reg_G2_BG1CNT & ~REG_G2_BG1CNT_PRIORITY_MASK) | (priority << REG_G2_BG1CNT_PRIORITY_SHIFT)); +} + +static inline void G2S_SetBG1Priority(int priority) +{ + reg_G2S_DB_BG1CNT = (u16)((reg_G2S_DB_BG1CNT & ~REG_G2S_DB_BG1CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG1CNT_PRIORITY_SHIFT)); +} + +static inline void G2_SetBG2Priority(int priority) +{ + reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ~REG_G2_BG2CNT_PRIORITY_MASK) | (priority << REG_G2_BG2CNT_PRIORITY_SHIFT)); +} + +static inline void G2S_SetBG2Priority(int priority) +{ + reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ~REG_G2S_DB_BG2CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG2CNT_PRIORITY_SHIFT)); +} + +static inline void G2_SetBG3Priority(int priority) +{ + reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ~REG_G2_BG3CNT_PRIORITY_MASK) | (priority << REG_G2_BG3CNT_PRIORITY_SHIFT)); +} + +static inline void G2S_SetBG3Priority(int priority) +{ + reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ~REG_G2S_DB_BG3CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG3CNT_PRIORITY_SHIFT)); +} + +static inline GXBg01Control G2_GetBG0Control(void) +{ + return *(volatile GXBg01Control *)®_G2_BG0CNT; +} + +static inline GXBg01Control G2S_GetBG0Control(void) +{ + return *(volatile GXBg01Control *)®_G2S_DB_BG0CNT; +} + +static inline GXBg01Control G2_GetBG1Control(void) +{ + return *(volatile GXBg01Control *)®_G2_BG1CNT; +} + +static inline GXBg01Control G2S_GetBG1Control(void) +{ + return *(volatile GXBg01Control *)®_G2S_DB_BG1CNT; +} + +static inline GXBg23ControlText G2_GetBG2ControlText(void) +{ + return *(volatile GXBg23ControlText *)®_G2_BG2CNT; +} + +static inline GXBg23ControlText G2S_GetBG2ControlText(void) +{ + return *(volatile GXBg23ControlText *)®_G2S_DB_BG2CNT; +} + +static inline GXBg23ControlAffine G2_GetBG2ControlAffine(void) +{ + return *(volatile GXBg23ControlAffine *)®_G2_BG2CNT; +} + +static inline GXBg23ControlAffine G2S_GetBG2ControlAffine(void) +{ + return *(volatile GXBg23ControlAffine *)®_G2S_DB_BG2CNT; +} + +static inline GXBg23Control256x16Pltt G2_GetBG2Control256x16Pltt(void) +{ + return *(volatile GXBg23Control256x16Pltt *)®_G2_BG2CNT; +} + +static inline GXBg23Control256x16Pltt G2S_GetBG2Control256x16Pltt(void) +{ + return *(volatile GXBg23Control256x16Pltt *)®_G2S_DB_BG2CNT; +} + +static inline GXBg23Control256Bmp G2_GetBG2Control256Bmp(void) +{ + return *(volatile GXBg23Control256Bmp *)®_G2_BG2CNT; +} + +static inline GXBg23Control256Bmp G2S_GetBG2Control256Bmp(void) +{ + return *(volatile GXBg23Control256Bmp *)®_G2S_DB_BG2CNT; +} + +static inline GXBg23ControlDCBmp G2_GetBG2ControlDCBmp(void) +{ + return *(volatile GXBg23ControlDCBmp *)®_G2_BG2CNT; +} + +static inline GXBg23ControlDCBmp G2S_GetBG2ControlDCBmp(void) +{ + return *(volatile GXBg23ControlDCBmp *)®_G2S_DB_BG2CNT; +} + +static inline GXBg2ControlLargeBmp G2_GetBG2ControlLargeBmp(void) +{ + return *(volatile GXBg2ControlLargeBmp *)®_G2_BG2CNT; +} + +static inline GXBg2ControlLargeBmp G2S_GetBG2ControlLargeBmp(void) +{ + return *(volatile GXBg2ControlLargeBmp *)®_G2S_DB_BG2CNT; +} + +static inline GXBg23ControlText G2_GetBG3ControlText(void) +{ + return *(volatile GXBg23ControlText *)®_G2_BG3CNT; +} + +static inline GXBg23ControlText G2S_GetBG3ControlText(void) +{ + return *(volatile GXBg23ControlText *)®_G2S_DB_BG3CNT; +} + +static inline GXBg23ControlAffine G2_GetBG3ControlAffine(void) +{ + return *(volatile GXBg23ControlAffine *)®_G2_BG3CNT; +} + +static inline GXBg23ControlAffine G2S_GetBG3ControlAffine(void) +{ + return *(volatile GXBg23ControlAffine *)®_G2S_DB_BG3CNT; +} + +static inline GXBg23Control256x16Pltt G2_GetBG3Control256x16Pltt(void) +{ + return *(volatile GXBg23Control256x16Pltt *)®_G2_BG3CNT; +} + +static inline GXBg23Control256x16Pltt G2S_GetBG3Control256x16Pltt(void) +{ + return *(volatile GXBg23Control256x16Pltt *)®_G2S_DB_BG3CNT; +} + +static inline GXBg23Control256Bmp G2_GetBG3Control256Bmp(void) +{ + return *(volatile GXBg23Control256Bmp *)®_G2_BG3CNT; +} + +static inline GXBg23Control256Bmp G2S_GetBG3Control256Bmp(void) +{ + return *(volatile GXBg23Control256Bmp *)®_G2S_DB_BG3CNT; +} + +static inline GXBg23ControlDCBmp G2_GetBG3ControlDCBmp(void) +{ + return *(volatile GXBg23ControlDCBmp *)®_G2_BG3CNT; +} + +static inline GXBg23ControlDCBmp G2S_GetBG3ControlDCBmp(void) +{ + return *(volatile GXBg23ControlDCBmp *)®_G2S_DB_BG3CNT; +} + +#endif //GUARD_GX_BGCNT_H diff --git a/arm9/lib/NitroSDK/include/GX_dma.h b/arm9/lib/NitroSDK/include/GX_dma.h new file mode 100644 index 00000000..98f6a4a2 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_dma.h @@ -0,0 +1,53 @@ +#ifndef GUARD_GX_DMA_H +#define GUARD_GX_DMA_H + +#define GX_DMA_NOT_USE -1 +#define GX_CPU_FASTER32_SIZE 0x30 +#define GX_CPU_FASTER16_SIZE 0x1C + +static inline void GXi_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) +{ + if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER32_SIZE) + { + MI_DmaCopy32(dmaNo, src, dest, size); + } + else + { + MIi_CpuCopy32(src, dest, size); + } +} + +static inline void GXi_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) +{ + if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER16_SIZE) + { + MI_DmaCopy16(dmaNo, src, dest, size); + } + else + { + MIi_CpuCopy16(src, dest, size); + } +} + +static inline void GXi_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, + MIDmaCallback callback, void *arg) +{ + if (dmaNo != GX_DMA_NOT_USE) + { + MI_DmaCopy32Async(dmaNo, src, dest, size, callback, arg); + } + else + { + MIi_CpuCopy32(src, dest, size); + } +} + +static inline void GXi_WaitDma(u32 dmaNo) +{ + if (dmaNo != GX_DMA_NOT_USE) + { + MI_WaitDma(dmaNo); + } +} + +#endif //GUARD_GX_DMA_H diff --git a/arm9/lib/NitroSDK/include/GX_g2.h b/arm9/lib/NitroSDK/include/GX_g2.h new file mode 100644 index 00000000..97fa0e10 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g2.h @@ -0,0 +1,126 @@ +#ifndef GUARD_GX_G2_H +#define GUARD_GX_G2_H + +#include "fx.h" +#include "registers.h" + +void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); +void G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); + +typedef struct +{ + u8 planeMask:5; + u8 effect:1; + u8 _reserve:2; +} + GXWndPlane; + +typedef enum +{ + GX_WND_PLANEMASK_NONE = 0x0000, + GX_WND_PLANEMASK_BG0 = 0x0001, + GX_WND_PLANEMASK_BG1 = 0x0002, + GX_WND_PLANEMASK_BG2 = 0x0004, + GX_WND_PLANEMASK_BG3 = 0x0008, + GX_WND_PLANEMASK_OBJ = 0x0010 +} + GXWndPlaneMask; + +static inline void G2_SetWndOutsidePlane(int wnd, BOOL effect) +{ + u32 tmp; + + tmp = ((reg_G2_WINOUT & ~REG_G2_WINOUT_WINOUT_MASK) | ((u32)wnd << REG_G2_WINOUT_WINOUT_SHIFT)); + + if (effect) + { + tmp |= (0x20 << REG_G2_WINOUT_WINOUT_SHIFT); // EFCT + } + + reg_G2_WINOUT = (u16)tmp; +} + +static inline void G2_SetBG0Offset(int hOffset, int vOffset) +{ + reg_G2_BG0OFS = (u32)(((hOffset << REG_G2_BG0OFS_HOFFSET_SHIFT) & REG_G2_BG0OFS_HOFFSET_MASK) | + ((vOffset << REG_G2_BG0OFS_VOFFSET_SHIFT) & REG_G2_BG0OFS_VOFFSET_MASK)); +} + +static inline void G2_SetBG1Offset(int hOffset, int vOffset) +{ + reg_G2_BG1OFS = (u32)(((hOffset << REG_G2_BG1OFS_HOFFSET_SHIFT) & REG_G2_BG1OFS_HOFFSET_MASK) | + ((vOffset << REG_G2_BG1OFS_VOFFSET_SHIFT) & REG_G2_BG1OFS_VOFFSET_MASK)); +} + +static inline void G2_SetBG2Offset(int hOffset, int vOffset) +{ + reg_G2_BG2OFS = (u32)(((hOffset << REG_G2_BG2OFS_HOFFSET_SHIFT) & REG_G2_BG2OFS_HOFFSET_MASK) | + ((vOffset << REG_G2_BG2OFS_VOFFSET_SHIFT) & REG_G2_BG2OFS_VOFFSET_MASK)); +} + +static inline void G2_SetBG3Offset(int hOffset, int vOffset) +{ + reg_G2_BG3OFS = (u32)(((hOffset << REG_G2_BG3OFS_HOFFSET_SHIFT) & REG_G2_BG3OFS_HOFFSET_MASK) | + ((vOffset << REG_G2_BG3OFS_VOFFSET_SHIFT) & REG_G2_BG3OFS_VOFFSET_MASK)); +} + +static inline void G2S_SetBG0Offset(int hOffset, int vOffset) +{ + reg_G2S_DB_BG0OFS = (u32)(((hOffset << REG_G2S_DB_BG0OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG0OFS_HOFFSET_MASK) | + ((vOffset << REG_G2S_DB_BG0OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG0OFS_VOFFSET_MASK)); +} + +static inline void G2S_SetBG1Offset(int hOffset, int vOffset) +{ + reg_G2S_DB_BG1OFS = (u32)(((hOffset << REG_G2S_DB_BG1OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG1OFS_HOFFSET_MASK) | + ((vOffset << REG_G2S_DB_BG1OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG1OFS_VOFFSET_MASK)); +} + +static inline void G2S_SetBG2Offset(int hOffset, int vOffset) +{ + reg_G2S_DB_BG2OFS = (u32)(((hOffset << REG_G2S_DB_BG2OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG2OFS_HOFFSET_MASK) | + ((vOffset << REG_G2S_DB_BG2OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG2OFS_VOFFSET_MASK)); +} + +static inline void G2S_SetBG3Offset(int hOffset, int vOffset) +{ + reg_G2S_DB_BG3OFS = (u32)(((hOffset << REG_G2S_DB_BG3OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG3OFS_HOFFSET_MASK) | + ((vOffset << REG_G2S_DB_BG3OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG3OFS_VOFFSET_MASK)); +} + +static inline void G2_SetBG2Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) +{ + G2x_SetBGyAffine_((u32)®_G2_BG2PA, mtx, centerX, centerY, x1, y1); +} + +static inline void G2_SetBG3Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) +{ + G2x_SetBGyAffine_((u32)®_G2_BG3PA, mtx, centerX, centerY, x1, y1); +} + +static inline void G2S_SetBG2Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) +{ + G2x_SetBGyAffine_((u32)®_G2S_DB_BG2PA, mtx, centerX, centerY, x1, y1); +} + +static inline void G2S_SetBG3Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) +{ + G2x_SetBGyAffine_((u32)®_G2S_DB_BG3PA, mtx, centerX, centerY, x1, y1); +} + +static inline void G2_BlendNone(void) +{ + reg_G2_BLDCNT = 0; +} + +static inline void G2S_BlendNone(void) +{ + reg_G2S_DB_BLDCNT = 0; +} + +//The g2 and g2_oam headers contain a lot of inline functions and enums that may want to be ported over at some point + +#endif //GUARD_GX_G2_H diff --git a/arm9/lib/NitroSDK/include/GX_g3.h b/arm9/lib/NitroSDK/include/GX_g3.h new file mode 100644 index 00000000..765ecc64 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g3.h @@ -0,0 +1,184 @@ +#ifndef GUARD_GX_G3_H +#define GUARD_GX_G3_H + +struct GXDLInfo +{ + u8 *curr_cmd; + u32 *curr_param; + u32 *bottom; + u32 length; + BOOL param0_cmd_flg; +}; + +void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct GXDLInfo *displaylist); + +typedef enum +{ + GX_MTXMODE_PROJECTION = 0, + GX_MTXMODE_POSITION = 1, + GX_MTXMODE_POSITION_VECTOR = 2, + GX_MTXMODE_TEXTURE = 3 +} +GXMtxMode; + +typedef enum +{ + GX_BEGIN_TRIANGLES = 0, + GX_BEGIN_QUADS = 1, + GX_BEGIN_TRIANGLE_STRIP = 2, + GX_BEGIN_QUAD_STRIP = 3 +} +GXBegin; + +typedef enum +{ + GX_SORTMODE_AUTO = 0, + GX_SORTMODE_MANUAL = 1 +} +GXSortMode; + +typedef enum +{ + GX_BUFFERMODE_Z = 0, + GX_BUFFERMODE_W = 1 +} +GXBufferMode; + +typedef enum +{ + GX_LIGHTMASK_NONE = 0, + GX_LIGHTMASK_0 = 1, + GX_LIGHTMASK_1 = 2, + GX_LIGHTMASK_01 = 3, + GX_LIGHTMASK_2 = 4, + GX_LIGHTMASK_02 = 5, + GX_LIGHTMASK_12 = 6, + GX_LIGHTMASK_012 = 7, + GX_LIGHTMASK_3 = 8, + GX_LIGHTMASK_03 = 9, + GX_LIGHTMASK_13 = 10, + GX_LIGHTMASK_013 = 11, + GX_LIGHTMASK_23 = 12, + GX_LIGHTMASK_023 = 13, + GX_LIGHTMASK_123 = 14, + GX_LIGHTMASK_0123 = 15 +} +GXLightMask; + +typedef enum +{ + GX_POLYGONMODE_MODULATE = 0, + GX_POLYGONMODE_DECAL = 1, + GX_POLYGONMODE_TOON = 2, + GX_POLYGONMODE_SHADOW = 3 +} +GXPolygonMode; + +typedef enum +{ + GX_CULL_ALL = 0, + GX_CULL_FRONT = 1, + GX_CULL_BACK = 2, + GX_CULL_NONE = 3 +} +GXCull; + +typedef enum +{ + GX_TEXREPEAT_NONE = 0, + GX_TEXREPEAT_S = 1, + GX_TEXREPEAT_T = 2, + GX_TEXREPEAT_ST = 3 +} +GXTexRepeat; + +typedef enum +{ + GX_TEXFLIP_NONE = 0, + GX_TEXFLIP_S = 1, + GX_TEXFLIP_T = 2, + GX_TEXFLIP_ST = 3 +} +GXTexFlip; + +typedef enum +{ + GX_TEXSIZE_S8 = 0, + GX_TEXSIZE_S16 = 1, + GX_TEXSIZE_S32 = 2, + GX_TEXSIZE_S64 = 3, + GX_TEXSIZE_S128 = 4, + GX_TEXSIZE_S256 = 5, + GX_TEXSIZE_S512 = 6, + GX_TEXSIZE_S1024 = 7 +} +GXTexSizeS; + +typedef enum +{ + GX_TEXSIZE_T8 = 0, + GX_TEXSIZE_T16 = 1, + GX_TEXSIZE_T32 = 2, + GX_TEXSIZE_T64 = 3, + GX_TEXSIZE_T128 = 4, + GX_TEXSIZE_T256 = 5, + GX_TEXSIZE_T512 = 6, + GX_TEXSIZE_T1024 = 7 +} +GXTexSizeT; + +typedef enum +{ + GX_TEXFMT_NONE = 0, + GX_TEXFMT_A3I5 = 1, + GX_TEXFMT_PLTT4 = 2, + GX_TEXFMT_PLTT16 = 3, + GX_TEXFMT_PLTT256 = 4, + GX_TEXFMT_COMP4x4 = 5, + GX_TEXFMT_A5I3 = 6, + GX_TEXFMT_DIRECT = 7 +} +GXTexFmt; + +typedef enum +{ + GX_TEXPLTTCOLOR0_USE = 0, + GX_TEXPLTTCOLOR0_TRNS = 1 +} +GXTexPlttColor0; + +typedef enum +{ + GX_TEXGEN_NONE = 0, + GX_TEXGEN_TEXCOORD = 1, + GX_TEXGEN_NORMAL = 2, + GX_TEXGEN_VERTEX = 3 +} +GXTexGen; + +typedef enum +{ + GX_LIGHTID_0 = 0, + GX_LIGHTID_1 = 1, + GX_LIGHTID_2 = 2, + GX_LIGHTID_3 = 3 +} +GXLightId; + +typedef union +{ + u32 val[3]; + struct + { + fx16 x; + fx16 y; + fx16 z; + fx16 width; + fx16 height; + fx16 depth; + }; +} +GXBoxTestParam; + +#endif //GUARD_GX_G3_H diff --git a/arm9/lib/NitroSDK/include/GX_g3_util.h b/arm9/lib/NitroSDK/include/GX_g3_util.h new file mode 100644 index 00000000..a9bc4c17 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g3_util.h @@ -0,0 +1,11 @@ +#ifndef GUARD_GX_G3_UTIL_H +#define GUARD_GX_G3_UTIL_H + +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); +void G3_RotX(fx32 sinphi, fx32 cosphi); +void G3_RotY(fx32 sinphi, fx32 cosphi); +void G3_RotZ(fx32 sinphi, fx32 cosphi); + +#endif //GUARD_GX_G3_UTIL_H diff --git a/arm9/lib/NitroSDK/include/GX_g3b.h b/arm9/lib/NitroSDK/include/GX_g3b.h new file mode 100644 index 00000000..d299ea34 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g3b.h @@ -0,0 +1,21 @@ +#ifndef GUARD_GX_G3B_H +#define GUARD_GX_G3B_H + +#include "GX_g3.h" + +void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct GXDLInfo *displaylist); +void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); +void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); +void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct GXDLInfo * displaylist, u32 type); +void G3B_End(struct GXDLInfo * displaylist); + +#endif //GUARD_GX_G3B_H diff --git a/arm9/lib/NitroSDK/include/GX_g3imm.h b/arm9/lib/NitroSDK/include/GX_g3imm.h new file mode 100644 index 00000000..f811dc68 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g3imm.h @@ -0,0 +1,10 @@ +#ifndef GUARD_GX_G3IMM_H +#define GUARD_GX_G3IMM_H + +#include "fx.h" + +void G3_LoadMtx43(struct Mtx43 *mtx); +void G3_MultMtx43(struct Mtx43 *mtx); +void G3_MultMtx33(struct Mtx33 *mtx); + +#endif //GUARD_GX_G3IMM_H diff --git a/arm9/lib/NitroSDK/include/GX_g3x.h b/arm9/lib/NitroSDK/include/GX_g3x.h new file mode 100644 index 00000000..aa65a190 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_g3x.h @@ -0,0 +1,86 @@ +#ifndef GUARD_GX_G3X_H +#define GUARD_GX_G3X_H + +#include "fx.h" + +#include "registers.h" + +void GXi_NopClearFifo128_(void *reg); +void G3X_Init(); +void G3X_ResetMtxStack(); +void G3X_ClearFifo(); +void G3X_InitMtxStack(); +void G3X_ResetMtxStack_2(); +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); +u32 G3X_GetClipMtx(struct Mtx44 *dst); +u32 G3X_GetVectorMtx(struct Mtx33 *dst); +void G3X_SetEdgeColorTable(void *tbl_ptr); +void G3X_SetFogTable(void *tbl_ptr); +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); +void G3X_InitTable(); +u32 G3X_GetMtxStackLevelPV(u32 *level); +u32 G3X_GetMtxStackLevelPJ(u32 *level); +u32 G3X_GetBoxTestResult(u32 *result); +void G3X_SetHOffset(u32 offset); + +typedef enum +{ + GX_SHADING_TOON = 0, + GX_SHADING_HIGHLIGHT = 1 +} +GXShading; + +typedef enum +{ + GX_FOGBLEND_COLOR_ALPHA = 0, + GX_FOGBLEND_ALPHA = 1 +} +GXFogBlend; + +typedef enum +{ + GX_FOGSLOPE_0x8000 = 0, + GX_FOGSLOPE_0x4000 = 1, + GX_FOGSLOPE_0x2000 = 2, + GX_FOGSLOPE_0x1000 = 3, + GX_FOGSLOPE_0x0800 = 4, + GX_FOGSLOPE_0x0400 = 5, + GX_FOGSLOPE_0x0200 = 6, + GX_FOGSLOPE_0x0100 = 7, + GX_FOGSLOPE_0x0080 = 8, + GX_FOGSLOPE_0x0040 = 9, + GX_FOGSLOPE_0x0020 = 10 +} +GXFogSlope; + +typedef enum +{ + GX_FIFOINTR_COND_DISABLE = 0, + GX_FIFOINTR_COND_UNDERHALF = 1, + GX_FIFOINTR_COND_EMPTY = 2 +} +GXFifoIntrCond; + +typedef enum +{ + GX_FIFOSTAT_EMPTY = 6, + GX_FIFOSTAT_UNDERHALF = 2, + GX_FIFOSTAT_OVERHALF = 0, + GX_FIFOSTAT_FULL = 1 +} +GXFifoStat; + +static inline void G3X_SetFifoIntrCond(GXFifoIntrCond cond) +{ + reg_G3X_GXSTAT = ((reg_G3X_GXSTAT & ~0xc0000000) | + (cond << 30)); +} + +static inline GXFifoStat G3X_GetCommandFifoStatus(void) +{ + return (GXFifoStat)((reg_G3X_GXSTAT & (0x01000000 | + 0x02000000 | + 0x04000000)) >> 24); +} + +#endif //GUARD_GX_G3X_H diff --git a/arm9/lib/NitroSDK/include/GX_load2d.h b/arm9/lib/NitroSDK/include/GX_load2d.h new file mode 100644 index 00000000..3c9fb5cb --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_load2d.h @@ -0,0 +1,41 @@ +#ifndef GUARD_GX_LOAD2D_H +#define GUARD_GX_LOAD2D_H + +void GX_LoadBGPltt(void *src, u32 offset, u32 size); +void GXS_LoadBGPltt(void *src, u32 offset, u32 size); +void GX_LoadOBJPltt(void *src, u32 offset, u32 size); +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); +void GX_LoadOAM(void *src, u32 offset, u32 size); +void GXS_LoadOAM(void *src, u32 offset, u32 size); +void GX_LoadOBJ(void *src, u32 offset, u32 size); +void GXS_LoadOBJ(void *src, u32 offset, u32 size); +void GX_LoadBG0Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); +void GX_LoadBG1Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); +void GX_LoadBG2Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); +void GX_LoadBG3Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); +void GX_LoadBG0Char(void *src, u32 offset, u32 size); +void GXS_LoadBG0Char(void *src, u32 offset, u32 size); +void GX_LoadBG1Char(void *src, u32 offset, u32 size); +void GXS_LoadBG1Char(void *src, u32 offset, u32 size); +void GX_LoadBG2Char(void *src, u32 offset, u32 size); +void GXS_LoadBG2Char(void *src, u32 offset, u32 size); +void GX_LoadBG3Char(void *src, u32 offset, u32 size); +void GXS_LoadBG3Char(void *src, u32 offset, u32 size); +void GX_BeginLoadBGExtPltt(); +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadBGExtPltt(); +void GX_BeginLoadOBJExtPltt(); +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadOBJExtPltt(); +void GXS_BeginLoadBGExtPltt(); +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadBGExtPltt(); +void GXS_BeginLoadOBJExtPltt(); +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadOBJExtPltt(); + +#endif //GUARD_GX_LOAD2D_H diff --git a/arm9/lib/NitroSDK/include/GX_load3d.h b/arm9/lib/NitroSDK/include/GX_load3d.h new file mode 100644 index 00000000..09fd296a --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_load3d.h @@ -0,0 +1,15 @@ +#ifndef GUARD_GX_LOAD3D_H +#define GUARD_GX_LOAD3D_H + +void GX_BeginLoadTex(); +void GX_LoadTex(void *src, u32 offset, u32 size); +void GX_EndLoadTex(); +void GX_BeginLoadTexPltt(); +void GX_LoadTexPltt(void *src, u32 offset, u32 size); +void GX_EndLoadTexPltt(); +void GX_BeginLoadClearImage(); +void GX_LoadClearImageColor(void *src, u32 size); +void GX_LoadClearImageDepth(void *src, u32 size); +void GX_EndLoadClearImage(); + +#endif //GUARD_GX_LOAD3D_H diff --git a/arm9/lib/NitroSDK/include/GX_state.h b/arm9/lib/NitroSDK/include/GX_state.h new file mode 100644 index 00000000..c94b6c07 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_state.h @@ -0,0 +1,24 @@ +#ifndef GUARD_GX_STATE_H +#define GUARD_GX_STATE_H + +struct GX_State +{ + u16 lcdc; + u16 bg; + u16 obj; + u16 arm7; + u16 tex; + u16 texPltt; + u16 clrImg; + u16 bgExtPltt; + u16 objExtPltt; + + u16 sub_bg; + u16 sub_obj; + u16 sub_bgExtPltt; + u16 sub_objExtPltt; +}; + +void GX_InitGXState(); + +#endif //GUARD_GX_STATE_H diff --git a/arm9/lib/NitroSDK/include/GX_struct_2d.h b/arm9/lib/NitroSDK/include/GX_struct_2d.h new file mode 100644 index 00000000..3b544927 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_struct_2d.h @@ -0,0 +1,243 @@ +#ifndef GUARD_GX_STRUCT_2D_H +#define GUARD_GX_STRUCT_2D_H + +typedef u16 GXScrFmtText; +#define GX_SCRFMT_TEXT_CHARNAME_SHIFT (0) +#define GX_SCRFMT_TEXT_CHARNAME_MASK (0x03ff) +#define GX_SCRFMT_TEXT_HF_SHIFT (10) +#define GX_SCRFMT_TEXT_HF_MASK (0x0400) +#define GX_SCRFMT_TEXT_VF_SHIFT (11) +#define GX_SCRFMT_TEXT_VF_MASK (0x0800) +#define GX_SCRFMT_TEXT_COLORPLTT_SHIFT (12) +#define GX_SCRFMT_TEXT_COLORPLTT_MASK (0xf000) +#define GX_SCRFMT_TEXT(pltt, vf, hf, name) \ + ((u16)(((name) << GX_SCRFMT_TEXT_CHARNAME_SHIFT) | \ + ((hf) << GX_SCRFMT_TEXT_HF_SHIFT) | \ + ((vf) << GX_SCRFMT_TEXT_VF_SHIFT) | \ + ((pltt) << GX_SCRFMT_TEXT_COLORPLTT_SHIFT))) + +typedef u8 GXScrFmtAffine; +#define GX_SCRFMT_AFFINE_CHARNAME_SHIFT (0) +#define GX_SCRFMT_AFFINE_CHARNAME_MASK (0xff) + +typedef u8 GXScrFmt256Bmp; +#define GX_SCRFMT_256BMP_COLORNO_SHIFT (0) +#define GX_SCRFMT_256BMP_COLORNO_MASK (0xff) + +typedef union +{ + u32 data32[8]; + u16 data16[16]; + u8 data8[32]; +} +GXCharFmt16; + +typedef union +{ + u32 data32[16]; + u16 data16[32]; + u8 data8[64]; +} +GXCharFmt256; + +typedef union +{ + u16 data16[16]; + u32 data32[8]; + GXRgb rgb[16]; +} +GXBGPltt16; + +typedef GXBGPltt16 GXOBJPltt16; + +typedef union +{ + u16 data16[256]; + u32 data32[128]; + GXRgb rgb[256]; +} +GXBGPltt256; + +typedef GXBGPltt256 GXOBJPltt256; + +typedef union +{ + u16 data16[32 * 32]; + u32 data32[32 * 32 / 2]; + GXScrFmtText scr[32][32]; +} +GXScrText32x32; + +typedef union +{ + u16 data16[64 * 32]; + u32 data32[64 * 32 / 2]; + GXScrFmtText scr[64][32]; +} +GXScrText64x32; + +typedef union +{ + // 4K bytes + u16 data16[32 * 64]; + u32 data32[32 * 64 / 2]; + GXScrFmtText scr[32][64]; +} +GXScrText32x64; + +typedef union +{ + u16 data16[64 * 64]; + u32 data32[64 * 64 / 2]; + GXScrFmtText scr[64][64]; +} +GXScrText64x64; + +typedef union +{ + u8 data8[16 * 16]; + u32 data32[16 * 16 / 4]; + GXScrFmtAffine scr[16][16]; +} +GXScrAffine16x16; + +typedef union +{ + u8 data8[32 * 32]; + u32 data32[32 * 32 / 4]; + GXScrFmtAffine scr[32][32]; +} +GXScrAffine32x32; + +typedef union +{ + u8 data8[64 * 64]; + u32 data32[64 * 64 / 4]; + GXScrFmtAffine scr[64][64]; +} +GXScrAffine64x64; + +typedef union +{ + u8 data8[128 * 128]; + u32 data32[128 * 128 / 4]; + GXScrFmtAffine scr[128][128]; +} +GXScrAffine128x128; + +typedef union +{ + u8 data8[128 * 128]; + u32 data32[128 * 128 / 4]; + GXScrFmt256Bmp scr[128][128]; +} +GXScr256Bmp128x128; + +typedef union +{ + u8 data8[256 * 256]; + u32 data32[256 * 256 / 4]; + GXScrFmt256Bmp scr[256][256]; +} +GXScr256Bmp256x256; + +typedef union +{ + u8 data8[512 * 256]; + u32 data32[512 * 256 / 4]; + GXScrFmt256Bmp scr[512][256]; +} +GXScr256Bmp512x256; + +typedef union +{ + u8 data8[512 * 512]; + u32 data32[512 * 512 / 4]; + GXScrFmt256Bmp scr[512][512]; +} +GXScr256Bmp512x512; + +typedef union +{ + u16 data16[128 * 128]; + u32 data32[128 * 128 / 2]; + GXRgba scr[128][128]; +} +GXScrDCBmp128x128; + +typedef union +{ + u16 data16[256 * 256]; + u32 data32[256 * 256 / 2]; + GXRgba scr[256][256]; +} +GXScrDCBmp256x256; + +typedef union +{ + u16 data16[512 * 256]; + u32 data32[512 * 256 / 2]; + GXRgba scr[512][256]; +} +GXScrDCBmp512x256; + +typedef union +{ + u16 data16[512 * 512]; + u32 data32[512 * 512 / 2]; + GXRgba scr[512][512]; +} +GXScrDCBmp512x512; + +typedef struct +{ + GXCharFmt16 ch[1024]; +} +GXCharBGText16; + +typedef struct +{ + GXCharFmt256 ch[1024]; +} +GXCharBGText256; + +typedef struct +{ + GXCharFmt256 ch[256]; +} +GXCharBGAffine256; + +typedef union +{ + GXBGPltt256 pltt256; + GXBGPltt16 pltt16[16]; +} +GXBGStdPlttData; + +typedef union +{ + GXOBJPltt256 pltt256; + GXOBJPltt16 pltt16[16]; +} +GXOBJStdPlttData; + +typedef struct +{ + GXBGStdPlttData bgPltt; + GXOBJStdPlttData objPltt; +} +GXStdPlttData; + +typedef struct +{ + GXBGPltt256 pltt256[16]; +} +GXBGExtPlttData; + +typedef struct +{ + GXOBJPltt256 pltt256[16]; +} +GXOBJExtPlttData; + +#endif //GUARD_GX_STRUCT_2D_H diff --git a/arm9/lib/NitroSDK/include/GX_vramcnt.h b/arm9/lib/NitroSDK/include/GX_vramcnt.h new file mode 100644 index 00000000..3b82d28c --- /dev/null +++ b/arm9/lib/NitroSDK/include/GX_vramcnt.h @@ -0,0 +1,57 @@ +#ifndef GUARD_GX_VRAMCNT_H +#define GUARD_GX_VRAMCNT_H + +//some of the symbols don't match what the function does +void GX_VRAMCNT_SetLCDC_(u32 mask); +void GX_SetBankForBG(s32 bg); +void GX_SetBankForOBJ(s32 obj); +void GX_SetBankForBGExtPltt(s32 bgextpltt); +void GX_SetBankForOBJExtPltt(s32 objextpltt); +void GX_SetBankForTex(s32 tex); +void GX_SetBankForTexPltt(s32 texpltt); +void GX_SetBankForClearImage(s32 clearimage); +void GX_SetBankForARM7(s32 arm7); +void GX_SetBankForLCDC(s32 lcdc); +void GX_SetBankForSubBG(s32 subbg); +void GX_SetBankForSubOBJ(s32 subobj); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); +u32 resetBankForX_(u16 *ptr); +u32 GX_ResetBankForBG(); +u32 GX_ResetBankForOBJ(); +u32 GX_ResetBankForBGExtPltt(); +u32 GX_ResetBankForOBJExtPltt(); +u32 GX_ResetBankForTex(); +u32 GX_ResetBankForTexPltt(); +u32 GX_ResetBankForClearImage(); +u32 GX_ResetBankForSubBG(); +u32 GX_ResetBankForSubOBJ(); +u32 GX_ResetBankForSubBGExtPltt(); +u32 GX_ResetBankForSubOBJExtPltt(); +u32 disableBankForX_(u16 *ptr); +u32 GX_DisableBankForBG(); +u32 GX_DisableBankForOBJ(); +u32 GX_DisableBankForBGExtPltt(); +u32 GX_DisableBankForOBJExtPltt(); +u32 GX_DisableBankForTex(); +u32 GX_DisableBankForTexPltt(); +u32 GX_DisableBankForClearImage(); +u32 GX_DisableBankForARM7(); +u32 GX_DisableBankForLCDC(); +u32 GX_DisableBankForSubBG(); +u32 GX_DisableBankForSubOBJ(); +u32 GX_DisableBankForSubBGExtPltt(); +u32 GX_DisableBankForSubOBJExtPltt(); +u32 GX_GetBankForBG(); +u32 GX_GetBankForOBJ(); +u32 GX_GetBankForBGExtPltt(); +u32 GX_GetBankForOBJExtPltt(); +u32 GX_GetBankForTex(); +u32 GX_GetBankForTexPltt(); +u32 GX_GetBankForLCDC(); +u32 GX_GetBankForSubBG(); +u32 GX_GetBankForSubOBJ(); +u32 GX_GetBankForSubBGExtPltt(); +u32 GX_GetBankForSubOBJExtPltt(); + +#endif //GUARD_GX_VRAMCNT_H diff --git a/arm9/lib/NitroSDK/include/GXcommon.h b/arm9/lib/NitroSDK/include/GXcommon.h new file mode 100644 index 00000000..a83f4384 --- /dev/null +++ b/arm9/lib/NitroSDK/include/GXcommon.h @@ -0,0 +1,29 @@ +#ifndef GUARD_GXCOMMON_H +#define GUARD_GXCOMMON_H + +typedef u16 GXRgb; +#define GXRGB_ASSERT(gxrgb) SDK_ASSERT(((gxrgb) & 0x8000) == 0) +#define GX_RGB_R_SHIFT (0) +#define GX_RGB_R_MASK (0x001f) +#define GX_RGB_G_SHIFT (5) +#define GX_RGB_G_MASK (0x03e0) +#define GX_RGB_B_SHIFT (10) +#define GX_RGB_B_MASK (0x7c00) +#define GX_RGB(r, g, b) ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \ + ((g) << GX_RGB_G_SHIFT) | \ + ((b) << GX_RGB_B_SHIFT))) + +typedef u16 GXRgba; +#define GX_RGBA_R_SHIFT (0) +#define GX_RGBA_R_MASK (0x001f) +#define GX_RGBA_G_SHIFT (5) +#define GX_RGBA_G_MASK (0x03e0) +#define GX_RGBA_B_SHIFT (10) +#define GX_RGBA_B_MASK (0x7c00) +#define GX_RGBA_A_SHIFT (15) +#define GX_RGBA_A_MASK (0x8000) +#define GX_RGBA(r, g, b, a) ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \ + ((g) << GX_RGBA_G_SHIFT) | \ + ((b) << GX_RGBA_B_SHIFT) | \ + ((a) << GX_RGBA_A_SHIFT))) +#endif //GUARD_GXCOMMON_H diff --git a/arm9/lib/NitroSDK/include/MATH_crc.h b/arm9/lib/NitroSDK/include/MATH_crc.h new file mode 100644 index 00000000..4f06fa75 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MATH_crc.h @@ -0,0 +1,45 @@ +#ifndef GUARD_MATH_CRC_H +#define GUARD_MATH_CRC_H + +#include "nitro/types.h" + +typedef u8 MATHCRC8Context; +typedef u16 MATHCRC16Context; +typedef u32 MATHCRC32Context; + +#define MATH_CRC16_CCITT_POLY 0x1021 + +struct MATHCRC8Table { + u8 table[256]; +}; + +struct MATHCRC16Table { + u16 table[256]; +}; + +struct MATHCRC32Table { + u32 table[256]; +}; + +u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength); +void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length); +u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength); +void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength); +void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength); +void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); +void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly); +void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly); +void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly); +void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); +void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly); + +static inline void MATH_CRC16InitTable(struct MATHCRC16Table * table) +{ + MATHi_CRC16InitTable(table, MATH_CRC16_CCITT_POLY); +} + +#endif diff --git a/arm9/lib/NitroSDK/include/MATH_dgt.h b/arm9/lib/NitroSDK/include/MATH_dgt.h new file mode 100644 index 00000000..140b4f98 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MATH_dgt.h @@ -0,0 +1,45 @@ +#ifndef GUARD_MATH_DGT_H +#define GUARD_MATH_DGT_H + +#include "dgt.h" +#include "nitro/types.h" + +typedef struct DGTHash1Context MATHMD5Context; +typedef struct DGTHash2Context MATHSHA1Context; + +static inline void MATH_MD5Init(MATHMD5Context *context) { + DGT_Hash1Reset(context); +} + +static inline void MATH_MD5Update(MATHMD5Context *context, const void *input, u32 length) { + DGT_Hash1SetSource(context, (u8*)input, length); +} + +static inline void MATH_MD5GetHash(MATHMD5Context *context, void *digest) { + DGT_Hash1GetDigest_R((u8*)digest, context); +} + +static inline void MATH_MD5GetDigest(MATHMD5Context *context, void *digest) { + MATH_MD5GetHash(context, digest); +} + +static inline void MATH_SHA1Init(MATHSHA1Context *context) { + DGT_Hash2Reset(context); +} + +static inline void MATH_SHA1Update(MATHSHA1Context *context, const void *input, u32 length) { + DGT_Hash2SetSource(context, (u8*)input, length); +} + +static inline void MATH_SHA1GetHash(MATHSHA1Context *context, void *digest) { + DGT_Hash2GetDigest(context, (u8*)digest); +} + +static inline void MATH_SHA1GetDigest(MATHSHA1Context *context, void *digest) { + MATH_SHA1GetHash(context, digest); +} + +void MATH_CalcMD5(void *digest, const void *data, u32 dataLength); +void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength); + +#endif diff --git a/arm9/lib/NitroSDK/include/MATH_pop.h b/arm9/lib/NitroSDK/include/MATH_pop.h new file mode 100644 index 00000000..29a42b22 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MATH_pop.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MATH_POP_H +#define GUARD_MATH_POP_H + +#include "nitro/types.h" + +u8 MATH_CountPopulation(u32); + +#endif diff --git a/arm9/lib/NitroSDK/include/MB_mb.h b/arm9/lib/NitroSDK/include/MB_mb.h new file mode 100644 index 00000000..5bccaf8b --- /dev/null +++ b/arm9/lib/NitroSDK/include/MB_mb.h @@ -0,0 +1,41 @@ +#ifndef POKEDIAMOND_MB_MB_H +#define POKEDIAMOND_MB_MB_H + +#include "consts.h" + +#define MB_TYPE_ILLEGAL 0 +#define MB_TYPE_NORMAL 1 +#define MB_TYPE_MULTIBOOT 2 + +typedef struct { + u16 length; + u16 rssi; + u16 bssid[3]; + u16 ssidLength; + u8 ssid[32]; + u16 capaInfo; + struct { + u16 basic; + u16 support; + } rateSet; + u16 beaconperiod; + u16 dtimPeriod; + u16 channel; + u16 cfpPeriod; + u16 cfpMaxDuration; +} MBParentBssDesc; + +typedef struct { + u16 boot_type; + MBParentBssDesc parent_bss_desc; +} MBParam; + +static inline const MBParam *MB_GetMultiBootParam() { + return (const MBParam *)HW_WM_BOOT_BUF; +} + +static inline BOOL MB_IsMultiBootChild() { + return MB_GetMultiBootParam()->boot_type == MB_TYPE_MULTIBOOT; +} + +#endif //POKEDIAMOND_MB_MB_H diff --git a/arm9/lib/NitroSDK/include/MI_byteAccess.h b/arm9/lib/NitroSDK/include/MI_byteAccess.h new file mode 100644 index 00000000..cad4d518 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_byteAccess.h @@ -0,0 +1,14 @@ +#ifndef NITRO_MI_BYTEACCESS_H_ +#define NITRO_MI_BYTEACCESS_H_ + +static inline u8 MI_ReadByte(const void *address) +{ + return *(u8 *)address; +} + +static inline void MI_WriteByte(void *address, u8 value) +{ + *(u8 *)address = value; +} + +#endif //NITRO_MI_BYTEACCESS_H_ diff --git a/arm9/lib/NitroSDK/include/MI_dma.h b/arm9/lib/NitroSDK/include/MI_dma.h new file mode 100644 index 00000000..99d1cb84 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_dma.h @@ -0,0 +1,80 @@ +#ifndef POKEDIAMOND_ARM9_MI_DMA_H +#define POKEDIAMOND_ARM9_MI_DMA_H + +#include "nitro/MI_dma_shared.h" +#include "consts.h" +#include "OS_system.h" + +typedef void (*MIDmaCallback)(void *); + +#define MI_DMA_MAX_NUM 3 + +#define REG_ADDR_DMA0CNT 0x40000b8 +#define REG_ADDR_DMA0_CLR_DATA 0x40000e0 + +#define MI_CNT_CLEAR32(size) (0x85000000 | ((size)/4)) +#define MI_CNT_CLEAR32_IF(size) (0xc5000000 | ((size)/4)) +#define MI_CNT_COPY32(size) (0x84000000 | ((size)/4)) +#define MI_CNT_COPY32_IF(size) (0xc4000000 | ((size)/4)) +#define MI_CNT_COPY16(size) (0x80000000 | ((size)/2)) + +#define MI_DMA_SRC_FIX (2UL << 23) +#define MI_DMA_SRC_INC (0UL << 23) + +#define MI_DMA_16BIT_BUS (0UL << 26) +#define MI_DMA_32BIT_BUS (1UL << 26) + +#define MIi_DMA_TIMING_ANY (u32)(~0) +#define MI_DMA_TIMING_H_BLANK (2UL << 27) + +typedef union +{ + u32 b32; + u16 b16; +} MIiDmaClearSrc; + +void MI_DmaFill32(u32 dmaNo, void *dest, u32 data, u32 size); +void MI_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); +void MI_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size); +void MI_DmaFill32Async(u32 dmaNo, void *dest, u32 data, u32 size, MIDmaCallback callback, void *arg); +void MI_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, MIDmaCallback callback, void *arg); +void MI_WaitDma(u32 dmaNo); +void MI_StopDma(u32 dmaNo); +void MIi_CheckAnotherAutoDMA(u32 dmaNo, u32 dmaType); +void MIi_CheckDma0SourceAddress(u32 dmaNo, u32 src, u32 size, u32 dir); +void MIi_DmaSetParams(u32 dmaNo, u32 src, u32 dest, u32 ctrl); +void MIi_DmaSetParams_wait(u32 dmaNo, u32 src, u32 dest, u32 ctrl); +void MIi_DmaSetParams_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl); +void MIi_DmaSetParams_wait_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl); + +static inline void MIi_DmaSetParams_wait_src32(u32 dmaNo, u32 data, u32 dest, u32 ctrl) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + + MIiDmaClearSrc *scrp = (MIiDmaClearSrc *) ((u32)REG_ADDR_DMA0_CLR_DATA + dmaNo * 4); + scrp->b32 = data; + MIi_DmaSetParams_wait_noInt(dmaNo, (u32)scrp, dest, ctrl); + + (void)OS_RestoreInterrupts(lastIntrMode); +} + +static inline void MIi_DmaSetParams_src32(u32 dmaNo, u32 data, u32 dest, u32 ctrl) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + + MIiDmaClearSrc *srcp = (MIiDmaClearSrc *) ((u32)REG_ADDR_DMA0_CLR_DATA + dmaNo * 4); + srcp->b32 = data; + MIi_DmaSetParams_noInt(dmaNo, (u32)srcp, dest, ctrl); + + (void)OS_RestoreInterrupts(lastIntrMode); +} + +static inline void MIi_CallCallback(MIDmaCallback callback, void *arg) +{ + if (callback) + { + (callback) (arg); + } +} + +#endif //POKEDIAMOND_ARM9_MI_DMA_H diff --git a/arm9/lib/NitroSDK/include/MI_dma_card.h b/arm9/lib/NitroSDK/include/MI_dma_card.h new file mode 100644 index 00000000..efd70ba6 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_dma_card.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_MI_DMA_CARD_H +#define POKEDIAMOND_MI_DMA_CARD_H + +#include "nitro/types.h" + +void MIi_CardDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); + +#endif //POKEDIAMOND_MI_DMA_CARD_H diff --git a/arm9/lib/NitroSDK/include/MI_dma_gxcommand.h b/arm9/lib/NitroSDK/include/MI_dma_gxcommand.h new file mode 100644 index 00000000..7cc32ba2 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_dma_gxcommand.h @@ -0,0 +1,34 @@ +#ifndef POKEDIAMOND_MI_DMA_GXCOMMAND_H +#define POKEDIAMOND_MI_DMA_GXCOMMAND_H + +#include "consts.h" +#include "MI_dma.h" +#include "GX_g3x.h" + +#define MIi_GX_LENGTH_ONCE (118 * sizeof(u32)) +#define REG_GXFIFO_ADDR 0x4000400 +#define MI_CNT_SEND32(size) (0x84400000 | (size/4)) +#define MI_CNT_SEND32_IF(size) (0xc4400000 | (size/4)) +#define MI_CNT_GXCOPY_IF(size) (0xfc400000 | (size/4)) + +#define OS_IE_GXFIFO 0x200000 + +typedef struct +{ + volatile BOOL isBusy; + + u32 dmaNo; + u32 src; + u32 length; + MIDmaCallback callback; + void *arg; + + GXFifoIntrCond fifoCond; + void (*fifoFunc) (void); +} MIiGXDmaParams; + +void MI_SendGXCommand(u32 dmaNo, const void *src, u32 commandLength); +void MI_SendGXCommandAsync(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg); +void MI_SendGXCommandAsyncFast(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg); + +#endif //POKEDIAMOND_MI_DMA_GXCOMMAND_H diff --git a/arm9/lib/NitroSDK/include/MI_dma_hblank.h b/arm9/lib/NitroSDK/include/MI_dma_hblank.h new file mode 100644 index 00000000..1c83ef3e --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_dma_hblank.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_MI_DMA_HBLANK_H +#define POKEDIAMOND_MI_DMA_HBLANK_H + +#include "nitro/types.h" + +void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); +void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size); + +#endif //POKEDIAMOND_MI_DMA_HBLANK_H diff --git a/arm9/lib/NitroSDK/include/MI_exMemory.h b/arm9/lib/NitroSDK/include/MI_exMemory.h new file mode 100644 index 00000000..5e21d7e6 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_exMemory.h @@ -0,0 +1,75 @@ +#ifndef POKEDIAMOND_MI_EXMEMORY_H +#define POKEDIAMOND_MI_EXMEMORY_H + +#include "registers.h" + +typedef enum { + MI_PROCESSOR_ARM9 = 0, + MI_PROCESSOR_ARM7 = 1 +} MIProcessor; + +typedef enum +{ + MI_CTRDG_ROMCYCLE1_10 = 0, + MI_CTRDG_ROMCYCLE1_8 = 1, + MI_CTRDG_ROMCYCLE1_6 = 2, + MI_CTRDG_ROMCYCLE1_18 = 3 +} MICartridgeRomCycle1st; + +typedef enum +{ + MI_CTRDG_ROMCYCLE2_6 = 0, + MI_CTRDG_ROMCYCLE2_4 = 1 +} MICartridgeRomCycle2nd; + +typedef enum +{ + MI_CTRDG_RAMCYCLE_10 = 0, + MI_CTRDG_RAMCYCLE_8 = 1, + MI_CTRDG_RAMCYCLE_6 = 2, + MI_CTRDG_RAMCYCLE_18 = 3 +} MICartridgeRamCycle; + +static inline void MIi_SetCardProcessor(MIProcessor proc) +{ + reg_MI_EXMEMCNT = + (u16)((reg_MI_EXMEMCNT & ~0x0800) | (proc << 11)); +} + +static inline void MIi_SetCartridgeProcessor(MIProcessor proc) +{ + reg_MI_EXMEMCNT = + (u16)((reg_MI_EXMEMCNT & ~0x0080) | (proc << 7)); +} + +static inline MICartridgeRomCycle1st MI_GetCartridgeRomCycle1st(void) +{ + return (MICartridgeRomCycle1st)((reg_MI_EXMEMCNT & 0xc) >> 2); +} + +static inline MICartridgeRomCycle2nd MI_GetCartridgeRomCycle2nd(void) +{ + return (MICartridgeRomCycle2nd)((reg_MI_EXMEMCNT & 0x10) >> 4); +} + +static inline void MI_SetCartridgeRomCycle1st(MICartridgeRomCycle1st c1) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0xc) | (c1 << 2)); +} + +static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4)); +} + +static inline void MI_SetCartridgeRamCycle(MICartridgeRamCycle c) +{ + reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~3) | (c << 0)); +} + +static inline MICartridgeRamCycle MI_GetCartridgeRamCycle(void) +{ + return (MICartridgeRamCycle)((reg_MI_EXMEMCNT & 3) >> 0); +} + +#endif //POKEDIAMOND_MI_EXMEMORY_H diff --git a/arm9/lib/NitroSDK/include/MI_init.h b/arm9/lib/NitroSDK/include/MI_init.h new file mode 100644 index 00000000..a338ab6b --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_init.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_MI_INIT_H +#define POKEDIAMOND_MI_INIT_H + +void MI_Init(void); + +#endif //POKEDIAMOND_MI_INIT_H diff --git a/arm9/lib/NitroSDK/include/MI_memory.h b/arm9/lib/NitroSDK/include/MI_memory.h new file mode 100644 index 00000000..4e5722bb --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_memory.h @@ -0,0 +1,68 @@ +#ifndef POKEDIAMOND_ARM9_MI_MEMORY_H +#define POKEDIAMOND_ARM9_MI_MEMORY_H + +#include "nitro/types.h" + +void MIi_CpuClear16(register u16 data, register void *destp, register u32 size); +void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size); +void MIi_CpuClear32(register u32 data, register void *destp, register u32 size); +void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size); +void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size); +void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size); +void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size); +void MI_Copy32B(register const void *pSrc, register void *pDest); +void MI_Copy36B(register const void *pSrc, register void *pDest); +void MI_Copy48B(register const void *pSrc, register void *pDest); +void MI_Copy64B(register const void *pSrc, register void *pDest); +void MI_CpuFill8(register void *dstp, register u8 data, register u32 size); +void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size); +void MI_Zero36B(register void *pDest); + +static inline void MI_CpuClearFast(void *destp, u32 size) { + MIi_CpuClearFast(0, destp, size); +} +static inline void MI_CpuClear8(void *dest, u32 size) { + MI_CpuFill8(dest, 0, size); +} + +static inline void MI_CpuFill16(void *dest, u16 data, u32 size) +{ + MIi_CpuClear16(data, dest, size); +} + +static inline void MI_CpuClear16(void * destp, u32 size) +{ + MIi_CpuClear16(0, destp, size); +} + +static inline void MI_CpuFill32(void *dest, u32 data, u32 size) +{ + MIi_CpuClear32(data, dest, size); +} + +static inline void MI_CpuClear32(void *dest, u32 size) +{ + MI_CpuFill32(dest, 0, size); +} + +static inline void MI_CpuCopy16(const void *src, void *dest, u32 size) +{ + MIi_CpuCopy16(src, dest, size); +} + +static inline void MI_CpuCopy32(const void *src, void *dest, u32 size) +{ + MIi_CpuCopy32(src, dest, size); +} + +static inline void MI_CpuFillFast(void *dest, u32 data, u32 size) +{ + MIi_CpuClearFast(data, dest, size); +} + +static inline void MI_CpuCopyFast(const void *src, void *dest, u32 size) +{ + MIi_CpuCopyFast(src, dest, size); +} + +#endif //POKEDIAMOND_ARM9_MI_MEMORY_H diff --git a/arm9/lib/NitroSDK/include/MI_swap.h b/arm9/lib/NitroSDK/include/MI_swap.h new file mode 100644 index 00000000..433b5804 --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_swap.h @@ -0,0 +1,6 @@ +#ifndef NITRO_MI_SWAP_H_ +#define NITRO_MI_SWAP_H_ + +u32 MI_SwapWord(u32 setData, volatile u32 * destp); + +#endif //NITRO_MI_SWAP_H_ diff --git a/arm9/lib/NitroSDK/include/MI_uncompress.h b/arm9/lib/NitroSDK/include/MI_uncompress.h new file mode 100644 index 00000000..defafa8c --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_uncompress.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_MI_UNCOMPRESS_H +#define POKEDIAMOND_MI_UNCOMPRESS_H + +void MIi_UncompressBackward(void * bottom); +void MI_UncompressLZ8(register const void *srcp, register void *destp); + +#endif //POKEDIAMOND_MI_UNCOMPRESS_H diff --git a/arm9/lib/NitroSDK/include/MI_wram.h b/arm9/lib/NitroSDK/include/MI_wram.h new file mode 100644 index 00000000..fa445a8a --- /dev/null +++ b/arm9/lib/NitroSDK/include/MI_wram.h @@ -0,0 +1,14 @@ +#ifndef POKEDIAMOND_MI_WRAM_H +#define POKEDIAMOND_MI_WRAM_H + +typedef enum +{ + MI_WRAM_ARM9_ALL = 0, + MI_WRAM_1616_1 = 1, + MI_WRAM_1616_2 = 2, + MI_WRAM_ARM7_ALL = 3 +} MIWram; + +void MI_SetWramBank(MIWram cnt); + +#endif //POKEDIAMOND_MI_WRAM_H diff --git a/arm9/lib/NitroSDK/include/OS_alarm.h b/arm9/lib/NitroSDK/include/OS_alarm.h new file mode 100644 index 00000000..00a3c3d3 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_alarm.h @@ -0,0 +1,22 @@ +#ifndef POKEDIAMOND_ARM9_OS_ALARM_H +#define POKEDIAMOND_ARM9_OS_ALARM_H + +#include "nitro/types.h" +#include "OS_thread.h" +#include "OS_tick.h" +#include "nitro/OS_alarm_shared.h" + +struct OSiAlarmQueue +{ + OSAlarm *head; + OSAlarm *tail; +}; + +void OS_InitAlarm(void); +BOOL OS_IsAlarmAvailable(void); +void OS_CreateAlarm(OSAlarm *alarm); +void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg); +void OS_CancelAlarm(OSAlarm *alarm); +void OSi_AlarmHandler(void *arg); + +#endif //POKEDIAMOND_ARM9_OS_ALARM_H diff --git a/arm9/lib/NitroSDK/include/OS_alloc.h b/arm9/lib/NitroSDK/include/OS_alloc.h new file mode 100644 index 00000000..e73c2971 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_alloc.h @@ -0,0 +1,14 @@ +#ifndef POKEDIAMOND_ARM9_OS_ALLOC_H +#define POKEDIAMOND_ARM9_OS_ALLOC_H + +#include "nitro/types.h" +#include "OS_arena.h" +#include "nitro/OS_alloc_shared.h" + +Cell* DLAddFront(Cell* list, Cell* cell); +Cell* DLExtract(Cell* list, Cell* cell); +Cell *DLInsert(Cell *original, Cell *inserted); +void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size); +void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void *ptr); + +#endif //POKEDIAMOND_ARM9_OS_ALLOC_H diff --git a/arm9/lib/NitroSDK/include/OS_arena.h b/arm9/lib/NitroSDK/include/OS_arena.h new file mode 100644 index 00000000..a26cf3bd --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_arena.h @@ -0,0 +1,18 @@ +#ifndef POKEDIAMOND_ARM9_OS_ARENA_H +#define POKEDIAMOND_ARM9_OS_ARENA_H + +#include "nitro/types.h" +#include "nitro/OS_arena_shared.h" + +void OS_InitArena(void); +void OS_InitArenaEx(void); +void* OS_GetArenaHi(OSArenaId id); +void* OS_GetArenaLo(OSArenaId id); +void* OS_GetInitArenaHi(OSArenaId id); +void* OS_GetInitArenaLo(OSArenaId id); +void OS_SetArenaHi(OSArenaId id, void *newHi); +void OS_SetArenaLo(OSArenaId id, void *newLo); +void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align); +void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align); + +#endif //POKEDIAMOND_ARM9_OS_ARENA_H diff --git a/arm9/lib/NitroSDK/include/OS_cache.h b/arm9/lib/NitroSDK/include/OS_cache.h new file mode 100644 index 00000000..425eab3f --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_cache.h @@ -0,0 +1,16 @@ +#ifndef POKEDIAMOND_OS_CACHE_H +#define POKEDIAMOND_OS_CACHE_H + +#include "nitro/types.h" + +void DC_InvalidateAll(void); +void DC_StoreAll(void); +void DC_FlushAll(void); +void DC_InvalidateRange(register void *startAddr, register u32 nBytes); +void DC_StoreRange(register void *startAddr, register u32 nBytes); +void DC_FlushRange(register const void *startAddr, register u32 nBytes); +void DC_WaitWriteBufferEmpty(void); +void IC_InvalidateAll(void); +void IC_InvalidateRange(register void *startAddr, register u32 nBytes); + +#endif //POKEDIAMOND_OS_CACHE_H diff --git a/arm9/lib/NitroSDK/include/OS_context.h b/arm9/lib/NitroSDK/include/OS_context.h new file mode 100644 index 00000000..d3e24673 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_context.h @@ -0,0 +1,22 @@ +#ifndef POKEDIAMOND_ARM9_OS_CONTEXT_H +#define POKEDIAMOND_ARM9_OS_CONTEXT_H + +#include "nitro/types.h" +#include "CP_context.h" + +typedef struct OSContext +{ + u32 cpsr; + u32 r[13]; + u32 sp; + u32 lr; + u32 pc_plus4; + u32 sp_svc; + CPContext cp_context; +} OSContext; + +void OS_InitContext(register OSContext *context, register u32 newpc, register u32 newsp); +BOOL OS_SaveContext(register OSContext *context); +void OS_LoadContext(register OSContext *context); + +#endif //POKEDIAMOND_ARM9_OS_CONTEXT_H diff --git a/arm9/lib/NitroSDK/include/OS_emulator.h b/arm9/lib/NitroSDK/include/OS_emulator.h new file mode 100644 index 00000000..30acec16 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_emulator.h @@ -0,0 +1,13 @@ +// +// Created by red031000 on 2020-05-05. +// + +#ifndef POKEDIAMOND_OS_EMULATOR_H +#define POKEDIAMOND_OS_EMULATOR_H + +#include "consts.h" + +BOOL OS_IsRunOnEmulator(void); +u32 OS_GetConsoleType(void); + +#endif //POKEDIAMOND_OS_EMULATOR_H diff --git a/arm9/lib/NitroSDK/include/OS_entropy.h b/arm9/lib/NitroSDK/include/OS_entropy.h new file mode 100644 index 00000000..7c39aadd --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_entropy.h @@ -0,0 +1,21 @@ +// +// Created by red031000 on 2020-05-03. +// + +#ifndef POKEDIAMOND_OS_ENTROPY_H +#define POKEDIAMOND_OS_ENTROPY_H + +#include "registers.h" + +void OS_GetLowEntropyData(u32 * arr); + +extern vu64 OSi_TickCounter; + +extern u16 OS_GetTickLo(void); + +static inline s32 GX_GetVCount(void) +{ + return reg_GX_VCOUNT; +} + +#endif //POKEDIAMOND_OS_ENTROPY_H diff --git a/arm9/lib/NitroSDK/include/OS_exception.h b/arm9/lib/NitroSDK/include/OS_exception.h new file mode 100644 index 00000000..26fc3525 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_exception.h @@ -0,0 +1,21 @@ +#ifndef POKEDIAMOND_OS_EXCEPTION_H +#define POKEDIAMOND_OS_EXCEPTION_H + +#include "consts.h" +#include "OS_context.h" + +typedef struct +{ + OSContext context; + u32 cp15; + u32 spsr; + u32 exinfo; + u32 debug[4]; +} OSiExContext; + +typedef void (*OSExceptionHandler) (u32, void *); + +void OS_InitException(void); +void OSi_ExceptionHandler(void); + +#endif //POKEDIAMOND_OS_EXCEPTION_H diff --git a/arm9/lib/NitroSDK/include/OS_init.h b/arm9/lib/NitroSDK/include/OS_init.h new file mode 100644 index 00000000..f0b80220 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_init.h @@ -0,0 +1,33 @@ +#ifndef POKEDIAMOND_ARM9_OS_INIT_H +#define POKEDIAMOND_ARM9_OS_INIT_H + +#include "nitro/types.h" +#include "consts.h" +#include "OS_tcm.h" +#include "OS_spinLock.h" +#include "OS_context.h" +#include "OS_timer.h" +#include "OS_tick.h" +#include "OS_alarm.h" +#include "OS_mutex.h" +#include "OS_thread.h" +#include "OS_protectionRegion.h" +#include "OS_protectionUnit.h" +#include "OS_entropy.h" +#include "OS_emulator.h" +#include "OS_arena.h" +#include "OS_alloc.h" +#include "OS_system.h" +#include "OS_terminate_proc.h" +#include "OS_irqHandler.h" +#include "OS_irqTable.h" +#include "OS_interrupt.h" +#include "OS_reset.h" +#include "OS_exception.h" +#include "OS_message.h" +#include "OS_valarm.h" +#include "OS_vramExclusive.h" + +void OS_Init(void); + +#endif //POKEDIAMOND_ARM9_OS_INIT_H diff --git a/arm9/lib/NitroSDK/include/OS_interrupt.h b/arm9/lib/NitroSDK/include/OS_interrupt.h new file mode 100644 index 00000000..19dd0da2 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_interrupt.h @@ -0,0 +1,60 @@ +#ifndef POKEDIAMOND_ARM9_OS_INTERRUPT_H +#define POKEDIAMOND_ARM9_OS_INTERRUPT_H + +#include "registers.h" +#include "nitro/OS_interrupt_shared.h" + +#define REG_OS_IME_IME_SHIFT 0 + +#define OS_IME_DISABLE (0UL << REG_OS_IME_IME_SHIFT) +#define OS_IME_ENABLE (1UL << REG_OS_IME_IME_SHIFT) + +#define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT) +#define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT) +#define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT) +#define OS_IE_TIMER2 (1UL << REG_OS_IE_T2_SHIFT) +#define OS_IE_TIMER3 (1UL << REG_OS_IE_T3_SHIFT) +#define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT) +#define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT) + +extern OSIrqFunction OS_IRQTable[]; +extern OSIrqCallbackInfo OSi_IrqCallbackInfo[8]; + +void OS_InitIrqTable(void); +void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function); +OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit); +void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg); +void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg); +OSIrqMask OS_SetIrqMask(OSIrqMask mask); +OSIrqMask OS_EnableIrqMask(OSIrqMask mask); +OSIrqMask OS_DisableIrqMask(OSIrqMask mask); +OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); +void OS_SetIrqStackChecker(void); + +static inline BOOL OS_DisableIrq(void) +{ + u16 prep = reg_OS_IME; + reg_OS_IME = OS_IME_DISABLE; + return (BOOL)prep; +} + +static inline BOOL OS_EnableIrq(void) +{ + u16 prep = reg_OS_IME; + reg_OS_IME = OS_IME_ENABLE; + return (BOOL)prep; +} + +static inline BOOL OS_RestoreIrq(BOOL enable) +{ + u16 prep = reg_OS_IME; + reg_OS_IME = (u16)enable; + return (BOOL)prep; +} + +static inline OSIrqMask OS_GetIrqMask(void) +{ + return reg_OS_IE; +} + +#endif //POKEDIAMOND_ARM9_OS_INTERRUPT_H diff --git a/arm9/lib/NitroSDK/include/OS_irqHandler.h b/arm9/lib/NitroSDK/include/OS_irqHandler.h new file mode 100644 index 00000000..e845298b --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_irqHandler.h @@ -0,0 +1,21 @@ +#ifndef POKEDIAMOND_OS_IRQHANDLER_H +#define POKEDIAMOND_OS_IRQHANDLER_H + +#include "OS_interrupt.h" +#include "mmap.h" + +static inline void OS_ClearIrqCheckFlag(OSIrqMask intr) +{ + *(vu32 *)HW_INTR_CHECK_BUF &= (u32)~intr; +} + +static inline OSIrqMask OS_GetIrqCheckFlag(void) +{ + return *(OSIrqMask *)HW_INTR_CHECK_BUF; +} + +void OS_IrqHandler(void); +void OS_IrqHandler_ThreadSwitch(void); +void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags); + +#endif //POKEDIAMOND_OS_IRQHANDLER_H diff --git a/arm9/lib/NitroSDK/include/OS_irqTable.h b/arm9/lib/NitroSDK/include/OS_irqTable.h new file mode 100644 index 00000000..ba8b45a8 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_irqTable.h @@ -0,0 +1,23 @@ +#ifndef POKEDIAMOND_ARM9_OS_IRQTABLE_H +#define POKEDIAMOND_ARM9_OS_IRQTABLE_H + +#include "mmap.h" +#include "OS_interrupt.h" + +void OS_IrqDummy(void); +void OSi_IrqCallback(s32 index); +void OSi_IrqDma0(void); +void OSi_IrqDma1(void); +void OSi_IrqDma2(void); +void OSi_IrqDma3(void); +void OSi_IrqTimer0(void); +void OSi_IrqTimer1(void); +void OSi_IrqTimer2(void); +void OSi_IrqTimer3(void); + +static inline void OS_SetIrqCheckFlag(OSIrqMask intr) +{ + *(vu32 *)HW_INTR_CHECK_BUF |= (u32)intr; +} + +#endif //POKEDIAMOND_ARM9_OS_IRQTABLE_H diff --git a/arm9/lib/NitroSDK/include/OS_message.h b/arm9/lib/NitroSDK/include/OS_message.h new file mode 100644 index 00000000..b9c570db --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_message.h @@ -0,0 +1,15 @@ +#ifndef POKEDIAMOND_ARM9_OS_MESSAGE_H +#define POKEDIAMOND_ARM9_OS_MESSAGE_H + +#include "OS_thread.h" +#include "OS_context.h" +#include "nitro/types.h" +#include "nitro/OS_message_shared.h" + +void OS_InitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount); +BOOL OS_SendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); +BOOL OS_ReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); +BOOL OS_JamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); +BOOL OS_ReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); + +#endif //POKEDIAMOND_ARM9_OS_MESSAGE_H diff --git a/arm9/lib/NitroSDK/include/OS_mutex.h b/arm9/lib/NitroSDK/include/OS_mutex.h new file mode 100644 index 00000000..23e4337e --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_mutex.h @@ -0,0 +1,17 @@ +#ifndef POKEDIAMOND_ARM9_OS_MUTEX_H +#define POKEDIAMOND_ARM9_OS_MUTEX_H + +#include "OS_thread.h" +#include "OS_context.h" +#include "nitro/OS_mutex_shared.h" +#include "nitro/types.h" + +void OS_InitMutex(OSMutex *mutex); +void OS_LockMutex(OSMutex *mutex); +void OS_UnlockMutex(OSMutex *mutex); +void OSi_UnlockAllMutex(OSThread * thread); +BOOL OS_TryLockMutex(OSMutex *mutex); +void OSi_EnqueueTail(OSThread *thread, OSMutex *mutex); +void OSi_DequeueItem(OSThread *thread, OSMutex *mutex); + +#endif //POKEDIAMOND_ARM9_OS_MUTEX_H diff --git a/arm9/lib/NitroSDK/include/OS_ownerInfo.h b/arm9/lib/NitroSDK/include/OS_ownerInfo.h new file mode 100644 index 00000000..13bae06e --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_ownerInfo.h @@ -0,0 +1,28 @@ +#ifndef POKEDIAMOND_OS_OWNERINFO_H +#define POKEDIAMOND_OS_OWNERINFO_H + +#include "consts.h" +#include "userInfo.h" + +typedef struct OSBirthday +{ + u8 month; + u8 day; +} OSBirthday; + +typedef struct OSOwnerInfo +{ + u8 language; + u8 favoriteColour; + OSBirthday birthday; + u16 nickName[10]; //either 10 or 8 + u16 nickNameLength; + u16 comment[26]; + u16 commentLength; +} OSOwnerInfo; + +void OS_GetMacAddress(u8 *macAddress); +void OS_GetOwnerInfo(OSOwnerInfo* info); +s64 OS_GetOwnerRtcOffset(void); + +#endif //POKEDIAMOND_OS_OWNERINFO_H diff --git a/arm9/lib/NitroSDK/include/OS_printf.h b/arm9/lib/NitroSDK/include/OS_printf.h new file mode 100644 index 00000000..acb7f8c7 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_printf.h @@ -0,0 +1,15 @@ +#ifndef NITRO_OS_PRINTF_H_ +#define NITRO_OS_PRINTF_H_ + +#define OS_Warning( ... ) ((void)0) +#define OS_TPanic(...) OS_Terminate() +#define OS_TWarning(...) ((void)0) + +#include "nitro/types.h" + +s32 OS_SPrintf(s8 *buffer, const s8 *format, ...); +s32 OS_VSPrintf(s8 *buffer, const s8 *format, void *args); +s32 OS_SNPrintf(s8 *buffer, s32 bufsz, const s8 *format, ...); +s32 OS_VSNPrintf(s8 *buffer, s32 bufsz, const s8 *format, void *args); + +#endif //NITRO_OS_PRINTF_H_ diff --git a/arm9/lib/NitroSDK/include/OS_protectionRegion.h b/arm9/lib/NitroSDK/include/OS_protectionRegion.h new file mode 100644 index 00000000..00b7ae63 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_protectionRegion.h @@ -0,0 +1,48 @@ +#ifndef POKEDIAMOND_OS_PROTECTIONREGION_H +#define POKEDIAMOND_OS_PROTECTIONREGION_H + +#include "nitro/types.h" +#include "consts.h" + +void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags); +void OS_SetProtectionRegion1(u32 param); +void OS_SetProtectionRegion2(u32 param); + +typedef enum +{ + OSi_PR_BASE_MASK_4KB = 0xfffff000, + OSi_PR_BASE_MASK_8KB = 0xffffe000, + OSi_PR_BASE_MASK_16KB = 0xffffc000, + OSi_PR_BASE_MASK_32KB = 0xffff8000, + OSi_PR_BASE_MASK_64KB = 0xffff0000, + OSi_PR_BASE_MASK_128KB = 0xfffe0000, + OSi_PR_BASE_MASK_256KB = 0xfffc0000, + OSi_PR_BASE_MASK_512KB = 0xfff80000, + OSi_PR_BASE_MASK_1MB = 0xfff00000, + OSi_PR_BASE_MASK_2MB = 0xffe00000, + OSi_PR_BASE_MASK_4MB = 0xffc00000, + OSi_PR_BASE_MASK_8MB = 0xff800000, + OSi_PR_BASE_MASK_16MB = 0xff000000, + OSi_PR_BASE_MASK_32MB = 0xfe000000, + OSi_PR_BASE_MASK_64MB = 0xfc000000, + OSi_PR_BASE_MASK_128MB = 0xf8000000, + OSi_PR_BASE_MASK_256MB = 0xf0000000, + OSi_PR_BASE_MASK_512MB = 0xe0000000, + OSi_PR_BASE_MASK_1GB = 0xc0000000, + OSi_PR_BASE_MASK_2GB = 0x80000000, + OSi_PR_BASE_MASK_4GB = 0x00000000 +} OSiProtectionRegionBaseMask; + +static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBaseMask mask) { + return ((address & mask) | size); +} + +#define OS_SetProtectionRegion(regionNo, address, sizeStr) \ + OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \ + | 1) + +#define OS_PR3_ACCESS_MASK (HW_C5_PERMIT_MASK << HW_C5_PR3_SFT) +#define OS_PR3_ACCESS_RW (HW_C5_PERMIT_RW << HW_C5_PR3_SFT) +#define OS_PR3_ACCESS_RO (HW_C5_PERMIT_RO << HW_C5_PR3_SFT) + +#endif //POKEDIAMOND_OS_PROTECTIONREGION_H diff --git a/arm9/lib/NitroSDK/include/OS_protectionUnit.h b/arm9/lib/NitroSDK/include/OS_protectionUnit.h new file mode 100644 index 00000000..e7dc32d8 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_protectionUnit.h @@ -0,0 +1,11 @@ +// +// Created by red031000 on 2020-05-24. +// + +#ifndef POKEDIAMOND_OS_PROTECTIONUNIT_H +#define POKEDIAMOND_OS_PROTECTIONUNIT_H + +void OS_EnableProtectionUnit(void); +void OS_DisableProtectionUnit(void); + +#endif //POKEDIAMOND_OS_PROTECTIONUNIT_H diff --git a/arm9/lib/NitroSDK/include/OS_reset.h b/arm9/lib/NitroSDK/include/OS_reset.h new file mode 100644 index 00000000..756de9fb --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_reset.h @@ -0,0 +1,16 @@ +#ifndef POKEDIAMOND_ARM9_OS_RESET_H +#define POKEDIAMOND_ARM9_OS_RESET_H + +#include "nitro/OS_reset_shared.h" +#include "mmap.h" + +void OS_InitReset(void); +void OS_ResetSystem(u32 parameter); +void OSi_DoBoot(void); + +static inline u32 OS_GetResetParameter(void) +{ + return (u32)*(u32 *)HW_RESET_PARAMETER_BUF; +} + +#endif //POKEDIAMOND_ARM9_OS_RESET_H diff --git a/arm9/lib/NitroSDK/include/OS_spinLock.h b/arm9/lib/NitroSDK/include/OS_spinLock.h new file mode 100644 index 00000000..09c2cf2c --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_spinLock.h @@ -0,0 +1,42 @@ +#ifndef POKEDIAMOND_ARM9_OS_SPINLOCK_H +#define POKEDIAMOND_ARM9_OS_SPINLOCK_H + +#include "nitro/types.h" +#include "nitro/OS_spinLock_shared.h" +#include "syscall.h" + +#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord( (OSLockWord *)HW_CTRDG_LOCK_BUF ) +#define OS_MAINP_LOCKED_FLAG 0x40 +#define OS_LOCK_SUCCESS 0 + +#define OS_LOCK_ID_ERROR (-3) + +static inline void OSi_WaitByLoop(void) +{ + SVC_WaitByLoop(0x1000 / 4); +} + +void OS_InitLock(void); +s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq); +s32 OS_TryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)); +s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFIQ); +s32 OS_UnlockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)); +s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq); +s32 OS_LockCartridge(u16 lockID); +s32 OS_UnlockCartridge(u16 lockID); +s32 OS_TryLockCartridge(u16 lockID); +void OSi_AllocateCartridgeBus(void); +void OSi_FreeCartridgeBus(void); +s32 OS_TryLockCard(u16 lockID); +s32 OS_UnlockCard(u16 lockID); +void OSi_AllocateCardBus(void); +void OSi_FreeCardBus(void); +u16 OS_ReadOwnerOfLockWord(OSLockWord * lock); +s32 OS_UnLockCartridge(u16 lockID); +s32 OS_GetLockID(void); +void OS_ReleaseLockID(register u16 lockID); + +#endif //POKEDIAMOND_ARM9_OS_SPINLOCK_H diff --git a/arm9/lib/NitroSDK/include/OS_system.h b/arm9/lib/NitroSDK/include/OS_system.h new file mode 100644 index 00000000..37dbbd76 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_system.h @@ -0,0 +1,18 @@ +#ifndef POKEDIAMOND_ARM9_OS_SYSTEM_H +#define POKEDIAMOND_ARM9_OS_SYSTEM_H + +#include "function_target.h" +#include "consts.h" +#include "nitro/OS_system_shared.h" + +OSIntrMode OS_EnableInterrupts(void); +OSIntrMode OS_DisableInterrupts(void); +OSIntrMode OS_RestoreInterrupts(OSIntrMode state); +OSIntrMode OS_DisableInterrupts_IrqAndFiq(void); +OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state); +OSIntrMode OS_GetCpsrIrq(void); +OSProcMode OS_GetProcMode(void); +void OS_SpinWait(u32 cycles); +void OS_WaitVBlankIntr(void); + +#endif //POKEDIAMOND_ARM9_OS_SYSTEM_H diff --git a/arm9/lib/NitroSDK/include/OS_tcm.h b/arm9/lib/NitroSDK/include/OS_tcm.h new file mode 100644 index 00000000..66f8ec59 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_tcm.h @@ -0,0 +1,12 @@ +// +// Created by red031000 on 2020-05-05. +// + +#ifndef POKEDIAMOND_OS_TCM_H +#define POKEDIAMOND_OS_TCM_H + +#include "consts.h" + +u32 OS_GetDTCMAddress(void); + +#endif //POKEDIAMOND_OS_TCM_H diff --git a/arm9/lib/NitroSDK/include/OS_terminate_proc.h b/arm9/lib/NitroSDK/include/OS_terminate_proc.h new file mode 100644 index 00000000..b4553fb4 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_terminate_proc.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H +#define POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H + +#include "nitro/types.h" + +void OS_Terminate(void); +void OS_Halt(void); + +#endif //POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H diff --git a/arm9/lib/NitroSDK/include/OS_thread.h b/arm9/lib/NitroSDK/include/OS_thread.h new file mode 100644 index 00000000..e330e219 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_thread.h @@ -0,0 +1,30 @@ +#ifndef POKEDIAMOND_ARM9_OS_THREAD_H +#define POKEDIAMOND_ARM9_OS_THREAD_H + +#include "nitro/types.h" +#include "OS_context.h" +#include "nitro/OS_thread_shared.h" + +OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue); +void OS_InitThread(void); +BOOL OS_IsThreadAvailable(void); +void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio); +void OS_ExitThread(void); +void OS_DestroyThread(OSThread *thread); +void OS_JoinThread(OSThread *thread); +BOOL OS_IsThreadTerminated(const OSThread *thread); +void OS_SleepThread(OSThreadQueue *queue); +void OS_WakeupThread(OSThreadQueue *queue); +void OS_WakeupThreadDirect(OSThread *thread); +OSThread *OS_SelectThread(void); +void OS_RescheduleThread(void); +void OS_YieldThread(void); +BOOL OS_SetThreadPriority(OSThread *thread, u32 prio); +u32 OS_GetThreadPriority(const OSThread *thread); +void OS_Sleep(u32 msec); +OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback); +u32 OS_DisableScheduler(void); +u32 OS_EnableScheduler(void); +void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor); + +#endif //POKEDIAMOND_ARM9_OS_THREAD_H diff --git a/arm9/lib/NitroSDK/include/OS_tick.h b/arm9/lib/NitroSDK/include/OS_tick.h new file mode 100644 index 00000000..e0b6ea39 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_tick.h @@ -0,0 +1,15 @@ +#ifndef POKEDIAMOND_ARM9_OS_TICK_H +#define POKEDIAMOND_ARM9_OS_TICK_H + +#include "consts.h" +#include "OS_timer.h" +#include "nitro/OS_tick_shared.h" + +#define OSi_TICK_TIMERCONTROL (REG_OS_TM0CNT_H_E_MASK | REG_OS_TM0CNT_H_I_MASK | OS_TIMER_PRESCALER_64) + +void OS_InitTick(void); +BOOL OS_IsTickAvailable(void); +OSTick OS_GetTick(void); +u16 OS_GetTickLo(void); + +#endif //POKEDIAMOND_ARM9_OS_TICK_H diff --git a/arm9/lib/NitroSDK/include/OS_timer.h b/arm9/lib/NitroSDK/include/OS_timer.h new file mode 100644 index 00000000..4a10041b --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_timer.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_ARM9_OS_TIMER_H +#define POKEDIAMOND_ARM9_OS_TIMER_H + +#include "nitro/OS_timer_shared.h" +#include "nitro/types.h" + +void OSi_SetTimerReserved(s32 timerNum); + +#endif //POKEDIAMOND_ARM9_OS_TIMER_H diff --git a/arm9/lib/NitroSDK/include/OS_valarm.h b/arm9/lib/NitroSDK/include/OS_valarm.h new file mode 100644 index 00000000..b4850f9d --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_valarm.h @@ -0,0 +1,25 @@ +#ifndef POKEDIAMOND_OS_VALARM_H +#define POKEDIAMOND_OS_VALARM_H + +#include "nitro/types.h" +#include "OS_alarm.h" + +typedef struct OSiVAlarm OSVAlarm; +struct OSiVAlarm +{ + OSAlarmHandler handler; + void *arg; + u32 tag; + u32 frame; + s16 fire; + s16 delay; + OSVAlarm *prev; + OSVAlarm *next; + BOOL period; + BOOL finish; + BOOL canceled; +}; + +void OS_InitVAlarm(void); + +#endif //POKEDIAMOND_OS_VALARM_H diff --git a/arm9/lib/NitroSDK/include/OS_vramExclusive.h b/arm9/lib/NitroSDK/include/OS_vramExclusive.h new file mode 100644 index 00000000..d7c3ef92 --- /dev/null +++ b/arm9/lib/NitroSDK/include/OS_vramExclusive.h @@ -0,0 +1,10 @@ +#ifndef POKEDIAMOND_OS_VRAMEXCLUSIVE_H +#define POKEDIAMOND_OS_VRAMEXCLUSIVE_H + +#include "nitro/types.h" + +void OSi_InitVramExclusive(void); +BOOL OSi_TryLockVram(u16 bank, u16 lockId); +void OSi_UnlockVram(u16 bank, u16 lockId); + +#endif //POKEDIAMOND_OS_VRAMEXCLUSIVE_H diff --git a/arm9/lib/NitroSDK/include/PAD_pad.h b/arm9/lib/NitroSDK/include/PAD_pad.h new file mode 100644 index 00000000..f3de4198 --- /dev/null +++ b/arm9/lib/NitroSDK/include/PAD_pad.h @@ -0,0 +1,45 @@ +#ifndef NITRO_PAD_PAD_H_ +#define NITRO_PAD_PAD_H_ + +#include "registers.h" + +//================================================================================ +// BUTTONS + +//---- masked value +#define PAD_PLUS_KEY_MASK 0x00f0 // mask : cross keys +#define PAD_BUTTON_MASK 0x2f0f // mask : buttons +#define PAD_DEBUG_BUTTON_MASK 0x2000 // mask : debug button +#define PAD_ALL_MASK 0x2fff // mask : all buttons +#define PAD_RCNTPORT_MASK 0x2c00 // mask : factors ARM7 can read from RCNT register +#define PAD_KEYPORT_MASK 0x03ff // mask : factors ARM7/9 can read from KEY register + +#define PAD_DETECT_FOLD_MASK 0x8000 // mask : folding + +//---- button and key +#define PAD_BUTTON_A 0x0001 // A +#define PAD_BUTTON_B 0x0002 // B +#define PAD_BUTTON_SELECT 0x0004 // SELECT +#define PAD_BUTTON_START 0x0008 // START +#define PAD_KEY_RIGHT 0x0010 // RIGHT of cross key +#define PAD_KEY_LEFT 0x0020 // LEFT of cross key +#define PAD_KEY_UP 0x0040 // UP of cross key +#define PAD_KEY_DOWN 0x0080 // DOWN of cross key +#define PAD_BUTTON_R 0x0100 // R +#define PAD_BUTTON_L 0x0200 // L +#define PAD_BUTTON_X 0x0400 // X +#define PAD_BUTTON_Y 0x0800 // Y +#define PAD_BUTTON_DEBUG 0x2000 // Debug button + +static inline u16 PAD_Read(void) +{ + return (u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ + (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)) & (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)); +} + +static inline BOOL PAD_DetectFold(void) +{ + return (BOOL)((*(vu16 *)HW_BUTTON_XY_BUF & PAD_DETECT_FOLD_MASK) >> 15); +} + +#endif //NITRO_PAD_PAD_H_ diff --git a/arm9/lib/NitroSDK/include/PXI_fifo.h b/arm9/lib/NitroSDK/include/PXI_fifo.h new file mode 100644 index 00000000..b1ca33f3 --- /dev/null +++ b/arm9/lib/NitroSDK/include/PXI_fifo.h @@ -0,0 +1,36 @@ +#ifndef POKEDIAMOND_ARM9_PXI_FIFO_H +#define POKEDIAMOND_ARM9_PXI_FIFO_H + +#include "nitro/PXI_fifo_shared.h" +#include "nitro/types.h" + +typedef enum +{ + PXI_FIFO_SUCCESS = 0, + PXI_FIFO_FAIL_SEND_ERR = -1, + PXI_FIFO_FAIL_SEND_FULL = -2, + PXI_FIFO_FAIL_RECV_ERR = -3, + PXI_FIFO_FAIL_RECV_EMPTY = -4, + PXI_FIFO_NO_CALLBACK_ENTRY = -5 +} PXIFifoStatus; + +typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err); + +typedef union +{ + struct + { + u32 tag:5; + u32 err:1; + u32 data:26; + } e; + u32 raw; +} PXIFifoMessage; + +void PXI_InitFifo(void); +void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback); +BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc); +s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err); +void PXIi_HandlerRecvFifoNotEmpty(void); + +#endif //POKEDIAMOND_ARM9_PXI_FIFO_H diff --git a/arm9/lib/NitroSDK/include/PXI_init.h b/arm9/lib/NitroSDK/include/PXI_init.h new file mode 100644 index 00000000..5c330c9c --- /dev/null +++ b/arm9/lib/NitroSDK/include/PXI_init.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_PXI_INIT_H +#define POKEDIAMOND_PXI_INIT_H + +void PXI_Init(void); + +#endif //POKEDIAMOND_PXI_INIT_H diff --git a/arm9/lib/NitroSDK/include/RTC_api.h b/arm9/lib/NitroSDK/include/RTC_api.h new file mode 100644 index 00000000..09efde7e --- /dev/null +++ b/arm9/lib/NitroSDK/include/RTC_api.h @@ -0,0 +1,111 @@ +#ifndef NITRO_RTC_API_H_ +#define NITRO_RTC_API_H_ + +typedef enum RTCAlarmChan +{ + RTC_ALARM_CHAN_1 = 0, + RTC_ALARM_CHAN_2, + RTC_ALARM_CHAN_MAX +} +RTCAlarmChan; + +// Alarm status definitions +typedef enum RTCAlarmStatus +{ + RTC_ALARM_STATUS_OFF = 0, + RTC_ALARM_STATUS_ON, + RTC_ALARM_STATUS_MAX +} +RTCAlarmStatus; + +#define RTC_ALARM_ENABLE_NONE 0x0000 +#define RTC_ALARM_ENABLE_WEEK 0x0001 +#define RTC_ALARM_ENABLE_HOUR 0x0002 +#define RTC_ALARM_ENABLE_MINUTE 0x0004 +#define RTC_ALARM_ENABLE_ALL ( RTC_ALARM_ENABLE_WEEK | RTC_ALARM_ENABLE_HOUR | RTC_ALARM_ENABLE_MINUTE ) + +typedef enum RTCWeek +{ + RTC_WEEK_SUNDAY = 0, + RTC_WEEK_MONDAY, + RTC_WEEK_TUESDAY, + RTC_WEEK_WEDNESDAY, + RTC_WEEK_THURSDAY, + RTC_WEEK_FRIDAY, + RTC_WEEK_SATURDAY, + RTC_WEEK_MAX +} +RTCWeek; + +typedef struct RTCDate +{ + u32 year; + u32 month; + u32 day; + RTCWeek week; +} +RTCDate; + +typedef struct RTCTime +{ + u32 hour; + u32 minute; + u32 second; +} +RTCTime; + +typedef struct RTCAlarmParam +{ + RTCWeek week; // Day of the week + u32 hour; // Hour ( 0 ~ 23 ) + u32 minute; // Minute ( 0 ~ 59 ) + u32 enable; // Alarm enable flag ( RTC_ALARM_ENABLE_* ) + +} +RTCAlarmParam; + +typedef enum RTCResult +{ + RTC_RESULT_SUCCESS = 0, + RTC_RESULT_BUSY, + RTC_RESULT_ILLEGAL_PARAMETER, + RTC_RESULT_SEND_ERROR, + RTC_RESULT_INVALID_COMMAND, + RTC_RESULT_ILLEGAL_STATUS, + RTC_RESULT_FATAL_ERROR, + RTC_RESULT_MAX +} +RTCResult; + +typedef void (*RTCCallback) (RTCResult result, void *arg); +typedef void (*RTCInterrupt) (void); + +void RTC_Init(void); +RTCResult RTC_GetDate(RTCDate *date); +RTCResult RTC_GetTime(RTCTime *time); +RTCResult RTC_GetDateTime(RTCDate *date, RTCTime *time); +RTCResult RTC_SetDate(const RTCDate *date); +RTCResult RTC_SetTime(const RTCTime *time); +RTCResult RTC_SetDateTime(const RTCDate *date, const RTCTime *time); +RTCResult RTC_GetAlarmStatus(RTCAlarmChan chan, RTCAlarmStatus *status); +RTCResult RTC_GetAlarmParam(RTCAlarmChan chan, RTCAlarmParam *param); +RTCResult RTC_SetAlarmStatus(RTCAlarmChan chan, const RTCAlarmStatus *status); +RTCResult RTC_SetAlarmParam(RTCAlarmChan chan, const RTCAlarmParam *param); +RTCResult RTC_GetDateAsync(RTCDate *date, RTCCallback callback, void *arg); +RTCResult RTC_GetTimeAsync(RTCTime *time, RTCCallback callback, void *arg); +RTCResult RTC_GetDateTimeAsync(RTCDate *date, RTCTime *time, RTCCallback callback, void *arg); +RTCResult RTC_SetDateAsync(const RTCDate *date, RTCCallback callback, void *arg); +RTCResult RTC_SetTimeAsync(const RTCTime *time, RTCCallback callback, void *arg); +RTCResult RTC_SetDateTimeAsync(const RTCDate *date, const RTCTime *time, RTCCallback callback, + void *arg); +RTCResult RTC_GetAlarmStatusAsync(RTCAlarmChan chan, RTCAlarmStatus *status, RTCCallback callback, + void *arg); +RTCResult RTC_GetAlarmParamAsync(RTCAlarmChan chan, RTCAlarmParam *param, RTCCallback callback, + void *arg); +void RTC_SetAlarmInterrupt(RTCInterrupt interrupt); +RTCResult RTC_SetAlarmStatusAsync(RTCAlarmChan chan, const RTCAlarmStatus *status, + RTCCallback callback, void *arg); +RTCResult RTC_SetAlarmParamAsync(RTCAlarmChan chan, const RTCAlarmParam *param, + RTCCallback callback, void *arg); + +#endif //NITRO_RTC_API_H_ diff --git a/arm9/lib/NitroSDK/include/RTC_convert.h b/arm9/lib/NitroSDK/include/RTC_convert.h new file mode 100644 index 00000000..a75928b9 --- /dev/null +++ b/arm9/lib/NitroSDK/include/RTC_convert.h @@ -0,0 +1,12 @@ +#ifndef NITRO_RTC_CONVERT_H_ +#define NITRO_RTC_CONVERT_H_ + +s32 RTC_ConvertDateToDay(const RTCDate * date); +s32 RTCi_ConvertTimeToSecond(const RTCTime * time); +s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time); +void RTC_ConvertDayToDate(RTCDate * date, s32 day); +void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec); +void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec); +RTCWeek RTC_GetDayOfWeek(RTCDate * date); + +#endif //NITRO_RTC_CONVERT_H_ diff --git a/arm9/lib/NitroSDK/include/RTC_internal.h b/arm9/lib/NitroSDK/include/RTC_internal.h new file mode 100644 index 00000000..440d8b95 --- /dev/null +++ b/arm9/lib/NitroSDK/include/RTC_internal.h @@ -0,0 +1,11 @@ +#ifndef NITRO_RTC_INTERNAL_H_ +#define NITRO_RTC_INTERNAL_H_ + +#include "nitro/types.h" + +BOOL RTCi_WriteRawStatus2Async(void); +BOOL RTCi_ReadRawTimeAsync(void); +BOOL RTCi_ReadRawDateAsync(void); +BOOL RTCi_ReadRawDateTimeAsync(void); + +#endif //NITRO_RTC_INTERNAL_H_ diff --git a/arm9/lib/NitroSDK/include/SND_alarm.h b/arm9/lib/NitroSDK/include/SND_alarm.h new file mode 100644 index 00000000..07b77f45 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_alarm.h @@ -0,0 +1,14 @@ +#ifndef GUARD_SND_ALARM_H +#define GUARD_SND_ALARM_H + +#include "global.h" +#include "nitro/SND_alarm_shared.h" + +typedef void (*SNDAlarmCallback)(void *); + +void SND_AlarmInit(void); +void SNDi_IncAlarmId(u32 idx); +u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data); +void SNDi_CallAlarmHandler(s32 idx); + +#endif diff --git a/arm9/lib/NitroSDK/include/SND_bank.h b/arm9/lib/NitroSDK/include/SND_bank.h new file mode 100644 index 00000000..b9000d57 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_bank.h @@ -0,0 +1,95 @@ +#ifndef GUARD_SND_BANK_H +#define GUARD_SND_BANK_H + +#include "global.h" + +#include "SND_main.h" + +#define SND_INST_ILLEGAL 0 +#define SND_INST_PCM 1 +#define SND_INST_PSG 2 +#define SND_INST_NOISE 3 +#define SND_INST_DIRECTPCM 4 +#define SND_INST_DUMMY 5 +#define SND_INST_DRUM_TABLE 16 +#define SND_INST_KEY_SPLIT 17 + +#define SND_BANK_MAX_WAVEARC 4 +#define SND_INST_MAX_KEYSPLIT 8 + +#define SND_INST_OFFSET_TYPE(off) ((u8)off) +#define SND_INST_OFFSET_NORMAL(bank, off) ((struct SNDInstParam *)((u8 *)bank + (u32)(off >> 8))) +#define SND_INST_OFFSET_DRUMS(bank, off) ((struct SNDDrumSet *)((u8 *)bank + (u32)(off >> 8))) +#define SND_INST_OFFSET_KEYSPL(bank, off) ((struct SNDKeySplit *)((u8 *)bank + (u32)(off >> 8))) + +struct SNDWaveArc; + +struct SNDWaveArcLink { + struct SNDWaveArc *waveArc; // 0x0 + struct SNDWaveArcLink *waveArcLLnext; // 0x4 +}; // size = 0x8 + +struct SNDBankData { + struct SNDBinaryFileHeader fileHeader; // 0x00 + struct SNDBinaryBlockHeader blockHeader; // 0x10 + struct SNDWaveArcLink waveArcLinks[SND_BANK_MAX_WAVEARC]; // 0x18 + u32 instCount; // 0x38 + u32 instOffsets[]; // 0x3C +}; // size = 0x40 + +struct SNDWaveArc { + struct SNDBinaryFileHeader fileHeader; // 0x00 + struct SNDBinaryBlockHeader blockHeader; // 0x10 + struct SNDWaveArcLink *waveArcLLHead; // 0x18 + u8 unk_1C[28]; // 0x1C + u32 waveCount; // 0x38 + u32 waveOffsets[]; // 0x3C +}; // size = 0x3C + +struct SNDInstParam { + u16 wave[2]; // 0x0 + u8 rootKey; // 0x4 + u8 envAttack; // 0x5 + u8 envDecay; // 0x6 + u8 envSustain; // 0x7 + u8 envRelease; // 0x8 + u8 pan; // 0x9 +}; // size = 0xA + +struct SNDInstData { + u8 type; // 0x0 + u8 unk_1; // 0x1 + struct SNDInstParam param; // 0x2 +}; // size = 0xC + +struct SNDKeySplit { + u8 key[SND_INST_MAX_KEYSPLIT]; // 0x0 + struct SNDInstData instruments[]; // 0x8 +}; // size = 0x8 + +struct SNDDrumSet { + u8 minKey; + u8 maxKey; + struct SNDInstData instruments[]; +}; // size = 0x2 + +struct SNDInstPos { + u32 program; // 0x0 + u32 index; // 0x4 +}; // size = 0x8 + +struct SNDWaveData { + struct SNDWaveParam param; // 0x0 + u8 sampleData[]; // 0xC +}; // size = 0xC + +void SND_AssignWaveArc(struct SNDBankData *bankData, s32 index, struct SNDWaveArc *waveArc); +void SND_DestroyBank(struct SNDBankData *bankData); +void SND_DestroyWaveArc(struct SNDWaveArc *waveArc); +struct SNDInstPos SND_GetFirstInstDataPos(const struct SNDBankData *bankData); +BOOL SND_GetNextInstData(const struct SNDBankData *bankData, struct SNDInstData *instData, struct SNDInstPos *instPos); +u32 SND_GetWaveDataCount(const struct SNDWaveArc *waveArc); +void SND_SetWaveDataAddress(struct SNDWaveArc *waveArc, s32 index, const struct SNDWaveData *waveData); +const struct SNDWaveData *SND_GetWaveDataAddress(const struct SNDWaveArc *waveArc, s32 index); + +#endif // GUARD_SND_BANK_H diff --git a/arm9/lib/NitroSDK/include/SND_command.h b/arm9/lib/NitroSDK/include/SND_command.h new file mode 100644 index 00000000..ff392833 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_command.h @@ -0,0 +1,67 @@ +#ifndef GUARD_SND_COMMAND_H +#define GUARD_SND_COMMAND_H + +#include "global.h" + +#define SND_CMD_COUNT 256 +#define SND_CMD_ARG_MAX 4 + +#define SND_CMD_FLAG_NOBLOCK 0x0 +#define SND_CMD_FLAG_BLOCK 0x1 +#define SND_CMD_FLAG_IMMEDIATE 0x2 + +#define SND_CMD_START_SEQ 0x00 +#define SND_CMD_STOP_SEQ 0x01 +#define SND_CMD_PREPARE_SEQ 0x02 +#define SND_CMD_START_PREPARED_SEQ 0x03 +#define SND_CMD_PAUSE_SEQ 0x04 +#define SND_CMD_SKIP_SEQ 0x05 +#define SND_CMD_PLAYER_PARAM 0x06 +#define SND_CMD_TRACK_PARAM 0x07 +#define SND_CMD_MUTE_TRACK 0x08 +#define SND_CMD_ALLOCATABLE_CHANNEL 0x09 +#define SND_CMD_PLAYER_LOCAL_VAR 0x0A +#define SND_CMD_PLAYER_GLOBAL_VAR 0x0B +#define SND_CMD_START_TIMER 0x0C +#define SND_CMD_STOP_TIMER 0x0D +#define SND_CMD_SETUP_CHANNEL_PCM 0x0E +#define SND_CMD_SETUP_CHANNEL_PSG 0x0F +#define SND_CMD_SETUP_CHANNEL_NOISE 0x10 +#define SND_CMD_SETUP_CAPTURE 0x11 +#define SND_CMD_SETUP_ALARM 0x12 +#define SND_CMD_CHANNEL_TIMER 0x13 +#define SND_CMD_CHANNEL_VOLUME 0x14 +#define SND_CMD_CHANNEL_PAN 0x15 +#define SND_CMD_SURROUND_DECAY 0x16 +#define SND_CMD_MASTER_VOLUME 0x17 +#define SND_CMD_MASTER_PAN 0x18 +#define SND_CMD_OUTPUT_SELECTOR 0x19 +#define SND_CMD_LOCK_CHANNEL 0x1A +#define SND_CMD_UNLOCK_CHANNEL 0x1B +#define SND_CMD_STOP_UNLOCKED_CHANNEL 0x1C +#define SND_CMD_SET_SHARED_WORK 0x1D +#define SND_CMD_INVALIDATE_SEQ 0x1E +#define SND_CMD_INVALIDATE_BANK 0x1F +#define SND_CMD_INVALIDATE_WAVE 0x20 +#define SND_CMD_READ_DRIVER_INFO 0x21 + +struct SNDCommand { + struct SNDCommand *llNext; // 0x0 + s32 id; // 0x4 + u32 arg[SND_CMD_ARG_MAX]; // 0x8 +}; // size = 0x18 + +void SND_CommandInit(void); +const struct SNDCommand *SND_RecvCommandReply(u32 flags); +struct SNDCommand *SND_AllocCommand(u32 flags); +void SND_PushCommand(struct SNDCommand *cmd); +BOOL SND_FlushCommand(u32 flags); +void SND_WaitForCommandProc(u32 tag); +void SND_WaitForFreeCommand(s32 count); +u32 SND_GetCurrentCommandTag(void); +BOOL SND_IsFinishedCommandTag(u32 tag); +s32 SND_CountFreeCommand(void); +s32 SND_CountReservedCommand(void); +s32 SND_CountWaitingCommand(void); + +#endif // GUARD_SND_COMMAND_H diff --git a/arm9/lib/NitroSDK/include/SND_interface.h b/arm9/lib/NitroSDK/include/SND_interface.h new file mode 100644 index 00000000..d0898f85 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_interface.h @@ -0,0 +1,63 @@ +#ifndef GUARD_SND_INTERFACE_H +#define GUARD_SND_INTERFACE_H + +#include "global.h" +#include "SND_bank.h" +#include "SND_work.h" +#include "SND_alarm.h" + +void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData); +void SND_StopSeq(s32 player); +void SND_PrepareSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData); +void SND_StartPreparedSeq(s32 player); +void SND_PauseSeq(s32 player, BOOL flag); + +void SND_SetPlayerTempoRatio(s32 player, s32 ratio); +void SND_SetPlayerVolume(s32 player, s32 volume); +void SND_SetPlayerChannelPriority(s32 player, s32 prio); +void SND_SetPlayerLocalVariable(s32 player, s32 varNo, s16 var); +void SND_SetPlayerGlobalVariable(s32 varNo, s16 var); + +void SND_SetTrackVolume(s32 player, u32 trackBitMask, s32 volume); +void SND_SetTrackPitch(s32 player, u32 trackBitMask, s32 pitch); +void SND_SetTrackPan(s32 player, u32 trackBitMask, s32 pan); +void SND_SetTrackPanRange(s32 player, u32 trackBitMask, s32 panRange); +void SND_SetTrackModDepth(s32 player, u32 trackBitMask, s32 depth); +void SND_SetTrackModSpeed(s32 player, u32 trackBitMask, s32 speed); +void SND_SetTrackAllocatableChannel(s32 player, u32 trackBitMask, u32 chnBitMask); +void SND_SetTrackMute(s32 player, u32 trackBitMask, BOOL flag); + +void SND_StartTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags); +void SND_StopTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags); + +void SND_SetupCapture(s32 capture, s32 format, void *bufferPtr, u32 length, BOOL loopFlag, s32 in, s32 out); +void SND_SetupAlarm(s32 alarm, u32 tick, u32 period, SNDAlarmCallback cb, void *userData); + +void SND_StopUnlockedChannel(u32 chnBitMask, u32 flags); +void SND_LockChannel(u32 chnBitMask, u32 flags); +void SND_UnlockChannel(u32 chnBitMask, u32 flags); + +void SND_SetChannelTimer(u32 chnBitMask, s32 timer); +void SND_SetChannelVolume(u32 chnBitMask, s32 volume, s32 chnDataShift); +void SND_SetChannelPan(u32 chnBitMask, s32 pan); +void SND_SetupChannelPcm(s32 chn, s32 waveFormat, const void *dataAddr, s32 loopMode, s32 loopStart, s32 dataLen, s32 volume, s32 chnDataShift, s32 timer, s32 pan); +void SND_SetupChannelPsg(s32 chn, s32 sndDuty, s32 volume, s32 chnDataShift, s32 timer, s32 pan); +void SND_SetupChannelNoise(s32 chn, s32 volume, s32 chnDataShift, s32 timer, s32 pan); + +void SND_InvalidateSeqData(const void *start, const void *end); +void SND_InvalidateBankData(const void *start, const void *end); +void SND_InvalidateWaveData(const void *start, const void *end); + +void SND_SetMasterVolume(s32 volume); +void SND_SetOutputSelector(s32 left, s32 right, s32 channel1, s32 channel3); +void SND_SetMasterPan(s32 pan); +void SND_ResetMasterPan(void); + +void SND_ReadDriverInfo(struct SNDDriverInfo *info); + +void SNDi_SetPlayerParam(s32 player, u32 offset, u32 data, s32 size); +void SNDi_SetTrackParam(s32 player, u32 trackBitMask, u32 offset, u32 data, s32 size); +void SNDi_SetSurroundDecay(s32 decay); +void SNDi_SkipSeq(s32 player, u32 tick); + +#endif // GUARD_SND_INTERFACE_H diff --git a/arm9/lib/NitroSDK/include/SND_main.h b/arm9/lib/NitroSDK/include/SND_main.h new file mode 100644 index 00000000..8fa9364e --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_main.h @@ -0,0 +1,26 @@ +#ifndef GUARD_SND_MAIN_H +#define GUARD_SND_MAIN_H + +#include "global.h" + +#include "nitro/SND_main_shared.h" + +void SNDi_UnlockMutex(void); +void SNDi_LockMutex(void); +void SND_Init(void); + +struct SNDBinaryFileHeader { + s8 signature[4]; // 0x0 + u16 byteOrder; // 0x4 + u16 version; // 0x6 + u32 fileSize; // 0x8 + u16 headerSize; // 0xC + u16 dataBlocks; // 0xE +}; // size = 0x10 + +typedef struct SNDBinaryBlockHeader { + u32 type; // 0x0 + u32 size; // 0x4 +} SNDBinaryBlockHeader; // size = 0x8 + +#endif // GUARD_SND_MAIN_H diff --git a/arm9/lib/NitroSDK/include/SND_util.h b/arm9/lib/NitroSDK/include/SND_util.h new file mode 100644 index 00000000..4137459a --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_util.h @@ -0,0 +1,14 @@ +#ifndef GUARD_SND_UTIL_H +#define GUARD_SND_UTIL_H + +#include "global.h" + +void SND_CalcTimer(void); +u16 SND_CalcChannelVolume(s32 x); + +extern const s16 SNDi_DecibelTable[0x80]; + +// not used in pokediamond +//extern const s16 SNDi_DecibelSquareTable[0x80]; + +#endif // GUARD_SND_UTIL_H diff --git a/arm9/lib/NitroSDK/include/SND_work.h b/arm9/lib/NitroSDK/include/SND_work.h new file mode 100644 index 00000000..a8a3d62b --- /dev/null +++ b/arm9/lib/NitroSDK/include/SND_work.h @@ -0,0 +1,68 @@ +#ifndef GUARD_SND_WORK_H +#define GUARD_SND_WORK_H + +#include "global.h" + +#include "SND_main.h" +#include "nitro/SND_work_shared.h" + +struct SNDDriverInfo { + struct SNDWork work; // 0x0000 + u32 channelControls[SND_CHANNEL_COUNT]; // 0x1180 + struct SNDWork *workPtr; // 0x11C0 + u32 lockedChannels; // 0x11C4 + u8 unk_XXX[24]; // 0x11C8 +}; // size = 0x11E0 + +struct SNDChannelInfo { + struct { + BOOL active : 1; + BOOL locked: 1; + } flags; // 0x0 + u16 volume; // 0x4 + u8 pan; // 0x6 + u8 unk_7; // 0x7 + s32 envStatus; // 0x8 +}; // size = 0xC + +struct SNDPlayerInfo { + struct { + BOOL active : 1; + BOOL paused : 1; + } flags; // 0x0 + u16 trackBitMask; // 0x4 + u16 tempo; // 0x6 + u8 volume; // 0x8 + u8 unk_9[3]; // 0x9 +}; // size = 0xC + +struct SNDTrackInfo { + u16 program; // 0x0 + u8 volume; // 0x2 + u8 expression; // 0x3 + + s8 pitchBend; // 0x4 + u8 bendRange; // 0x5 + u8 pan; // 0x6 + s8 transpose; // 0x7 + + u8 unk_8; // 0x8 + u8 chnCount; // 0x9 + u8 channel[SND_CHANNEL_COUNT]; // 0xA +}; // size = 0x1A + +u32 SND_GetPlayerStatus(void); +u16 SND_GetChannelStatus(void); +//u16 SND_GetCaptureStatus(void); +u32 SND_GetPlayerTickCounter(u32 playerId); +//s16 SND_GetPlayerLocalVariable(u32 playerId, u32 var); +//s16 SND_GetPlayerGlobalVariable(u32 var); +//BOOL SND_ReadChannelInfo(const SNDDriverInfo *driverInfo, s32 chnId, SNDChannelInfo *chnInfo); +//BOOL SND_ReadPlayerInfo(const SNDDriverInfo *driverInfo, s32 playerId, s32 trackId, SNDPlayerInfo *playerInfo); +//BOOL SND_ReadTrackInfo(const SNDDriverInfo *driverInfo s32 playerId, s32 trackId, SNDTrackInfo *trackInfo); +u32 SNDi_GetFinishedCommandTag(void); +void SNDi_InitSharedWork(struct SNDSharedWork *sw); + +extern struct SNDSharedWork *SNDi_SharedWork; + +#endif // GUARD_SND_WORK_H diff --git a/arm9/lib/NitroSDK/include/SPI_mic.h b/arm9/lib/NitroSDK/include/SPI_mic.h new file mode 100644 index 00000000..79588fe9 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SPI_mic.h @@ -0,0 +1,6 @@ +#ifndef NITRO_SPI_MIC_H_ +#define NITRO_SPI_MIC_H_ + +void MIC_Init(void); + +#endif //NITRO_SPI_MIC_H_ diff --git a/arm9/lib/NitroSDK/include/SPI_pm.h b/arm9/lib/NitroSDK/include/SPI_pm.h new file mode 100644 index 00000000..95f94f24 --- /dev/null +++ b/arm9/lib/NitroSDK/include/SPI_pm.h @@ -0,0 +1,40 @@ +#ifndef NITRO_SPI_PM_H_ +#define NITRO_SPI_PM_H_ + +ENUMS_ALWAYS_INT_ON + +#define PM_TRIGGER_KEY (1 << 0) +#define PM_TRIGGER_RTC_ALARM (1 << 1) +#define PM_TRIGGER_COVER_OPEN (1 << 2) +#define PM_TRIGGER_CARD (1 << 3) +#define PM_TRIGGER_CARTRIDGE (1 << 4) +typedef u32 PMWakeUpTrigger; + +#define PM_PAD_LOGIC_OR (0 << REG_PAD_KEYCNT_LOGIC_SHIFT) +#define PM_PAD_LOGIC_AND (1 << REG_PAD_KEYCNT_LOGIC_SHIFT) +typedef u32 PMLogic; + +typedef enum +{ + PM_BACKLIGHT_OFF = 0, + PM_BACKLIGHT_ON = 1 +} PMBackLightSwitch; + +typedef enum +{ + PM_LCD_TOP = 0, + PM_LCD_BOTTOM = 1, + PM_LCD_ALL = 2 +} +PMLCDTarget; + +void PM_GetBackLight(PMBackLightSwitch * top, PMBackLightSwitch * bottom); +void PM_GoSleepMode(PMWakeUpTrigger trigger, PMLogic logic, u16 keyPattern); +u32 PM_SetBackLight(PMLCDTarget target, PMBackLightSwitch status); +u32 PM_ForceToPowerOff(void); +void PM_SetAmp(int gain); +void PM_SetAmpGain(int gain); + +ENUMS_ALWAYS_INT_RESET + +#endif //NITRO_SPI_PM_H_ diff --git a/arm9/lib/NitroSDK/include/WM.h b/arm9/lib/NitroSDK/include/WM.h new file mode 100644 index 00000000..ad287292 --- /dev/null +++ b/arm9/lib/NitroSDK/include/WM.h @@ -0,0 +1,61 @@ +#ifndef POKEDIAMOND_WM_H +#define POKEDIAMOND_WM_H + +#include "nitro/types.h" + +typedef struct WMDataSet +{ + u16 aidBitmap; + u16 receivedBitmap; + u16 data[508 / sizeof(u16)]; +} WMDataSet; + +typedef struct WMDataSharingInfo +{ + WMDataSet ds[4]; + u16 seqNum[4]; + u16 writeIndex; + u16 sendIndex; + u16 readIndex; + u16 aidBitmap; + u16 dataLength; + u16 stationNumber; + u16 dataSetLength; + u16 port; + u16 doubleMode; + u16 currentSeqNum; + u16 state; + u16 reserved[1]; +} WMDataSharingInfo; + +typedef WMDataSharingInfo WMKeySetBuf; + +typedef enum WMErrCode +{ + WM_ERRCODE_SUCCESS = 0, + WM_ERRCODE_FAILED = 1, + WM_ERRCODE_OPERATING = 2, + WM_ERRCODE_ILLEGAL_STATE = 3, + WM_ERRCODE_WM_DISABLE = 4, + WM_ERRCODE_NO_KEYSET = 5, + WM_ERRCODE_NO_DATASET = 5, + WM_ERRCODE_INVALID_PARAM = 6, + WM_ERRCODE_NO_CHILD = 7, + WM_ERRCODE_FIFO_ERROR = 8, + WM_ERRCODE_TIMEOUT = 9, + WM_ERRCODE_SEND_QUEUE_FULL = 10, + WM_ERRCODE_NO_ENTRY = 11, + WM_ERRCODE_OVER_MAX_ENTRY = 12, + WM_ERRCODE_INVALID_POLLBITMAP = 13, + WM_ERRCODE_NO_DATA = 14, + WM_ERRCODE_SEND_FAILED = 15, + + WM_ERRCODE_DCF_TEST, + WM_ERRCODE_WL_INVALID_PARAM, + WM_ERRCODE_WL_LENGTH_ERR, + + WM_ERRCODE_FLASH_ERROR, + WM_ERRCODE_MAX +} WMErrCode; + +#endif //POKEDIAMOND_WM_H diff --git a/arm9/lib/NitroSDK/include/WM_ks.h b/arm9/lib/NitroSDK/include/WM_ks.h new file mode 100644 index 00000000..0eeb6b1b --- /dev/null +++ b/arm9/lib/NitroSDK/include/WM_ks.h @@ -0,0 +1,9 @@ +#ifndef POKEDIAMOND_WM_KS_H +#define POKEDIAMOND_WM_KS_H + +#include "WM.h" + +WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port); +WMErrCode WM_EndKeySharing(WMKeySetBuf *buf); + +#endif //POKEDIAMOND_WM_KS_H diff --git a/arm9/lib/NitroSDK/include/consts.h b/arm9/lib/NitroSDK/include/consts.h new file mode 100644 index 00000000..127339ca --- /dev/null +++ b/arm9/lib/NitroSDK/include/consts.h @@ -0,0 +1,63 @@ +#ifndef POKEDIAMOND_ARM9_CONSTS_H +#define POKEDIAMOND_ARM9_CONSTS_H + +#include "nitro/consts_shared.h" + +#define HW_C5_PERMIT_MASK 0xf + +#define HW_C5_PERMIT_RO 5 +#define HW_C5_PERMIT_RW 1 + +#define HW_C5_PR3_SFT 12 + +#define HW_C6_PR_4KB 0x16 +#define HW_C6_PR_8KB 0x18 +#define HW_C6_PR_16KB 0x1a +#define HW_C6_PR_32KB 0x1c +#define HW_C6_PR_64KB 0x1e +#define HW_C6_PR_128KB 0x20 +#define HW_C6_PR_256KB 0x22 +#define HW_C6_PR_512KB 0x24 +#define HW_C6_PR_1MB 0x26 +#define HW_C6_PR_2MB 0x28 +#define HW_C6_PR_4MB 0x2a +#define HW_C6_PR_8MB 0x2c +#define HW_C6_PR_16MB 0x2e +#define HW_C6_PR_32MB 0x30 +#define HW_C6_PR_64MB 0x32 +#define HW_C6_PR_128MB 0x34 +#define HW_C6_PR_256MB 0x36 +#define HW_C6_PR_512MB 0x38 +#define HW_C6_PR_1GB 0x3a +#define HW_C6_PR_2GB 0x3c +#define HW_C6_PR_4GB 0x3e + +#define HW_C6_PR_ENABLE 1 + +#define HW_C9_TCMR_16KB 0x0a +#define HW_C9_TCMR_32MB 0x20 + +#define HW_CACHE_LINE_SIZE 32 + +#define OSi_CONSOLE_NOT_DETECT 0xffffffff + +#define OS_CONSOLE_NITRO 0x80000000 +#define OS_CONSOLE_DEV_CARD 0x02000000 +#define OS_CONSOLE_SIZE_MASK 0x00000003 +#define OS_CONSOLE_SIZE_4MB 0x00000001 + +#define OSi_TCM_REGION_BASE_MASK 0xfffff000 + +#define OS_IE_V_BLANK (1UL << 0) +#define OS_IE_H_BLANK (1UL << 1) + +#define HW_CPU_CLOCK_ARM9 67027964 + +#define REG_PXI_SUBP_FIFO_CNT_E_MASK 0x8000 +#define REG_PXI_SUBP_FIFO_CNT_ERR_MASK 0x4000 +#define REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK 0x0400 +#define REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK 0x0100 +#define REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK 0x0008 +#define REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK 0x0002 + +#endif //POKEDIAMOND_ARM9_CONSTS_H diff --git a/arm9/lib/NitroSDK/include/custom_allocator.h b/arm9/lib/NitroSDK/include/custom_allocator.h new file mode 100644 index 00000000..0a42ae13 --- /dev/null +++ b/arm9/lib/NitroSDK/include/custom_allocator.h @@ -0,0 +1,13 @@ +#ifndef POKEDIAMOND_CUSTOM_ALLOCATOR_H +#define POKEDIAMOND_CUSTOM_ALLOCATOR_H + +#include "nitro/types.h" + +typedef void * (* AllocFunc)(u32 size); +typedef void (* FreeFunc)(void * ptr); + +void* CallCustomAllocator(u32 size); +void CallCustomDestructor(void * ptr); +void SetCustomAllocatorAndDestructor(AllocFunc allocator, FreeFunc destructor); + +#endif //POKEDIAMOND_CUSTOM_ALLOCATOR_H diff --git a/arm9/lib/NitroSDK/include/dgt.h b/arm9/lib/NitroSDK/include/dgt.h new file mode 100644 index 00000000..97916f1b --- /dev/null +++ b/arm9/lib/NitroSDK/include/dgt.h @@ -0,0 +1,37 @@ +#ifndef GUARD_DGT_H +#define GUARD_DGT_H + +#include "nitro/types.h" + +struct DGTHash1Context { + union { + struct { + unsigned long a, b, c, d; + }; + unsigned long state[4]; + }; + unsigned long long length; + union { + unsigned long buffer32[16]; + unsigned char buffer8[64]; + }; +}; + +struct DGTHash2Context { + unsigned long Intermediate_Hash[5]; + unsigned long Length_Low; + unsigned long Length_High; + int Message_Block_Index; + unsigned char Message_Block[64]; + int Computed; + int Corrupted; +}; + +void DGT_Hash1Reset(struct DGTHash1Context *context); +void DGT_Hash1SetSource(struct DGTHash1Context *context, u8 *input, u32 length); +void DGT_Hash1GetDigest_R(u8 *digest, struct DGTHash1Context *context); +void DGT_Hash2Reset(struct DGTHash2Context *context); +void DGT_Hash2SetSource(struct DGTHash2Context *context, u8 *input, u32 length); +void DGT_Hash2GetDigest(struct DGTHash2Context *context, u8 *digest); + +#endif diff --git a/arm9/lib/NitroSDK/include/fx.h b/arm9/lib/NitroSDK/include/fx.h new file mode 100644 index 00000000..bdf49037 --- /dev/null +++ b/arm9/lib/NitroSDK/include/fx.h @@ -0,0 +1,177 @@ +#ifndef GUARD_FX_H +#define GUARD_FX_H + +#include "nitro/types.h" + +typedef s16 fx16; +typedef s32 fx32; +typedef s64 fx64; +typedef s64 fx64c; + +#define FX16_INT_MASK 0xF000 +#define FX16_INT_ABS_MASK 0x7000 +#define FX16_FRAC_MASK 0x0FFF +#define FX16_INT_SHIFT 0xC + +#define FX32_INT_MASK 0xFFFFF000 +#define FX32_INT_ABS_MASK 0x7FFFF000 +#define FX32_FRAC_MASK 0x00000FFF +#define FX32_INT_SHIFT 0xC + +#define FX64_INT_MASK 0xFFFFFFFFFFFFF000 +#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000 +#define FX64_FRAC_MASK 0x0000000000000FFF +#define FX64_INT_SHIFT 0xC + +#define FX64C_INT_MASK 0xFFFFFFFF00000000 +#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000 +#define FX64C_FRAC_MASK 0x00000000FFFFFFFF +#define FX64C_INT_SHIFT 0x20 + +#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT) +#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT) +#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK) + +#define FX16_INT(x) FX_INT(FX16, x) +#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x) +#define FX16_FRAC(x) FX_FRAC(FX16, x) + +#define FX32_INT(x) FX_INT(FX32, x) +#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x) +#define FX32_FRAC(x) FX_FRAC(FX32, x) + +#define FX64_INT(x) FX_INT(FX64, x) +#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x) +#define FX64_FRAC(x) FX_FRAC(FX64, x) + +#define FX64C_INT(x) FX_INT(FX64C, x) +#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) +#define FX64C_FRAC(x) FX_FRAC(FX64C, x) + +//TODO: clean up these macros +#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) +#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) +#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) +//the extra term here is for rounding +#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) + +#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) + +#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT))) +#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \ + (fx16)((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ + (fx16)((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) +#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \ + (fx32)((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ + (fx32)((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) +#define FX16_CONST(x) FX_F32_TO_FX16(x) +#define FX32_CONST(x) FX_F32_TO_FX32(x) + +#define FX16_ONE ((fx16)0x1000) +#define FX32_ONE ((fx32)0x00001000L) + +struct Vecx32 +{ + fx32 x; + fx32 y; + fx32 z; +}; + +struct Vecx16 +{ + fx16 x; + fx16 y; + fx16 z; +}; + +//Matrices are indexed as [column][row] +struct Mtx44 +{ + fx32 _[16]; +}; + +struct Mtx43 +{ + fx32 _[12]; +}; + +struct Mtx33 +{ + fx32 _[9]; +}; + +struct Mtx22 +{ + fx32 _[4]; +}; + +//FX +void FX_Init(); +fx32 FX_Modf(fx32 x, fx32 *iptr); + +//Atan +u16 FX_Atan(fx32 x); +u16 FX_Atan2(fx32 x, fx32 y); + +//Vec +void VEC_Add(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst); +void VEC_Subtract(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst); +void VEC_Fx16Add(struct Vecx16 *x, struct Vecx16 *y, struct Vecx16 *dst); +fx32 VEC_DotProduct(struct Vecx32 *x, struct Vecx32 *y); +fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b); +void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst); +void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst); +fx32 VEC_Mag(struct Vecx32 *a); +void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst); +void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst); +void VEC_MultAdd(fx32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst); + +//CP +fx32 FX_Div(fx32 numerator, fx32 denominator); +fx32 FX_Inv(fx32 x); +fx32 FX_Sqrt(fx32 x); +fx64 FX_GetDivResultFx64c(); +fx32 FX_GetDivResult(); +void FX_InvAsync(fx32 x); +fx32 FX_GetSqrtResult(); +void FX_DivAsync(fx32 numerator, fx32 denominator); +fx32 FX_DivS32(fx32 numerator, fx32 denominator); +fx32 FX_ModS32(fx32 num, fx32 mod); + +//Mtx +//The functions ending in underscores seem to be in assembly originally +//Mtx44 +void MTX_TransApply44(struct Mtx44 *mtx, struct Mtx44 *dst, fx32 x, fx32 y, fx32 z); +void MTX_Concat44(struct Mtx44 *a, struct Mtx44 *b, struct Mtx44 *c); +void MTX_Identity44_(struct Mtx44 *dst); +void MTX_Copy44To43_(struct Mtx44 *src, struct Mtx43 *dst); +void MTX_RotX44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); +void MTX_RotY44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); +void MTX_RotZ44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); + +//Mtx43 +void MTX_ScaleApply43(struct Mtx43 *mtx, struct Mtx43 *dst, fx32 x, fx32 y, fx32 z); +fx32 MTX_Inverse43(struct Mtx43 *mtx, struct Mtx43 *inv); +void MTX_Concat43(struct Mtx43 *a, struct Mtx43 *b, struct Mtx43 *c); +void MTX_MultVec43(struct Vecx32 *vec, struct Mtx43 *mtx, struct Vecx32 *dst); +void MTX_Identity43_(struct Mtx43 *mtx); +void MTX_Copy43To44_(struct Mtx43 *src, struct Mtx44 *dst); +void MTX_Scale43_(struct Mtx43 *dst, fx32 x, fx32 y, fx32 z); +void MTX_RotX43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi); +void MTX_RotY43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi); + +//Mtx33 +void MTX_ScaleApply33(struct Mtx33 *mtx, struct Mtx33 *dst, fx32 x, fx32 y, fx32 z); +void MTX_Concat33(struct Mtx33 *a, struct Mtx33 *b, struct Mtx33 *c); +void MTX_MultVec33(struct Vecx32 *vec, struct Mtx33 *mtx, struct Vecx32 *dst); +void MTX_Identity33_(struct Mtx33 *mtx); +void MTX_RotX33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); +void MTX_RotY33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); +void MTX_RotZ33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); + +//Mtx22 +void MTX_ScaleApply22(struct Mtx22 *mtx, struct Mtx22 *dst, fx32 x, fx32 y); +void MTX_Identity22_(struct Mtx22 *mtx); +void MTX_Rot22_(struct Mtx22 *mtx, fx32 sinphi, fx32 cosphi); + +#endif //GUARD_FX_H diff --git a/arm9/lib/NitroSDK/include/gx.h b/arm9/lib/NitroSDK/include/gx.h new file mode 100644 index 00000000..7e6606fa --- /dev/null +++ b/arm9/lib/NitroSDK/include/gx.h @@ -0,0 +1,234 @@ +#ifndef GUARD_GX_H +#define GUARD_GX_H + +#include "fx.h" +#include "MI_memory.h" +#include "MI_dma.h" +#include "OS_vramExclusive.h" +#include "registers.h" + +//temporary while other files aren't decompiled + +void GXi_NopClearFifo128_(void *); + +#include "GXcommon.h" +#include "GX_struct_2d.h" +#include "GX_g3.h" +#include "GX_g3_util.h" +#include "GX_g3x.h" +#include "GX_g3b.h" +#include "GX_asm.h" +#include "GX_vramcnt.h" +#include "GX_bgcnt.h" +#include "GX_load2d.h" +#include "GX_load3d.h" +#include "GX_g2.h" +#include "GX_state.h" +#include "GX_g3imm.h" +#include "GX_dma.h" + +typedef union +{ + u32 raw; + struct + { + u32 bgMode:3; + u32 bg0_2d3d:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:4; + u32 extObjMapChar:2; + u32 extObjMapBmp:1; + u32 hBlankObjProc:1; + u32 bgCharOffset:3; + u32 bgScrOffset:3; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; +} +GXDispCnt; + +typedef union +{ + u32 raw; + struct + { + u32 bgMode:3; + u32 _reserve1:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:1; + u32 _reserve2:3; + u32 extObjMapChar:2; + u32 _reserve3:1; + u32 hBlankObjProc:1; + u32 _reserve4:6; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; +} +GXSDispCnt; + +typedef enum +{ + GX_BGMODE_0 = 0, + GX_BGMODE_1 = 1, + GX_BGMODE_2 = 2, + GX_BGMODE_3 = 3, + GX_BGMODE_4 = 4, + GX_BGMODE_5 = 5, + GX_BGMODE_6 = 6 +} +GXBGMode; + +typedef enum +{ + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; + +typedef enum +{ + GX_DISPMODE_GRAPHICS = 0x01, + GX_DISPMODE_VRAM_A = 0x02, + GX_DISPMODE_VRAM_B = 0x06, + GX_DISPMODE_VRAM_C = 0x0a, + GX_DISPMODE_VRAM_D = 0x0e, + GX_DISPMODE_MMEM = 0x03 +} +GXDispMode; + +typedef enum +{ + GX_PLANEMASK_NONE = 0x00, + GX_PLANEMASK_BG0 = 0x01, + GX_PLANEMASK_BG1 = 0x02, + GX_PLANEMASK_BG2 = 0x04, + GX_PLANEMASK_BG3 = 0x08, + GX_PLANEMASK_OBJ = 0x10 +} +GXPlaneMask; + +typedef enum +{ + GX_WNDMASK_NONE = 0x00, + GX_WNDMASK_W0 = 0x01, + GX_WNDMASK_W1 = 0x02, + GX_WNDMASK_OW = 0x04 +} +GXWndMask; + +typedef enum +{ + GX_BGCHAROFFSET_0x00000 = 0x00, + GX_BGCHAROFFSET_0x10000 = 0x01, + GX_BGCHAROFFSET_0x20000 = 0x02, + GX_BGCHAROFFSET_0x30000 = 0x03, + GX_BGCHAROFFSET_0x40000 = 0x04, + GX_BGCHAROFFSET_0x50000 = 0x05, + GX_BGCHAROFFSET_0x60000 = 0x06, + GX_BGCHAROFFSET_0x70000 = 0x07 +} +GXBGCharOffset; + +typedef enum +{ + GX_BGSCROFFSET_0x00000 = 0x00, + GX_BGSCROFFSET_0x10000 = 0x01, + GX_BGSCROFFSET_0x20000 = 0x02, + GX_BGSCROFFSET_0x30000 = 0x03, + GX_BGSCROFFSET_0x40000 = 0x04, + GX_BGSCROFFSET_0x50000 = 0x05, + GX_BGSCROFFSET_0x60000 = 0x06, + GX_BGSCROFFSET_0x70000 = 0x07 +} +GXBGScrOffset; + +typedef enum +{ + GX_DISP_SELECT_SUB_MAIN = 0, + GX_DISP_SELECT_MAIN_SUB = 1 +} +GXDispSelect; + +typedef enum +{ + GX_OBJVRAMMODE_CHAR_2D = (0 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT), + GX_OBJVRAMMODE_CHAR_1D_32K = + (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT), + GX_OBJVRAMMODE_CHAR_1D_64K = + (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (1 << REG_GX_DISPCNT_EXOBJ_SHIFT), + GX_OBJVRAMMODE_CHAR_1D_128K = + (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (2 << REG_GX_DISPCNT_EXOBJ_SHIFT), + GX_OBJVRAMMODE_CHAR_1D_256K = + (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (3 << REG_GX_DISPCNT_EXOBJ_SHIFT) +} + GXOBJVRamModeChar; + +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d); +void GXS_SetGraphicsMode(GXBGMode mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); + +static inline void GX_SetMasterBrightness(int brightness) +{ + GXx_SetMasterBrightness_(®_GX_MASTER_BRIGHT, brightness); +} + +static inline void GX_SetVisiblePlane(int plane) +{ + reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_DISPLAY_MASK) | (plane << REG_GX_DISPCNT_DISPLAY_SHIFT)); +} + +static inline void GXS_SetVisiblePlane(int plane) +{ + reg_GXS_DB_DISPCNT = (u32)((reg_GXS_DB_DISPCNT & ~REG_GXS_DB_DISPCNT_DISPLAY_MASK) | (plane << REG_GXS_DB_DISPCNT_DISPLAY_SHIFT)); +} + +static inline void GXS_DispOn(void) +{ + reg_GXS_DB_DISPCNT |= REG_GXS_DB_DISPCNT_MODE_MASK; +} + +static inline void GX_SetDispSelect(GXDispSelect sel) +{ + reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~REG_GX_POWCNT_DSEL_MASK) | (sel << REG_GX_POWCNT_DSEL_SHIFT)); +} + +static inline void GX_SetBGScrOffset(GXBGScrOffset offset) +{ + reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_BGSCREENOFFSET_MASK) | (offset << REG_GX_DISPCNT_BGSCREENOFFSET_SHIFT)); +} + +static inline void GX_SetBGCharOffset(GXBGCharOffset offset) +{ + reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_BGCHAROFFSET_MASK) | (offset << REG_GX_DISPCNT_BGCHAROFFSET_SHIFT)); +} + +static inline void GX_SetVisibleWnd(int window) +{ + reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~(REG_GX_DISPCNT_W0_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_OW_MASK)) | (window << REG_GX_DISPCNT_W0_SHIFT)); +} + +static inline void GXS_SetVisibleWnd(int window) +{ + reg_GXS_DB_DISPCNT = (u32)((reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_W0_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_OW_MASK)) | (window << REG_GXS_DB_DISPCNT_W0_SHIFT)); +} + +static inline void GXS_SetOBJVRamModeChar(GXOBJVRamModeChar mode) +{ + reg_GXS_DB_DISPCNT = (u32)(reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK) | mode); +} + +#endif //GUARD_GX_H diff --git a/arm9/lib/NitroSDK/include/math.h b/arm9/lib/NitroSDK/include/math.h new file mode 100644 index 00000000..085aa24f --- /dev/null +++ b/arm9/lib/NitroSDK/include/math.h @@ -0,0 +1,9 @@ +#ifndef GUARD_MATH_H +#define GUARD_MATH_H + +#include "dgt.h" +#include "MATH_pop.h" +#include "MATH_crc.h" +#include "MATH_dgt.h" + +#endif diff --git a/arm9/lib/NitroSDK/include/mmap.h b/arm9/lib/NitroSDK/include/mmap.h new file mode 100644 index 00000000..69e9c696 --- /dev/null +++ b/arm9/lib/NitroSDK/include/mmap.h @@ -0,0 +1,102 @@ +#ifndef POKEDIAMOND_ARM9_MMAP_H +#define POKEDIAMOND_ARM9_MMAP_H + +#include "nitro/types.h" +#include "nitro/mmap_shared.h" + +extern u32 SDK_AUTOLOAD_DTCM_START[]; + +#define HW_MAIN_MEM_EX_SIZE 0x00800000 +#define HW_MAIN_MEM_DEBUGGER_OFFSET 0x00700000 + +#define HW_ITCM_IMAGE 0x01000000 +#define HW_ITCM 0x01FF8000 +#define HW_ITCM_SIZE 0x00008000 +#define HW_ITCM_END (HW_ITCM + HW_ITCM_SIZE) + +#define HW_IOREG 0x04000000 +#define HW_CTRDG_ROM 0x08000000 +#define HW_BIOS 0xffff0000 + +#define HW_DTCM ((u32)SDK_AUTOLOAD_DTCM_START) +#define HW_DTCM_SIZE 0x00004000 + +#define HW_DTCM_SYSRV (HW_DTCM + 0x00003fc0) +#define HW_INTR_CHECK_BUF (HW_DTCM_SYSRV + 0x38) +#define HW_EXCP_VECTOR_BUF (HW_DTCM_SYSRV + 0x1C) + + +#define HW_CARD_ROM_HEADER_SIZE 0x00000160 +#define HW_DOWNLOAD_PARAMETER_SIZE 0x00000020 + +#define HW_CHECK_DEBUGGER_SW 0x027ffc10 +#define HW_CARD_ROM_HEADER (HW_MAIN_MEM + 0x007ffa80) +#define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM + 0x007ffc00) +#define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20) +#define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c) +#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM + 0x007ffc30) +#define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer +#define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory +#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) +#define HW_MAIN_MEM_SHARED (HW_MAIN_MEM_EX_END - HW_MAIN_MEM_SHARED_SIZE) +#define HW_DTCM_SVC_STACK_END (HW_DTCM + 0x00003fc0) +#define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE) +#define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK) + +#define HW_MAIN_MEM_SUB (HW_MAIN_MEM_MAIN_END + 0x400000) + +#define HW_BIOS_EXCP_STACK_MAIN (HW_MAIN_MEM + 0x007ffd80) +#define HW_EXCP_VECTOR_MAIN (HW_MAIN_MEM + 0x007ffd9c) + +#define HW_PXI_SIGNAL_PARAM_ARM9 (HW_MAIN_MEM + 0x007fff80) + +#define HW_WM_RSSI_POOL (HW_MAIN_MEM + 0x007fff98) + +#define HW_COMPONENT_PARAM (HW_MAIN_MEM + 0x007fff9c) + +#define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0) +#define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0) +#define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0) + +#define OSi_MAIN_ARENA_HI_DEFAULT (HW_MAIN_MEM_MAIN_END) +#define OSi_MAINEX_ARENA_HI_DEFAULT (HW_MAIN_MEM + HW_MAIN_MEM_DEBUGGER_OFFSET) +#define HW_ITCM_ARENA_HI_DEFAULT (HW_ITCM + HW_ITCM_SIZE) +#define HW_SHARED_ARENA_HI_DEFAULT (HW_RED_RESERVED - HW_CARD_ROM_HEADER_SIZE - HW_DOWNLOAD_PARAMETER_SIZE) +#define HW_SHARED_ARENA_LO_DEFAULT (HW_MAIN_MEM_SHARED) +#define OSi_WRAM_MAIN_ARENA_HI_DEFAULT (HW_WRAM) +#define OSi_WRAM_MAIN_ARENA_LO_DEFAULT (HW_WRAM) + +#define HW_BG_PLTT 0x05000000 +#define HW_BG_PLTT_END 0x05000200 +#define HW_BG_PLTT_SIZE (HW_BG_PLTT_END-HW_BG_PLTT) +#define HW_OBJ_PLTT 0x05000200 +#define HW_OBJ_PLTT_END 0x05000400 +#define HW_OBJ_PLTT_SIZE (HW_OBJ_PLTT_END-HW_OBJ_PLTT) +#define HW_PLTT HW_BG_PLTT +#define HW_PLTT_END HW_OBJ_PLTT_END +#define HW_PLTT_SIZE (HW_PLTT_END-HW_PLTT) +#define HW_DB_BG_PLTT 0x05000400 +#define HW_DB_BG_PLTT_END 0x05000600 +#define HW_DB_BG_PLTT_SIZE (HW_DB_BG_PLTT_END-HW_DB_BG_PLTT) +#define HW_DB_OBJ_PLTT 0x05000600 +#define HW_DB_OBJ_PLTT_END 0x05000800 +#define HW_DB_OBJ_PLTT_SIZE (HW_DB_OBJ_PLTT_END-HW_DB_OBJ_PLTT) +#define HW_DB_PLTT HW_DB_BG_PLTT +#define HW_DB_PLTT_END HW_DB_OBJ_PLTT_END +#define HW_DB_PLTT_SIZE (HW_DB_PLTT_END-HW_DB_PLTT) +#define HW_LCDC_VRAM 0x6800000 +#define HW_LCDC_VRAM_END 0x68a4000 +#define HW_LCDC_VRAM_SIZE (HW_LCDC_VRAM_END - HW_LCDC_VRAM) +#define HW_OAM 0x07000000 +#define HW_OAM_END 0x07000400 +#define HW_OAM_SIZE (HW_OAM_END-HW_OAM) +#define HW_DB_OAM 0x07000400 +#define HW_DB_OAM_END 0x07000800 +#define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM) + +#define HW_CTRDG_RAM_END 0x0a010000 + +#define HW_DTCM_SYSRV_OFS_INTR_VECTOR 0x3c +#define HW_RESET_VECTOR 0xffff0000 + +#endif //POKEDIAMOND_ARM9_MMAP_H diff --git a/arm9/lib/NitroSDK/include/nitro.h b/arm9/lib/NitroSDK/include/nitro.h new file mode 100644 index 00000000..ea7503cc --- /dev/null +++ b/arm9/lib/NitroSDK/include/nitro.h @@ -0,0 +1,20 @@ +#ifndef POKEDIAMOND_NITRO_H +#define POKEDIAMOND_NITRO_H + +#ifdef __cplusplus +extern "C" { +#endif + +// Include all nitro files +#include "sections.h" +#include "misc.h" +#include "nitro/types.h" +#include "consts.h" +#include "OS_init.h" +#include "mmap.h" + +#ifdef __cplusplus +} +#endif + +#endif //POKEDIAMOND_NITRO_H diff --git a/arm9/lib/NitroSDK/include/registers.h b/arm9/lib/NitroSDK/include/registers.h new file mode 100644 index 00000000..b4fd8ce7 --- /dev/null +++ b/arm9/lib/NitroSDK/include/registers.h @@ -0,0 +1,1069 @@ +#ifndef POKEDIAMOND_ARM9_REGISTERS_H +#define POKEDIAMOND_ARM9_REGISTERS_H + +#include "nitro/types.h" +#include "nitro/registers_shared.h" + +#define reg_GX_DISPCNT (*(REGType32v *)0x4000000) +#define reg_GX_DISPSTAT (*(REGType16v *)0x4000004) +#define reg_GX_VCOUNT (*(REGType16v *)0x4000006) + +#define reg_G2_BG0CNT (*(REGType16v *)0x4000008) +#define reg_G2_BG1CNT (*(REGType16v *)0x400000a) +#define reg_G2_BG2CNT (*(REGType16v *)0x400000c) +#define reg_G2_BG3CNT (*(REGType16v *)0x400000e) +#define reg_G2_BG0OFS (*(REGType32v *)0x4000010) +#define reg_G2_BG0HOFS (*(REGType16v *)0x4000010) +#define reg_G2_BG0VOFS (*(REGType16v *)0x4000012) +#define reg_G2_BG1OFS (*(REGType32v *)0x4000014) +#define reg_G2_BG1HOFS (*(REGType16v *)0x4000014) +#define reg_G2_BG1VOFS (*(REGType16v *)0x4000016) +#define reg_G2_BG2OFS (*(REGType32v *)0x4000018) +#define reg_G2_BG2HOFS (*(REGType16v *)0x4000018) +#define reg_G2_BG2VOFS (*(REGType16v *)0x400001a) +#define reg_G2_BG3OFS (*(REGType32v *)0x400001c) +#define reg_G2_BG3HOFS (*(REGType16v *)0x400001c) +#define reg_G2_BG3VOFS (*(REGType16v *)0x400001e) +#define reg_G2_BG2PA (*(REGType16v *)0x4000020) +#define reg_G2_BG2PB (*(REGType16v *)0x4000022) +#define reg_G2_BG2PC (*(REGType16v *)0x4000024) +#define reg_G2_BG2PD (*(REGType16v *)0x4000026) +#define reg_G2_BG2X (*(REGType32v *)0x4000028) +#define reg_G2_BG2Y (*(REGType32v *)0x400002c) +#define reg_G2_BG3PA (*(REGType16v *)0x4000030) +#define reg_G2_BG3PB (*(REGType16v *)0x4000032) +#define reg_G2_BG3PC (*(REGType16v *)0x4000034) +#define reg_G2_BG3PD (*(REGType16v *)0x4000036) +#define reg_G2_BG3X (*(REGType32v *)0x4000038) +#define reg_G2_BG3Y (*(REGType32v *)0x400003c) +#define reg_G2_WIN0H (*(REGType16v *)0x4000040) +#define reg_G2_WIN1H (*(REGType16v *)0x4000042) +#define reg_G2_WIN0V (*(REGType16v *)0x4000044) +#define reg_G2_WIN1V (*(REGType16v *)0x4000046) +#define reg_G2_WININ (*(REGType16v *)0x4000048) +#define reg_G2_WINOUT (*(REGType16v *)0x400004a) +#define reg_G2_MOSAIC (*(REGType16v *)0x400004c) +#define reg_G2_BLDCNT (*(REGType16v *)0x4000050) +#define reg_G2_BLDALPHA (*(REGType16v *)0x4000052) +#define reg_G2_BLDY (*(REGType16v *)0x4000054) + +#define reg_G3X_DISP3DCNT (*(REGType16v *)0x4000060) + +#define reg_GX_DISPCAPCNT (*(REGType32v *)0x4000064) +#define reg_GX_DISP_MMEM_FIFO (*(REGType32v *)0x4000068) +#define reg_GX_DISP_MMEM_FIFO_L (*(REGType16v *)0x4000068) +#define reg_GX_DISP_MMEM_FIFO_H (*(REGType16v *)0x400006a) +#define reg_GX_MASTER_BRIGHT (*(REGType16v *)0x400006c) +#define reg_GX_TVOUTCNT (*(REGType16v *)0x4000070) + +#define reg_MI_DMA0SAD (*(REGType32v *)0x40000b0) +#define reg_MI_DMA0DAD (*(REGType32v *)0x40000b4) +#define reg_MI_DMA0CNT (*(REGType32v *)0x40000b8) +#define reg_MI_DMA1SAD (*(REGType32v *)0x40000bc) +#define reg_MI_DMA1DAD (*(REGType32v *)0x40000c0) +#define reg_MI_DMA1CNT (*(REGType32v *)0x40000c4) +#define reg_MI_DMA2SAD (*(REGType32v *)0x40000c8) +#define reg_MI_DMA2DAD (*(REGType32v *)0x40000cc) +#define reg_MI_DMA2CNT (*(REGType32v *)0x40000d0) +#define reg_MI_DMA3SAD (*(REGType32v *)0x40000d4) +#define reg_MI_DMA3DAD (*(REGType32v *)0x40000d8) +#define reg_MI_DMA3CNT (*(REGType32v *)0x40000dc) +#define reg_MI_DMA0_CLR_DATA (*(REGType32v *)0x40000e0) +#define reg_MI_DMA1_CLR_DATA (*(REGType32v *)0x40000e4) +#define reg_MI_DMA2_CLR_DATA (*(REGType32v *)0x40000e8) +#define reg_MI_DMA3_CLR_DATA (*(REGType32v *)0x40000ec) + +#define reg_EXI_SIODATA32 (*(REGType32v *)0x4000120) +#define reg_EXI_SIOCNT (*(REGType16v *)0x4000128) +#define reg_EXI_SIOSEL (*(REGType32v *)0x400012c) + +#define reg_PAD_KEYINPUT (*(REGType16v *)0x4000130) +#define reg_PAD_KEYCNT (*(REGType16v *)0x4000132) + +#define REG_SUBPINTF_ADDR 0x4000180 +#define reg_PXI_SUBPINTF (*(REGType16v *)REG_SUBPINTF_ADDR) +#define reg_PXI_SUBP_FIFO_CNT (*(REGType16v *)0x4000184) +#define reg_PXI_SEND_FIFO (*(REGType32v *)0x4000188) + +#define reg_MI_MCCNT0 (*(REGType16v *)0x40001a0) +#define reg_CARD_MASTERCNT (*(REGType8v *)0x40001a1) //? +#define reg_MI_MCD0 (*(REGType16v *)0x40001a2) +#define reg_MI_MCCNT1 (*(REGType32v *)0x40001a4) +#define reg_CARD_CNT (*(REGType32v *)0x40001a4) //? +#define reg_MI_MCCMD0 (*(REGType32v *)0x40001a8) +#define reg_CARD_CMD (*(REGType8v *)0x40001a8) //? +#define reg_MI_MCCMD1 (*(REGType32v *)0x40001ac) +#define reg_MI_EXMEMCNT (*(REGType16v *)0x4000204) + +#define reg_OS_PAUSE (*(REGType16v *)0x4000300) + +#define reg_GX_VRAMCNT (*(REGType32v *)0x4000240) +#define reg_GX_VRAMCNT_A (*(REGType8v *)0x4000240) +#define reg_GX_VRAMCNT_B (*(REGType8v *)0x4000241) +#define reg_GX_VRAMCNT_C (*(REGType8v *)0x4000242) +#define reg_GX_VRAMCNT_D (*(REGType8v *)0x4000243) +#define reg_GX_WVRAMCNT (*(REGType32v *)0x4000244) +#define reg_GX_VRAMCNT_E (*(REGType8v *)0x4000244) +#define reg_GX_VRAMCNT_F (*(REGType8v *)0x4000245) +#define reg_GX_VRAMCNT_G (*(REGType8v *)0x4000246) +#define reg_GX_VRAMCNT_WRAM (*(REGType8v *)0x4000247) +#define reg_GX_VRAM_HI_CNT (*(REGType16v *)0x4000248) +#define reg_GX_VRAMCNT_H (*(REGType8v *)0x4000248) +#define reg_GX_VRAMCNT_I (*(REGType8v *)0x4000249) + +#define reg_CP_DIVCNT (*(REGType16v *)0x4000280) + +#define REG_DIV_NUMER_ADDR 0x4000290 +#define reg_CP_DIV_NUMER (*(REGType64v *)REG_DIV_NUMER_ADDR) +#define reg_CP_DIV_NUMER_L (*(REGType32v *)REG_DIV_NUMER_ADDR) +#define reg_CP_DIV_NUMER_H (*(REGType32v *)0x4000294) +#define reg_CP_DIV_DENOM (*(REGType64v *)0x4000298) +#define reg_CP_DIV_DENOM_L (*(REGType32v *)0x4000298) +#define reg_CP_DIV_DENOM_H (*(REGType32v *)0x400029c) +#define reg_CP_DIV_RESULT (*(REGType64v *)0x40002A0) +#define reg_CP_DIV_RESULT_L (*(REGType32v *)0x40002A0) +#define reg_CP_DIV_RESULT_H (*(REGType32v *)0x40002A4) +#define reg_CP_DIVREM_RESULT (*(REGType64v *)0x40002A8) +#define reg_CP_DIVREM_RESULT_L (*(REGType32v *)0x40002A8) +#define reg_CP_DIVREM_RESULT_H (*(REGType32v *)0x40002Ac) +#define reg_CP_SQRTCNT (*(REGType16v *)0x40002B0) +#define reg_CP_SQRT_RESULT (*(REGType32v *)0x40002B4) +#define reg_CP_SQRT_PARAM (*(REGType64v *)0x40002B8) +#define reg_CP_SQRT_PARAM_L (*(REGType32v *)0x40002B8) +#define reg_CP_SQRT_PARAM_H (*(REGType32v *)0x40002Bc) + +#define reg_GX_POWCNT (*(REGType16v *)0x4000304) + +#define reg_G3X_RDLINES_COUNT (*(const REGType16v *)0x4000320) +#define reg_G3X_EDGE_COLOR_0 (*(REGType32v *)0x4000330) +#define reg_G3X_EDGE_COLOR_0_L (*(REGType16v *)0x4000330) +#define reg_G3X_EDGE_COLOR_0_H (*(REGType16v *)0x4000332) +#define reg_G3X_EDGE_COLOR_1 (*(REGType32v *)0x4000334) +#define reg_G3X_EDGE_COLOR_1_L (*(REGType16v *)0x4000334) +#define reg_G3X_EDGE_COLOR_1_H (*(REGType16v *)0x4000336) +#define reg_G3X_EDGE_COLOR_2 (*(REGType32v *)0x4000338) +#define reg_G3X_EDGE_COLOR_2_L (*(REGType16v *)0x4000338) +#define reg_G3X_EDGE_COLOR_2_H (*(REGType16v *)0x400033a) +#define reg_G3X_EDGE_COLOR_3 (*(REGType32v *)0x400033c) +#define reg_G3X_EDGE_COLOR_3_L (*(REGType16v *)0x400033c) +#define reg_G3X_EDGE_COLOR_3_H (*(REGType16v *)0x400033e) +#define reg_G3X_ALPHA_TEST_REF (*(REGType16v *)0x4000340) +#define reg_G3X_CLEAR_COLOR (*(REGType32v *)0x4000350) +#define reg_G3X_CLEAR_DEPTH (*(REGType16v *)0x4000354) +#define reg_G3X_CLRIMAGE_OFFSET (*(REGType16v *)0x4000356) +#define reg_G3X_FOG_COLOR (*(REGType32v *)0x4000358) +#define reg_G3X_FOG_OFFSET (*(REGType16v *)0x400035c) +#define reg_G3X_FOG_TABLE_0 (*(REGType32v *)0x4000360) +#define reg_G3X_FOG_TABLE_0_L (*(REGType16v *)0x4000360) +#define reg_G3X_FOG_TABLE_0_H (*(REGType16v *)0x4000362) +#define reg_G3X_FOG_TABLE_1 (*(REGType32v *)0x4000364) +#define reg_G3X_FOG_TABLE_1_L (*(REGType16v *)0x4000364) +#define reg_G3X_FOG_TABLE_1_H (*(REGType16v *)0x4000366) +#define reg_G3X_FOG_TABLE_2 (*(REGType32v *)0x4000368) +#define reg_G3X_FOG_TABLE_2_L (*(REGType16v *)0x4000368) +#define reg_G3X_FOG_TABLE_2_H (*(REGType16v *)0x400036a) +#define reg_G3X_FOG_TABLE_3 (*(REGType32v *)0x400036c) +#define reg_G3X_FOG_TABLE_3_L (*(REGType16v *)0x400036c) +#define reg_G3X_FOG_TABLE_3_H (*(REGType16v *)0x400036e) +#define reg_G3X_FOG_TABLE_4 (*(REGType32v *)0x4000370) +#define reg_G3X_FOG_TABLE_4_L (*(REGType16v *)0x4000370) +#define reg_G3X_FOG_TABLE_4_H (*(REGType16v *)0x4000372) +#define reg_G3X_FOG_TABLE_5 (*(REGType32v *)0x4000374) +#define reg_G3X_FOG_TABLE_5_L (*(REGType16v *)0x4000374) +#define reg_G3X_FOG_TABLE_5_H (*(REGType16v *)0x4000376) +#define reg_G3X_FOG_TABLE_6 (*(REGType32v *)0x4000378) +#define reg_G3X_FOG_TABLE_6_L (*(REGType16v *)0x4000378) +#define reg_G3X_FOG_TABLE_6_H (*(REGType16v *)0x400037a) +#define reg_G3X_FOG_TABLE_7 (*(REGType32v *)0x400037c) +#define reg_G3X_FOG_TABLE_7_L (*(REGType16v *)0x400037c) +#define reg_G3X_FOG_TABLE_7_H (*(REGType16v *)0x400037e) +#define reg_G3X_TOON_TABLE_0 (*(REGType32v *)0x4000380) +#define reg_G3X_TOON_TABLE_0_L (*(REGType16v *)0x4000380) +#define reg_G3X_TOON_TABLE_0_H (*(REGType16v *)0x4000382) +#define reg_G3X_TOON_TABLE_1 (*(REGType32v *)0x4000384) +#define reg_G3X_TOON_TABLE_1_L (*(REGType16v *)0x4000384) +#define reg_G3X_TOON_TABLE_1_H (*(REGType16v *)0x4000386) +#define reg_G3X_TOON_TABLE_2 (*(REGType32v *)0x4000388) +#define reg_G3X_TOON_TABLE_2_L (*(REGType16v *)0x4000388) +#define reg_G3X_TOON_TABLE_2_H (*(REGType16v *)0x400038a) +#define reg_G3X_TOON_TABLE_3 (*(REGType32v *)0x400038c) +#define reg_G3X_TOON_TABLE_3_L (*(REGType16v *)0x400038c) +#define reg_G3X_TOON_TABLE_3_H (*(REGType16v *)0x400038e) +#define reg_G3X_TOON_TABLE_4 (*(REGType32v *)0x4000390) +#define reg_G3X_TOON_TABLE_4_L (*(REGType16v *)0x4000390) +#define reg_G3X_TOON_TABLE_4_H (*(REGType16v *)0x4000392) +#define reg_G3X_TOON_TABLE_5 (*(REGType32v *)0x4000394) +#define reg_G3X_TOON_TABLE_5_L (*(REGType16v *)0x4000394) +#define reg_G3X_TOON_TABLE_5_H (*(REGType16v *)0x4000396) +#define reg_G3X_TOON_TABLE_7 (*(REGType32v *)0x400039c) +#define reg_G3X_TOON_TABLE_7_L (*(REGType16v *)0x400039c) +#define reg_G3X_TOON_TABLE_7_H (*(REGType16v *)0x400039e) +#define reg_G3X_TOON_TABLE_8 (*(REGType32v *)0x40003a0) +#define reg_G3X_TOON_TABLE_8_L (*(REGType16v *)0x40003a0) +#define reg_G3X_TOON_TABLE_8_H (*(REGType16v *)0x40003a2) +#define reg_G3X_TOON_TABLE_9 (*(REGType32v *)0x40003a4) +#define reg_G3X_TOON_TABLE_9_L (*(REGType16v *)0x40003a4) +#define reg_G3X_TOON_TABLE_9_H (*(REGType16v *)0x40003a6) +#define reg_G3X_TOON_TABLE_10 (*(REGType32v *)0x40003a8) +#define reg_G3X_TOON_TABLE_10_L (*(REGType16v *)0x40003a8) +#define reg_G3X_TOON_TABLE_10_H (*(REGType16v *)0x40003aa) +#define reg_G3X_TOON_TABLE_11 (*(REGType32v *)0x40003ac) +#define reg_G3X_TOON_TABLE_11_L (*(REGType16v *)0x40003ac) +#define reg_G3X_TOON_TABLE_11_H (*(REGType16v *)0x40003ae) +#define reg_G3X_TOON_TABLE_12 (*(REGType32v *)0x40003b0) +#define reg_G3X_TOON_TABLE_12_L (*(REGType16v *)0x40003b0) +#define reg_G3X_TOON_TABLE_12_H (*(REGType16v *)0x40003b2) +#define reg_G3X_TOON_TABLE_13 (*(REGType32v *)0x40003b4) +#define reg_G3X_TOON_TABLE_13_L (*(REGType16v *)0x40003b4) +#define reg_G3X_TOON_TABLE_13_H (*(REGType16v *)0x40003b6) +#define reg_G3X_TOON_TABLE_14 (*(REGType32v *)0x40003b8) +#define reg_G3X_TOON_TABLE_14_L (*(REGType16v *)0x40003b8) +#define reg_G3X_TOON_TABLE_14_H (*(REGType16v *)0x40003ba) +#define reg_G3X_TOON_TABLE_15 (*(REGType32v *)0x40003bc) +#define reg_G3X_TOON_TABLE_15_L (*(REGType16v *)0x40003bc) +#define reg_G3X_TOON_TABLE_15_H (*(REGType16v *)0x40003be) +#define reg_G3X_GXFIFO (*(REGType32v *)0x4000400) + +#define reg_G3_MTX_MODE (*(REGType32v *)0x4000440) +#define reg_G3_MTX_PUSH (*(REGType32v *)0x4000444) +#define reg_G3_MTX_POP (*(REGType32v *)0x4000448) +#define reg_G3_MTX_STORE (*(REGType32v *)0x400044c) +#define reg_G3_MTX_RESTORE (*(REGType32v *)0x4000450) +#define reg_G3_MTX_IDENTITY (*(REGType32v *)0x4000454) +#define reg_G3_MTX_LOAD_4x4 (*(REGType32v *)0x4000458) +#define reg_G3_MTX_LOAD_4x3 (*(REGType32v *)0x400045c) +#define reg_G3_MTX_MULT_4x4 (*(REGType32v *)0x4000460) +#define reg_G3_MTX_MULT_4x3 (*(REGType32v *)0x4000464) +#define reg_G3_MTX_MULT_3x3 (*(REGType32v *)0x4000468) +#define reg_G3_MTX_SCALE (*(REGType32v *)0x400046c) +#define reg_G3_MTX_TRANS (*(REGType32v *)0x4000470) +#define reg_G3_COLOR (*(REGType32v *)0x4000480) +#define reg_G3_NORMAL (*(REGType32v *)0x4000484) +#define reg_G3_TEXCOORD (*(REGType32v *)0x4000488) +#define reg_G3_VTX_16 (*(REGType32v *)0x400048c) +#define reg_G3_VTX_10 (*(REGType32v *)0x4000490) +#define reg_G3_VTX_XY (*(REGType32v *)0x4000494) +#define reg_G3_VTX_XZ (*(REGType32v *)0x4000498) +#define reg_G3_VTX_YZ (*(REGType32v *)0x400049c) +#define reg_G3_VTX_DIFF (*(REGType32v *)0x40004a0) +#define reg_G3_POLYGON_ATTR (*(REGType32v *)0x40004a4) +#define reg_G3_TEXIMAGE_PARAM (*(REGType32v *)0x40004a8) +#define reg_G3_TEXPLTT_BASE (*(REGType32v *)0x40004ac) +#define reg_G3_DIF_AMB (*(REGType32v *)0x40004c0) +#define reg_G3_SPE_EMI (*(REGType32v *)0x40004c4) +#define reg_G3_LIGHT_VECTOR (*(REGType32v *)0x40004c8) +#define reg_G3_LIGHT_COLOR (*(REGType32v *)0x40004cc) +#define reg_G3_SHININESS (*(REGType32v *)0x40004d0) +#define reg_G3_BEGIN_VTXS (*(REGType32v *)0x4000500) +#define reg_G3_END_VTXS (*(REGType32v *)0x4000504) +#define reg_G3_SWAP_BUFFERS (*(REGType32v *)0x4000540) +#define reg_G3_VIEWPORT (*(REGType32v *)0x4000580) +#define reg_G3_BOX_TEST (*(REGType32v *)0x40005c0) +#define reg_G3_POS_TEST (*(REGType32v *)0x40005c4) +#define reg_G3_VEC_TEST (*(REGType32v *)0x40005c8) + +#define reg_G3X_GXSTAT (*(REGType32v *)0x4000600) +#define reg_G3X_LISTRAM_COUNT (*(REGType16v *)0x4000604) +#define reg_G3X_VTXRAM_COUNT (*(REGType16v *)0x4000606) +#define reg_G3X_DISP_1DOT_DEPTH (*(REGType16v *)0x4000610) +#define reg_G3X_POS_RESULT_X (*(const REGType32v *)0x4000620) +#define reg_G3X_POS_RESULT_Y (*(const REGType32v *)0x4000624) +#define reg_G3X_POS_RESULT_Z (*(const REGType32v *)0x4000628) +#define reg_G3X_POS_RESULT_W (*(const REGType32v *)0x400062c) +#define reg_G3X_VEC_RESULT_X (*(const REGType16v *)0x4000630) +#define reg_G3X_VEC_RESULT_Y (*(const REGType16v *)0x4000632) +#define reg_G3X_VEC_RESULT_Z (*(const REGType16v *)0x4000634) +#define reg_G3X_CLIPMTX_RESULT_0 (*(const REGType32v *)0x4000640) +#define reg_G3X_CLIPMTX_RESULT_1 (*(const REGType32v *)0x4000644) +#define reg_G3X_CLIPMTX_RESULT_2 (*(const REGType32v *)0x4000648) +#define reg_G3X_CLIPMTX_RESULT_3 (*(const REGType32v *)0x400064c) +#define reg_G3X_CLIPMTX_RESULT_4 (*(const REGType32v *)0x4000650) +#define reg_G3X_CLIPMTX_RESULT_5 (*(const REGType32v *)0x4000654) +#define reg_G3X_CLIPMTX_RESULT_6 (*(const REGType32v *)0x4000658) +#define reg_G3X_CLIPMTX_RESULT_7 (*(const REGType32v *)0x400065c) +#define reg_G3X_CLIPMTX_RESULT_8 (*(const REGType32v *)0x4000660) +#define reg_G3X_CLIPMTX_RESULT_9 (*(const REGType32v *)0x4000664) +#define reg_G3X_CLIPMTX_RESULT_10 (*(const REGType32v *)0x4000668) +#define reg_G3X_CLIPMTX_RESULT_11 (*(const REGType32v *)0x400066c) +#define reg_G3X_CLIPMTX_RESULT_12 (*(const REGType32v *)0x4000670) +#define reg_G3X_CLIPMTX_RESULT_13 (*(const REGType32v *)0x4000674) +#define reg_G3X_CLIPMTX_RESULT_14 (*(const REGType32v *)0x4000678) +#define reg_G3X_CLIPMTX_RESULT_15 (*(const REGType32v *)0x400067c) +#define reg_G3X_VECMTX_RESULT_0 (*(const REGType32v *)0x4000680) +#define reg_G3X_VECMTX_RESULT_1 (*(const REGType32v *)0x4000684) +#define reg_G3X_VECMTX_RESULT_2 (*(const REGType32v *)0x4000688) +#define reg_G3X_VECMTX_RESULT_3 (*(const REGType32v *)0x400068c) +#define reg_G3X_VECMTX_RESULT_4 (*(const REGType32v *)0x4000690) +#define reg_G3X_VECMTX_RESULT_5 (*(const REGType32v *)0x4000694) +#define reg_G3X_VECMTX_RESULT_6 (*(const REGType32v *)0x4000698) +#define reg_G3X_VECMTX_RESULT_7 (*(const REGType32v *)0x400069c) +#define reg_G3X_VECMTX_RESULT_8 (*(const REGType32v *)0x40006a0) + +#define reg_GXS_DB_DISPCNT (*(REGType32v *)0x4001000) + +#define reg_G2S_DB_BG0CNT (*(REGType16v *)0x4001008) +#define reg_G2S_DB_BG1CNT (*(REGType16v *)0x400100a) +#define reg_G2S_DB_BG2CNT (*(REGType16v *)0x400100c) +#define reg_G2S_DB_BG3CNT (*(REGType16v *)0x400100e) +#define reg_G2S_DB_BG0OFS (*(REGType32v *)0x4001010) +#define reg_G2S_DB_BG0HOFS (*(REGType16v *)0x4001010) +#define reg_G2S_DB_BG0VOFS (*(REGType16v *)0x4001012) +#define reg_G2S_DB_BG1OFS (*(REGType32v *)0x4001014) +#define reg_G2S_DB_BG1HOFS (*(REGType16v *)0x4001014) +#define reg_G2S_DB_BG1VOFS (*(REGType16v *)0x4001016) +#define reg_G2S_DB_BG2OFS (*(REGType32v *)0x4001018) +#define reg_G2S_DB_BG2HOFS (*(REGType16v *)0x4001018) +#define reg_G2S_DB_BG2VOFS (*(REGType16v *)0x400101a) +#define reg_G2S_DB_BG3OFS (*(REGType32v *)0x400101c) +#define reg_G2S_DB_BG3HOFS (*(REGType16v *)0x400101c) +#define reg_G2S_DB_BG3VOFS (*(REGType16v *)0x400101e) +#define reg_G2S_DB_BG2PA (*(REGType16v *)0x4001020) +#define reg_G2S_DB_BG2PB (*(REGType16v *)0x4001022) +#define reg_G2S_DB_BG2PC (*(REGType16v *)0x4001024) +#define reg_G2S_DB_BG2PD (*(REGType16v *)0x4001026) +#define reg_G2S_DB_BG2X (*(REGType32v *)0x4001028) +#define reg_G2S_DB_BG2Y (*(REGType32v *)0x400102c) +#define reg_G2S_DB_BG3PA (*(REGType16v *)0x4001030) +#define reg_G2S_DB_BG3PB (*(REGType16v *)0x4001032) +#define reg_G2S_DB_BG3PC (*(REGType16v *)0x4001034) +#define reg_G2S_DB_BG3PD (*(REGType16v *)0x4001036) +#define reg_G2S_DB_BG3X (*(REGType32v *)0x4001038) +#define reg_G2S_DB_BG3Y (*(REGType32v *)0x400103c) +#define reg_G2S_DB_WIN0H (*(REGType16v *)0x4001040) +#define reg_G2S_DB_WIN1H (*(REGType16v *)0x4001042) +#define reg_G2S_DB_WIN0V (*(REGType16v *)0x4001044) +#define reg_G2S_DB_WIN1V (*(REGType16v *)0x4001046) +#define reg_G2S_DB_WININ (*(REGType16v *)0x4001048) +#define reg_G2S_DB_WINOUT (*(REGType16v *)0x400104a) +#define reg_G2S_DB_MOSAIC (*(REGType16v *)0x400104c) +#define reg_G2S_DB_BLDCNT (*(REGType16v *)0x4001050) +#define reg_G2S_DB_BLDALPHA (*(REGType16v *)0x4001052) +#define reg_G2S_DB_BLDY (*(REGType16v *)0x4001054) + +#define reg_GXS_DB_MASTER_BRIGHT (*(REGType16v *)0x400106c) + +#define reg_PXI_RECV_FIFO (*(REGType32v *)0x4100000) + +#define reg_MI_MCD1 (*(REGType32v *)0x4100010) +#define reg_CARD_DATA (*(REGType32v *)0x4100010) //? + +#define REG_OS_IE_VE_SHIFT 2 +#define REG_OS_IE_T0_SHIFT 3 +#define REG_OS_IE_T1_SHIFT 4 +#define REG_OS_IE_T2_SHIFT 5 +#define REG_OS_IE_T3_SHIFT 6 +#define REG_OS_IE_IFN_SHIFT 18 +#define REG_OS_IE_MC_SHIFT 19 + +#define REG_PAD_KEYINPUT_L_SHIFT 9 +#define REG_PAD_KEYINPUT_L_SIZE 1 +#define REG_PAD_KEYINPUT_L_MASK 0x0200 + +#define REG_PAD_KEYINPUT_R_SHIFT 8 +#define REG_PAD_KEYINPUT_R_SIZE 1 +#define REG_PAD_KEYINPUT_R_MASK 0x0100 + +#define REG_PAD_KEYINPUT_DOWN_SHIFT 7 +#define REG_PAD_KEYINPUT_DOWN_SIZE 1 +#define REG_PAD_KEYINPUT_DOWN_MASK 0x0080 + +#define REG_PAD_KEYINPUT_UP_SHIFT 6 +#define REG_PAD_KEYINPUT_UP_SIZE 1 +#define REG_PAD_KEYINPUT_UP_MASK 0x0040 + +#define REG_PAD_KEYINPUT_LEFT_SHIFT 5 +#define REG_PAD_KEYINPUT_LEFT_SIZE 1 +#define REG_PAD_KEYINPUT_LEFT_MASK 0x0020 + +#define REG_PAD_KEYINPUT_RIGHT_SHIFT 4 +#define REG_PAD_KEYINPUT_RIGHT_SIZE 1 +#define REG_PAD_KEYINPUT_RIGHT_MASK 0x0010 + +#define REG_PAD_KEYINPUT_START_SHIFT 3 +#define REG_PAD_KEYINPUT_START_SIZE 1 +#define REG_PAD_KEYINPUT_START_MASK 0x0008 + +#define REG_PAD_KEYINPUT_SEL_SHIFT 2 +#define REG_PAD_KEYINPUT_SEL_SIZE 1 +#define REG_PAD_KEYINPUT_SEL_MASK 0x0004 + +#define REG_PAD_KEYINPUT_B_SHIFT 1 +#define REG_PAD_KEYINPUT_B_SIZE 1 +#define REG_PAD_KEYINPUT_B_MASK 0x0002 + +#define REG_PAD_KEYINPUT_A_SHIFT 0 +#define REG_PAD_KEYINPUT_A_SIZE 1 +#define REG_PAD_KEYINPUT_A_MASK 0x0001 + +#ifndef SDK_ASM +#define REG_PAD_KEYINPUT_FIELD( l, r, down, up, left, right, start, sel, b, a ) \ + (u16)( \ + ((u32)(l) << REG_PAD_KEYINPUT_L_SHIFT) | \ + ((u32)(r) << REG_PAD_KEYINPUT_R_SHIFT) | \ + ((u32)(down) << REG_PAD_KEYINPUT_DOWN_SHIFT) | \ + ((u32)(up) << REG_PAD_KEYINPUT_UP_SHIFT) | \ + ((u32)(left) << REG_PAD_KEYINPUT_LEFT_SHIFT) | \ + ((u32)(right) << REG_PAD_KEYINPUT_RIGHT_SHIFT) | \ + ((u32)(start) << REG_PAD_KEYINPUT_START_SHIFT) | \ + ((u32)(sel) << REG_PAD_KEYINPUT_SEL_SHIFT) | \ + ((u32)(b) << REG_PAD_KEYINPUT_B_SHIFT) | \ + ((u32)(a) << REG_PAD_KEYINPUT_A_SHIFT)) +#endif + +#define REG_PAD_KEYCNT_LOGIC_SHIFT 15 +#define REG_PAD_KEYCNT_LOGIC_SIZE 1 +#define REG_PAD_KEYCNT_LOGIC_MASK 0x8000 + +#define REG_PAD_KEYCNT_INTR_SHIFT 14 +#define REG_PAD_KEYCNT_INTR_SIZE 1 +#define REG_PAD_KEYCNT_INTR_MASK 0x4000 + +#define REG_PAD_KEYCNT_L_SHIFT 9 +#define REG_PAD_KEYCNT_L_SIZE 1 +#define REG_PAD_KEYCNT_L_MASK 0x0200 + +#define REG_PAD_KEYCNT_R_SHIFT 8 +#define REG_PAD_KEYCNT_R_SIZE 1 +#define REG_PAD_KEYCNT_R_MASK 0x0100 + +#define REG_PAD_KEYCNT_DOWN_SHIFT 7 +#define REG_PAD_KEYCNT_DOWN_SIZE 1 +#define REG_PAD_KEYCNT_DOWN_MASK 0x0080 + +#define REG_PAD_KEYCNT_UP_SHIFT 6 +#define REG_PAD_KEYCNT_UP_SIZE 1 +#define REG_PAD_KEYCNT_UP_MASK 0x0040 + +#define REG_PAD_KEYCNT_LEFT_SHIFT 5 +#define REG_PAD_KEYCNT_LEFT_SIZE 1 +#define REG_PAD_KEYCNT_LEFT_MASK 0x0020 + +#define REG_PAD_KEYCNT_RIGHT_SHIFT 4 +#define REG_PAD_KEYCNT_RIGHT_SIZE 1 +#define REG_PAD_KEYCNT_RIGHT_MASK 0x0010 + +#define REG_PAD_KEYCNT_START_SHIFT 3 +#define REG_PAD_KEYCNT_START_SIZE 1 +#define REG_PAD_KEYCNT_START_MASK 0x0008 + +#define REG_PAD_KEYCNT_SEL_SHIFT 2 +#define REG_PAD_KEYCNT_SEL_SIZE 1 +#define REG_PAD_KEYCNT_SEL_MASK 0x0004 + +#define REG_PAD_KEYCNT_B_SHIFT 1 +#define REG_PAD_KEYCNT_B_SIZE 1 +#define REG_PAD_KEYCNT_B_MASK 0x0002 + +#define REG_PAD_KEYCNT_A_SHIFT 0 +#define REG_PAD_KEYCNT_A_SIZE 1 +#define REG_PAD_KEYCNT_A_MASK 0x0001 + +#define REG_G2_WINOUT_OBJWININ_SHIFT 8 +#define REG_G2_WINOUT_OBJWININ_SIZE 6 +#define REG_G2_WINOUT_OBJWININ_MASK 0x3f00 + +#define REG_G2_WINOUT_WINOUT_SHIFT 0 +#define REG_G2_WINOUT_WINOUT_SIZE 6 +#define REG_G2_WINOUT_WINOUT_MASK 0x003f + +#define REG_G2_WINOUT_FIELD( objwinin, winout ) \ + (u16)( \ + ((u32)(objwinin) << REG_G2_WINOUT_OBJWININ_SHIFT) | \ + ((u32)(winout) << REG_G2_WINOUT_WINOUT_SHIFT)) + +#ifndef SDK_ASM +#define REG_PAD_KEYCNT_FIELD( logic, intr, l, r, down, up, left, right, start, sel, b, a ) \ + (u16)( \ + ((u32)(logic) << REG_PAD_KEYCNT_LOGIC_SHIFT) | \ + ((u32)(intr) << REG_PAD_KEYCNT_INTR_SHIFT) | \ + ((u32)(l) << REG_PAD_KEYCNT_L_SHIFT) | \ + ((u32)(r) << REG_PAD_KEYCNT_R_SHIFT) | \ + ((u32)(down) << REG_PAD_KEYCNT_DOWN_SHIFT) | \ + ((u32)(up) << REG_PAD_KEYCNT_UP_SHIFT) | \ + ((u32)(left) << REG_PAD_KEYCNT_LEFT_SHIFT) | \ + ((u32)(right) << REG_PAD_KEYCNT_RIGHT_SHIFT) | \ + ((u32)(start) << REG_PAD_KEYCNT_START_SHIFT) | \ + ((u32)(sel) << REG_PAD_KEYCNT_SEL_SHIFT) | \ + ((u32)(b) << REG_PAD_KEYCNT_B_SHIFT) | \ + ((u32)(a) << REG_PAD_KEYCNT_A_SHIFT)) +#endif + +#define REG_GX_POWCNT_GE_SHIFT 3 +#define REG_GX_POWCNT_GE_SIZE 1 +#define REG_GX_POWCNT_GE_MASK 0x0008 + +#define REG_GX_POWCNT_RE_SHIFT 2 +#define REG_GX_POWCNT_RE_SIZE 1 +#define REG_GX_POWCNT_RE_MASK 0x0004 + +#define REG_GX_POWCNT_E2DG_SHIFT 1 +#define REG_GX_POWCNT_E2DG_SIZE 1 +#define REG_GX_POWCNT_E2DG_MASK 0x0002 + +#define REG_GX_POWCNT_LCD_SHIFT 0 +#define REG_GX_POWCNT_LCD_SIZE 1 +#define REG_GX_POWCNT_LCD_MASK 0x0001 + +#define REG_GX_POWCNT_LCDB_SHIFT 8 +#define REG_GX_POWCNT_LCDB_SIZE 1 +#define REG_GX_POWCNT_LCDB_MASK 0x0100 + +#define REG_GX_POWCNT_E2DGB_SHIFT 9 +#define REG_GX_POWCNT_E2DGB_SIZE 1 +#define REG_GX_POWCNT_E2DGB_MASK 0x0200 + +#define REG_GX_POWCNT_DSEL_SHIFT 15 +#define REG_GX_POWCNT_DSEL_SIZE 1 +#define REG_GX_POWCNT_DSEL_MASK 0x8000 + +// GX_DISPCNT +#define REG_GX_DISPCNT_O_SHIFT 31 +#define REG_GX_DISPCNT_O_SIZE 1 +#define REG_GX_DISPCNT_O_MASK 0x80000000 + +#define REG_GX_DISPCNT_BG_SHIFT 30 +#define REG_GX_DISPCNT_BG_SIZE 1 +#define REG_GX_DISPCNT_BG_MASK 0x40000000 + +#define REG_GX_DISPCNT_BGSCREENOFFSET_SHIFT 27 +#define REG_GX_DISPCNT_BGSCREENOFFSET_SIZE 3 +#define REG_GX_DISPCNT_BGSCREENOFFSET_MASK 0x38000000 + +#define REG_GX_DISPCNT_BGCHAROFFSET_SHIFT 24 +#define REG_GX_DISPCNT_BGCHAROFFSET_SIZE 3 +#define REG_GX_DISPCNT_BGCHAROFFSET_MASK 0x07000000 + +#define REG_GX_DISPCNT_OH_SHIFT 23 +#define REG_GX_DISPCNT_OH_SIZE 1 +#define REG_GX_DISPCNT_OH_MASK 0x00800000 + +#define REG_GX_DISPCNT_EXOBJ_SHIFT 20 +#define REG_GX_DISPCNT_EXOBJ_SIZE 3 +#define REG_GX_DISPCNT_EXOBJ_MASK 0x00700000 + +#define REG_GX_DISPCNT_VRAM_SHIFT 18 +#define REG_GX_DISPCNT_VRAM_SIZE 2 +#define REG_GX_DISPCNT_VRAM_MASK 0x000c0000 + +#define REG_GX_DISPCNT_MODE_SHIFT 16 +#define REG_GX_DISPCNT_MODE_SIZE 2 +#define REG_GX_DISPCNT_MODE_MASK 0x00030000 + +#define REG_GX_DISPCNT_OW_SHIFT 15 +#define REG_GX_DISPCNT_OW_SIZE 1 +#define REG_GX_DISPCNT_OW_MASK 0x00008000 + +#define REG_GX_DISPCNT_W1_SHIFT 14 +#define REG_GX_DISPCNT_W1_SIZE 1 +#define REG_GX_DISPCNT_W1_MASK 0x00004000 + +#define REG_GX_DISPCNT_W0_SHIFT 13 +#define REG_GX_DISPCNT_W0_SIZE 1 +#define REG_GX_DISPCNT_W0_MASK 0x00002000 + +#define REG_GX_DISPCNT_DISPLAY_SHIFT 8 +#define REG_GX_DISPCNT_DISPLAY_SIZE 5 +#define REG_GX_DISPCNT_DISPLAY_MASK 0x00001f00 + +#define REG_GX_DISPCNT_BLANK_SHIFT 7 +#define REG_GX_DISPCNT_BLANK_SIZE 1 +#define REG_GX_DISPCNT_BLANK_MASK 0x00000080 + +#define REG_GX_DISPCNT_OBJMAP_SHIFT 4 +#define REG_GX_DISPCNT_OBJMAP_SIZE 3 +#define REG_GX_DISPCNT_OBJMAP_MASK 0x00000070 + +#define REG_GX_DISPCNT_BG02D3D_SHIFT 3 +#define REG_GX_DISPCNT_BG02D3D_SIZE 1 +#define REG_GX_DISPCNT_BG02D3D_MASK 0x00000008 + +#define REG_GX_DISPCNT_BGMODE_SHIFT 0 +#define REG_GX_DISPCNT_BGMODE_SIZE 3 +#define REG_GX_DISPCNT_BGMODE_MASK 0x00000007 + +#define REG_GX_DISPCNT_OBJMAP_CH_SHIFT 4 +#define REG_GX_DISPCNT_OBJMAP_CH_SIZE 1 +#define REG_GX_DISPCNT_OBJMAP_CH_MASK 0x00000010 + +#define REG_GX_DISPCNT_OBJMAP_BM_SHIFT 5 +#define REG_GX_DISPCNT_OBJMAP_BM_SIZE 2 +#define REG_GX_DISPCNT_OBJMAP_BM_MASK 0x00000060 + +#define REG_GX_DISPCNT_EXOBJ_CH_SHIFT 20 +#define REG_GX_DISPCNT_EXOBJ_CH_SIZE 2 +#define REG_GX_DISPCNT_EXOBJ_CH_MASK 0x00300000 + +#define REG_GX_DISPCNT_EXOBJ_BM_SHIFT 22 +#define REG_GX_DISPCNT_EXOBJ_BM_SIZE 1 +#define REG_GX_DISPCNT_EXOBJ_BM_MASK 0x00400000 + +// GXS_DB_DISPCNT +#define REG_GXS_DB_DISPCNT_O_SHIFT 31 +#define REG_GXS_DB_DISPCNT_O_SIZE 1 +#define REG_GXS_DB_DISPCNT_O_MASK 0x80000000 + +#define REG_GXS_DB_DISPCNT_BG_SHIFT 30 +#define REG_GXS_DB_DISPCNT_BG_SIZE 1 +#define REG_GXS_DB_DISPCNT_BG_MASK 0x40000000 + +#define REG_GXS_DB_DISPCNT_OH_SHIFT 23 +#define REG_GXS_DB_DISPCNT_OH_SIZE 1 +#define REG_GXS_DB_DISPCNT_OH_MASK 0x00800000 + +#define REG_GXS_DB_DISPCNT_EXOBJ_SHIFT 20 +#define REG_GXS_DB_DISPCNT_EXOBJ_SIZE 2 +#define REG_GXS_DB_DISPCNT_EXOBJ_MASK 0x00300000 + +#define REG_GXS_DB_DISPCNT_MODE_SHIFT 16 +#define REG_GXS_DB_DISPCNT_MODE_SIZE 1 +#define REG_GXS_DB_DISPCNT_MODE_MASK 0x00010000 + +#define REG_GXS_DB_DISPCNT_OW_SHIFT 15 +#define REG_GXS_DB_DISPCNT_OW_SIZE 1 +#define REG_GXS_DB_DISPCNT_OW_MASK 0x00008000 + +#define REG_GXS_DB_DISPCNT_W1_SHIFT 14 +#define REG_GXS_DB_DISPCNT_W1_SIZE 1 +#define REG_GXS_DB_DISPCNT_W1_MASK 0x00004000 + +#define REG_GXS_DB_DISPCNT_W0_SHIFT 13 +#define REG_GXS_DB_DISPCNT_W0_SIZE 1 +#define REG_GXS_DB_DISPCNT_W0_MASK 0x00002000 + +#define REG_GXS_DB_DISPCNT_DISPLAY_SHIFT 8 +#define REG_GXS_DB_DISPCNT_DISPLAY_SIZE 5 +#define REG_GXS_DB_DISPCNT_DISPLAY_MASK 0x00001f00 + +#define REG_GXS_DB_DISPCNT_BLANK_SHIFT 7 +#define REG_GXS_DB_DISPCNT_BLANK_SIZE 1 +#define REG_GXS_DB_DISPCNT_BLANK_MASK 0x00000080 + +#define REG_GXS_DB_DISPCNT_OBJMAP_SHIFT 4 +#define REG_GXS_DB_DISPCNT_OBJMAP_SIZE 3 +#define REG_GXS_DB_DISPCNT_OBJMAP_MASK 0x00000070 + +#define REG_GXS_DB_DISPCNT_BGMODE_SHIFT 0 +#define REG_GXS_DB_DISPCNT_BGMODE_SIZE 3 +#define REG_GXS_DB_DISPCNT_BGMODE_MASK 0x00000007 + +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SHIFT 4 +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SIZE 1 +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK 0x00000010 + +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SHIFT 5 +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SIZE 2 +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_MASK 0x00000060 + +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SHIFT 20 +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SIZE 2 +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK 0x00300000 + +// MASTER BRIGHT +#define REG_GX_MASTER_BRIGHT_E_MOD_SHIFT 14 +#define REG_GX_MASTER_BRIGHT_E_MOD_SIZE 2 +#define REG_GX_MASTER_BRIGHT_E_MOD_MASK 0xc000 + +#define REG_GX_MASTER_BRIGHT_E_VALUE_SHIFT 0 +#define REG_GX_MASTER_BRIGHT_E_VALUE_SIZE 5 +#define REG_GX_MASTER_BRIGHT_E_VALUE_MASK 0x001f + +// DISPSTAT +#define REG_GX_DISPSTAT_VCOUNTER_SHIFT 7 +#define REG_GX_DISPSTAT_VCOUNTER_SIZE 9 +#define REG_GX_DISPSTAT_VCOUNTER_MASK 0xff80 + +#define REG_GX_DISPSTAT_VQI_SHIFT 5 +#define REG_GX_DISPSTAT_VQI_SIZE 1 +#define REG_GX_DISPSTAT_VQI_MASK 0x0020 + +#define REG_GX_DISPSTAT_HBI_SHIFT 4 +#define REG_GX_DISPSTAT_HBI_SIZE 1 +#define REG_GX_DISPSTAT_HBI_MASK 0x0010 + +#define REG_GX_DISPSTAT_VBI_SHIFT 3 +#define REG_GX_DISPSTAT_VBI_SIZE 1 +#define REG_GX_DISPSTAT_VBI_MASK 0x0008 + +#define REG_GX_DISPSTAT_LYC_SHIFT 2 +#define REG_GX_DISPSTAT_LYC_SIZE 1 +#define REG_GX_DISPSTAT_LYC_MASK 0x0004 + +#define REG_GX_DISPSTAT_HBLK_SHIFT 1 +#define REG_GX_DISPSTAT_HBLK_SIZE 1 +#define REG_GX_DISPSTAT_HBLK_MASK 0x0002 + +#define REG_GX_DISPSTAT_VBLK_SHIFT 0 +#define REG_GX_DISPSTAT_VBLK_SIZE 1 +#define REG_GX_DISPSTAT_VBLK_MASK 0x0001 + +// G2_BG0CNT +#define REG_G2_BG0CNT_SCREENSIZE_SHIFT 14 +#define REG_G2_BG0CNT_SCREENSIZE_SIZE 2 +#define REG_G2_BG0CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2_BG0CNT_BGPLTTSLOT_SHIFT 13 +#define REG_G2_BG0CNT_BGPLTTSLOT_SIZE 1 +#define REG_G2_BG0CNT_BGPLTTSLOT_MASK 0x2000 + +#define REG_G2_BG0CNT_SCREENBASE_SHIFT 8 +#define REG_G2_BG0CNT_SCREENBASE_SIZE 5 +#define REG_G2_BG0CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2_BG0CNT_COLORMODE_SHIFT 7 +#define REG_G2_BG0CNT_COLORMODE_SIZE 1 +#define REG_G2_BG0CNT_COLORMODE_MASK 0x0080 + +#define REG_G2_BG0CNT_MOSAIC_SHIFT 6 +#define REG_G2_BG0CNT_MOSAIC_SIZE 1 +#define REG_G2_BG0CNT_MOSAIC_MASK 0x0040 + +#define REG_G2_BG0CNT_CHARBASE_SHIFT 2 +#define REG_G2_BG0CNT_CHARBASE_SIZE 4 +#define REG_G2_BG0CNT_CHARBASE_MASK 0x003c + +#define REG_G2_BG0CNT_PRIORITY_SHIFT 0 +#define REG_G2_BG0CNT_PRIORITY_SIZE 2 +#define REG_G2_BG0CNT_PRIORITY_MASK 0x0003 + +// G2_BG1CNT +#define REG_G2_BG1CNT_SCREENSIZE_SHIFT 14 +#define REG_G2_BG1CNT_SCREENSIZE_SIZE 2 +#define REG_G2_BG1CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2_BG1CNT_BGPLTTSLOT_SHIFT 13 +#define REG_G2_BG1CNT_BGPLTTSLOT_SIZE 1 +#define REG_G2_BG1CNT_BGPLTTSLOT_MASK 0x2000 + +#define REG_G2_BG1CNT_SCREENBASE_SHIFT 8 +#define REG_G2_BG1CNT_SCREENBASE_SIZE 5 +#define REG_G2_BG1CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2_BG1CNT_COLORMODE_SHIFT 7 +#define REG_G2_BG1CNT_COLORMODE_SIZE 1 +#define REG_G2_BG1CNT_COLORMODE_MASK 0x0080 + +#define REG_G2_BG1CNT_MOSAIC_SHIFT 6 +#define REG_G2_BG1CNT_MOSAIC_SIZE 1 +#define REG_G2_BG1CNT_MOSAIC_MASK 0x0040 + +#define REG_G2_BG1CNT_CHARBASE_SHIFT 2 +#define REG_G2_BG1CNT_CHARBASE_SIZE 4 +#define REG_G2_BG1CNT_CHARBASE_MASK 0x003c + +#define REG_G2_BG1CNT_PRIORITY_SHIFT 0 +#define REG_G2_BG1CNT_PRIORITY_SIZE 2 +#define REG_G2_BG1CNT_PRIORITY_MASK 0x0003 + +// G2_BG2CNT +#define REG_G2_BG2CNT_SCREENSIZE_SHIFT 14 +#define REG_G2_BG2CNT_SCREENSIZE_SIZE 2 +#define REG_G2_BG2CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2_BG2CNT_AREAOVER_SHIFT 13 +#define REG_G2_BG2CNT_AREAOVER_SIZE 1 +#define REG_G2_BG2CNT_AREAOVER_MASK 0x2000 + +#define REG_G2_BG2CNT_SCREENBASE_SHIFT 8 +#define REG_G2_BG2CNT_SCREENBASE_SIZE 5 +#define REG_G2_BG2CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2_BG2CNT_COLORMODE_SHIFT 7 +#define REG_G2_BG2CNT_COLORMODE_SIZE 1 +#define REG_G2_BG2CNT_COLORMODE_MASK 0x0080 + +#define REG_G2_BG2CNT_MOSAIC_SHIFT 6 +#define REG_G2_BG2CNT_MOSAIC_SIZE 1 +#define REG_G2_BG2CNT_MOSAIC_MASK 0x0040 + +#define REG_G2_BG2CNT_CHARBASE_SHIFT 2 +#define REG_G2_BG2CNT_CHARBASE_SIZE 4 +#define REG_G2_BG2CNT_CHARBASE_MASK 0x003c + +#define REG_G2_BG2CNT_PRIORITY_SHIFT 0 +#define REG_G2_BG2CNT_PRIORITY_SIZE 2 +#define REG_G2_BG2CNT_PRIORITY_MASK 0x0003 + +// G2_BG3CNT +#define REG_G2_BG3CNT_SCREENSIZE_SHIFT 14 +#define REG_G2_BG3CNT_SCREENSIZE_SIZE 2 +#define REG_G2_BG3CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2_BG3CNT_AREAOVER_SHIFT 13 +#define REG_G2_BG3CNT_AREAOVER_SIZE 1 +#define REG_G2_BG3CNT_AREAOVER_MASK 0x2000 + +#define REG_G2_BG3CNT_SCREENBASE_SHIFT 8 +#define REG_G2_BG3CNT_SCREENBASE_SIZE 5 +#define REG_G2_BG3CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2_BG3CNT_COLORMODE_SHIFT 7 +#define REG_G2_BG3CNT_COLORMODE_SIZE 1 +#define REG_G2_BG3CNT_COLORMODE_MASK 0x0080 + +#define REG_G2_BG3CNT_MOSAIC_SHIFT 6 +#define REG_G2_BG3CNT_MOSAIC_SIZE 1 +#define REG_G2_BG3CNT_MOSAIC_MASK 0x0040 + +#define REG_G2_BG3CNT_CHARBASE_SHIFT 2 +#define REG_G2_BG3CNT_CHARBASE_SIZE 4 +#define REG_G2_BG3CNT_CHARBASE_MASK 0x003c + +#define REG_G2_BG3CNT_PRIORITY_SHIFT 0 +#define REG_G2_BG3CNT_PRIORITY_SIZE 2 +#define REG_G2_BG3CNT_PRIORITY_MASK 0x0003 + +// G2S_DB_BG0CNT +#define REG_G2S_DB_BG0CNT_SCREENSIZE_SHIFT 14 +#define REG_G2S_DB_BG0CNT_SCREENSIZE_SIZE 2 +#define REG_G2S_DB_BG0CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_SHIFT 13 +#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_SIZE 1 +#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_MASK 0x2000 + +#define REG_G2S_DB_BG0CNT_SCREENBASE_SHIFT 8 +#define REG_G2S_DB_BG0CNT_SCREENBASE_SIZE 5 +#define REG_G2S_DB_BG0CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2S_DB_BG0CNT_COLORMODE_SHIFT 7 +#define REG_G2S_DB_BG0CNT_COLORMODE_SIZE 1 +#define REG_G2S_DB_BG0CNT_COLORMODE_MASK 0x0080 + +#define REG_G2S_DB_BG0CNT_MOSAIC_SHIFT 6 +#define REG_G2S_DB_BG0CNT_MOSAIC_SIZE 1 +#define REG_G2S_DB_BG0CNT_MOSAIC_MASK 0x0040 + +#define REG_G2S_DB_BG0CNT_CHARBASE_SHIFT 2 +#define REG_G2S_DB_BG0CNT_CHARBASE_SIZE 4 +#define REG_G2S_DB_BG0CNT_CHARBASE_MASK 0x003c + +#define REG_G2S_DB_BG0CNT_PRIORITY_SHIFT 0 +#define REG_G2S_DB_BG0CNT_PRIORITY_SIZE 2 +#define REG_G2S_DB_BG0CNT_PRIORITY_MASK 0x0003 + +// G2S_DB_BG1CNT +#define REG_G2S_DB_BG1CNT_SCREENSIZE_SHIFT 14 +#define REG_G2S_DB_BG1CNT_SCREENSIZE_SIZE 2 +#define REG_G2S_DB_BG1CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_SHIFT 13 +#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_SIZE 1 +#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_MASK 0x2000 + +#define REG_G2S_DB_BG1CNT_SCREENBASE_SHIFT 8 +#define REG_G2S_DB_BG1CNT_SCREENBASE_SIZE 5 +#define REG_G2S_DB_BG1CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2S_DB_BG1CNT_COLORMODE_SHIFT 7 +#define REG_G2S_DB_BG1CNT_COLORMODE_SIZE 1 +#define REG_G2S_DB_BG1CNT_COLORMODE_MASK 0x0080 + +#define REG_G2S_DB_BG1CNT_MOSAIC_SHIFT 6 +#define REG_G2S_DB_BG1CNT_MOSAIC_SIZE 1 +#define REG_G2S_DB_BG1CNT_MOSAIC_MASK 0x0040 + +#define REG_G2S_DB_BG1CNT_CHARBASE_SHIFT 2 +#define REG_G2S_DB_BG1CNT_CHARBASE_SIZE 4 +#define REG_G2S_DB_BG1CNT_CHARBASE_MASK 0x003c + +#define REG_G2S_DB_BG1CNT_PRIORITY_SHIFT 0 +#define REG_G2S_DB_BG1CNT_PRIORITY_SIZE 2 +#define REG_G2S_DB_BG1CNT_PRIORITY_MASK 0x0003 + +// G2S_DB_BG2CNT +#define REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT 14 +#define REG_G2S_DB_BG2CNT_SCREENSIZE_SIZE 2 +#define REG_G2S_DB_BG2CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2S_DB_BG2CNT_AREAOVER_SHIFT 13 +#define REG_G2S_DB_BG2CNT_AREAOVER_SIZE 1 +#define REG_G2S_DB_BG2CNT_AREAOVER_MASK 0x2000 + +#define REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT 8 +#define REG_G2S_DB_BG2CNT_SCREENBASE_SIZE 5 +#define REG_G2S_DB_BG2CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2S_DB_BG2CNT_COLORMODE_SHIFT 7 +#define REG_G2S_DB_BG2CNT_COLORMODE_SIZE 1 +#define REG_G2S_DB_BG2CNT_COLORMODE_MASK 0x0080 + +#define REG_G2S_DB_BG2CNT_MOSAIC_SHIFT 6 +#define REG_G2S_DB_BG2CNT_MOSAIC_SIZE 1 +#define REG_G2S_DB_BG2CNT_MOSAIC_MASK 0x0040 + +#define REG_G2S_DB_BG2CNT_CHARBASE_SHIFT 2 +#define REG_G2S_DB_BG2CNT_CHARBASE_SIZE 4 +#define REG_G2S_DB_BG2CNT_CHARBASE_MASK 0x003c + +#define REG_G2S_DB_BG2CNT_PRIORITY_SHIFT 0 +#define REG_G2S_DB_BG2CNT_PRIORITY_SIZE 2 +#define REG_G2S_DB_BG2CNT_PRIORITY_MASK 0x0003 + +// G2S_DB_BG3CNT +#define REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT 14 +#define REG_G2S_DB_BG3CNT_SCREENSIZE_SIZE 2 +#define REG_G2S_DB_BG3CNT_SCREENSIZE_MASK 0xc000 + +#define REG_G2S_DB_BG3CNT_AREAOVER_SHIFT 13 +#define REG_G2S_DB_BG3CNT_AREAOVER_SIZE 1 +#define REG_G2S_DB_BG3CNT_AREAOVER_MASK 0x2000 + +#define REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT 8 +#define REG_G2S_DB_BG3CNT_SCREENBASE_SIZE 5 +#define REG_G2S_DB_BG3CNT_SCREENBASE_MASK 0x1f00 + +#define REG_G2S_DB_BG3CNT_COLORMODE_SHIFT 7 +#define REG_G2S_DB_BG3CNT_COLORMODE_SIZE 1 +#define REG_G2S_DB_BG3CNT_COLORMODE_MASK 0x0080 + +#define REG_G2S_DB_BG3CNT_MOSAIC_SHIFT 6 +#define REG_G2S_DB_BG3CNT_MOSAIC_SIZE 1 +#define REG_G2S_DB_BG3CNT_MOSAIC_MASK 0x0040 + +#define REG_G2S_DB_BG3CNT_CHARBASE_SHIFT 2 +#define REG_G2S_DB_BG3CNT_CHARBASE_SIZE 4 +#define REG_G2S_DB_BG3CNT_CHARBASE_MASK 0x003c + +#define REG_G2S_DB_BG3CNT_PRIORITY_SHIFT 0 +#define REG_G2S_DB_BG3CNT_PRIORITY_SIZE 2 +#define REG_G2S_DB_BG3CNT_PRIORITY_MASK 0x0003 + +// G2_BG0OFS +#define REG_G2_BG0OFS_VOFFSET_SHIFT 16 +#define REG_G2_BG0OFS_VOFFSET_SIZE 9 +#define REG_G2_BG0OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2_BG0OFS_HOFFSET_SHIFT 0 +#define REG_G2_BG0OFS_HOFFSET_SIZE 9 +#define REG_G2_BG0OFS_HOFFSET_MASK 0x000001ff + +// G2_BG1OFS +#define REG_G2_BG1OFS_VOFFSET_SHIFT 16 +#define REG_G2_BG1OFS_VOFFSET_SIZE 9 +#define REG_G2_BG1OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2_BG1OFS_HOFFSET_SHIFT 0 +#define REG_G2_BG1OFS_HOFFSET_SIZE 9 +#define REG_G2_BG1OFS_HOFFSET_MASK 0x000001ff + +// G2_BG2OFS +#define REG_G2_BG2OFS_VOFFSET_SHIFT 16 +#define REG_G2_BG2OFS_VOFFSET_SIZE 9 +#define REG_G2_BG2OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2_BG2OFS_HOFFSET_SHIFT 0 +#define REG_G2_BG2OFS_HOFFSET_SIZE 9 +#define REG_G2_BG2OFS_HOFFSET_MASK 0x000001ff + +// G2_BG3OFS +#define REG_G2_BG3OFS_VOFFSET_SHIFT 16 +#define REG_G2_BG3OFS_VOFFSET_SIZE 9 +#define REG_G2_BG3OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2_BG3OFS_HOFFSET_SHIFT 0 +#define REG_G2_BG3OFS_HOFFSET_SIZE 9 +#define REG_G2_BG3OFS_HOFFSET_MASK 0x000001ff + +// G2S_DB_BG0OFS +#define REG_G2S_DB_BG0OFS_VOFFSET_SHIFT 16 +#define REG_G2S_DB_BG0OFS_VOFFSET_SIZE 9 +#define REG_G2S_DB_BG0OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2S_DB_BG0OFS_HOFFSET_SHIFT 0 +#define REG_G2S_DB_BG0OFS_HOFFSET_SIZE 9 +#define REG_G2S_DB_BG0OFS_HOFFSET_MASK 0x000001ff + +// G2S_DB_BG1OFS +#define REG_G2S_DB_BG1OFS_VOFFSET_SHIFT 16 +#define REG_G2S_DB_BG1OFS_VOFFSET_SIZE 9 +#define REG_G2S_DB_BG1OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2S_DB_BG1OFS_HOFFSET_SHIFT 0 +#define REG_G2S_DB_BG1OFS_HOFFSET_SIZE 9 +#define REG_G2S_DB_BG1OFS_HOFFSET_MASK 0x000001ff + +// G2S_DB_BG2OFS +#define REG_G2S_DB_BG2OFS_VOFFSET_SHIFT 16 +#define REG_G2S_DB_BG2OFS_VOFFSET_SIZE 9 +#define REG_G2S_DB_BG2OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2S_DB_BG2OFS_HOFFSET_SHIFT 0 +#define REG_G2S_DB_BG2OFS_HOFFSET_SIZE 9 +#define REG_G2S_DB_BG2OFS_HOFFSET_MASK 0x000001ff + +// G2S_DB_BG3OFS +#define REG_G2S_DB_BG3OFS_VOFFSET_SHIFT 16 +#define REG_G2S_DB_BG3OFS_VOFFSET_SIZE 9 +#define REG_G2S_DB_BG3OFS_VOFFSET_MASK 0x01ff0000 + +#define REG_G2S_DB_BG3OFS_HOFFSET_SHIFT 0 +#define REG_G2S_DB_BG3OFS_HOFFSET_SIZE 9 +#define REG_G2S_DB_BG3OFS_HOFFSET_MASK 0x000001ff + +// Timer control + +#define REG_OS_TM0CNT_L_TIMER0CNT_SHIFT 0 +#define REG_OS_TM0CNT_L_TIMER0CNT_SIZE 16 +#define REG_OS_TM0CNT_L_TIMER0CNT_MASK 0xffff + +#define REG_OS_TM0CNT_H_E_SHIFT 7 +#define REG_OS_TM0CNT_H_E_SIZE 1 +#define REG_OS_TM0CNT_H_E_MASK 0x0080 + +#define REG_OS_TM0CNT_H_I_SHIFT 6 +#define REG_OS_TM0CNT_H_I_SIZE 1 +#define REG_OS_TM0CNT_H_I_MASK 0x0040 + +#define REG_OS_TM0CNT_H_PS_SHIFT 0 +#define REG_OS_TM0CNT_H_PS_SIZE 2 +#define REG_OS_TM0CNT_H_PS_MASK 0x0003 + +#define REG_OS_TM1CNT_L_TIMER0CNT_SHIFT 0 +#define REG_OS_TM1CNT_L_TIMER0CNT_SIZE 16 +#define REG_OS_TM1CNT_L_TIMER0CNT_MASK 0xffff + +#define REG_OS_TM1CNT_H_E_SHIFT 7 +#define REG_OS_TM1CNT_H_E_SIZE 1 +#define REG_OS_TM1CNT_H_E_MASK 0x0080 + +#define REG_OS_TM1CNT_H_I_SHIFT 6 +#define REG_OS_TM1CNT_H_I_SIZE 1 +#define REG_OS_TM1CNT_H_I_MASK 0x0040 + +#define REG_OS_TM1CNT_H_PS_SHIFT 0 +#define REG_OS_TM1CNT_H_PS_SIZE 2 +#define REG_OS_TM1CNT_H_PS_MASK 0x0003 + +#define REG_OS_TM2CNT_L_TIMER0CNT_SHIFT 0 +#define REG_OS_TM2CNT_L_TIMER0CNT_SIZE 16 +#define REG_OS_TM2CNT_L_TIMER0CNT_MASK 0xffff + +#define REG_OS_TM2CNT_H_E_SHIFT 7 +#define REG_OS_TM2CNT_H_E_SIZE 1 +#define REG_OS_TM2CNT_H_E_MASK 0x0080 + +#define REG_OS_TM2CNT_H_I_SHIFT 6 +#define REG_OS_TM2CNT_H_I_SIZE 1 +#define REG_OS_TM2CNT_H_I_MASK 0x0040 + +#define REG_OS_TM2CNT_H_PS_SHIFT 0 +#define REG_OS_TM2CNT_H_PS_SIZE 2 +#define REG_OS_TM2CNT_H_PS_MASK 0x0003 + +#define REG_OS_TM3CNT_L_TIMER0CNT_SHIFT 0 +#define REG_OS_TM3CNT_L_TIMER0CNT_SIZE 16 +#define REG_OS_TM3CNT_L_TIMER0CNT_MASK 0xffff + +#define REG_OS_TM3CNT_H_E_SHIFT 7 +#define REG_OS_TM3CNT_H_E_SIZE 1 +#define REG_OS_TM3CNT_H_E_MASK 0x0080 + +#define REG_OS_TM3CNT_H_I_SHIFT 6 +#define REG_OS_TM3CNT_H_I_SIZE 1 +#define REG_OS_TM3CNT_H_I_MASK 0x0040 + +#define REG_OS_TM3CNT_H_PS_SHIFT 0 +#define REG_OS_TM3CNT_H_PS_SIZE 2 +#define REG_OS_TM3CNT_H_PS_MASK 0x0003 + +#endif //POKEDIAMOND_ARM9_REGISTERS_H diff --git a/arm9/lib/NitroSDK/include/syscall.h b/arm9/lib/NitroSDK/include/syscall.h new file mode 100644 index 00000000..8e7962df --- /dev/null +++ b/arm9/lib/NitroSDK/include/syscall.h @@ -0,0 +1,19 @@ +#ifndef POKEDIAMOND_ARM9_SYSCALL_H +#define POKEDIAMOND_ARM9_SYSCALL_H + +#include "consts.h" +#include "MI_dma.h" + +void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData); + +#define SVC_CpuClear( data, destp, size, bit ) \ +do{ \ + vu##bit tmp = (vu##bit )(data); \ + SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ + MI_DMA_SRC_FIX | \ + MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \ +} while(0) + +void SVC_WaitByLoop(u32 ct); + +#endif //POKEDIAMOND_ARM9_SYSCALL_H diff --git a/arm9/lib/NitroSDK/include/systemWork.h b/arm9/lib/NitroSDK/include/systemWork.h new file mode 100644 index 00000000..1e3ba46b --- /dev/null +++ b/arm9/lib/NitroSDK/include/systemWork.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM9_SYSTEMWORK_H +#define POKEDIAMOND_ARM9_SYSTEMWORK_H + +#include "nitro/OS_systemWork_shared.h" + +#endif //POKEDIAMOND_ARM9_SYSTEMWORK_H diff --git a/arm9/lib/NitroSDK/include/tp.h b/arm9/lib/NitroSDK/include/tp.h new file mode 100644 index 00000000..dc762f10 --- /dev/null +++ b/arm9/lib/NitroSDK/include/tp.h @@ -0,0 +1,45 @@ +#ifndef NITRO_TP_H_ +#define NITRO_TP_H_ + +#define TP_TOUCH_OFF 0 // Not being touched +#define TP_TOUCH_ON 1 // Being touched + +#define TP_VALIDITY_VALID 0 // Valid +#define TP_VALIDITY_INVALID_X 1 // Data with invalid X coordinate +#define TP_VALIDITY_INVALID_Y 2 // Data with invalid Y coordinate +#define TP_VALIDITY_INVALID_XY (TP_VALIDITY_INVALID_X | TP_VALIDITY_INVALID_Y) // Data with invalid X and Y coordinates + +// Touch panel input structure +typedef struct +{ + u16 x; // x coordinate ( 0 - 4095 ) + u16 y; // y coordinate ( 0 - 4095 ) + u16 touch; // Touch yes/no + u16 validity; // Valid yes/no +} +TPData; + +typedef struct NvTpData +{ + s16 x0; // X origin coordinate + s16 y0; // Y origin coordinate + s16 xDotSize; // X dot size + s16 yDotSize; // Y dot size +} +TPCalibrateParam; + +void TP_Init(void); +void TP_SetCalibrateParam(const TPCalibrateParam *param); +BOOL TP_GetUserInfo(TPCalibrateParam *calibrate); +void TP_RequestSamplingAsync(void); +u32 TP_WaitRawResult(TPData *result); +void TP_GetLatestRawPointInAuto(TPData *result); +void TP_GetCalibratedPoint(TPData *disp, const TPData *raw); + +static inline u32 TP_RequestRawSampling(TPData *result) +{ + TP_RequestSamplingAsync(); + return TP_WaitRawResult(result); +} + +#endif //NITRO_TP_H_ diff --git a/arm9/lib/NitroSDK/include/userInfo.h b/arm9/lib/NitroSDK/include/userInfo.h new file mode 100644 index 00000000..690dcf54 --- /dev/null +++ b/arm9/lib/NitroSDK/include/userInfo.h @@ -0,0 +1,92 @@ +#ifndef POKEDIAMOND_USERINFO_H +#define POKEDIAMOND_USERINFO_H + +typedef struct NVRAMConfigDate +{ + u8 month; //0x00 + u8 day; //0x01 +} NVRAMConfigDate; //0x02 + +typedef struct NVRAMConfigNickname +{ + u16 str[10]; //0x00 + u8 length; //0x14 + u8 rsv; //0x15 +} NVRAMConfigNickname; //0x16 + +typedef struct NVRAMConfigComment +{ + u16 str[26]; //0x00 + u8 length; //0x34 + u8 rsv; //0x35 +} NVRAMConfigComment; //0x36 + +typedef struct NVRAMConfigOwnerInfo +{ + u8 favouriteColour:4; //0x00 (0-3) + u8 rsv:4; //0x00 (4-7) + NVRAMConfigDate birthday; //0x01 + u8 pad; //0x03 + NVRAMConfigNickname nickname; //0x04 + NVRAMConfigComment comment; //0x1a +} NVRAMConfigOwnerInfo; //0x50 + +typedef struct NVRAMConfigAlarm +{ + u8 hour; //0x00 + u8 minute; //0x01 + u8 second; //0x02 + u8 pad; //0x03 + u16 enableWeek:7; //0x04 (0-6) + u16 alarmOn:1; //0x04 (7) + u16 rsv:8; //0x04 (8-15) +} NVRAMConfigAlarm; //0x06 + +typedef struct NVRAMConfigTpCalibData +{ + u16 raw_x1; //0x00 + u16 raw_y1; //0x02 + u8 dx1; //0x04 + u8 dy1; //0x05 + u16 raw_x2; //0x06 + u16 raw_y2; //0x08 + u8 dx2; //0x0a + u8 dy2; //0x0b +} NVRAMConfigTpCalibData; //0x0c + +typedef struct NVRAMConfigOption +{ + u16 language:3; //0x00 (0-2) + u16 agbLcd:1; //0x00 (3) + u16 detectPullOutCardFlag:1; //0x00 (4) + u16 detectPullOutCtrdgFlag:1; //0x00 (5) + u16 autoBootFlag:1; //0x00 (6) + u16 rsv:4; //0x00 (7-10) + u16 input_favouriteColour:1; //0x00 (11) + u16 input_tp:1; //0x00 (12) + u16 input_language:1; //0x00 (13) + u16 input_rtc:1; //0x00 (14) + u16 input_nickname:1; //0x00 (15) + u8 timeZone; //0x02 + u8 rtcClockAdjust; //0x03 + s64 rtcOffset; //0x04 +} NVRAMConfigOption; //0x0c + +typedef struct NVRAMConfigData +{ + u8 version; //0x00 + u8 pad; //0x01 + NVRAMConfigOwnerInfo owner; //0x02 + NVRAMConfigAlarm alarm; //0x52 + NVRAMConfigTpCalibData tp; //0x58 + NVRAMConfigOption option; //0x64 +} NVRAMConfigData; //0x70 + +typedef struct NVRAMConfig +{ + NVRAMConfigData ncd; //0x00 + u16 saveCount; //0x70 + u16 crc16; //0x72 +} NVRAMConfig; //0x74 + +#endif //POKEDIAMOND_USERINFO_H diff --git a/arm9/lib/NitroSDK/src/CARD_backup.c b/arm9/lib/NitroSDK/src/CARD_backup.c new file mode 100644 index 00000000..714ac479 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_backup.c @@ -0,0 +1,159 @@ +#include "CARD_backup.h" +#include "function_target.h" +#include "CARD_common.h" +#include "CARD_request.h" +#include "CARD_spi.h" +#include "OS_cache.h" +#include "MI_memory.h" +#include "OS_terminate_proc.h" +#include "OS_system.h" + +extern void OSi_ReferSymbol(void *symbol); +extern char _SDK_NintendoBackup[]; + +extern CARDiCommon cardi_common; + +static void CARDi_RequestStreamCommandCore(CARDiCommon *p); + +ARM_FUNC static void CARDi_RequestStreamCommandCore(CARDiCommon *p) +{ + const int req_type = p->req_type; + const int req_mode = p->req_mode; + const int retry_count = p->req_retry; + u32 size = sizeof(p->backup_cache_page_buf); + + OSi_ReferSymbol((void *)_SDK_NintendoBackup); + + if (req_type == CARD_REQ_ERASE_SECTOR_BACKUP) + { + size = CARD_GetBackupSectorSize(); + } + do + { + const u32 len = (size < p->len) ? size : p->len; + p->cmd->len = len; + + if ((p->flag & CARD_STAT_CANCEL) != 0) + { + p->flag &= ~CARD_STAT_CANCEL; + p->cmd->result = CARD_RESULT_CANCELED; + break; + } + switch (req_mode) + { + case CARD_REQUEST_MODE_RECV: + DC_InvalidateRange(p->backup_cache_page_buf, len); + p->cmd->src = (u32)p->src; + p->cmd->dest = (u32)p->backup_cache_page_buf; + break; + case CARD_REQUEST_MODE_SEND: + case CARD_REQUEST_MODE_SEND_VERIFY: + MI_CpuCopy8((const void *)p->src, p->backup_cache_page_buf, len); + DC_FlushRange(p->backup_cache_page_buf, len); + DC_WaitWriteBufferEmpty(); + p->cmd->src = (u32)p->backup_cache_page_buf; + p->cmd->dest = (u32)p->dst; + break; + case CARD_REQUEST_MODE_SPECIAL: + p->cmd->src = (u32)p->src; + p->cmd->dest = (u32)p->dst; + break; + } + + if (!CARDi_Request(p, req_type, retry_count)) + { + break; + } + + if (req_mode == CARD_REQUEST_MODE_SEND_VERIFY) + { + if (!CARDi_Request(p, CARD_REQ_VERIFY_BACKUP, 1)) + { + break; + } + } + else if (req_mode == CARD_REQUEST_MODE_RECV) + { + MI_CpuCopy8(p->backup_cache_page_buf, (void *)p->dst, len); + } + p->src += len; + p->dst += len; + p->len -= len; + } + while (p->len > 0); + CARDi_EndTask(p, TRUE); +} + +ARM_FUNC BOOL CARDi_RequestStreamCommand(u32 src, u32 dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async, + CARDRequest req_type, int req_retry, CARDRequestMode req_mode) +{ + CARDiCommon *const p = &cardi_common; + + OSi_ReferSymbol((void *)_SDK_NintendoBackup); + + CARDi_WaitTask(p, callback, arg); + p->src = src; + p->dst = dst; + p->len = len; + p->req_type = req_type; + p->req_retry = req_retry; + p->req_mode = req_mode; + if (is_async) + { + CARDi_SetTask(CARDi_RequestStreamCommandCore); + return TRUE; + } + else + { + cardi_common.cur_th = OS_GetCurrentThread(); + CARDi_RequestStreamCommandCore(p); + return (p->cmd->result == CARD_RESULT_SUCCESS); + } +} + +ARM_FUNC u32 CARD_GetBackupSectorSize(void) +{ + return cardi_common.cmd->spec.sect_size; +} + +ARM_FUNC BOOL CARD_IdentifyBackup(CARDBackupType type) +{ + CARDiCommon *const p = &cardi_common; + + OSi_ReferSymbol((void *)_SDK_NintendoBackup); + if (type == CARD_BACKUP_TYPE_NOT_USE) + { + OS_Terminate(); + } + + CARD_CheckEnabled(); + + CARDi_WaitTask(p, NULL, NULL); + CARDi_IdentifyBackupCore(type); + cardi_common.cur_th = OS_GetCurrentThread(); + (void)CARDi_Request(p, CARD_REQ_IDENTIFY, 1); + + p->cmd->src = 0; + p->cmd->dest = (u32)p->backup_cache_page_buf; + p->cmd->len = 1; + (void)CARDi_Request(p, CARD_REQ_READ_BACKUP, 1); + CARDi_EndTask(p, TRUE); + return (p->cmd->result == CARD_RESULT_SUCCESS); +} + +ARM_FUNC BOOL CARD_WaitBackupAsync(void) +{ + return CARDi_WaitAsync(); +} + +ARM_FUNC BOOL CARD_TryWaitBackupAsync(void) +{ + return CARDi_TryWaitAsync(); +} + +ARM_FUNC void CARD_CancelBackupAsync(void) +{ + OSIntrMode bak_cpsr = OS_DisableInterrupts(); + cardi_common.flag |= CARD_STAT_CANCEL; + (void)OS_RestoreInterrupts(bak_cpsr); +} diff --git a/arm9/lib/NitroSDK/src/CARD_common.c b/arm9/lib/NitroSDK/src/CARD_common.c new file mode 100644 index 00000000..fd66c7ce --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_common.c @@ -0,0 +1,181 @@ +#include "CARD_common.h" +#include "CARD_request.h" +#include "consts.h" +#include "function_target.h" +#include "MI_memory.h" +#include "OS_terminate_proc.h" +#include "OS_spinLock.h" +#include "OS_cache.h" +#include "MB_mb.h" +#include "PXI_fifo.h" +#include "mmap.h" + +CARDiCommon cardi_common ALIGN(32); +static CARDiCommandArg cardi_arg ALIGN(32); + +u8 cardi_thread_stack[0x400] ALIGN(4); + +static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target); +static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target); + +ARM_FUNC void CARDi_SetTask(void (*task) (CARDiCommon *)) +{ + CARDiCommon *const p = &cardi_common; + + (void)OS_SetThreadPriority(p->thread, p->priority); + + p->cur_th = p->thread; + p->task_func = task; + p->flag |= CARD_STAT_TASK; + OS_WakeupThreadDirect(p->thread); +} + +ARM_FUNC static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target) +{ + CARDiCommon *const p = &cardi_common; + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (p->lock_owner == owner) + { + if (p->lock_target != target) + { + OS_Terminate(); + } + } + else + { + while (p->lock_owner != OS_LOCK_ID_ERROR) + { + OS_SleepThread(p->lock_queue); + } + p->lock_owner = owner; + p->lock_target = target; + } + ++p->lock_ref; + p->cmd->result = CARD_RESULT_SUCCESS; + (void)OS_RestoreInterrupts(bak_psr); +} + +ARM_FUNC static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target) +{ + CARDiCommon *p = &cardi_common; + OSIntrMode bak_psr = OS_DisableInterrupts(); + if ((p->lock_owner != owner) || !p->lock_ref) + { + OS_Terminate(); + } + else + { + if (p->lock_target != target) + { + OS_Terminate(); + } + if (!--p->lock_ref) + { + p->lock_owner = OS_LOCK_ID_ERROR; + p->lock_target = CARD_TARGET_NONE; + OS_WakeupThread(p->lock_queue); + } + } + p->cmd->result = CARD_RESULT_SUCCESS; + (void)OS_RestoreInterrupts(bak_psr); +} + +ARM_FUNC void CARDi_InitCommon(void) +{ + CARDiCommon *p = &cardi_common; + + p->lock_owner = OS_LOCK_ID_ERROR; + p->lock_ref = 0; + p->lock_target = CARD_TARGET_NONE; + + p->cmd = &cardi_arg; + MI_CpuFillFast(&cardi_arg, 0x00, sizeof(cardi_arg)); + DC_FlushRange(&cardi_arg, sizeof(cardi_arg)); + + if (!MB_IsMultiBootChild()) + { + MI_CpuCopy8((const void *)HW_ROM_HEADER_BUF, (void *)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); + } + OS_InitThreadQueue(p->lock_queue); + OS_InitThreadQueue(p->busy_q); + p->priority = CARD_THREAD_PRIORITY_DEFAULT; + OS_CreateThread(p->thread, CARDi_TaskThread, NULL, cardi_thread_stack + sizeof(cardi_thread_stack), + sizeof(cardi_thread_stack), p->priority); + OS_WakeupThreadDirect(p->thread); + + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_FS, CARDi_OnFifoRecv); + + if (!MB_IsMultiBootChild()) + { + CARD_Enable(TRUE); + } +} + +static BOOL CARDi_EnableFlag = FALSE; + +ARM_FUNC BOOL CARD_IsEnabled(void) +{ + return CARDi_EnableFlag; +} + +ARM_FUNC void CARD_CheckEnabled(void) +{ + if (!CARD_IsEnabled()) + { + OS_Terminate(); + } +} + +ARM_FUNC void CARD_Enable(BOOL enable) +{ + CARDi_EnableFlag = enable; +} + +ARM_FUNC BOOL CARDi_WaitAsync(void) +{ + CARDiCommon *const p = &cardi_common; + + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_BUSY) != 0) + { + OS_SleepThread(p->busy_q); + } + (void)OS_RestoreInterrupts(bak_psr); + return (p->cmd->result == CARD_RESULT_SUCCESS); +} + +ARM_FUNC BOOL CARDi_TryWaitAsync(void) +{ + CARDiCommon *const p = &cardi_common; + + return !(p->flag & CARD_STAT_BUSY); +} + +ARM_FUNC CARDResult CARD_GetResultCode(void) +{ + CARDiCommon *const p = &cardi_common; + + return p->cmd->result; +} + +ARM_FUNC void CARD_LockRom(u16 lock_id) +{ + CARDi_LockResource(lock_id, CARD_TARGET_ROM); + (void)OS_TryLockCard(lock_id); +} + +ARM_FUNC void CARD_UnlockRom(u16 lock_id) +{ + (void)OS_UnlockCard(lock_id); + CARDi_UnlockResource(lock_id, CARD_TARGET_ROM); +} + +ARM_FUNC void CARD_LockBackup(u16 lock_id) +{ + CARDi_LockResource(lock_id, CARD_TARGET_BACKUP); +} + +ARM_FUNC void CARD_UnlockBackup(u16 lock_id) +{ + CARDi_UnlockResource(lock_id, CARD_TARGET_BACKUP); +} diff --git a/arm9/lib/NitroSDK/src/CARD_pullOut.c b/arm9/lib/NitroSDK/src/CARD_pullOut.c new file mode 100644 index 00000000..d5c7737f --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_pullOut.c @@ -0,0 +1,105 @@ +#include "function_target.h" +#include "CARD_common.h" +#include "CARD_pullOut.h" +#include "PXI_init.h" +#include "PXI_fifo.h" +#include "OS_terminate_proc.h" +#include "OS_system.h" +#include "PAD_pad.h" +#include "SPI_pm.h" +#include "syscall.h" +#include "mmap.h" + +static CARDPulledOutCallback CARD_UserCallback; +static BOOL CARDi_IsPulledOutFlag = FALSE; + +static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err); +static void CARDi_SendtoPxi(u32 data, u32 wait); + +ARM_FUNC void CARD_InitPulledOutCallback(void) +{ + PXI_Init(); + + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CARD, CARDi_PulledOutCallback); + + CARD_UserCallback = NULL; +} + +ARM_FUNC static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err) +{ +#pragma unused(tag, err) + u32 command = data & CARD_PXI_COMMAND_MASK; + + if (command == CARD_PXI_COMMAND_PULLED_OUT) + { + if (!CARDi_IsPulledOutFlag) + { + BOOL isTerminateImm = TRUE; + CARDi_IsPulledOutFlag = TRUE; + + if (CARD_UserCallback) + { + isTerminateImm = CARD_UserCallback(); + } + + if (isTerminateImm) + { + CARD_TerminateForPulledOut(); + } + } + } + else + { + OS_Terminate(); + } +} + +ARM_FUNC BOOL CARD_IsPulledOut(void) +{ + return CARDi_IsPulledOutFlag; +} + +ARM_FUNC void CARD_TerminateForPulledOut(void) +{ + BOOL should_be_halt = TRUE; + + if (PAD_DetectFold()) + { + u32 res; + while ((res = PM_ForceToPowerOff()) == 0x04) + { + OS_SpinWait(HW_CPU_CLOCK_ARM9 / 100); + } + if (res == 0) + { + should_be_halt = FALSE; + } + } + + if (should_be_halt) + { + CARDi_SendtoPxi(CARD_PXI_COMMAND_TERMINATE, 1); + } + + OS_Terminate(); +} + +ARM_FUNC void CARDi_CheckPulledOutCore(u32 id) +{ + vu32 iplCardID = *(vu32 *)((*(u16 *)HW_CHECK_DEBUGGER_SW == 0) ? HW_RED_RESERVED : HW_BOOT_CHECK_INFO_BUF); + + if (id != (u32)iplCardID) + { + OSIntrMode bak_cpsr = OS_DisableInterrupts(); + CARDi_PulledOutCallback(PXI_FIFO_TAG_CARD, CARD_PXI_COMMAND_PULLED_OUT, FALSE); + (void)OS_RestoreInterrupts(bak_cpsr); + } +} + +ARM_FUNC static void CARDi_SendtoPxi(u32 data, u32 wait) +{ + while (PXI_SendWordByFifo(PXI_FIFO_TAG_CARD, data, FALSE) != PXI_FIFO_SUCCESS) + { + SVC_WaitByLoop((u32)wait); + } +} diff --git a/arm9/lib/NitroSDK/src/CARD_request.c b/arm9/lib/NitroSDK/src/CARD_request.c new file mode 100644 index 00000000..098fe7a5 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_request.c @@ -0,0 +1,76 @@ +#include "function_target.h" +#include "CARD_request.h" +#include "OS_cache.h" +#include "OS_system.h" +#include "OS_thread.h" + +extern CARDiCommon cardi_common; + +ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err) +{ +#pragma unused (data) + if ((tag == PXI_FIFO_TAG_FS) && err) + { + CARDiCommon *const p = &cardi_common; + p->flag &= ~CARD_STAT_REQ; + OS_WakeupThreadDirect(p->cur_th); + } +} + +ARM_FUNC void CARDi_TaskThread(void *arg) +{ +#pragma unused (arg) + CARDiCommon *const p = &cardi_common; + + while (TRUE) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_TASK) == 0) + { + p->cur_th = p->thread; + OS_SleepThread(NULL); + } + (void)OS_RestoreInterrupts(bak_psr); + (*p->task_func)(p); + } +} + +ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) +{ + if ((p->flag & CARD_STAT_INIT_CMD) == 0) + { + p->flag |= CARD_STAT_INIT_CMD; + while (!PXI_IsCallbackReady(PXI_FIFO_TAG_FS, PXI_PROC_ARM7)) + { + OS_SpinWait(100); + } + + (void)CARDi_Request(p, CARD_REQ_INIT, 1); + } + DC_FlushRange(p->cmd, sizeof(*p->cmd)); + DC_WaitWriteBufferEmpty(); + + do + { + p->command = req_type; + p->flag |= CARD_STAT_REQ; + CARDi_SendPxi((u32)req_type); + + switch (req_type) + { + case CARD_REQ_INIT: + CARDi_SendPxi((u32)p->cmd); + break; + } + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_REQ) != 0) + { + OS_SleepThread(NULL); + } + (void)OS_RestoreInterrupts(bak_psr); + DC_InvalidateRange(p->cmd, sizeof(*p->cmd)); + } + while ((p->cmd->result == CARD_RESULT_TIMEOUT) && (--retry_count > 0)); + + return (p->cmd->result == CARD_RESULT_SUCCESS); +} diff --git a/arm9/lib/NitroSDK/src/CARD_rom.c b/arm9/lib/NitroSDK/src/CARD_rom.c new file mode 100644 index 00000000..6d6b1ff8 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_rom.c @@ -0,0 +1,280 @@ +#include "function_target.h" +#include "nitro/types.h" +#include "CARD_pullOut.h" +#include "CARD_rom.h" +#include "MI_dma_card.h" +#include "MI_memory.h" +#include "OS_cache.h" +#include "OS_interrupt.h" + +extern u32 cardi_rom_base; +u32 cardi_rom_base; +u32 cardi_rom_header_addr = HW_ROM_HEADER_BUF; + +CARDRomStat rom_stat ALIGN(32); + +static BOOL CARDi_ReadFromCache(CARDRomStat *p); +static void CARDi_SetRomOp(u32 cmd1, u32 cmd2); +static void CARDi_SetCardDma(void); +static void CARDi_OnReadCard(void); +static void CARDi_ReadRomSyncCore(CARDiCommon *c); + +static inline BOOL CARDi_OnReadPageDirect(CARDRomStat *arg) +{ +#pragma unused(arg) + CARDiCommon *p = &cardi_common; + p->src += CARD_ROM_PAGE_SIZE; + p->dst += CARD_ROM_PAGE_SIZE; + p->len -= CARD_ROM_PAGE_SIZE; + return (p->len > 0); +} + +ARM_FUNC static BOOL CARDi_ReadFromCache(CARDRomStat *p) +{ + CARDiCommon *c = &cardi_common; + const u32 cur_page = CARD_ALIGN_HI_BIT(c->src); + if (cur_page == (u32)p->cache_page) + { + const u32 mod = c->src - cur_page; + u32 len = CARD_ROM_PAGE_SIZE - mod; + if (len > c->len) + { + len = c->len; + } + MI_CpuCopy8(p->cache_buf + mod, (void *)c->dst, len); + c->src += len; + c->dst += len; + c->len -= len; + } + return (c->len > 0); +} + +ARM_FUNC static void CARDi_SetRomOp(u32 cmd1, u32 cmd2) +{ + while ((reg_CARD_CNT & CARD_START) != 0) {} + + reg_CARD_MASTERCNT = CARDMST_SEL_ROM | CARDMST_ENABLE | CARDMST_IF_ENABLE; + { + vu8 *const p_cmd = ®_CARD_CMD; + p_cmd[0] = (u8)(cmd1 >> (8 * 3)); + p_cmd[1] = (u8)(cmd1 >> (8 * 2)); + p_cmd[2] = (u8)(cmd1 >> (8 * 1)); + p_cmd[3] = (u8)(cmd1 >> (8 * 0)); + p_cmd[4] = (u8)(cmd2 >> (8 * 3)); + p_cmd[5] = (u8)(cmd2 >> (8 * 2)); + p_cmd[6] = (u8)(cmd2 >> (8 * 1)); + p_cmd[7] = (u8)(cmd2 >> (8 * 0)); + } +} + +static inline void CARDi_SetRomOpReadPage1(u32 src) +{ + CARDi_SetRomOp((u32)(MROMOP_G_READ_PAGE | (src >> 8)), (u32)(src << 24)); +} + +ARM_FUNC static void CARDi_SetCardDma(void) +{ + CARDiCommon *const c = &cardi_common; + CARDRomStat *const p = &rom_stat; + MIi_CardDmaCopy32(c->dma, (const void *)®_CARD_DATA, (void *)c->dst, CARD_ROM_PAGE_SIZE); + CARDi_SetRomOpReadPage1(c->src); + reg_CARD_CNT = p->ctrl; +} + +ARM_FUNC static void CARDi_OnReadCard(void) +{ + CARDRomStat *const p = &rom_stat; + CARDiCommon *const c = &cardi_common; + MI_StopDma(c->dma); + if (!CARDi_OnReadPageDirect(p)) + { + (void)OS_DisableIrqMask(OS_IE_CARD_DATA); + (void)OS_ResetRequestIrqMask(OS_IE_CARD_DATA); + CARDi_ReadEnd(); + } + else + { + CARDi_SetCardDma(); + } +} + +ARM_FUNC BOOL CARDi_TryReadCardDma(CARDRomStat *p) +{ + CARDiCommon *const c = &cardi_common; + const u32 dst = c->dst; + u32 len = c->len; + const BOOL is_async = !(dst & 31) && + (c->dma <= MI_DMA_MAX_NUM) && + !CARDi_IsInTcm(dst, len) && + !CARD_ALIGN_LO_BIT(c->src | len) && + (len > 0); + p->ctrl = CARDi_GetRomFlag(CARD_COMMAND_PAGE); + if (is_async) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + IC_InvalidateRange((void *)dst, len); + { + u32 pos = dst; + u32 mod = (dst & (HW_CACHE_LINE_SIZE - 1)); + if (mod) + { + pos -= mod; + DC_StoreRange((void *)(pos), HW_CACHE_LINE_SIZE); + DC_StoreRange((void *)(pos + len), HW_CACHE_LINE_SIZE); + len += HW_CACHE_LINE_SIZE; + } + DC_InvalidateRange((void *)pos, len); + DC_WaitWriteBufferEmpty(); + } + (void)OS_SetIrqFunction(OS_IE_CARD_DATA, CARDi_OnReadCard); + (void)OS_ResetRequestIrqMask(OS_IE_CARD_DATA); + (void)OS_EnableIrqMask(OS_IE_CARD_DATA); + (void)OS_RestoreInterrupts(bak_psr); + CARDi_SetCardDma(); + } + return is_async; +} + +ARM_FUNC void CARDi_ReadCard(CARDRomStat *p) +{ + CARDiCommon *const c = &cardi_common; + while (TRUE) + { + const u32 len = CARD_ROM_PAGE_SIZE; + u32 src = CARD_ALIGN_HI_BIT(c->src); + u32 dst; + if ((src != c->src) || ((c->dst & 3) != 0) || (c->len < len)) + { + dst = (u32)p->cache_buf; + p->cache_page = (void *)src; + } + else + { + dst = c->dst; + } + + CARDi_SetRomOpReadPage1(src); + { + u32 pos = 0; + reg_CARD_CNT = p->ctrl; + while (TRUE) + { + const u32 ctrl = reg_CARD_CNT; + if ((ctrl & CARD_DATA_READY) != 0) + { + u32 data = reg_CARD_DATA; + if (pos < len) + { + ((u32 *)dst)[pos++] = data; + } + } + if (!(ctrl & CARD_START)) + { + break; + } + } + } + if (dst == c->dst) + { + if (!CARDi_OnReadPageDirect(p)) + { + break; + } + } + else + { + if (!CARDi_ReadFromCache(p)) + { + break; + } + } + } +} + +ARM_FUNC u32 CARDi_ReadRomIDCore(void) +{ + CARDi_SetRomOp(MROMOP_G_READ_ID, 0); + reg_CARD_CNT = (u32)(CARDi_GetRomFlag(CARD_COMMAND_ID) & ~CARD_LATENCY1_MASK); + while (!(reg_CARD_CNT & CARD_DATA_READY)) {} + return reg_CARD_DATA; +} + +ARM_FUNC static void CARDi_ReadRomSyncCore(CARDiCommon *c) +{ +#pragma unused(c) + CARDRomStat *const p = &rom_stat; + + if (CARDi_ReadFromCache(p)) + { + (*p->read_func) (p); + } + CARDi_ReadEnd(); +} + +ARM_FUNC void CARDi_ReadRom(u32 dma, const void *src, void *dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async) +{ + CARDRomStat *const p = &rom_stat; + CARDiCommon *const c = &cardi_common; + + CARD_CheckEnabled(); + + CARDi_WaitTask(c, callback, arg); + + c->dma = dma; + c->src = (u32)((u32)src + cardi_rom_base); + c->dst = (u32)dst; + c->len = (u32)len; + if (dma <= MI_DMA_MAX_NUM) + { + MI_StopDma(dma); + } + + if (CARDi_TryReadCardDma(p)) + { + if (!is_async) + { + CARD_WaitRomAsync(); + } + } + else if (is_async) + { + CARDi_SetTask(CARDi_ReadRomSyncCore); + } + else + { + c->cur_th = OS_GetCurrentThread(); + CARDi_ReadRomSyncCore(c); + } +} + +ARM_FUNC void CARD_Init(void) +{ + CARDiCommon *const p = &cardi_common; + + if (!p->flag) + { + p->flag = CARD_STAT_INIT; + p->src = p->dst = p->len = 0; + p->dma = (u32)~0; + p->callback = NULL; + p->callback_arg = NULL; + + cardi_rom_base = 0; + + CARDi_InitCommon(); + + rom_stat.read_func = CARDi_GetRomAccessor(); + + CARD_InitPulledOutCallback(); + } +} + +ARM_FUNC void CARD_WaitRomAsync(void) +{ + (void)CARDi_WaitAsync(); +} + +ARM_FUNC void (*CARDi_GetRomAccessor(void)) (CARDRomStat *) +{ + return CARDi_ReadCard; +} diff --git a/arm9/lib/NitroSDK/src/CARD_spi.c b/arm9/lib/NitroSDK/src/CARD_spi.c new file mode 100644 index 00000000..5f02b276 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CARD_spi.c @@ -0,0 +1,123 @@ +#include "function_target.h" +#include "nitro/types.h" +#include "CARD_common.h" +#include "CARD_spi.h" +#include "MI_memory.h" + +extern CARDiCommon cardi_common; + +ARM_FUNC void CARDi_IdentifyBackupCore(CARDBackupType type) +{ + CARDiCommandArg *const p = cardi_common.cmd; + + MI_CpuFill8(&p->spec, 0, sizeof(p->spec)); + p->type = type; + p->spec.caps = CARD_BACKUP_CAPS_AVAILABLE; + if (type != CARD_BACKUP_TYPE_NOT_USE) + { + const u32 size = (u32)(1 << ((type >> CARD_BACKUP_TYPE_SIZEBIT_SHIFT) & CARD_BACKUP_TYPE_SIZEBIT_MASK)); + + const s32 device = ((type >> CARD_BACKUP_TYPE_DEVICE_SHIFT) & CARD_BACKUP_TYPE_DEVICE_MASK); + + p->spec.total_size = size; + p->spec.initial_status = 0xFF; + if (device == CARD_BACKUP_TYPE_DEVICE_EEPROM) + { + switch (size) + { + default: + goto invalid_type; + case 0x000200: //CARD_BACKUP_TYPE_EEPROM_4KBITS + p->spec.page_size = 0x10; + p->spec.addr_width = 1; + p->spec.program_page = 5; + p->spec.initial_status = 0xF0; + break; + case 0x002000: //CARD_BACKUP_TYPE_EEPROM_64KIBTS + p->spec.page_size = 0x0020; + p->spec.addr_width = 2; + p->spec.program_page = 5; + p->spec.initial_status = 0x00; + break; + case 0x010000: //CARD_BACKUP_TYPE_EEPROM_512KBITS + p->spec.page_size = 0x0080; + p->spec.addr_width = 2; + p->spec.program_page = 10; + p->spec.initial_status = 0x00; + break; + } + p->spec.sect_size = p->spec.page_size; + p->spec.caps |= CARD_BACKUP_CAPS_READ; + p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; + p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; + } + else if (device == CARD_BACKUP_TYPE_DEVICE_FLASH) + { + switch (size) + { + default: + goto invalid_type; + case 0x040000: //CARD_BACKUP_TYPE_FLASH_2MBITS + case 0x080000: //CARD_BACKUP_TYPE_FLASH_4MBITS + case 0x100000: //CARD_BACKUP_TYPE_FLASH_8MBITS + p->spec.write_page = 25; + p->spec.write_page_total = 300; + p->spec.erase_page = 300; + p->spec.erase_sector = 5000; + p->spec.caps |= CARD_BACKUP_CAPS_WRITE; + p->spec.caps |= CARD_BACKUP_CAPS_ERASE_PAGE; + break; + case 0x200000: //CARD_BACKUP_TYPE_FLASH_16MBITS + p->spec.erase_sector = 1000; + p->spec.erase_sector_total = 3000; + p->spec.erase_chip = 17000; + p->spec.erase_chip_total = 40000; + p->spec.initial_status = 0x00; + p->spec.caps |= CARD_BACKUP_CAPS_ERASE_CHIP; + break; + case 0x800000: //CARD_BACKUP_TYPE_FLASH_64MBITS + p->spec.erase_sector = 1000; + p->spec.erase_sector_total = 3000; + p->spec.erase_chip = 68000; + p->spec.erase_chip_total = 160000; + p->spec.initial_status = 0x00; + p->spec.caps |= CARD_BACKUP_CAPS_ERASE_CHIP; + break; + } + p->spec.sect_size = 0x010000; + p->spec.page_size = 0x0100; + p->spec.addr_width = 3; + p->spec.program_page = 5; + p->spec.caps |= CARD_BACKUP_CAPS_READ; + p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; + p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; + p->spec.caps |= CARD_BACKUP_CAPS_ERASE_SECTOR; + } + else if (device == CARD_BACKUP_TYPE_DEVICE_FRAM) + { + switch (size) + { + default: + goto invalid_type; + case 0x002000: //CARD_BACKUP_TYPE_FRAM_64KBITS + case 0x008000: //CARD_BACKUP_TYPE_FRAM_64KBITS + break; + } + p->spec.page_size = size; + p->spec.sect_size = size; + p->spec.addr_width = 2; + p->spec.initial_status = 0x00; + p->spec.caps |= CARD_BACKUP_CAPS_READ; + p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; + p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; + } + else + { + invalid_type: + p->type = CARD_BACKUP_TYPE_NOT_USE; + p->spec.total_size = 0; + cardi_common.cmd->result = CARD_RESULT_UNSUPPORTED; + return; + } + } +} diff --git a/arm9/lib/NitroSDK/src/CP_context.c b/arm9/lib/NitroSDK/src/CP_context.c new file mode 100644 index 00000000..6567f516 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CP_context.c @@ -0,0 +1,48 @@ +#include "CP_context.h" +#include "function_target.h" +#include "registers.h" + +ARM_FUNC asm void CP_SaveContext(register CPContext *context) +{ + ldr r1, =REG_DIV_NUMER_ADDR + stmfd sp!, {r4} + ldmia r1, {r2-r4, r12} + stmia r0!, {r2-r4, r12} + ldrh r12, [r1, #-16] + + add r1, r1, #40 + ldmia r1, {r2-r3} + stmia r0!, {r2-r3} + + and r12, r12, #3 + ldrh r2, [r1, #-8] + strh r12, [r0] + and r2, r2, #1 + strh r2, [r0, #2] + ldmfd sp!, {r4} + + bx lr +} + +ARM_FUNC asm void CPi_RestoreContext(register const CPContext *context) +{ + stmfd sp!, {r4} + ldr r1, =REG_DIV_NUMER_ADDR + ldmia r0, {r2-r4, r12} + stmia r1, {r2-r4, r12} + ldrh r2, [r0, #24] //CPContext.div_mode + ldrh r3, [r0, #26] //CPContext.sqrt_mode + + strh r2, [r1, #-16] + strh r3, [r1, #32] + + add r0, r0, #16 //CPContext.sqrt + add r1, r1, #40 + + ldmia r0, {r2-r3} + stmia r1, {r2-r3} + + ldmfd sp!, {r4} + + bx lr +} diff --git a/arm9/lib/NitroSDK/src/CTRDG_backup.c b/arm9/lib/NitroSDK/src/CTRDG_backup.c new file mode 100644 index 00000000..dc1a3f4b --- /dev/null +++ b/arm9/lib/NitroSDK/src/CTRDG_backup.c @@ -0,0 +1,94 @@ +#include "CTRDG_backup.h" +#include "function_target.h" +#include "OS_spinLock.h" + +extern u16 ctrdgi_flash_lock_id; +extern u16 ctrdgi_sram_lock_id; + +extern u16 CTRDGi_ReadFlashID(void); + +extern const CTRDGiFlashTypePlus defaultFlash1M; +extern const CTRDGiFlashTypePlus MX29L010; +extern const CTRDGiFlashTypePlus LE26FV10N1TS_10; + +extern const CTRDGiFlashTypePlus defaultFlash512; +extern const CTRDGiFlashTypePlus LE39FW512; +extern const CTRDGiFlashTypePlus AT29LV512_lib; +extern const CTRDGiFlashTypePlus MN63F805MNP; + +static const CTRDGiFlashTypePlus *const flash1M_list[] = { + &MX29L010, + &LE26FV10N1TS_10, + &defaultFlash1M +}; + +static const CTRDGiFlashTypePlus *const flash512_list[] = { + &LE39FW512, + &AT29LV512_lib, + &MN63F805MNP, + &defaultFlash512 +}; + +static const u16 readidtime[] = { + 20 +}; + +ARM_FUNC u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type) +{ + u16 result = 1; + u16 flashID; + const CTRDGiFlashTypePlus *const *flp; + MICartridgeRamCycle ram_cycle; + + if (type == CTRDG_BACKUP_TYPE_FLASH_512K || type == CTRDG_BACKUP_TYPE_FLASH_1M) + { + ctrdgi_flash_lock_id = (u16)OS_GetLockID(); + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(MI_CTRDG_RAMCYCLE_18); + + ctrdgi_fl_maxtime = readidtime; + flashID = CTRDGi_ReadFlashID(); + + if (type == CTRDG_BACKUP_TYPE_FLASH_512K) + { + flp = flash512_list; + } + + if (type == CTRDG_BACKUP_TYPE_FLASH_1M) + { + flp = flash1M_list; + } + + MI_SetCartridgeRamCycle(ram_cycle); + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + result = 1; + while ((*flp)->type.makerID != 0) + { + if ((flashID & 0xff) == *(u16 *)&((*flp)->type.makerID)) + { + result = 0; + break; + } + flp++; + } + CTRDGi_WriteAgbFlashSector = (*flp)->CTRDGi_WriteAgbFlashSector; + CTRDGi_EraseAgbFlashChip = (*flp)->CTRDGi_EraseAgbFlashChip; + CTRDGi_EraseAgbFlashSector = (*flp)->CTRDGi_EraseAgbFlashSector; + CTRDGi_WriteAgbFlashSectorAsync = (*flp)->CTRDGi_WriteAgbFlashSectorAsync; + CTRDGi_EraseAgbFlashChipAsync = (*flp)->CTRDGi_EraseAgbFlashChipAsync; + CTRDGi_EraseAgbFlashSectorAsync = (*flp)->CTRDGi_EraseAgbFlashSectorAsync; + CTRDGi_PollingSR = (*flp)->CTRDGi_PollingSR; + ctrdgi_fl_maxtime = (*flp)->maxtime; + AgbFlash = &(*flp)->type; + } + else if (type == CTRDG_BACKUP_TYPE_SRAM) + { + ctrdgi_sram_lock_id = (u16)OS_GetLockID(); + result = 0; + } + return result; +} diff --git a/arm9/lib/NitroSDK/src/CTRDG_common.c b/arm9/lib/NitroSDK/src/CTRDG_common.c new file mode 100644 index 00000000..df3ec0b6 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CTRDG_common.c @@ -0,0 +1,350 @@ +#include "CTRDG_common.h" +#include "function_target.h" +#include "syscall.h" +#include "OS_cache.h" +#include "OS_protectionRegion.h" +#include "OS_terminate_proc.h" +#include "PXI_fifo.h" +#include "MI_dma.h" +#include "MI_memory.h" +#include "mmap.h" + +CTRDGWork CTRDGi_Work; + +static BOOL CTRDGi_EnableFlag = FALSE; + +ARM_FUNC void CTRDGi_InitCommon(void) +{ + SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32); + + CTRDGi_Work.lockID = (u16)OS_GetLockID(); +} + +ARM_FUNC BOOL CTRDG_IsAgbCartridge(void) +{ + return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit()); +} + +ARM_FUNC BOOL CTRDG_IsOptionCartridge(void) +{ + return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit()); +} + +ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + return cip->isAgbCartridge; +} + +ARM_FUNC u32 CTRDG_GetAgbGameCode(void) +{ + u32 ret = 0; + + if (CTRDG_IsExisting()) + { + ret = CTRDGi_GetAgbGameCodeAtInit(); + } + + return ret; +} + +ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + u32 ret = 0; + + if (CTRDGi_IsAgbCartridgeAtInit()) + { + ret = cip->gameCode; + } + + return ret; +} + +ARM_FUNC u16 CTRDG_GetAgbMakerCode(void) +{ + u16 ret = 0; + + if (CTRDG_IsExisting()) + { + ret = CTRDGi_GetAgbMakerCodeAtInit(); + } + + return ret; +} + +ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + u16 ret = 0; + + if (CTRDGi_IsAgbCartridgeAtInit()) + { + ret = cip->makerCode; + } + + return ret; +} + +ARM_FUNC BOOL CTRDG_IsPulledOut(void) +{ + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + if (cip->moduleID.raw == 0xffff) + { + return FALSE; + } + + if (!cip->detectPullOut) + { + (void)CTRDG_IsExisting(); + } + + return cip->detectPullOut; +} + +ARM_FUNC BOOL CTRDG_IsExisting(void) +{ + BOOL ret = TRUE; + CTRDGLockByProc lockInfo; + + CTRDGHeader *chp = CTRDGi_GetHeaderAddr(); + CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); + + if (cip->moduleID.raw == 0xffff) + { + return FALSE; + } + + if (cip->detectPullOut == TRUE) + { + return FALSE; + } + + CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo); + + CTRDGRomCycle rc; + + CTRDGi_ChangeLatestAccessCycle(&rc); + u8 isRomCode = chp->isRomCode; + + if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID) + || (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr()) + || ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge)) + { + cip->detectPullOut = TRUE; + ret = FALSE; + } + + CTRDGi_RestoreAccessCycle(&rc); + + CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo); + + return ret; +} + +ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r) +{ + r->c1 = MI_GetCartridgeRomCycle1st(); + r->c2 = MI_GetCartridgeRomCycle2nd(); + + MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18); + MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6); +} + +ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r) +{ + MI_SetCartridgeRomCycle1st(r->c1); + MI_SetCartridgeRomCycle2nd(r->c2); +} + +ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info) +{ + while (TRUE) + { + info->irq = OS_DisableInterrupts(); + if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0) + || (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS)) + { + break; + } + (void)OS_RestoreInterrupts(info->irq); + + SVC_WaitByLoop(1); + } +} + +ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info) +{ + if (!info->locked) + { + (void)OS_UnLockCartridge(lockID); + } + + (void)OS_RestoreInterrupts(info->irq); +} + +ARM_FUNC void CTRDGi_SendtoPxi(u32 data) +{ + while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS) + { + SVC_WaitByLoop(1); + } +} + +ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size) +{ + if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END) + { + return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8); + } + else + { + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8); + } +} + +ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size) +{ + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16); +} + +ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size) +{ + return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32); +} + +ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType) +{ + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + CTRDG_CheckEnabled(); + + (void)OS_LockCartridge(CTRDGi_Work.lockID); + + if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA) + { + MI_StopDma(dmaNo); + DC_FlushRange(dest, size); + } + + switch (forwardType) + { + case CTRDGi_FORWARD_DMA16: + MI_DmaCopy16(dmaNo, src, dest, size); + break; + case CTRDGi_FORWARD_DMA32: + MI_DmaCopy32(dmaNo, src, dest, size); + break; + case CTRDGi_FORWARD_CPU16: + MI_CpuCopy16(src, dest, size); + break; + case CTRDGi_FORWARD_CPU32: + MI_CpuCopy32(src, dest, size); + break; + + case CTRDGi_FORWARD_CPU8: + u8 *dest8 = (u8 *)dest; + u8 *src8 = (u8 *)src; + for (s32 n = 0; n < size; n++) + { + *dest8++ = *src8++; + } + break; + } + + (void)OS_UnLockCartridge(CTRDGi_Work.lockID); + + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + return TRUE; +} + +ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata) +{ + return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32); +} + +ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType) +{ + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + CTRDG_CheckEnabled(); + + (void)OS_LockCartridge(CTRDGi_Work.lockID); + + switch (accessType) + { + case CTRDGi_ACCESS_READ8: + if (rdata) + { + *(u8 *)rdata = *(u8 *)address; + } + break; + case CTRDGi_ACCESS_READ16: + if (rdata) + { + *(u16 *)rdata = *(u16 *)address; + } + break; + case CTRDGi_ACCESS_READ32: + if (rdata) + { + *(u32 *)rdata = *(u32 *)address; + } + break; + case CTRDGi_ACCESS_WRITE8: + *(u8 *)address = (u8)data; + break; + case CTRDGi_ACCESS_WRITE16: + *(u16 *)address = (u16)data; + break; + case CTRDGi_ACCESS_WRITE32: + *(u32 *)address = (u32)data; + break; + } + + (void)OS_UnLockCartridge(CTRDGi_Work.lockID); + + if (!CTRDG_IsExisting()) + { + return FALSE; + } + + return TRUE; +} + +ARM_FUNC BOOL CTRDG_IsEnabled(void) +{ + return CTRDGi_EnableFlag; +} + +ARM_FUNC void CTRDG_Enable(BOOL enable) +{ + OSIntrMode bak_cpsr = OS_DisableInterrupts(); + CTRDGi_EnableFlag = enable; + if (!CTRDG_IsOptionCartridge()) + { + u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO); + (void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc); + } + (void)OS_RestoreInterrupts(bak_cpsr); +} + +ARM_FUNC void CTRDG_CheckEnabled(void) +{ + if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled()) + { + OS_Terminate(); + } +} diff --git a/arm9/lib/NitroSDK/src/CTRDG_flash_AT29LV512.c b/arm9/lib/NitroSDK/src/CTRDG_flash_AT29LV512.c new file mode 100644 index 00000000..b1d09738 --- /dev/null +++ b/arm9/lib/NitroSDK/src/CTRDG_flash_AT29LV512.c @@ -0,0 +1,327 @@ +#include "CTRDG_flash_AT29LV512.h" +#include "function_target.h" +#include "CTRDG_backup.h" +#include "CTRDG_flash.h" +#include "MI_exMemory.h" +#include "OS_interrupt.h" +#include "OS_spinLock.h" + +#define CTRDG_BACKUP_COM_ADR1 (CTRDG_AGB_FLASH_ADR+0x00005555) +#define CTRDG_BACKUP_COM_ADR2 (CTRDG_AGB_FLASH_ADR+0x00002aaa) + +#define FLASH_LOG_SECTOR_COUNT 16 +#define FLASH_SECTOR_LOG_TO_PHYS 32 +#define FLASH_SECTOR_LOG_TO_PHYS_SHIFT 5 + +extern u16 ctrdgi_flash_lock_id; +extern BOOL ctrdgi_backup_irq; + +extern void CTRDGi_SetTask(CTRDGTaskInfo * pt, CTRDG_TASK_FUNC task, CTRDG_TASK_FUNC callback); + +extern u16 CTRDGi_PollingSR512kCOMMON(u16 phase, u8 *adr, u16 lastData); + +static const u16 atMaxTime[] = { + 10, 40, 0, 40 +}; + +const CTRDGiFlashTypePlus AT29LV512_lib = { + CTRDGi_WriteFlash4KBAT, + CTRDGi_EraseFlashChipAT, + CTRDGi_EraseFlash4KBAT, + CTRDGi_WriteFlash4KBAsyncAT, + CTRDGi_EraseFlashChipAsyncAT, + CTRDGi_EraseFlash4KBAsyncAT, + CTRDGi_PollingSR512kCOMMON, + atMaxTime, + { + 0x00010000, //ROM size + {0x00001000, 12, 16, 0}, //sector + {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle + 0x1f, //maker ID + 0x3d, //device ID + } +}; + +const CTRDGiFlashTypePlus AT29LV512_org = { + CTRDGi_WriteFlashSectorAT, + CTRDGi_EraseFlashChipAT, + CTRDGi_EraseFlashSectorAT, + CTRDGi_WriteFlashSectorAsyncAT, + CTRDGi_EraseFlashChipAsyncAT, + CTRDGi_EraseFlashSectorAsyncAT, + CTRDGi_PollingSR512kCOMMON, + atMaxTime, + { + 0x00010000, //ROM size + {0x00000080, 7, 512, 0}, //sector + {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle + 0x1f, //maker ID + 0x3d, //device ID + } +}; + +ARM_FUNC u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg) +{ + MICartridgeRamCycle ram_cycle; + u32 result; + (void)arg; + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); + + ctrdgi_backup_irq = OS_DisableIrq(); + + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x80; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x10; + + (void)OS_RestoreIrq(ctrdgi_backup_irq); + + result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_CHIP_ERASE, (u8 *)CTRDG_AGB_FLASH_ADR, 0xff); + + MI_SetCartridgeRamCycle(ram_cycle); + + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + return result; +} + +ARM_FUNC u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg) +{ + u32 i; + u8 *dst; + BOOL shlet_ime; + MICartridgeRamCycle ram_cycle; + u32 result; + CTRDGTaskInfo p = *arg; + u16 p_secNo = p.sec_num; + + dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift)); + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); + + shlet_ime = OS_DisableIrq(); + + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0; + + for (i = AT29LV512_org.type.sector.size; i > 0; i--) + { + *dst++ = 0xff; + } + dst--; + + (void)OS_RestoreIrq(shlet_ime); + + result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, 0xff); + + if (result) + { + result = (u16)((result & 0xff00) | CTRDG_BACKUP_PHASE_SECTOR_ERASE); + } + + MI_SetCartridgeRamCycle(ram_cycle); + + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + return result; +} + +ARM_FUNC u32 CTRDGi_EraseFlash4KBCoreAT(CTRDGTaskInfo *arg) +{ + u32 result; + u16 i, p_secNo, retry; + CTRDGTaskInfo p = *arg; + u16 l_secNo = p.sec_num; + + if (l_secNo >= FLASH_LOG_SECTOR_COUNT) + { + return CTRDG_BACKUP_RESULT_ERROR | CTRDG_BACKUP_PHASE_PARAMETER_CHECK; + } + + p_secNo = (u16)(l_secNo << FLASH_SECTOR_LOG_TO_PHYS_SHIFT); + for (i = 0; i < FLASH_SECTOR_LOG_TO_PHYS; i++) + { + for (retry = 2; retry > 0; retry--) + { + result = CTRDGi_EraseFlashSectorAT(p_secNo); + if (result == 0) + { + break; + } + } + p_secNo++; + if (result) + { + break; + } + } + + return result; +} + +ARM_FUNC u32 CTRDGi_WriteFlashSectorCoreAT(CTRDGTaskInfo *arg) +{ + u32 i; + u8 *dst; + BOOL shlet_ime; + MICartridgeRamCycle ram_cycle; + u32 result; + CTRDGTaskInfo p = *arg; + u16 p_secNo = p.sec_num; + u8 *src = p.data; + + (void)OS_LockCartridge(ctrdgi_flash_lock_id); + + ram_cycle = MI_GetCartridgeRamCycle(); + MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); + + dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift)); + + shlet_ime = OS_DisableIrq(); + + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; + *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; + *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0; + + for (i = AT29LV512_org.type.sector.size; i > 0; i--) + { + *dst++ = *src++; + } + dst--; + src--; + + (void)OS_RestoreIrq(shlet_ime); + + result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, *src); + + MI_SetCartridgeRamCycle(ram_cycle); + + (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); + + return result; +} + +ARM_FUNC u32 CTRDGi_WriteFlash4KBCoreAT(CTRDGTaskInfo *arg) +{ + u32 result; + u16 p_secNo, retry; + CTRDGTaskInfo p = *arg; + u16 l_secNo = p.sec_num; + u8 *src = p.data; + + if (l_secNo >= FLASH_LOG_SECTOR_COUNT) + { + return CTRDG_BACKUP_RESULT_ERROR | CTRDG_BACKUP_PHASE_PARAMETER_CHECK; + } + + p_secNo = (u16)(l_secNo << FLASH_SECTOR_LOG_TO_PHYS_SHIFT); + ctrdg_flash_remainder = (u16)(AT29LV512_lib.type.sector.size); + while (ctrdg_flash_remainder) + { + for (retry = 2; retry > 0; retry--) + { + result = CTRDGi_WriteFlashSectorAT(p_secNo, src); + if (result == 0) + { + break; + } + } + if (result) + { + break; + } + ctrdg_flash_remainder -= AT29LV512_org.type.sector.size; + src += AT29LV512_org.type.sector.size; + p_secNo++; + } + + return result; +} + +ARM_FUNC u16 CTRDGi_EraseFlashChipAT(void) +{ + CTRDGTaskInfo p; + return (u16)CTRDGi_EraseFlashChipCoreAT(&p); +} + +ARM_FUNC u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo) +{ + CTRDGTaskInfo p; + p.sec_num = l_secNo; + return (u16)CTRDGi_EraseFlash4KBCoreAT(&p); +} + +ARM_FUNC u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src) +{ + CTRDGTaskInfo p; + p.sec_num = l_secNo; + p.data = src; + return (u16)CTRDGi_WriteFlash4KBCoreAT(&p); +} + +ARM_FUNC void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback) +{ + CTRDGTaskInfo p; + + CTRDGi_SetTask(&p, CTRDGi_EraseFlashChipCoreAT, callback); +} + +ARM_FUNC void CTRDGi_EraseFlash4KBAsyncAT(u16 l_secNo, CTRDG_TASK_FUNC callback) +{ + CTRDGTaskInfo p; + + p.sec_num = l_secNo; + CTRDGi_SetTask(&p, CTRDGi_EraseFlash4KBCoreAT, callback); +} + +ARM_FUNC void CTRDGi_WriteFlash4KBAsyncAT(u16 l_secNo, u8 *src, CTRDG_TASK_FUNC callback) +{ + CTRDGTaskInfo p; + + p.sec_num = l_secNo; + p.data = src; + CTRDGi_SetTask(&p, CTRDGi_WriteFlash4KBCoreAT, callback); +} + +ARM_FUNC u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo) +{ + CTRDGTaskInfo p; + p.sec_num = p_secNo; + return (u16)CTRDGi_EraseFlashSectorCoreAT(&p); +} + +ARM_FUNC u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src) +{ + CTRDGTaskInfo p; + + p.sec_num = p_secNo; + p.data = src; + return (u16)CTRDGi_WriteFlashSectorCoreAT(&p); +} + +ARM_FUNC void CTRDGi_EraseFlashSectorAsyncAT(u16 p_secNo, CTRDG_TASK_FUNC callback) +{ + CTRDGTaskInfo p; + + p.sec_num = p_secNo; + CTRDGi_SetTask(&p, CTRDGi_EraseFlashSectorCoreAT, callback); +} + +ARM_FUNC void CTRDGi_WriteFlashSectorAsyncAT(u16 p_secNo, u8 *src, CTRDG_TASK_FUNC callback) +{ + CTRDGTaskInfo p; + + p.sec_num = p_secNo; + p.data = src; + CTRDGi_SetTask(&p, CTRDGi_WriteFlashSectorCoreAT, callback); +} diff --git a/arm9/lib/NitroSDK/src/FS_archive.c b/arm9/lib/NitroSDK/src/FS_archive.c new file mode 100644 index 00000000..01f794f8 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_archive.c @@ -0,0 +1,445 @@ +#include "FS_archive.h" +#include "FS_command.h" +#include "FSi_util.h" +#include "MI_memory.h" +#include "MI_byteAccess.h" +#include "OS_printf.h" + +FSArchive * arc_list = NULL; +FSDirPos current_dir_pos; + +ARM_FUNC u32 FSi_GetPackedName(const char * name, int name_len) +{ + u32 ret = 0; + if (name_len <= FS_ARCHIVE_NAME_LEN_MAX) + { + int i = 0; + for (; i < name_len; i++) + { + u32 c = MI_ReadByte(name + i); + if (!c) + break; + c = (u32)(c - 'A'); + if (c <= (u32)('Z' - 'A')) + c = (u32)(c + 'a'); + else + c = (u32)(c + 'A'); + ret |= (u32)(c << (i * 8)); + } + } + return ret; +} + +ARM_FUNC FSResult FSi_ReadMemCallback(struct FSArchive * p_arc, void * dest, u32 pos, u32 size) +{ + MI_CpuCopy8((const void *)FS_GetArchiveOffset(p_arc, pos), dest, size); + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSResult FSi_WriteMemCallback(struct FSArchive * p_arc, const void * src, u32 pos, u32 size) +{ + MI_CpuCopy8(src, (void *)FS_GetArchiveOffset(p_arc, pos), size); + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSResult FSi_ReadMemoryCore(FSArchive * p_arc, void * dest, u32 pos, u32 size) +{ +#pragma unused(p_arc) + MI_CpuCopy8((const void *)pos, dest, size); + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSFile * FSi_NextCommand(FSArchive * p_arc) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (FSi_IsArchiveCanceling(p_arc)) + { + FSFile *p, *q; + p_arc->flag &= ~FS_ARCHIVE_FLAG_CANCELING; + for (p = p_arc->list.next; p; p = q) + { + q = p->link.next; + if (FS_IsCanceling(p)) + { + if (p_arc->list.next == p) + p_arc->list.next = q; + FSi_ReleaseCommand(p, FS_RESULT_CANCELED); + if (!q) + q = p_arc->list.next; + } + } + } + if (!FSi_IsArchiveSuspending(p_arc) && !FS_IsArchiveSuspended(p_arc)) + { + FSFile * p_file = p_arc->list.next; + if (p_file != NULL) + { + const BOOL is_start = !FSi_IsArchiveRunning(p_arc); + if (is_start) + p_arc->flag |= FS_ARCHIVE_FLAG_RUNNING; + (void)OS_RestoreInterrupts(bak_psr); + if (is_start) + { + if ((p_arc->proc_flag & FS_ARCHIVE_PROC_ACTIVATE) != 0) + (void)((*p_arc->proc) (p_file, FS_COMMAND_ACTIVATE)); + } + bak_psr = OS_DisableInterrupts(); + p_file->stat |= FS_FILE_STATUS_OPERATING; + if (FS_IsFileSyncMode(p_file)) + { + OS_WakeupThread(p_file->queue); + (void)OS_RestoreInterrupts(bak_psr); + return NULL; + } + (void)OS_RestoreInterrupts(bak_psr); + return p_file; + } + } + if (FSi_IsArchiveRunning(p_arc)) + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_RUNNING; + if (p_arc->proc_flag & FS_ARCHIVE_PROC_IDLE) + { + FSFile tmp; + FS_InitFile(&tmp); + tmp.arc = p_arc; + (void)((*p_arc->proc)(&tmp, FS_COMMAND_IDLE)); + } + } + if (FSi_IsArchiveSuspending(p_arc)) + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_SUSPENDING; + p_arc->flag |= FS_ARCHIVE_FLAG_SUSPEND; + OS_WakeupThread(&p_arc->stat_q); + } + (void)OS_RestoreInterrupts(bak_psr); + return NULL; +} + +ARM_FUNC void FSi_ExecuteAsyncCommand(FSFile * p_file) +{ + FSArchive *const p_arc = p_file->arc; + while (p_file) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + p_file->stat |= FS_FILE_STATUS_OPERATING; + if (FS_IsFileSyncMode(p_file)) + { + OS_WakeupThread(p_file->queue); + (void)OS_RestoreInterrupts(bak_psr); + break; + } + p_file->stat |= FS_FILE_STATUS_ASYNC; + (void)OS_RestoreInterrupts(bak_psr); + if (FSi_TranslateCommand(p_file, p_file->command) == FS_RESULT_PROC_ASYNC) + break; + p_file = FSi_NextCommand(p_arc); + } +} + +ARM_FUNC BOOL FSi_ExecuteSyncCommand(FSFile * p_file) +{ + FSFile * p_target; + FSResult ret = FSi_TranslateCommand(p_file, p_file->command); + FSi_ReleaseCommand(p_file, ret); + p_target = FSi_NextCommand(p_file->arc); + if (p_target) + FSi_ExecuteAsyncCommand(p_target); + return FS_IsSucceeded(p_file); +} + +ARM_FUNC BOOL FSi_SendCommand(FSFile * p_file, FSCommandType command) +{ + FSArchive * p_arc = p_file->arc; + const int bit = 1 << command; + p_file->command = command; + p_file->error = FS_RESULT_BUSY; + p_file->stat |= FS_FILE_STATUS_BUSY; + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (FSi_IsArchiveUnloading(p_arc)) + { + FSi_ReleaseCommand(p_file, FS_RESULT_CANCELLED); + (void)OS_RestoreInterrupts(bak_psr); + return FALSE; + } + if ((bit & FS_ARCHIVE_PROC_SYNC) != 0) + p_file->stat |= FS_FILE_STATUS_SYNC; + FSi_AppendToList(p_file, (FSFile *)&p_arc->list); + if (!FS_IsArchiveSuspended(p_arc) && !FSi_IsArchiveRunning(p_arc)) + { + p_arc->flag |= FS_ARCHIVE_FLAG_RUNNING; + (void)OS_RestoreInterrupts(bak_psr); + if ((p_arc->proc_flag & FS_ARCHIVE_PROC_ACTIVATE)) + (void)((*p_arc->proc)(p_file, FS_COMMAND_ACTIVATE)); + bak_psr = OS_DisableInterrupts(); + p_file->stat |= FS_FILE_STATUS_OPERATING; + if (!FS_IsFileSyncMode(p_file)) + { + (void)OS_RestoreInterrupts(bak_psr); + FSi_ExecuteAsyncCommand(p_file); + return TRUE; + } + (void)OS_RestoreInterrupts(bak_psr); + } + else if (!FS_IsFileSyncMode(p_file)) + { + (void)OS_RestoreInterrupts(bak_psr); + return TRUE; + } + else + { + do + { + OS_SleepThread(p_file->queue); + } while (!(p_file->stat & FS_FILE_STATUS_OPERATING)); + (void)OS_RestoreInterrupts(bak_psr); + } + } + return FSi_ExecuteSyncCommand(p_file); +} + +ARM_FUNC void FS_InitArchive(FSArchive * p_arc) +{ + MI_CpuClear8(p_arc, sizeof(FSArchive)); + p_arc->sync_q.head = p_arc->sync_q.tail = NULL; + p_arc->stat_q.head = p_arc->stat_q.tail = NULL; +} + +ARM_FUNC FSArchive * const FS_FindArchive(const char * name, int name_len) +{ + u32 pack = FSi_GetPackedName(name, name_len); + OSIntrMode bak_psr = OS_DisableInterrupts(); + FSArchive * p_arc = arc_list; + while (p_arc && (p_arc->name.pack != pack)) + p_arc = p_arc->next; + (void)OS_RestoreInterrupts(bak_psr); + return p_arc; +} + +ARM_FUNC BOOL FS_RegisterArchiveName(FSArchive * p_arc, const char * name, int name_len) +{ + BOOL ret = FALSE; + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (!FS_FindArchive(name, name_len)) + { + FSArchive * p_tail = arc_list; + if (!p_tail) + { + arc_list = p_arc; + current_dir_pos.arc = p_arc; + current_dir_pos.pos = 0; + current_dir_pos.index = 0; + current_dir_pos.own_id = 0; + } + else + { + while (p_tail->next) + p_tail = p_tail->next; + p_tail->next = p_arc; + p_arc->prev = p_tail; + } + p_arc->name.pack = FSi_GetPackedName(name, name_len); + p_arc->flag |= FS_ARCHIVE_FLAG_REGISTER; + ret = TRUE; + } + (void)OS_RestoreInterrupts(bak_psr); + return ret; +} + +ARM_FUNC void FS_ReleaseArchiveName(FSArchive * p_arc) +{ + if (p_arc->name.pack) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (p_arc->next) + p_arc->next->prev = p_arc->prev; + if (p_arc->prev) + p_arc->prev->next = p_arc->next; + p_arc->name.pack = 0; + p_arc->next = p_arc->prev = NULL; + p_arc->flag &= ~FS_ARCHIVE_FLAG_REGISTER; + if (current_dir_pos.arc == p_arc) + { + current_dir_pos.arc = arc_list; + current_dir_pos.pos = 0; + current_dir_pos.index = 0; + current_dir_pos.own_id = 0; + } + (void)OS_RestoreInterrupts(bak_psr); + } +} + +ARM_FUNC BOOL FS_LoadArchive(FSArchive * p_arc, u32 base, u32 fat, u32 fat_size, u32 fnt, u32 fnt_size, FS_ARCHIVE_READ_FUNC read_func, FS_ARCHIVE_WRITE_FUNC write_func) +{ + p_arc->base = base; + p_arc->fat_size = fat_size; + p_arc->fat = p_arc->fat_bak = fat; + p_arc->fnt_size = fnt_size; + p_arc->fnt = p_arc->fnt_bak = fnt; + p_arc->read_func = (read_func != NULL) ? read_func : FSi_ReadMemCallback; + p_arc->write_func = (write_func != NULL) ? write_func : FSi_WriteMemCallback; + p_arc->table_func = p_arc->read_func; + p_arc->load_mem = NULL; + p_arc->flag |= FS_ARCHIVE_FLAG_LOADED; + return TRUE; +} + +ARM_FUNC BOOL FS_UnloadArchive(FSArchive * p_arc) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + if (FS_IsArchiveLoaded(p_arc)) + { + if (FS_IsArchiveTableLoaded(p_arc)) + { + OS_TWarning("memory may leak. preloaded-table of archive \"%s\" (0x%08X)", p_arc->name.ptr, p_arc->load_mem); + } + { + FSFile *p, *q; + BOOL bak_state = FS_SuspendArchive(p_arc); + p_arc->flag |= FS_ARCHIVE_FLAG_UNLOADING; + for (p = p_arc->list.next; p; p = q) + { + q = p->link.next; + FSi_ReleaseCommand(p, FS_RESULT_CANCELED); + } + p_arc->list.next = NULL; + if (bak_state) + (void)FS_ResumeArchive(p_arc); + } + p_arc->base = 0; + p_arc->fat = 0; + p_arc->fat_size = 0; + p_arc->fnt = 0; + p_arc->fnt_size = 0; + p_arc->fat_bak = p_arc->fnt_bak = 0; + p_arc->flag &= ~(FS_ARCHIVE_FLAG_CANCELING | FS_ARCHIVE_FLAG_LOADED | FS_ARCHIVE_FLAG_UNLOADING); + } + (void)OS_RestoreInterrupts(bak_psr); + return TRUE; +} + +ARM_FUNC u32 FS_LoadArchiveTables(FSArchive *p_arc, void *p_mem, u32 max_size) +{ + u32 total_size = ALIGN_BYTE(p_arc->fat_size + p_arc->fnt_size + 32, 32); + if (total_size <= max_size) + { + u8 *p_cache = (u8 *)ALIGN_BYTE((u32)p_mem, 32); + FSFile tmp; + FS_InitFile(&tmp); + if (FS_OpenFileDirect(&tmp, p_arc, p_arc->fat, p_arc->fat + p_arc->fat_size, (u32)~0)) + { + if (FS_ReadFile(&tmp, p_cache, (s32)p_arc->fat_size) < 0) + { + MI_CpuFill8(p_cache, 0x00, p_arc->fat_size); + } + (void)FS_CloseFile(&tmp); + } + p_arc->fat = (u32)p_cache; + p_cache += p_arc->fat_size; + if (FS_OpenFileDirect(&tmp, p_arc, p_arc->fnt, p_arc->fnt + p_arc->fnt_size, (u32)~0)) + { + if (FS_ReadFile(&tmp, p_cache, (s32)p_arc->fnt_size) < 0) + { + MI_CpuFill8(p_cache, 0x00, p_arc->fnt_size); + } + (void)FS_CloseFile(&tmp); + } + p_arc->fnt = (u32)p_cache; + p_arc->load_mem = p_mem; + p_arc->table_func = FSi_ReadMemoryCore; + p_arc->flag |= FS_ARCHIVE_FLAG_TABLE_LOAD; + } + return total_size; +} + +ARM_FUNC void * FS_UnloadArchiveTables(FSArchive * p_arc) +{ + void *ret = NULL; + if (FS_IsArchiveLoaded(p_arc)) + { + BOOL bak_stat = FS_SuspendArchive(p_arc); + if (FS_IsArchiveTableLoaded(p_arc)) + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_TABLE_LOAD; + ret = p_arc->load_mem; + p_arc->load_mem = NULL; + p_arc->fat = p_arc->fat_bak; + p_arc->fnt = p_arc->fnt_bak; + p_arc->table_func = p_arc->read_func; + } + if (bak_stat) + (void)FS_ResumeArchive(p_arc); + } + return ret; +} + +ARM_FUNC BOOL FS_SuspendArchive(FSArchive * p_arc) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + const BOOL bak_stat = !FS_IsArchiveSuspended(p_arc); + if (bak_stat) + { + if (FSi_IsArchiveRunning(p_arc)) + { + p_arc->flag |= FS_ARCHIVE_FLAG_SUSPENDING; + do { + OS_SleepThread(&p_arc->stat_q); + } while (FSi_IsArchiveSuspending(p_arc)); + } + else + { + p_arc->flag |= FS_ARCHIVE_FLAG_SUSPEND; + } + } + (void)OS_RestoreInterrupts(bak_psr); + return bak_stat; +} + +ARM_FUNC BOOL FS_ResumeArchive(FSArchive * p_arc) +{ + FSFile * p_target = NULL; + OSIntrMode bak_psr = OS_DisableInterrupts(); + const BOOL bak_stat = !FS_IsArchiveSuspended(p_arc); + if (!bak_stat) + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_SUSPEND; + p_target = FSi_NextCommand(p_arc); + } + (void)OS_RestoreInterrupts(bak_psr); + if (p_target) + FSi_ExecuteAsyncCommand(p_target); + return bak_stat; +} + +ARM_FUNC void FS_SetArchiveProc(struct FSArchive * p_arc, FS_ARCHIVE_PROC_FUNC proc, u32 flags) +{ + if (!flags) + proc = NULL; + else if (!proc) + flags = 0; + p_arc->proc = proc; + p_arc->proc_flag = flags; +} + +ARM_FUNC void FS_NotifyArchiveAsyncEnd(FSArchive *p_arc, FSResult ret) +{ + if (FSi_IsArchiveAsync(p_arc)) + { + FSFile *p_file = p_arc->list.next; + p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_ASYNC; + FSi_ReleaseCommand(p_file, ret); + p_file = FSi_NextCommand(p_arc); + if (p_file) + FSi_ExecuteAsyncCommand(p_file); + } + else + { + FSFile *p_file = p_arc->list.next; + OSIntrMode bak_psr = OS_DisableInterrupts(); + p_file->error = ret; + p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; + OS_WakeupThread(&p_arc->sync_q); + (void)OS_RestoreInterrupts(bak_psr); + } +} diff --git a/arm9/lib/NitroSDK/src/FS_command.c b/arm9/lib/NitroSDK/src/FS_command.c new file mode 100644 index 00000000..e677f6c6 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_command.c @@ -0,0 +1,77 @@ +#include "FS_file.h" +#include "FS_archive.h" +#include "FSi_util.h" +#include "FS_command.h" + +ARM_FUNC void FSi_ReleaseCommand(FSFile * p_file, FSResult ret) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + FSi_CutFromList(p_file); + p_file->stat &= ~(FS_FILE_STATUS_CANCEL | FS_FILE_STATUS_BUSY | FS_FILE_STATUS_SYNC | FS_FILE_STATUS_ASYNC | FS_FILE_STATUS_OPERATING); + p_file->error = ret; + OS_WakeupThread(p_file->queue); + (void)OS_RestoreInterrupts(bak_psr); +} + +ARM_FUNC FSResult FSi_TranslateCommand(FSFile *p_file, FSCommandType command) +{ + FSResult ret; + + FSArchive *const p_arc = p_file->arc; + const int bit = (1 << command); + + if (FS_IsFileSyncMode(p_file)) + p_arc->flag |= FS_ARCHIVE_FLAG_IS_SYNC; + else + p_arc->flag |= FS_ARCHIVE_FLAG_IS_ASYNC; + + if ((p_arc->proc_flag & bit) != 0) + { + switch (ret = (*p_arc->proc) (p_file, command)) + { + case FS_RESULT_SUCCESS: + case FS_RESULT_FAILURE: + case FS_RESULT_UNSUPPORTED: + p_file->error = ret; + break; + case FS_RESULT_PROC_ASYNC: + break; + case FS_RESULT_PROC_UNKNOWN: + ret = FS_RESULT_PROC_DEFAULT; + p_arc->proc_flag &= ~bit; + break; + default: + break; + } + } + else + { + ret = FS_RESULT_PROC_DEFAULT; + } + if (ret == FS_RESULT_PROC_DEFAULT) + { + ret = (*fsi_default_command[command]) (p_file); + } + if (ret == FS_RESULT_PROC_ASYNC) + { + if (FS_IsFileSyncMode(p_file)) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + while (FSi_IsArchiveSync(p_arc)) + OS_SleepThread(&p_arc->sync_q); + ret = p_file->error; + (void)OS_RestoreInterrupts(bak_psr); + } + } + else if (!FS_IsFileSyncMode(p_file)) + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_ASYNC; + FSi_ReleaseCommand(p_file, ret); + } + else + { + p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; + p_file->error = ret; + } + return ret; +} diff --git a/arm9/lib/NitroSDK/src/FS_command_default.c b/arm9/lib/NitroSDK/src/FS_command_default.c new file mode 100644 index 00000000..0cdc91fc --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_command_default.c @@ -0,0 +1,453 @@ +#include "nitro.h" +#include "FS_file.h" +#include "FS_command.h" +#include "MI_byteAccess.h" +#include "MI_memory.h" +#include "FSi_util.h" +#include "FS_command_default.h" + +FSResult (*const fsi_default_command[])(FSFile *) = { + [FS_COMMAND_READFILE] = FSi_ReadFileCommand, + [FS_COMMAND_WRITEFILE] = FSi_WriteFileCommand, + [FS_COMMAND_SEEKDIR] = FSi_SeekDirCommand, + [FS_COMMAND_READDIR] = FSi_ReadDirCommand, + [FS_COMMAND_FINDPATH] = FSi_FindPathCommand, + [FS_COMMAND_GETPATH] = FSi_GetPathCommand, + [FS_COMMAND_OPENFILEFAST] = FSi_OpenFileFastCommand, + [FS_COMMAND_OPENFILEDIRECT] = FSi_OpenFileDirectCommand, + [FS_COMMAND_CLOSEFILE] = FSi_CloseFileCommand, +}; + +// Case-insensitive string comparison +ARM_FUNC u32 FSi_StrNICmp(const char * str1, const char * str2, u32 len) +{ + int i; + for (i = 0; i < len; i++) + { + u32 c = (u32)(MI_ReadByte(str1 + i) - 'A'); + u32 d = (u32)(MI_ReadByte(str2 + i) - 'A'); + if (c <= 'Z' - 'A') + c += 'a' - 'A'; + if (d <= 'Z' - 'A') + d += 'a' - 'A'; + if (c != d) + return c - d; + } + return 0; +} + +ARM_FUNC FSResult FSi_ReadTable(FSiSyncReadParam * p, void * dst, u32 len) +{ + FSResult ret; + FSArchive * const p_arc = p->arc; + p_arc->flag |= FS_ARCHIVE_FLAG_IS_SYNC; + switch (ret = (*p_arc->table_func)(p_arc, dst, p->pos, len)) + { + case FS_RESULT_SUCCESS: + case FS_RESULT_FAILURE: + p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; + break; + case FS_RESULT_PROC_ASYNC: + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + while (FSi_IsArchiveSync(p_arc)) + OS_SleepThread(&p_arc->sync_q); + (void)OS_RestoreInterrupts(bak_psr); + ret = p_arc->list.next->error; + } + default: + break; + } + p->pos += len; + return ret; +} + +ARM_FUNC FSResult FSi_SeekDirDirect(FSFile * p_dir, u32 id) +{ + p_dir->stat |= FS_FILE_STATUS_SYNC; + p_dir->arg.seekdir.pos.arc = p_dir->arc; + p_dir->arg.seekdir.pos.pos = 0; + p_dir->arg.seekdir.pos.index = 0; + p_dir->arg.seekdir.pos.own_id = (u16)id; + return FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); +} + +// The actual commands +ARM_FUNC FSResult FSi_ReadFileCommand(FSFile * p_file) +{ + FSArchive *const p_arc = p_file->arc; + const u32 pos = p_file->prop.file.pos; + const u32 len = p_file->arg.readfile.len; + void *const dst = p_file->arg.readfile.dst; + p_file->prop.file.pos += len; + return (*p_arc->read_func)(p_arc, dst, pos, len); +} + +ARM_FUNC FSResult FSi_WriteFileCommand(FSFile * p_file) +{ + FSArchive *const p_arc = p_file->arc; + const u32 pos = p_file->prop.file.pos; + const u32 len = p_file->arg.writefile.len; + const void *const src = p_file->arg.writefile.src; + p_file->prop.file.pos += len; + return (*p_arc->write_func)(p_arc, src, pos, len); +} + +ARM_FUNC FSResult FSi_SeekDirCommand(FSFile * p_dir) +{ + FSResult ret; + FSArchive *const p_arc = p_dir->arc; + const FSDirPos *const arg = &p_dir->arg.seekdir.pos; + + FSArchiveFNT fnt_entry; + FSiSyncReadParam param; + param.arc = p_arc; + param.pos = p_arc->fnt + arg->own_id * sizeof(fnt_entry); + ret = FSi_ReadTable(¶m, &fnt_entry, sizeof(fnt_entry)); + if (ret == FS_RESULT_SUCCESS) + { + p_dir->prop.dir.pos = *arg; + if ((arg->index == 0) && (arg->pos == 0)) + { + p_dir->prop.dir.pos.index = fnt_entry.index; + p_dir->prop.dir.pos.pos = p_arc->fnt + fnt_entry.start; + } + p_dir->prop.dir.parent = (u32) (fnt_entry.parent & BIT_MASK(12)); + } + return ret; +} + +ARM_FUNC FSResult FSi_ReadDirCommand(FSFile *p_dir) +{ + FSDirEntry *p_entry = p_dir->arg.readdir.p_entry; + FSResult ret; + + FSiSyncReadParam param; + param.arc = p_dir->arc; + param.pos = p_dir->prop.dir.pos.pos; + + { + u8 len; + ret = FSi_ReadTable(¶m, &len, sizeof(len)); + if (ret != FS_RESULT_SUCCESS) + return ret; + p_entry->name_len = (u32)(len & BIT_MASK(7)); + p_entry->is_directory = (u32)((len >> 7) & 1); + } + if (p_entry->name_len == 0) + return FS_RESULT_FAILURE; + + if (!p_dir->arg.readdir.skip_string) + { + ret = FSi_ReadTable(¶m, p_entry->name, p_entry->name_len); + if (ret != FS_RESULT_SUCCESS) + return ret; + MI_WriteByte((u8 *)p_entry->name + p_entry->name_len, (u8)'\0'); + } + else + { + param.pos += p_entry->name_len; + } + + if (p_entry->is_directory) + { + u16 id; + ret = FSi_ReadTable(¶m, &id, sizeof(id)); + if (ret != FS_RESULT_SUCCESS) + return ret; + p_entry->dir_id.arc = p_dir->arc; + p_entry->dir_id.own_id = (u16)(id & BIT_MASK(12)); + p_entry->dir_id.index = 0; + p_entry->dir_id.pos = 0; + } + else + { + p_entry->file_id.arc = p_dir->arc; + p_entry->file_id.file_id = p_dir->prop.dir.pos.index; + ++p_dir->prop.dir.pos.index; + } + p_dir->prop.dir.pos.pos = param.pos; + + return ret; +} + +ARM_FUNC FSResult FSi_FindPathCommand(FSFile *p_dir) +{ + const char *path = p_dir->arg.findpath.path; + const BOOL is_dir = p_dir->arg.findpath.find_directory; + p_dir->arg.seekdir.pos = p_dir->arg.findpath.pos; + (void)FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); + for (; MI_ReadByte(path); path += (MI_ReadByte(path) ? 1 : 0)) + { + u32 is_directory; + int name_len = 0; + while ((is_directory = MI_ReadByte(path + name_len)), + (is_directory && !FSi_IsSlash(is_directory))) + ++name_len; + if (is_directory || is_dir) + is_directory = 1; + if (name_len == 0) + { + return FS_RESULT_FAILURE; + } + else if (MI_ReadByte(path) == '.') + { + if (name_len == 1) + { + path += 1; + continue; + } + else if ((name_len == 2) & (MI_ReadByte(path + 1) == '.')) + { + if (p_dir->prop.dir.pos.own_id != 0) + (void)FSi_SeekDirDirect(p_dir, p_dir->prop.dir.parent); + path += 2; + continue; + } + } + if (name_len > FS_FILE_NAME_MAX) + { + return FS_RESULT_FAILURE; + } + else + { + FSDirEntry etr; + p_dir->arg.readdir.p_entry = &etr; + p_dir->arg.readdir.skip_string = FALSE; + for (;;) + { + if (FSi_TranslateCommand(p_dir, FS_COMMAND_READDIR) != FS_RESULT_SUCCESS) + return FS_RESULT_FAILURE; + if ((is_directory != etr.is_directory) || + (name_len != etr.name_len) || FSi_StrNICmp(path, etr.name, (u32)name_len)) + continue; + if (is_directory) + { + path += name_len; + p_dir->arg.seekdir.pos = etr.dir_id; + (void)FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); + break; + } + else if (is_dir) + { + return FS_RESULT_FAILURE; + } + else + { + *p_dir->arg.findpath.result.file = etr.file_id; + return FS_RESULT_SUCCESS; + } + } + } + } + if (!is_dir) + return FS_RESULT_FAILURE; + *p_dir->arg.findpath.result.dir = p_dir->prop.dir.pos; + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSResult FSi_GetPathCommand(FSFile *p_file) +{ + FSArchive *const p_arc = p_file->arc; + + FSGetPathInfo *p_info = &p_file->arg.getpath; + + FSDirEntry entry; + FSFile tmp; + u32 dir_id; + u32 file_id; + u32 id; + u32 len; + + enum + { INVALID_ID = 0x10000 }; + + FS_InitFile(&tmp); + tmp.arc = p_file->arc; + + if (FS_IsDir(p_file)) + { + dir_id = p_file->prop.dir.pos.own_id; + file_id = INVALID_ID; + } + else + { + file_id = p_file->prop.file.own_id; + if (p_info->total_len != 0) + { + dir_id = p_info->dir_id; + } + else + { + u32 pos = 0; + u32 num_dir = 0; + dir_id = INVALID_ID; + do + { + (void)FSi_SeekDirDirect(&tmp, pos); + if (!pos) + num_dir = tmp.prop.dir.parent; + tmp.arg.readdir.p_entry = &entry; + tmp.arg.readdir.skip_string = TRUE; + while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) + { + if (!entry.is_directory && (entry.file_id.file_id == file_id)) + { + dir_id = tmp.prop.dir.pos.own_id; + break; + } + } + } + while ((dir_id == INVALID_ID) && (++pos < num_dir)); + } + } + if (dir_id == INVALID_ID) + { + p_info->total_len = 0; + return FS_RESULT_FAILURE; + } + if (p_info->total_len == 0) + { + len = 0; + if (p_arc->name.pack <= 0x000000FF) + len += 1; + else if (p_arc->name.pack <= 0x0000FF00) + len += 2; + else + len += 3; + len += 1 + 1; + if (file_id != INVALID_ID) + len += entry.name_len; + id = dir_id; + if (id != 0) + { + (void)FSi_SeekDirDirect(&tmp, id); + do + { + (void)FSi_SeekDirDirect(&tmp, tmp.prop.dir.parent); + tmp.arg.readdir.p_entry = &entry; + tmp.arg.readdir.skip_string = TRUE; + while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) + { + if (entry.is_directory && (entry.dir_id.own_id == id)) + { + len += entry.name_len + 1; + break; + } + } + id = tmp.prop.dir.pos.own_id; + } + while (id != 0); + } + p_info->total_len = (u16)(len + 1); + p_info->dir_id = (u16)dir_id; + } + if (!p_info->buf) + return FS_RESULT_SUCCESS; + if (p_info->buf_len < p_info->total_len) + return FS_RESULT_FAILURE; + else + { + u8 *dst = p_info->buf; + u32 total = p_info->total_len; + u32 pos = 0; + if (p_arc->name.pack <= 0x000000FF) + len = 1; + else if (p_arc->name.pack <= 0x0000FF00) + len = 2; + else + len = 3; + MI_CpuCopy8(p_arc->name.ptr, dst + pos, len); + pos += len; + MI_CpuCopy8(":/", dst + pos, 2); + pos += 2; + id = dir_id; + (void)FSi_SeekDirDirect(&tmp, id); + if (file_id != INVALID_ID) + { + tmp.arg.readdir.p_entry = &entry; + tmp.arg.readdir.skip_string = FALSE; + while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) + { + if (!entry.is_directory && (entry.file_id.file_id == file_id)) + break; + } + len = entry.name_len + 1; + MI_CpuCopy8(entry.name, dst + total - len, len); + total -= len; + } + else + { + MI_WriteByte(dst + total - 1, '\0'); + total -= 1; + } + if (id != 0) + { + do + { + (void)FSi_SeekDirDirect(&tmp, tmp.prop.dir.parent); + tmp.arg.readdir.p_entry = &entry; + tmp.arg.readdir.skip_string = FALSE; + MI_WriteByte(dst + total - 1, '/'); + total -= 1; + while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) + { + if (entry.is_directory && (entry.dir_id.own_id == id)) + { + len = entry.name_len; + MI_CpuCopy8(entry.name, dst + total - len, len); + total -= len; + break; + } + } + id = tmp.prop.dir.pos.own_id; + } + while (id != 0); + } + } + + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSResult FSi_OpenFileFastCommand(FSFile * p_file) +{ + FSArchive *const p_arc = p_file->arc; + const FSFileID *p_id = &p_file->arg.openfilefast.id; + const u32 index = p_id->file_id; + FSResult ret; + + { + u32 pos = (u32)(index * sizeof(FSArchiveFAT)); + if (pos >= p_arc->fat_size) + return FS_RESULT_FAILURE; + else + { + FSArchiveFAT fat; + FSiSyncReadParam param; + param.arc = p_arc; + param.pos = p_arc->fat + pos; + ret = FSi_ReadTable(¶m, &fat, sizeof(fat)); + if (ret != FS_RESULT_SUCCESS) + return ret; + p_file->arg.openfiledirect.top = fat.top; + p_file->arg.openfiledirect.bottom = fat.bottom; + p_file->arg.openfiledirect.index = index; + return FSi_TranslateCommand(p_file, FS_COMMAND_OPENFILEDIRECT); + } + } +} + +ARM_FUNC FSResult FSi_OpenFileDirectCommand(FSFile * p_file) +{ + p_file->prop.file.top = p_file->arg.openfiledirect.top; + p_file->prop.file.pos = p_file->arg.openfiledirect.top; + p_file->prop.file.bottom = p_file->arg.openfiledirect.bottom; + p_file->prop.file.own_id = p_file->arg.openfiledirect.index; + return FS_RESULT_SUCCESS; +} + +ARM_FUNC FSResult FSi_CloseFileCommand(FSFile * p_file) +{ +#pragma unused (p_file) + return FS_RESULT_SUCCESS; +} diff --git a/arm9/lib/NitroSDK/src/FS_file.c b/arm9/lib/NitroSDK/src/FS_file.c new file mode 100644 index 00000000..11595c02 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_file.c @@ -0,0 +1,244 @@ +#include "nitro.h" +#include "MI_byteAccess.h" +#include "FS_rom.h" +#include "FS_file.h" +#include "FSi_util.h" + +extern FSDirPos current_dir_pos; +BOOL is_init = FALSE; + +static BOOL FSi_FindPath(FSFile * p_dir, const char * path, FSFileID * p_file_id, FSDirPos * p_dir_pos); + +ARM_FUNC void FS_Init(u32 default_dma_no) +{ + if (!is_init) + { + is_init = TRUE; + FSi_InitRom(default_dma_no); + } +} + +ARM_FUNC BOOL FS_IsAvailable(void) +{ + return is_init; +} + +ARM_FUNC void FS_InitFile(FSFile * p_file) +{ + p_file->link.next = p_file->link.prev = NULL; + OS_InitThreadQueue(p_file->queue); + p_file->arc = NULL; + p_file->command = FS_COMMAND_INVALID; + p_file->stat = 0; +} + +static BOOL FSi_FindPath(FSFile * p_dir, const char * path, FSFileID * p_file_id, FSDirPos * p_dir_pos) +{ + FSDirPos pos; + if (FSi_IsSlash(MI_ReadByte(path))) + { + pos.arc = current_dir_pos.arc; + pos.own_id = 0; + pos.pos = 0; + pos.index = 0; + path++; + } + else + { + int i; + pos = current_dir_pos; + for (i = 0; i <= FS_ARCHIVE_NAME_LEN_MAX; ++i) + { + u32 c = MI_ReadByte(path + i); + if (!c || FSi_IsSlash(c)) + break; + else if (c == ':') + { + FSArchive * const p_arc = FS_FindArchive(path, i); + if (!p_arc) + { + return FALSE; + } + else if (!FS_IsArchiveLoaded(p_arc)) + { + return FALSE; + } + pos.arc = p_arc; + pos.pos = 0; + pos.index = 0; + pos.own_id = 0; + path += i + 1; + if (FSi_IsSlash(MI_ReadByte(path))) + ++path; + break; + } + } + } + p_dir->arc = pos.arc; + p_dir->arg.findpath.path = path; + p_dir->arg.findpath.pos = pos; + if (p_dir_pos) + { + p_dir->arg.findpath.find_directory = TRUE; + p_dir->arg.findpath.result.dir = p_dir_pos; + } + else + { + p_dir->arg.findpath.find_directory = FALSE; + p_dir->arg.findpath.result.file = p_file_id; + } + return FSi_SendCommand(p_dir, FS_COMMAND_FINDPATH); +} + +ARM_FUNC int FSi_ReadFileCore(FSFile * p_file, void * dst, s32 len, BOOL async) +{ + const s32 pos = (s32)p_file->prop.file.pos; + const s32 rest = (s32)(p_file->prop.file.bottom - pos); + const u32 org = (u32)len; + if (len > rest) + len = rest; + if (len < 0) + len = 0; + p_file->arg.readfile.dst = dst; + p_file->arg.readfile.len_org = org; + p_file->arg.readfile.len = (u32)len; + if (!async) + p_file->stat |= FS_FILE_STATUS_SYNC; + (void)FSi_SendCommand(p_file, FS_COMMAND_READFILE); + if (!async) + { + if (FS_WaitAsync(p_file)) + len = (s32)(p_file->prop.file.pos - pos); + else + len = -1; + } + return len; +} + +ARM_FUNC BOOL FS_ConvertPathToFileID(FSFileID * p_file_id, const char * path) +{ + FSFile dir; + FS_InitFile(&dir); + if (!FSi_FindPath(&dir, path, p_file_id, NULL)) + return FALSE; + return TRUE; +} + +ARM_FUNC BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index) +{ + p_file->arc = p_arc; + p_file->arg.openfiledirect.index = file_index; + p_file->arg.openfiledirect.top = image_top; + p_file->arg.openfiledirect.bottom = image_bottom; + if (!FSi_SendCommand(p_file, FS_COMMAND_OPENFILEDIRECT)) + return FALSE; + p_file->stat |= FS_FILE_STATUS_IS_FILE; + p_file->stat &= ~FS_FILE_STATUS_IS_DIR; + return TRUE; +} + +ARM_FUNC BOOL FS_OpenFileFast(FSFile * p_file, FSFileID file_id) +{ + if (!file_id.arc) + return FALSE; + p_file->arc = file_id.arc; + p_file->arg.openfilefast.id = file_id; + if (!FSi_SendCommand(p_file, FS_COMMAND_OPENFILEFAST)) + return FALSE; + p_file->stat |= FS_FILE_STATUS_IS_FILE; + p_file->stat &= ~FS_FILE_STATUS_IS_DIR; + return TRUE; +} + +ARM_FUNC BOOL FS_OpenFile(FSFile * p_file, const char * path) +{ + FSFileID file_id; + return FS_ConvertPathToFileID(&file_id, path) && FS_OpenFileFast(p_file, file_id); +} + +ARM_FUNC BOOL FS_CloseFile(FSFile * p_file) +{ + if (!FSi_SendCommand(p_file, FS_COMMAND_CLOSEFILE)) + return FALSE; + p_file->arc = NULL; + p_file->command = FS_COMMAND_INVALID; + p_file->stat &= ~(FS_FILE_STATUS_IS_FILE | FS_FILE_STATUS_IS_DIR); + return TRUE; +} + +ARM_FUNC BOOL FS_WaitAsync(FSFile * p_file) +{ + BOOL is_owner = FALSE; + OSIntrMode bak_par = OS_DisableInterrupts(); + if (FS_IsBusy(p_file)) + { + is_owner = !(p_file->stat & (FS_FILE_STATUS_SYNC | FS_FILE_STATUS_OPERATING)); + if (is_owner) + { + p_file->stat |= FS_FILE_STATUS_SYNC; + do + { + OS_SleepThread(p_file->queue); + } while (!(p_file->stat & FS_FILE_STATUS_OPERATING)); + } + else + { + do + { + OS_SleepThread(p_file->queue); + } while (FS_IsBusy(p_file)); + } + } + (void)OS_RestoreInterrupts(bak_par); + if (is_owner) + { + return FSi_ExecuteSyncCommand(p_file); + } + + return FS_IsSucceeded(p_file); +} + +ARM_FUNC int FS_ReadFileAsync(FSFile * p_file, void * dst, s32 len) +{ + return FSi_ReadFileCore(p_file, dst, len, TRUE); +} + +ARM_FUNC int FS_ReadFile(FSFile * p_file, void * dst, s32 len) +{ + return FSi_ReadFileCore(p_file, dst, len, FALSE); +} + +ARM_FUNC BOOL FS_SeekFile(FSFile * p_file, s32 offset, FSSeekFileMode origin) +{ + switch (origin) + { + case FS_SEEK_SET: + offset += p_file->prop.file.top; + break; + case FS_SEEK_CUR: + offset += p_file->prop.file.pos; + break; + case FS_SEEK_END: + offset += p_file->prop.file.bottom; + break; + default: + return FALSE; + } + if (offset < (s32)p_file->prop.file.top) + offset = (s32)p_file->prop.file.top; + if (offset > (s32)p_file->prop.file.bottom) + offset = (s32)p_file->prop.file.bottom; + p_file->prop.file.pos = (u32)offset; + return TRUE; +} + +ARM_FUNC BOOL FS_ChangeDir(const char * path) +{ + FSDirPos pos; + FSFile dir; + FS_InitFile(&dir); + if (!FSi_FindPath(&dir, path, NULL, &pos)) + return FALSE; + current_dir_pos = pos; + return TRUE; +} diff --git a/arm9/lib/NitroSDK/src/FS_overlay.c b/arm9/lib/NitroSDK/src/FS_overlay.c new file mode 100644 index 00000000..de64d97d --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_overlay.c @@ -0,0 +1,320 @@ +#include "nitro.h" +#include "DGT_common.h" +#include "DGT_dgt.h" +#include "OS_cache.h" +#include "OS_system.h" +#include "OS_printf.h" +#include "MI_memory.h" +#include "MI_uncompress.h" +#include "FS_rom.h" +#include "FS_overlay.h" +#include "FS_mw_dtor.h" +#include "MB_mb.h" + +#define FS_OVERLAY_FLAG_COMP 0x0001 +#define FS_OVERLAY_FLAG_AUTH 0x0002 +#define FS_OVERLAY_DIGEST_SIZE DGT_HASH2_DIGEST_SIZE + +ARM_FUNC u32 FSi_GetOverlayBinarySize(FSOverlayInfo * p_ovi) +{ + u32 size = (p_ovi->header.flag & FS_OVERLAY_FLAG_COMP) + ? p_ovi->header.compressed + : p_ovi->header.ram_size; + return size; +} + +ARM_FUNC void FS_ClearOverlayImage(FSOverlayInfo * p_ovi) +{ + u8 * const im_start = FS_GetOverlayAddress(p_ovi); + u32 const ram_size = FS_GetOverlayImageSize(p_ovi); + u32 const total_size = FS_GetOverlayTotalSize(p_ovi); + + IC_InvalidateRange(im_start, total_size); + DC_InvalidateRange(im_start, total_size); + MI_CpuFill8(im_start + ram_size, 0, total_size - ram_size); +} + +ARM_FUNC FSFileID FS_GetOverlayFileID(FSOverlayInfo * p_ovi) +{ + FSFileID ret; + ret.arc = &fsi_arc_rom; + ret.file_id = p_ovi->header.file_id; + return ret; +} + +ARM_FUNC BOOL FSi_LoadOverlayInfoCore(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id, FSArchive * arc, u32 offset_arm9, u32 len_arm9, u32 offset_arm7, u32 len_arm7) +{ + CARDRomRegion pr[1]; + u32 pos; + if (target == MI_PROCESSOR_ARM9) + { + pr->offset = offset_arm9; + pr->length = len_arm9; + } + else + { + pr->offset = offset_arm7; + pr->length = len_arm7; + } + pos = (u32) id * sizeof(FSOverlayInfoHeader); + if (pos >= pr->length) + return FALSE; + + FSFile file[1]; + FS_InitFile(file); + // BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index) + if (!FS_OpenFileDirect(file, arc, pr->offset + pos, pr->offset + pr->length, (u32)~0)) + return FALSE; + if (FS_ReadFile(file, p_ovi, sizeof(FSOverlayInfoHeader)) != sizeof(FSOverlayInfoHeader)) + { + (void)FS_CloseFile(file); + return FALSE; + } + (void)FS_CloseFile(file); + p_ovi->target = target; + if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) + return FALSE; + p_ovi->file_pos.offset = FS_GetFileImageTop(file); + p_ovi->file_pos.length = FS_GetLength(file); + (void)FS_CloseFile(file); + return TRUE; +} + +ARM_FUNC BOOL FS_LoadOverlayInfo(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id) +{ + CARDRomRegion * const pr = (target == MI_PROCESSOR_ARM9) ? &fsi_ovt9 : &fsi_ovt7; + if (pr->offset) + { + FSFile file[1]; + const u32 pos = id * sizeof(FSOverlayInfoHeader); + if (pos >= pr->length) + return FALSE; + MI_CpuCopy8((const void *)(pr->offset + pos), p_ovi, sizeof(FSOverlayInfoHeader)); + p_ovi->target = target; + FS_InitFile(file); + if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) + return FALSE; + p_ovi->file_pos.offset = FS_GetFileImageTop(file); + p_ovi->file_pos.length = FS_GetLength(file); + (void)FS_CloseFile(file); + return TRUE; + } + else + { + const CARDRomRegion * const p_ovt9 = CARD_GetRomRegionOVT(MI_PROCESSOR_ARM9); + const CARDRomRegion * const p_ovt7 = CARD_GetRomRegionOVT(MI_PROCESSOR_ARM7); + return FSi_LoadOverlayInfoCore(p_ovi, target, id, &fsi_arc_rom, p_ovt9->offset, p_ovt9->length, p_ovt7->offset, p_ovt7->length); + } +} + +ARM_FUNC BOOL FS_LoadOverlayImageAsync(FSOverlayInfo * p_ovi, FSFile * p_file) +{ + FS_InitFile(p_file); + if (!FS_OpenFileFast(p_file, FS_GetOverlayFileID(p_ovi))) + return FALSE; + else + { + s32 size = (s32)FSi_GetOverlayBinarySize(p_ovi); + FS_ClearOverlayImage(p_ovi); + if (FS_ReadFileAsync(p_file, FS_GetOverlayAddress(p_ovi), size) != size) + { + (void)FS_CloseFile(p_file); + return FALSE; + } + return TRUE; + } +} + +ARM_FUNC BOOL FS_LoadOverlayImage(FSOverlayInfo * p_ovi) +{ + FSFile file[1]; + FS_InitFile(file); + if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) + return FALSE; + else + { + s32 size = (s32)FSi_GetOverlayBinarySize(p_ovi); + FS_ClearOverlayImage(p_ovi); + if (FS_ReadFile(file, FS_GetOverlayAddress(p_ovi), size) != size) + { + (void)FS_CloseFile(file); + return FALSE; + } + (void)FS_CloseFile(file); + return TRUE; + } +} + +static const u8 fsi_def_digest_key[64] = { + 0x21, 0x06, 0xc0, 0xde, + 0xba, 0x98, 0xce, 0x3f, + 0xa6, 0x92, 0xe3, 0x9d, + 0x46, 0xf2, 0xed, 0x01, + + 0x76, 0xe3, 0xcc, 0x08, + 0x56, 0x23, 0x63, 0xfa, + 0xca, 0xd4, 0xec, 0xdf, + 0x9a, 0x62, 0x78, 0x34, + + 0x8f, 0x6d, 0x63, 0x3c, + 0xfe, 0x22, 0xca, 0x92, + 0x20, 0x88, 0x97, 0x23, + 0xd2, 0xcf, 0xae, 0xc2, + + 0x32, 0x67, 0x8d, 0xfe, + 0xca, 0x83, 0x64, 0x98, + 0xac, 0xfd, 0x3e, 0x37, + 0x87, 0x46, 0x58, 0x24, +}; + +static const void *fsi_digest_key_ptr = fsi_def_digest_key; +static u32 fsi_digest_key_len = sizeof(fsi_def_digest_key); + +ARM_FUNC BOOL FSi_CompareDigest(const u8 *spec_digest, void *src, u32 len) +{ + int i; + u8 digest[FS_OVERLAY_DIGEST_SIZE]; + u8 digest_key[64]; + + MI_CpuClear8(digest, sizeof(digest)); + MI_CpuCopy8(fsi_digest_key_ptr, digest_key, fsi_digest_key_len); + DGT_Hash2CalcHmac(digest, src, len, digest_key, fsi_digest_key_len); + for (i = 0; i < sizeof(digest); i += sizeof(u32)) + { + if (*(const u32 *)(digest + i) != *(const u32 *)(spec_digest + i)) + break; + } + return i == sizeof(digest); +} + +extern u8 SDK_OVERLAY_DIGEST[]; +extern u8 SDK_OVERLAY_DIGEST_END[]; + +ARM_FUNC void FS_StartOverlay(FSOverlayInfo * p_ovi) +{ + u32 rare_size = FSi_GetOverlayBinarySize(p_ovi); + if (MB_IsMultiBootChild()) + { + BOOL ret = FALSE; + + if (p_ovi->header.flag & FS_OVERLAY_FLAG_AUTH) + { + const u32 odt_max = (u32)((SDK_OVERLAY_DIGEST_END - SDK_OVERLAY_DIGEST) / FS_OVERLAY_DIGEST_SIZE); + if (p_ovi->header.id < odt_max) + { + const u8 * spec_digest = SDK_OVERLAY_DIGEST + FS_OVERLAY_DIGEST_SIZE * p_ovi->header.id; + ret = FSi_CompareDigest(spec_digest, p_ovi->header.ram_address, rare_size); + } + } + if (!ret) + { + MI_CpuClear8(p_ovi->header.ram_address, rare_size); + OS_TPanic("FS_StartOverlay() failed! (invalid overlay-segment data)"); + return; + } + } + if (p_ovi->header.flag & FS_OVERLAY_FLAG_COMP) + { + MIi_UncompressBackward(p_ovi->header.ram_address + rare_size); + } + DC_FlushRange(p_ovi->header.ram_address, p_ovi->header.ram_size); + + { + FSOverlayInitFunc *p = p_ovi->header.sinit_init; + FSOverlayInitFunc *q = p_ovi->header.sinit_init_end; + for (; p < q; ++p) + { + if (*p) + (**p)(); + } + } +} + +ARM_FUNC void FS_EndOverlay(FSOverlayInfo *p_ovi) +{ + for (;;) + { + MWiDestructorChain *head = NULL, *tail = NULL; + const u32 region_top = (u32)FS_GetOverlayAddress(p_ovi); + const u32 region_bottom = region_top + FS_GetOverlayTotalSize(p_ovi); + + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + MWiDestructorChain *prev = NULL; + MWiDestructorChain *base = __global_destructor_chain; + MWiDestructorChain *p = base; + while (p) + { + MWiDestructorChain *next = p->next; + const u32 dtor = (u32)p->dtor; + const u32 obj = (u32)p->obj; + if (((obj == 0) && (dtor >= region_top) && (dtor < region_bottom)) || + ((obj >= region_top) && (obj < region_bottom))) + { + /* If appropriate, extract*/ + if (!tail) + { + head = p; + } + else + { + tail->next = p; + } + if (base == p) + { + base = __global_destructor_chain = next; + } + tail = p, p->next = NULL; + if (prev) + { + prev->next = next; + } + } + else + { + prev = p; + } + p = next; + } + (void)OS_RestoreInterrupts(bak_psr); + } + + if (!head) + { + break; + } + do + { + MWiDestructorChain *next = head->next; + if (head->dtor) + { + (*head->dtor) (head->obj); + } + head = next; + } + while (head); + } +} + +ARM_FUNC BOOL FS_UnloadOverlayImage(FSOverlayInfo * p_ovi) +{ + FS_EndOverlay(p_ovi); + return TRUE; +} + +ARM_FUNC BOOL FS_LoadOverlay(MIProcessor target, FSOverlayID id) +{ + FSOverlayInfo ovi; + if (!FS_LoadOverlayInfo(&ovi, target, id) || !FS_LoadOverlayImage(&ovi)) + return FALSE; + FS_StartOverlay(&ovi); + return TRUE; +} + +ARM_FUNC BOOL FS_UnloadOverlay(MIProcessor target, FSOverlayID id) +{ + FSOverlayInfo ovi; + if (!FS_LoadOverlayInfo(&ovi, target, id) || !FS_UnloadOverlayImage(&ovi)) + return FALSE; + return TRUE; +} diff --git a/arm9/lib/NitroSDK/src/FS_rom.c b/arm9/lib/NitroSDK/src/FS_rom.c new file mode 100644 index 00000000..09098dfe --- /dev/null +++ b/arm9/lib/NitroSDK/src/FS_rom.c @@ -0,0 +1,126 @@ +#include "FS_rom.h" +#include "FS_archive.h" +#include "FS_file.h" +#include "CARD_pullOut.h" +#include "CARD_rom.h" +#include "CARD_common.h" +#include "MB_mb.h" +#include "OS_printf.h" + +static u32 fsi_default_dma_no; +s32 fsi_card_lock_id; +CARDRomRegion fsi_ovt9; +CARDRomRegion fsi_ovt7; +FSArchive fsi_arc_rom; + +ARM_FUNC void FSi_OnRomReadDone(void * p_arc) +{ + FS_NotifyArchiveAsyncEnd(p_arc, CARD_IsPulledOut() ? FS_RESULT_ERROR : FS_RESULT_SUCCESS); +} + +ARM_FUNC FSResult FSi_ReadRomCallback(FSArchive * p_arc, void * dst, u32 src, u32 len) +{ + CARD_ReadRomAsync(fsi_default_dma_no, (const void *)src, dst, len, FSi_OnRomReadDone, p_arc); + return FS_RESULT_PROC_ASYNC; +} + +ARM_FUNC FSResult FSi_WriteDummyCallback(FSArchive * p_arc, const void *src, u32 dst, u32 len) +{ +#pragma unused(p_arc, src, dst, len) + return FS_RESULT_FAILURE; +} + +ARM_FUNC FSResult FSi_RomArchiveProc(FSFile * p_arc, FSCommandType cmd) +{ +#pragma unused(p_arc) + switch (cmd) + { + case FS_COMMAND_ACTIVATE: + CARD_LockRom((u16)fsi_card_lock_id); + return FS_RESULT_SUCCESS; + case FS_COMMAND_IDLE: + CARD_UnlockRom((u16)fsi_card_lock_id); + return FS_RESULT_SUCCESS; + case FS_COMMAND_WRITEFILE: + return FS_RESULT_UNSUPPORTED; + default: + return FS_RESULT_PROC_UNKNOWN; + } +} + +ARM_FUNC FSResult FSi_ReadDummyCallback(FSArchive *p_arc, void *dst, u32 src, u32 len) +{ +#pragma unused (p_arc, dst, src, len) + return FS_RESULT_FAILURE; +} + +ARM_FUNC FSResult FSi_EmptyArchiveProc(FSFile *p_file, FSCommandType cmd) +{ +#pragma unused(p_file, cmd) + return FS_RESULT_UNSUPPORTED; +} + +ARM_FUNC void FSi_InitRom(u32 default_dma_no) +{ + fsi_default_dma_no = default_dma_no; + fsi_card_lock_id = OS_GetLockID(); + fsi_ovt9.offset = 0; + fsi_ovt9.length = 0; + fsi_ovt7.offset = 0; + fsi_ovt7.length = 0; + + CARD_Init(); + + FS_InitArchive(&fsi_arc_rom); + (void)FS_RegisterArchiveName(&fsi_arc_rom, "rom", 3); + + if (MB_IsMultiBootChild()) + { + fsi_ovt9.offset = (u32)~0; + fsi_ovt9.length = 0; + fsi_ovt7.offset = (u32)~0; + fsi_ovt7.length = 0; + FS_SetArchiveProc(&fsi_arc_rom, FSi_EmptyArchiveProc, (u32)FS_ARCHIVE_PROC_ALL); + (void)FS_LoadArchive(&fsi_arc_rom, 0x00000000, 0, 0, 0, 0, FSi_ReadDummyCallback, FSi_WriteDummyCallback); + } + else + { + const CARDRomRegion *const fnt = CARD_GetRomRegionFNT(); + const CARDRomRegion *const fat = CARD_GetRomRegionFAT(); + + FS_SetArchiveProc(&fsi_arc_rom, FSi_RomArchiveProc, + FS_ARCHIVE_PROC_WRITEFILE | + FS_ARCHIVE_PROC_ACTIVATE | FS_ARCHIVE_PROC_IDLE); + + if ((fnt->offset == 0xFFFFFFFF) || (fnt->offset == 0x00000000) || + (fat->offset == 0xFFFFFFFF) || (fat->offset == 0x00000000)) + { + OS_Warning("file-system : no MAKEROM-information in rom header."); + } + else + { + (void)FS_LoadArchive(&fsi_arc_rom, 0x00000000, + fat->offset, fat->length, + fnt->offset, fnt->length, + FSi_ReadRomCallback, FSi_WriteDummyCallback); + } + } +} + +ARM_FUNC u32 FS_SetDefaultDMA(u32 dma_no) +{ + OSIntrMode bak_psr = OS_DisableInterrupts(); + u32 bak_dma_no = fsi_default_dma_no; + BOOL bak_stat = FS_SuspendArchive(&fsi_arc_rom); + fsi_default_dma_no = dma_no; + if (bak_stat) + (void)FS_ResumeArchive(&fsi_arc_rom); + (void)OS_RestoreInterrupts(bak_psr); + return bak_dma_no; +} + +ARM_FUNC u32 FS_TryLoadTable(void * p_mem, u32 size) +{ + return FS_LoadArchiveTables(&fsi_arc_rom, p_mem, size); +} + diff --git a/arm9/lib/NitroSDK/src/FX.c b/arm9/lib/NitroSDK/src/FX.c new file mode 100644 index 00000000..ea730538 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "fx.h" + +ARM_FUNC void FX_Init(){ + return; +} + +ARM_FUNC fx32 FX_Modf(fx32 x, fx32 *iptr){ + if (x >= 0) + { + *iptr = x & 0x7FFFF000; + return x & 0xFFF; + } + else + { + *iptr = -(-x & 0x7FFFF000); + return -(-x & 0xFFF); + } +} diff --git a/arm9/lib/NitroSDK/src/FX_atan.c b/arm9/lib/NitroSDK/src/FX_atan.c new file mode 100644 index 00000000..ef2a662d --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_atan.c @@ -0,0 +1,289 @@ +#include "global.h" +#include "fx.h" + +const fx16 FX_AtanTable_[] = { + FX16_CONST(0.0), + FX16_CONST(0.019775390625), + FX16_CONST(0.039794921875), + FX16_CONST(0.0595703125), + FX16_CONST(0.07958984375), + FX16_CONST(0.099365234375), + FX16_CONST(0.119384765625), + FX16_CONST(0.13916015625), + FX16_CONST(0.158935546875), + FX16_CONST(0.1787109375), + FX16_CONST(0.198486328125), + FX16_CONST(0.21826171875), + FX16_CONST(0.238037109375), + FX16_CONST(0.2578125), + FX16_CONST(0.27734375), + FX16_CONST(0.297119140625), + FX16_CONST(0.316650390625), + FX16_CONST(0.336181640625), + FX16_CONST(0.355712890625), + FX16_CONST(0.375244140625), + FX16_CONST(0.394775390625), + FX16_CONST(0.4140625), + FX16_CONST(0.433349609375), + FX16_CONST(0.45263671875), + FX16_CONST(0.471923828125), + FX16_CONST(0.4912109375), + FX16_CONST(0.51025390625), + FX16_CONST(0.529296875), + FX16_CONST(0.54833984375), + FX16_CONST(0.5673828125), + FX16_CONST(0.586181640625), + FX16_CONST(0.60498046875), + FX16_CONST(0.623779296875), + FX16_CONST(0.642578125), + FX16_CONST(0.6611328125), + FX16_CONST(0.6796875), + FX16_CONST(0.6982421875), + FX16_CONST(0.716552734375), + FX16_CONST(0.73486328125), + FX16_CONST(0.753173828125), + FX16_CONST(0.771240234375), + FX16_CONST(0.789306640625), + FX16_CONST(0.807373046875), + FX16_CONST(0.8251953125), + FX16_CONST(0.843017578125), + FX16_CONST(0.86083984375), + FX16_CONST(0.878662109375), + FX16_CONST(0.89599609375), + FX16_CONST(0.91357421875), + FX16_CONST(0.930908203125), + FX16_CONST(0.9482421875), + FX16_CONST(0.965576171875), + FX16_CONST(0.982666015625), + FX16_CONST(0.999755859375), + FX16_CONST(1.0166015625), + FX16_CONST(1.033447265625), + FX16_CONST(1.05029296875), + FX16_CONST(1.06689453125), + FX16_CONST(1.08349609375), + FX16_CONST(1.099853515625), + FX16_CONST(1.1162109375), + FX16_CONST(1.132568359375), + FX16_CONST(1.148681640625), + FX16_CONST(1.164794921875), + FX16_CONST(1.1806640625), + FX16_CONST(1.196533203125), + FX16_CONST(1.21240234375), + FX16_CONST(1.22802734375), + FX16_CONST(1.24365234375), + FX16_CONST(1.259033203125), + FX16_CONST(1.2744140625), + FX16_CONST(1.28955078125), + FX16_CONST(1.3046875), + FX16_CONST(1.31982421875), + FX16_CONST(1.334716796875), + FX16_CONST(1.349609375), + FX16_CONST(1.364501953125), + FX16_CONST(1.379150390625), + FX16_CONST(1.3935546875), + FX16_CONST(1.408203125), + FX16_CONST(1.42236328125), + FX16_CONST(1.436767578125), + FX16_CONST(1.450927734375), + FX16_CONST(1.46484375), + FX16_CONST(1.47900390625), + FX16_CONST(1.49267578125), + FX16_CONST(1.506591796875), + FX16_CONST(1.520263671875), + FX16_CONST(1.53369140625), + FX16_CONST(1.547119140625), + FX16_CONST(1.560546875), + FX16_CONST(1.57373046875), + FX16_CONST(1.5869140625), + FX16_CONST(1.60009765625), + FX16_CONST(1.613037109375), + FX16_CONST(1.6259765625), + FX16_CONST(1.638671875), + FX16_CONST(1.6513671875), + FX16_CONST(1.663818359375), + FX16_CONST(1.676513671875), + FX16_CONST(1.688720703125), + FX16_CONST(1.701171875), + FX16_CONST(1.71337890625), + FX16_CONST(1.7255859375), + FX16_CONST(1.737548828125), + FX16_CONST(1.74951171875), + FX16_CONST(1.76123046875), + FX16_CONST(1.77294921875), + FX16_CONST(1.78466796875), + FX16_CONST(1.79638671875), + FX16_CONST(1.807861328125), + FX16_CONST(1.819091796875), + FX16_CONST(1.83056640625), + FX16_CONST(1.841796875), + FX16_CONST(1.852783203125), + FX16_CONST(1.864013671875), + FX16_CONST(1.874755859375), + FX16_CONST(1.8857421875), + FX16_CONST(1.896484375), + FX16_CONST(1.9072265625), + FX16_CONST(1.91796875), + FX16_CONST(1.928466796875), + FX16_CONST(1.93896484375), + FX16_CONST(1.94921875), + FX16_CONST(1.95947265625), + FX16_CONST(1.9697265625), + FX16_CONST(1.97998046875), + FX16_CONST(1.989990234375), + FX16_CONST(2.0), +}; + +ARM_FUNC u16 FX_Atan(fx32 x){ + if (x >= 0) + { + if (x > 0x1000) + { + x = FX_Inv(x); + fx16 y = FX_AtanTable_[x >> 5]; + return (u16)(0x4000 - y); + } + else if (x < 0x1000) + { + return (u16)FX_AtanTable_[x >> 5]; + } + else + { + return 0x2000; + } + } + else + { + if (x < -0x1000) + { + x = FX_Inv(-x); + fx16 y = FX_AtanTable_[x >> 5]; + return (u16)(y - 0x4000); + } + else if (x > -0x1000) + { + return (u16)(-FX_AtanTable_[-x >> 5]); + } + else + { + return (u16)(-0x2000); + } + } +} + +ARM_FUNC u16 FX_Atan2(fx32 x, fx32 y){ + u32 positive, bias, denominator, numerator; + if (x > 0) + { + if (y > 0) + { + if (y > x) + { + numerator = (u32)x; + denominator = (u32)y; + bias = 0; + positive = TRUE; + } + else if (y < x) + { + numerator = (u32)y; + denominator = (u32)x; + bias = 0x4000; + positive = FALSE; + } + else + { + return 0x2000; + } + } + else if (y < 0) + { + y = -y; + if (y < x) + { + numerator = (u32)y; + denominator = (u32)x; + bias = 0x4000; + positive = TRUE; + } + else if (y > x) + { + numerator = (u32)x; + denominator = (u32)y; + bias = 0x8000; + positive = FALSE; + } + else + { + return 0x6000; + } + } + else + { + return 0x4000; + } + } + else if (x < 0) + { + x = -x; + if (y < 0) + { + y = -y; + if (y > x) + { + numerator = (u32)x; + denominator = (u32)y; + bias = (u32)(-0x8000); + positive = TRUE; + } + else if (y < x) + { + numerator = (u32)y; + denominator = (u32)x; + bias = (u32)(-0x4000); + positive = FALSE; + } + else + { + return 0xA000; + } + } + else if (y > 0) + { + if (y < x) + { + numerator = (u32)y; + denominator = (u32)x; + bias = (u32)(-0x4000); + positive = TRUE; + } + else if (y > x) + { + numerator = (u32)x; + denominator = (u32)y; + bias = 0x0; + positive = FALSE; + } + else + { + return 0xE000; + } + } + else + { + return 0xC000; + } + } + else + { + if (y >= 0) + return 0x0; + else + return 0x8000; + } + if (denominator == 0x0) + return 0x0; + if (positive) + return (u16)(bias + FX_AtanTable_[FX_Div((fx32)numerator, (fx32)denominator) >> 5]); + else + return (u16)(bias - FX_AtanTable_[FX_Div((fx32)numerator, (fx32)denominator) >> 5]); +} diff --git a/arm9/lib/NitroSDK/src/FX_cp.c b/arm9/lib/NitroSDK/src/FX_cp.c new file mode 100644 index 00000000..0c5d4ff8 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_cp.c @@ -0,0 +1,71 @@ +#include "fx.h" + +#include "global.h" +#include "registers.h" + + +ARM_FUNC fx32 FX_Div(fx32 numerator, fx32 denominator){ + FX_DivAsync(numerator, denominator); + return FX_GetDivResult(); +} + +ARM_FUNC fx32 FX_Inv(fx32 x){ + FX_InvAsync(x); + return FX_GetDivResult(); +} + +ARM_FUNC fx32 FX_Sqrt(fx32 x){ + if (x > 0) + { + reg_CP_SQRTCNT = 0x1; + reg_CP_SQRT_PARAM = (u64)((fx64)x << 32); + return FX_GetSqrtResult(); + } + else + { + return 0; + } +} + +ARM_FUNC fx64c FX_GetDivResultFx64c(){ + while (reg_CP_DIVCNT & 0x8000) {} + return (fx64c)reg_CP_DIV_RESULT; +} + +ARM_FUNC fx32 FX_GetDivResult(){ + while (reg_CP_DIVCNT & 0x8000) {} + return (fx32)((reg_CP_DIV_RESULT + (1 << (0x14 - 1))) >> 0x14); +} + +ARM_FUNC void FX_InvAsync(fx32 x){ + reg_CP_DIVCNT = 0x1; + reg_CP_DIV_NUMER = (fx64)0x00001000 << 32; + reg_CP_DIV_DENOM = (u32)x; +} + +ARM_FUNC fx32 FX_GetSqrtResult(){ + while (reg_CP_SQRTCNT & 0x8000) {} + return (fx32)((reg_CP_SQRT_RESULT + (1 << (0xA - 1))) >> 0xA); +} + +ARM_FUNC void FX_DivAsync(fx32 numerator, fx32 denominator){ + reg_CP_DIVCNT = 0x1; + reg_CP_DIV_NUMER = (u64)((fx64)numerator << 32); + reg_CP_DIV_DENOM = (u32)denominator; +} + +ARM_FUNC fx32 FX_DivS32(fx32 numerator, fx32 denominator){ + reg_CP_DIVCNT = 0x0; + *(REGType32v *)®_CP_DIV_NUMER = (u32)numerator; //32bit write for some reason + reg_CP_DIV_DENOM = (u32)denominator; + while (reg_CP_DIVCNT & 0x8000) {} + return (fx32)(*(REGType32v *)®_CP_DIV_RESULT); +} + +ARM_FUNC fx32 FX_ModS32(fx32 num, fx32 mod){ + reg_CP_DIVCNT = 0x0; + *(REGType32v *)®_CP_DIV_NUMER = (u32)num; //32bit write for some reason + reg_CP_DIV_DENOM = (u32)mod; + while (reg_CP_DIVCNT & 0x8000) {} + return (fx32)(*(REGType32v *)®_CP_DIVREM_RESULT); +} diff --git a/arm9/lib/NitroSDK/src/FX_mtx22.c b/arm9/lib/NitroSDK/src/FX_mtx22.c new file mode 100644 index 00000000..a74bb25c --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_mtx22.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "main.h" +#include "fx.h" + +ARM_FUNC void MTX_ScaleApply22(struct Mtx22 *mtx, struct Mtx22 *dst, fx32 x, fx32 y){ + dst->_[0] = (fx32)(((fx64)x * mtx->_[0]) >> FX32_INT_SHIFT); + dst->_[1] = (fx32)(((fx64)x * mtx->_[1]) >> FX32_INT_SHIFT); + dst->_[2] = (fx32)(((fx64)y * mtx->_[2]) >> FX32_INT_SHIFT); + dst->_[3] = (fx32)(((fx64)y * mtx->_[3]) >> FX32_INT_SHIFT); +} + +ARM_FUNC asm void MTX_Identity22_(struct Mtx22 *mtx){ + mov r1, #0x0 + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + stmia r0!, {r1-r2} + bx lr +} + +THUMB_FUNC asm void MTX_Rot22_(struct Mtx22 *mtx, fx32 sinphi, fx32 cosphi){ + str r2, [r0, #0x0] + str r1, [r0, #0x4] + neg r1, r1 + str r1, [r0, #0x8] + str r2, [r0, #0xc] + bx lr +} diff --git a/arm9/lib/NitroSDK/src/FX_mtx33.c b/arm9/lib/NitroSDK/src/FX_mtx33.c new file mode 100644 index 00000000..86169ea0 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_mtx33.c @@ -0,0 +1,129 @@ +#include "global.h" +#include "main.h" +#include "fx.h" + +ARM_FUNC void MTX_ScaleApply33(struct Mtx33 *mtx, struct Mtx33 *dst, fx32 x, fx32 y, fx32 z){ + dst->_[0] = (fx32)(((fx64)x * mtx->_[0]) >> FX32_INT_SHIFT); + dst->_[1] = (fx32)(((fx64)x * mtx->_[1]) >> FX32_INT_SHIFT); + dst->_[2] = (fx32)(((fx64)x * mtx->_[2]) >> FX32_INT_SHIFT); + dst->_[3] = (fx32)(((fx64)y * mtx->_[3]) >> FX32_INT_SHIFT); + dst->_[4] = (fx32)(((fx64)y * mtx->_[4]) >> FX32_INT_SHIFT); + dst->_[5] = (fx32)(((fx64)y * mtx->_[5]) >> FX32_INT_SHIFT); + dst->_[6] = (fx32)(((fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); + dst->_[7] = (fx32)(((fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); + dst->_[8] = (fx32)(((fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); +} + +ARM_FUNC void MTX_Concat33(struct Mtx33 *a, struct Mtx33 *b, struct Mtx33 *c){ + struct Mtx33 temp; + struct Mtx33 *dst; + fx32 a0, a1, a2; + fx32 b0, b1, b2; + + if (c == b) + dst = &temp; + else + dst = c; + + a0 = a->_[0]; + a1 = a->_[1]; + a2 = a->_[2]; + dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6] ) >> FX32_INT_SHIFT); + dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[5]; + b2 = b->_[8]; + dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + a0 = a->_[3]; + a1 = a->_[4]; + a2 = a->_[5]; + dst->_[5] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + dst->_[4] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[0]; + b1 = b->_[3]; + b2 = b->_[6]; + dst->_[3] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + a0 = a->_[6]; + a1 = a->_[7]; + a2 = a->_[8]; + dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + dst->_[7] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[5]; + b2 = b->_[8]; + dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + + if (dst == &temp) + *c = temp; +} + +ARM_FUNC void MTX_MultVec33(struct Vecx32 *vec, struct Mtx33 *mtx, struct Vecx32 *dst){ + fx32 x, y, z; + x = vec->x; + y = vec->y; + z = vec->z; + dst->x = (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[3] + (fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); + dst->y = (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); + dst->z = (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); +} + +ARM_FUNC asm void MTX_Identity33_(struct Mtx33 *mtx){ + mov r2, #0x1000 + str r2, [r0, #0x20] + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr +} + +THUMB_FUNC asm void MTX_RotX33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ + mov r3, #0x1 + lsl r3, r3, #0xc + str r3, [r0, #0x0] + mov r3, #0x0 + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r3, [r0, #0xc] + str r2, [r0, #0x10] + str r1, [r0, #0x14] + str r3, [r0, #0x18] + neg r1, r1 + str r1, [r0, #0x1c] + str r2, [r0, #0x20] + bx lr +} + +THUMB_FUNC asm void MTX_RotY33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ + str r2, [r0, #0x0] + str r2, [r0, #0x20] + mov r3, #0x0 + str r3, [r0, #0x4] + str r3, [r0, #0xc] + str r3, [r0, #0x14] + str r3, [r0, #0x1c] + neg r2, r1 + mov r3, #0x1 + lsl r3, r3, #0xc + str r1, [r0, #0x18] + str r2, [r0, #0x8] + str r3, [r0, #0x10] + bx lr +} + +THUMB_FUNC asm void MTX_RotZ33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ + stmia r0!, {r2} + mov r3, #0x0 + stmia r0!, {r1,r3} + neg r1, r1 + stmia r0!, {r1-r2} + mov r1, #0x1 + lsl r1, r1, #0xc + str r3, [r0, #0x0] + str r3, [r0, #0x4] + str r3, [r0, #0x8] + str r1, [r0, #0xc] + bx lr +} diff --git a/arm9/lib/NitroSDK/src/FX_mtx43.c b/arm9/lib/NitroSDK/src/FX_mtx43.c new file mode 100644 index 00000000..693dddff --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_mtx43.c @@ -0,0 +1,200 @@ +#include "global.h" +#include "main.h" +#include "fx.h" + +void MI_Copy48B(void *src, void *dst); + + +ARM_FUNC void MTX_ScaleApply43(struct Mtx43 *mtx, struct Mtx43 *dst, fx32 x, fx32 y, fx32 z){ + //this works because matrices are indexed columns first + MTX_ScaleApply33((struct Mtx33 *)mtx, (struct Mtx33 *)dst, x, y, z); + dst->_[9] = mtx->_[9]; + dst->_[10] = mtx->_[10]; + dst->_[11] = mtx->_[11]; +} + +ARM_FUNC fx32 MTX_Inverse43(struct Mtx43 *mtx, struct Mtx43 *inv){ + struct Mtx43 tempmat; + struct Mtx43 *dst; + fx32 det0, det1, det2, det; + fx32 var0, var1, var2, var3; + if (mtx == inv) + dst = &tempmat; + else + dst = inv; + //subdeterminants + det0 = (fx32)(((fx64)mtx->_[4] * mtx->_[8] - (fx64)mtx->_[5] * mtx->_[7] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); + det1 = (fx32)(((fx64)mtx->_[3] * mtx->_[8] - (fx64)mtx->_[5] * mtx->_[6] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); + det2 = (fx32)(((fx64)mtx->_[3] * mtx->_[7] - (fx64)mtx->_[4] * mtx->_[6] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); + //matrix determinant + det = (fx32)(((fx64)mtx->_[0] * det0 - (fx64)mtx->_[1] * det1 + (fx64)mtx->_[2] * det2 + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); + + if (det == 0) + return -1; //not invertible + + FX_InvAsync(det); + + var0 = (fx32)(((fx64)mtx->_[1] * mtx->_[8] - (fx64)mtx->_[7] * mtx->_[2]) >> FX32_INT_SHIFT); + var1 = (fx32)(((fx64)mtx->_[1] * mtx->_[5] - (fx64)mtx->_[4] * mtx->_[2]) >> FX32_INT_SHIFT); + var2 = (fx32)(((fx64)mtx->_[0] * mtx->_[8] - (fx64)mtx->_[6] * mtx->_[2]) >> FX32_INT_SHIFT); + var3 = (fx32)(((fx64)mtx->_[0] * mtx->_[5] - (fx64)mtx->_[3] * mtx->_[2]) >> FX32_INT_SHIFT); + + fx32 ret = FX_GetDivResult(); + dst->_[0] = (fx32)(((fx64)ret * det0) >> FX32_INT_SHIFT); + dst->_[1] = -(fx32)(((fx64)ret * var0) >> FX32_INT_SHIFT); + dst->_[2] = (fx32)(((fx64)ret * var1) >> FX32_INT_SHIFT); + dst->_[3] = -(fx32)(((fx64)ret * det1) >> FX32_INT_SHIFT); + dst->_[4] = (fx32)(((fx64)ret * var2) >> FX32_INT_SHIFT); + dst->_[5] = -(fx32)(((fx64)ret * var3) >> FX32_INT_SHIFT); + + dst->_[6] = (fx32)(((fx64)ret * det2) >> FX32_INT_SHIFT); + fx32 temp = (fx32)(((fx64)mtx->_[0] * mtx->_[7] - (fx64)mtx->_[6] * mtx->_[1]) >> FX32_INT_SHIFT); + dst->_[7] = -(fx32)(((fx64)ret * temp) >> FX32_INT_SHIFT); + fx32 temp1 = (fx32)(((fx64)mtx->_[0] * mtx->_[4] - (fx64)mtx->_[3] * mtx->_[1]) >> FX32_INT_SHIFT); + dst->_[8] = (fx32)(((fx64)ret * temp1) >> FX32_INT_SHIFT); + dst->_[9] = -(fx32)(((fx64)dst->_[0] * mtx->_[9] + (fx64)dst->_[3] * mtx->_[10] + (fx64)dst->_[6] * mtx->_[11]) >> FX32_INT_SHIFT); + dst->_[10] = -(fx32)(((fx64)dst->_[1] * mtx->_[9] + (fx64)dst->_[4] * mtx->_[10] + (fx64)dst->_[7] * mtx->_[11]) >> FX32_INT_SHIFT); + dst->_[11] = -(fx32)(((fx64)dst->_[2] * mtx->_[9] + (fx64)dst->_[5] * mtx->_[10] + (fx64)dst->_[8] * mtx->_[11]) >> FX32_INT_SHIFT); + + if (dst == &tempmat) + MI_Copy48B(&tempmat, inv); + return 0; +} + +ARM_FUNC void MTX_Concat43(struct Mtx43 *a, struct Mtx43 *b, struct Mtx43 *c){ + struct Mtx43 temp; + struct Mtx43 *dst; + fx32 a0, a1, a2; + fx32 b0, b1, b2; + + if (c == b) + dst = &temp; + else + dst = c; + + a0 = a->_[0]; + a1 = a->_[1]; + a2 = a->_[2]; + dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6] ) >> FX32_INT_SHIFT); + dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[5]; + b2 = b->_[8]; + dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + a0 = a->_[3]; + a1 = a->_[4]; + a2 = a->_[5]; + dst->_[5] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + dst->_[4] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[0]; + b1 = b->_[3]; + b2 = b->_[6]; + dst->_[3] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + a0 = a->_[6]; + a1 = a->_[7]; + a2 = a->_[8]; + dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + dst->_[7] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[5]; + b2 = b->_[8]; + dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); + a0 = a->_[9]; + a1 = a->_[10]; + a2 = a->_[11]; + dst->_[11] = (fx32)((((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT) + b->_[11]); + dst->_[10] = (fx32)((((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7]) >> FX32_INT_SHIFT) + b->_[10]); + dst->_[9] = (fx32)((((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6]) >> FX32_INT_SHIFT) + b->_[9]); + if (dst == &temp) + *c = temp; +} + +ARM_FUNC void MTX_MultVec43(struct Vecx32 *vec, struct Mtx43 *mtx, struct Vecx32 *dst){ + fx32 x, y, z; + x = vec->x; + y = vec->y; + z = vec->z; + dst->x = (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[3] + (fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); + dst->x += mtx->_[9]; + dst->y = (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); + dst->y += mtx->_[10]; + dst->z = (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); + dst->z += mtx->_[11]; +} + +ARM_FUNC asm void MTX_Identity43_(struct Mtx43 *mtx){ + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr +} + +ARM_FUNC asm void MTX_Copy43To44_(struct Mtx43 *src, struct Mtx44 *dst){ + stmdb sp!, {r4} + mov r12, #0x0 + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + mov r12, #0x1000 + ldmia r0!, {r2-r4} + stmia r1!, {r2-r4,r12} + ldmia sp!, {r4} + bx lr +} + +THUMB_FUNC asm void MTX_Scale43_(struct Mtx43 *dst, fx32 x, fx32 y, fx32 z){ + stmia r0!, {r1} + mov r1, #0x0 + str r3, [r0, #0x1c] + mov r3, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + mov r2, #0x0 + stmia r0!, {r1,r3} + add r0, #0x4 + stmia r0!, {r1-r3} + bx lr +} + +THUMB_FUNC asm void MTX_RotX43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi){ + str r1, [r0, #0x14] + neg r1, r1 + str r1, [r0, #0x1c] + mov r1, #0x1 + lsl r1, r1, #0xc + stmia r0!, {r1} + mov r3, #0x0 + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r2} + str r1, [r0, #0x4] + add r0, #0xc + stmia r0!, {r2-r3} + stmia r0!, {r1,r3} + bx lr +} + +THUMB_FUNC asm void MTX_RotY43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi){ + str r1, [r0, #0x18] + mov r3, #0x0 + stmia r0!, {r2-r3} + neg r1, r1 + stmia r0!, {r1,r3} + mov r1, #0x1 + lsl r1, r1, #0xc + stmia r0!, {r1,r3} + add r0, #0x4 + mov r1, #0x0 + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + bx lr +} diff --git a/arm9/lib/NitroSDK/src/FX_mtx44.c b/arm9/lib/NitroSDK/src/FX_mtx44.c new file mode 100644 index 00000000..c72f6158 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_mtx44.c @@ -0,0 +1,166 @@ +#include "global.h" +#include "main.h" +#include "fx.h" + +void MI_Copy48B(void *src, void *dst); + + +ARM_FUNC void MTX_TransApply44(struct Mtx44 *mtx, struct Mtx44 *dst, fx32 x, fx32 y, fx32 z){ + if(mtx != dst) + MI_Copy48B(mtx, dst); + dst->_[12] = mtx->_[12] + (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[8] ) >> FX32_INT_SHIFT); + dst->_[13] = mtx->_[13] + (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[9] ) >> FX32_INT_SHIFT); + dst->_[14] = mtx->_[14] + (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[6] + (fx64)z * mtx->_[10]) >> FX32_INT_SHIFT); + dst->_[15] = mtx->_[15] + (fx32)(((fx64)x * mtx->_[3] + (fx64)y * mtx->_[7] + (fx64)z * mtx->_[11]) >> FX32_INT_SHIFT); +} + +ARM_FUNC void MTX_Concat44(struct Mtx44 *a, struct Mtx44 *b, struct Mtx44 *c){ + struct Mtx44 temp; + struct Mtx44 *dst; + fx32 a0, a1, a2, a3; + fx32 b0, b1, b2, b3; + + if (c == b) + dst = &temp; + else + dst = c; + + a0 = a->_[0]; + a1 = a->_[1]; + a2 = a->_[2]; + a3 = a->_[3]; + dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[8] + (fx64)a3 * b->_[12]) >> FX32_INT_SHIFT); + dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); + dst->_[3] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[6]; + b2 = b->_[10]; + b3 = b->_[14]; + dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + a0 = a->_[4]; + a1 = a->_[5]; + a2 = a->_[6]; + a3 = a->_[7]; + dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + dst->_[5] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); + dst->_[7] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); + b0 = b->_[0]; + b1 = b->_[4]; + b2 = b->_[8]; + b3 = b->_[12]; + dst->_[4] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + a0 = a->_[8]; + a1 = a->_[9]; + a2 = a->_[10]; + a3 = a->_[11]; + dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + dst->_[9] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); + dst->_[11] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); + b0 = b->_[2]; + b1 = b->_[6]; + b2 = b->_[10]; + b3 = b->_[14]; + dst->_[10] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + a0 = a->_[12]; + a1 = a->_[13]; + a2 = a->_[14]; + a3 = a->_[15]; + dst->_[14] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); + dst->_[13] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); + dst->_[12] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[8] + (fx64)a3 * b->_[12]) >> FX32_INT_SHIFT); + dst->_[15] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); + if (dst == &temp) + *c = temp; +} + +ARM_FUNC asm void MTX_Identity44_(struct Mtx44 *dst){ + mov r2, #0x1000 + mov r3, #0x0 + stmia r0!, {r2-r3} + mov r1, #0x0 + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + stmia r0!, {r1-r3} + stmia r0!, {r1,r3} + stmia r0!, {r1-r2} + bx lr +} + +ARM_FUNC asm void MTX_Copy44To43_(struct Mtx44 *src, struct Mtx43 *dst){ + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + add r0, r0, #0x4 + stmia r1!, {r2-r3,r12} + bx lr +} + +THUMB_FUNC asm void MTX_RotX44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ + str r2, [r0, #0x14] + str r2, [r0, #0x28] + str r1, [r0, #0x18] + neg r1, r1 + str r1, [r0, #0x24] + mov r1, #0x1 + mov r2, #0x0 + lsl r1, r1, #0xc + mov r3, #0x0 + stmia r0!, {r1-r3} + stmia r0!, {r2-r3} + add r0, #0x8 + stmia r0!, {r2-r3} + add r0, #0x8 + stmia r0!, {r2-r3} + stmia r0!, {r2-r3} + str r1, [r0, #0x0] + bx lr +} + +THUMB_FUNC asm void MTX_RotY44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ + str r2, [r0, #0x0] + str r2, [r0, #0x28] + str r1, [r0, #0x20] + neg r1, r1 + str r1, [r0, #0x8] + mov r3, #0x1 + mov r1, #0x0 + lsl r3, r3, #0xc + mov r2, #0x0 + str r2, [r0, #0x4] + add r0, #0xc + stmia r0!, {r1-r3} + stmia r0!, {r1-r2} + str r2, [r0, #0x4] + add r0, #0xc + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + bx lr +} + +THUMB_FUNC asm void MTX_RotZ44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ + str r2, [r0, #0x0] + str r2, [r0, #0x14] + str r1, [r0, #0x4] + neg r1, r1 + str r1, [r0, #0x10] + mov r3, #0x1 + mov r1, #0x0 + lsl r3, r3, #0xc + mov r2, #0x0 + add r0, #0x8 + stmia r0!, {r1-r2} + add r0, #0x8 + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + stmia r0!, {r1-r2} + stmia r0!, {r1-r3} + bx lr +} diff --git a/arm9/lib/NitroSDK/src/FX_sincos.c b/arm9/lib/NitroSDK/src/FX_sincos.c new file mode 100644 index 00000000..89c8fc78 --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_sincos.c @@ -0,0 +1,4105 @@ +#include "global.h" +#include "fx.h" + +/* + * [2 * idx + 0] <- sin(idx * 2pi / 4096) + * [2 * idx + 1] <- cos(idx * 2pi / 4096) + */ +const fx16 FX_SinCosTable_[4096 * 2] = { + FX16_CONST(0.0), FX16_CONST(1.0), + FX16_CONST(0.0015339801862847655), FX16_CONST(0.9999988234517019), + FX16_CONST(0.003067956762965976), FX16_CONST(0.9999952938095762), + FX16_CONST(0.0046019261204485705), FX16_CONST(0.9999894110819284), + FX16_CONST(0.006135884649154475), FX16_CONST(0.9999811752826011), + FX16_CONST(0.007669828739531097), FX16_CONST(0.9999705864309741), + FX16_CONST(0.00920375478205982), FX16_CONST(0.9999576445519639), + FX16_CONST(0.01073765916726449), FX16_CONST(0.9999423496760239), + FX16_CONST(0.012271538285719925), FX16_CONST(0.9999247018391445), + FX16_CONST(0.01380538852806039), FX16_CONST(0.9999047010828529), + FX16_CONST(0.0153392062849881), FX16_CONST(0.9998823474542126), + FX16_CONST(0.01687298794728171), FX16_CONST(0.9998576410058239), + FX16_CONST(0.01840672990580482), FX16_CONST(0.9998305817958234), + FX16_CONST(0.01994042855151444), FX16_CONST(0.9998011698878843), + FX16_CONST(0.021474080275469508), FX16_CONST(0.9997694053512153), + FX16_CONST(0.02300768146883937), FX16_CONST(0.9997352882605617), + FX16_CONST(0.024541228522912288), FX16_CONST(0.9996988186962042), + FX16_CONST(0.0260747178291039), FX16_CONST(0.9996599967439592), + FX16_CONST(0.02760814577896574), FX16_CONST(0.9996188224951786), + FX16_CONST(0.029141508764193722), FX16_CONST(0.9995752960467492), + FX16_CONST(0.030674803176636626), FX16_CONST(0.9995294175010931), + FX16_CONST(0.032208025408304586), FX16_CONST(0.999481186966167), + FX16_CONST(0.03374117185137758), FX16_CONST(0.9994306045554617), + FX16_CONST(0.03527423889821395), FX16_CONST(0.9993776703880028), + FX16_CONST(0.03680722294135883), FX16_CONST(0.9993223845883495), + FX16_CONST(0.038340120373552694), FX16_CONST(0.9992647472865944), + FX16_CONST(0.03987292758773981), FX16_CONST(0.9992047586183639), + FX16_CONST(0.04140564097707674), FX16_CONST(0.9991424187248169), + FX16_CONST(0.04293825693494082), FX16_CONST(0.9990777277526454), + FX16_CONST(0.04447077185493867), FX16_CONST(0.9990106858540734), + FX16_CONST(0.04600318213091462), FX16_CONST(0.9989412931868569), + FX16_CONST(0.0475354841569593), FX16_CONST(0.9988695499142836), + FX16_CONST(0.049067674327418015), FX16_CONST(0.9987954562051724), + FX16_CONST(0.05059974903689928), FX16_CONST(0.9987190122338729), + FX16_CONST(0.052131704680283324), FX16_CONST(0.9986402181802653), + FX16_CONST(0.05366353765273052), FX16_CONST(0.9985590742297593), + FX16_CONST(0.055195244349689934), FX16_CONST(0.9984755805732948), + FX16_CONST(0.05672682116690775), FX16_CONST(0.9983897374073402), + FX16_CONST(0.05825826450043575), FX16_CONST(0.9983015449338929), + FX16_CONST(0.05978957074663987), FX16_CONST(0.9982110033604782), + FX16_CONST(0.06132073630220858), FX16_CONST(0.9981181129001492), + FX16_CONST(0.0628517575641614), FX16_CONST(0.9980228737714862), + FX16_CONST(0.06438263092985747), FX16_CONST(0.997925286198596), + FX16_CONST(0.0659133527970038), FX16_CONST(0.9978253504111116), + FX16_CONST(0.06744391956366405), FX16_CONST(0.9977230666441916), + FX16_CONST(0.06897432762826675), FX16_CONST(0.9976184351385196), + FX16_CONST(0.07050457338961386), FX16_CONST(0.9975114561403035), + FX16_CONST(0.07203465324688933), FX16_CONST(0.9974021299012753), + FX16_CONST(0.07356456359966743), FX16_CONST(0.9972904566786902), + FX16_CONST(0.0750943008479213), FX16_CONST(0.9971764367353262), + FX16_CONST(0.07662386139203149), FX16_CONST(0.997060070339483), + FX16_CONST(0.07815324163279423), FX16_CONST(0.9969413577649822), + FX16_CONST(0.07968243797143013), FX16_CONST(0.9968202992911657), + FX16_CONST(0.08121144680959244), FX16_CONST(0.9966968952028961), + FX16_CONST(0.08274026454937569), FX16_CONST(0.9965711457905548), + FX16_CONST(0.08426888759332407), FX16_CONST(0.9964430513500426), + FX16_CONST(0.0857973123444399), FX16_CONST(0.996312612182778), + FX16_CONST(0.08732553520619206), FX16_CONST(0.996179828595697), + FX16_CONST(0.0888535525825246), FX16_CONST(0.996044700901252), + FX16_CONST(0.09038136087786498), FX16_CONST(0.9959072294174117), + FX16_CONST(0.09190895649713272), FX16_CONST(0.9957674144676598), + FX16_CONST(0.09343633584574779), FX16_CONST(0.9956252563809943), + FX16_CONST(0.09496349532963899), FX16_CONST(0.9954807554919269), + FX16_CONST(0.09649043135525259), FX16_CONST(0.9953339121404823), + FX16_CONST(0.0980171403295606), FX16_CONST(0.9951847266721969), + FX16_CONST(0.09954361866006932), FX16_CONST(0.9950331994381186), + FX16_CONST(0.10106986275482782), FX16_CONST(0.9948793307948056), + FX16_CONST(0.10259586902243628), FX16_CONST(0.9947231211043257), + FX16_CONST(0.10412163387205459), FX16_CONST(0.9945645707342554), + FX16_CONST(0.10564715371341062), FX16_CONST(0.9944036800576791), + FX16_CONST(0.10717242495680884), FX16_CONST(0.9942404494531879), + FX16_CONST(0.10869744401313872), FX16_CONST(0.9940748793048794), + FX16_CONST(0.11022220729388306), FX16_CONST(0.9939069700023561), + FX16_CONST(0.11174671121112659), FX16_CONST(0.9937367219407246), + FX16_CONST(0.11327095217756435), FX16_CONST(0.9935641355205953), + FX16_CONST(0.11479492660651008), FX16_CONST(0.9933892111480807), + FX16_CONST(0.11631863091190475), FX16_CONST(0.9932119492347945), + FX16_CONST(0.11784206150832498), FX16_CONST(0.9930323501978514), + FX16_CONST(0.11936521481099135), FX16_CONST(0.9928504144598651), + FX16_CONST(0.12088808723577708), FX16_CONST(0.992666142448948), + FX16_CONST(0.1224106751992162), FX16_CONST(0.99247953459871), + FX16_CONST(0.12393297511851216), FX16_CONST(0.9922905913482574), + FX16_CONST(0.12545498341154623), FX16_CONST(0.9920993131421918), + FX16_CONST(0.12697669649688587), FX16_CONST(0.9919057004306093), + FX16_CONST(0.12849811079379317), FX16_CONST(0.9917097536690995), + FX16_CONST(0.13001922272223335), FX16_CONST(0.9915114733187439), + FX16_CONST(0.13154002870288312), FX16_CONST(0.9913108598461154), + FX16_CONST(0.13306052515713906), FX16_CONST(0.9911079137232769), + FX16_CONST(0.13458070850712617), FX16_CONST(0.99090263542778), + FX16_CONST(0.1361005751757062), FX16_CONST(0.9906950254426646), + FX16_CONST(0.13762012158648604), FX16_CONST(0.9904850842564571), + FX16_CONST(0.1391393441638262), FX16_CONST(0.9902728123631691), + FX16_CONST(0.1406582393328492), FX16_CONST(0.9900582102622971), + FX16_CONST(0.14217680351944803), FX16_CONST(0.9898412784588205), + FX16_CONST(0.14369503315029447), FX16_CONST(0.9896220174632009), + FX16_CONST(0.14521292465284746), FX16_CONST(0.9894004277913804), + FX16_CONST(0.14673047445536175), FX16_CONST(0.989176509964781), + FX16_CONST(0.14824767898689603), FX16_CONST(0.988950264510303), + FX16_CONST(0.1497645346773215), FX16_CONST(0.9887216919603238), + FX16_CONST(0.15128103795733022), FX16_CONST(0.9884907928526966), + FX16_CONST(0.15279718525844344), FX16_CONST(0.9882575677307495), + FX16_CONST(0.1543129730130201), FX16_CONST(0.9880220171432835), + FX16_CONST(0.15582839765426523), FX16_CONST(0.9877841416445722), + FX16_CONST(0.15734345561623825), FX16_CONST(0.9875439417943592), + FX16_CONST(0.15885814333386145), FX16_CONST(0.9873014181578584), + FX16_CONST(0.16037245724292828), FX16_CONST(0.987056571305751), + FX16_CONST(0.16188639378011183), FX16_CONST(0.9868094018141855), + FX16_CONST(0.16339994938297323), FX16_CONST(0.9865599102647754), + FX16_CONST(0.1649131204899699), FX16_CONST(0.9863080972445987), + FX16_CONST(0.1664259035404641), FX16_CONST(0.9860539633461954), + FX16_CONST(0.16793829497473117), FX16_CONST(0.9857975091675675), + FX16_CONST(0.16945029123396796), FX16_CONST(0.9855387353121761), + FX16_CONST(0.17096188876030122), FX16_CONST(0.9852776423889412), + FX16_CONST(0.17247308399679595), FX16_CONST(0.9850142310122398), + FX16_CONST(0.17398387338746382), FX16_CONST(0.9847485018019042), + FX16_CONST(0.17549425337727143), FX16_CONST(0.9844804553832209), + FX16_CONST(0.17700422041214875), FX16_CONST(0.984210092386929), + FX16_CONST(0.1785137709389975), FX16_CONST(0.9839374134492189), + FX16_CONST(0.18002290140569951), FX16_CONST(0.9836624192117303), + FX16_CONST(0.18153160826112497), FX16_CONST(0.9833851103215512), + FX16_CONST(0.18303988795514095), FX16_CONST(0.9831054874312163), + FX16_CONST(0.18454773693861962), FX16_CONST(0.9828235511987052), + FX16_CONST(0.18605515166344663), FX16_CONST(0.9825393022874412), + FX16_CONST(0.1875621285825296), FX16_CONST(0.9822527413662894), + FX16_CONST(0.1890686641498062), FX16_CONST(0.9819638691095552), + FX16_CONST(0.19057475482025274), FX16_CONST(0.9816726861969831), + FX16_CONST(0.19208039704989244), FX16_CONST(0.9813791933137546), + FX16_CONST(0.1935855872958036), FX16_CONST(0.9810833911504867), + FX16_CONST(0.19509032201612825), FX16_CONST(0.9807852804032304), + FX16_CONST(0.19659459767008022), FX16_CONST(0.9804848617734694), + FX16_CONST(0.19809841071795356), FX16_CONST(0.9801821359681174), + FX16_CONST(0.19960175762113097), FX16_CONST(0.9798771036995176), + FX16_CONST(0.2011046348420919), FX16_CONST(0.9795697656854405), + FX16_CONST(0.20260703884442113), FX16_CONST(0.979260122649082), + FX16_CONST(0.20410896609281687), FX16_CONST(0.9789481753190622), + FX16_CONST(0.20561041305309924), FX16_CONST(0.9786339244294232), + FX16_CONST(0.20711137619221856), FX16_CONST(0.9783173707196277), + FX16_CONST(0.20861185197826349), FX16_CONST(0.9779985149345571), + FX16_CONST(0.2101118368804696), FX16_CONST(0.9776773578245099), + FX16_CONST(0.21161132736922755), FX16_CONST(0.9773539001452), + FX16_CONST(0.21311031991609136), FX16_CONST(0.9770281426577544), + FX16_CONST(0.21460881099378676), FX16_CONST(0.9767000861287118), + FX16_CONST(0.21610679707621952), FX16_CONST(0.9763697313300211), + FX16_CONST(0.21760427463848364), FX16_CONST(0.976037079039039), + FX16_CONST(0.2191012401568698), FX16_CONST(0.9757021300385286), + FX16_CONST(0.2205976901088735), FX16_CONST(0.975364885116657), + FX16_CONST(0.2220936209732035), FX16_CONST(0.9750253450669941), + FX16_CONST(0.22358902922979), FX16_CONST(0.9746835106885107), + FX16_CONST(0.22508391135979283), FX16_CONST(0.9743393827855759), + FX16_CONST(0.22657826384561), FX16_CONST(0.9739929621679558), + FX16_CONST(0.22807208317088573), FX16_CONST(0.973644249650812), + FX16_CONST(0.22956536582051887), FX16_CONST(0.9732932460546982), + FX16_CONST(0.2310581082806711), FX16_CONST(0.9729399522055602), + FX16_CONST(0.23255030703877524), FX16_CONST(0.9725843689347322), + FX16_CONST(0.23404195858354343), FX16_CONST(0.9722264970789363), + FX16_CONST(0.2355330594049755), FX16_CONST(0.9718663374802794), + FX16_CONST(0.2370236059943672), FX16_CONST(0.9715038909862518), + FX16_CONST(0.23851359484431842), FX16_CONST(0.9711391584497251), + FX16_CONST(0.2400030224487415), FX16_CONST(0.9707721407289504), + FX16_CONST(0.24149188530286933), FX16_CONST(0.9704028386875555), + FX16_CONST(0.24298017990326387), FX16_CONST(0.970031253194544), + FX16_CONST(0.24446790274782415), FX16_CONST(0.9696573851242924), + FX16_CONST(0.2459550503357946), FX16_CONST(0.9692812353565485), + FX16_CONST(0.24744161916777327), FX16_CONST(0.9689028047764289), + FX16_CONST(0.24892760574572015), FX16_CONST(0.9685220942744174), + FX16_CONST(0.2504130065729652), FX16_CONST(0.9681391047463624), + FX16_CONST(0.25189781815421697), FX16_CONST(0.9677538370934755), + FX16_CONST(0.25338203699557016), FX16_CONST(0.9673662922223285), + FX16_CONST(0.25486565960451457), FX16_CONST(0.9669764710448521), + FX16_CONST(0.2563486824899429), FX16_CONST(0.9665843744783331), + FX16_CONST(0.257831102162159), FX16_CONST(0.9661900034454125), + FX16_CONST(0.25931291513288623), FX16_CONST(0.9657933588740837), + FX16_CONST(0.2607941179152755), FX16_CONST(0.9653944416976894), + FX16_CONST(0.2622747070239136), FX16_CONST(0.9649932528549203), + FX16_CONST(0.26375467897483135), FX16_CONST(0.9645897932898128), + FX16_CONST(0.2652340302855118), FX16_CONST(0.9641840639517458), + FX16_CONST(0.26671275747489837), FX16_CONST(0.9637760657954398), + FX16_CONST(0.2681908570634032), FX16_CONST(0.963365799780954), + FX16_CONST(0.2696683255729151), FX16_CONST(0.9629532668736839), + FX16_CONST(0.271145159526808), FX16_CONST(0.9625384680443592), + FX16_CONST(0.272621355449949), FX16_CONST(0.9621214042690416), + FX16_CONST(0.2740969098687064), FX16_CONST(0.9617020765291225), + FX16_CONST(0.27557181931095814), FX16_CONST(0.9612804858113206), + FX16_CONST(0.2770460803060999), FX16_CONST(0.9608566331076797), + FX16_CONST(0.27851968938505306), FX16_CONST(0.9604305194155658), + FX16_CONST(0.2799926430802732), FX16_CONST(0.960002145737666), + FX16_CONST(0.28146493792575794), FX16_CONST(0.9595715130819845), + FX16_CONST(0.2829365704570554), FX16_CONST(0.9591386224618419), + FX16_CONST(0.2844075372112719), FX16_CONST(0.9587034748958716), + FX16_CONST(0.2858778347270806), FX16_CONST(0.9582660714080177), + FX16_CONST(0.2873474595447295), FX16_CONST(0.9578264130275329), + FX16_CONST(0.2888164082060495), FX16_CONST(0.9573845007889759), + FX16_CONST(0.29028467725446233), FX16_CONST(0.9569403357322088), + FX16_CONST(0.29175226323498926), FX16_CONST(0.9564939189023951), + FX16_CONST(0.29321916269425863), FX16_CONST(0.9560452513499964), + FX16_CONST(0.2946853721805143), FX16_CONST(0.9555943341307711), + FX16_CONST(0.2961508882436238), FX16_CONST(0.9551411683057708), + FX16_CONST(0.2976157074350862), FX16_CONST(0.9546857549413383), + FX16_CONST(0.2990798263080405), FX16_CONST(0.9542280951091057), + FX16_CONST(0.30054324141727345), FX16_CONST(0.9537681898859903), + FX16_CONST(0.3020059493192281), FX16_CONST(0.9533060403541939), + FX16_CONST(0.3034679465720113), FX16_CONST(0.9528416476011987), + FX16_CONST(0.3049292297354024), FX16_CONST(0.9523750127197659), + FX16_CONST(0.3063897953708609), FX16_CONST(0.9519061368079323), + FX16_CONST(0.30784964004153487), FX16_CONST(0.9514350209690083), + FX16_CONST(0.3093087603122687), FX16_CONST(0.9509616663115751), + FX16_CONST(0.3107671527496115), FX16_CONST(0.9504860739494817), + FX16_CONST(0.3122248139218249), FX16_CONST(0.950008245001843), + FX16_CONST(0.3136817403988915), FX16_CONST(0.9495281805930367), + FX16_CONST(0.31513792875252244), FX16_CONST(0.9490458818527006), + FX16_CONST(0.31659337555616585), FX16_CONST(0.9485613499157303), + FX16_CONST(0.31804807738501495), FX16_CONST(0.9480745859222762), + FX16_CONST(0.3195020308160157), FX16_CONST(0.9475855910177411), + FX16_CONST(0.3209552324278752), FX16_CONST(0.9470943663527772), + FX16_CONST(0.32240767880106985), FX16_CONST(0.9466009130832835), + FX16_CONST(0.32385936651785285), FX16_CONST(0.9461052323704034), + FX16_CONST(0.3253102921622629), FX16_CONST(0.9456073253805213), + FX16_CONST(0.32676045232013173), FX16_CONST(0.9451071932852606), + FX16_CONST(0.3282098435790925), FX16_CONST(0.9446048372614803), + FX16_CONST(0.3296584625285875), FX16_CONST(0.9441002584912727), + FX16_CONST(0.33110630575987643), FX16_CONST(0.9435934581619604), + FX16_CONST(0.3325533698660442), FX16_CONST(0.9430844374660935), + FX16_CONST(0.3339996514420094), FX16_CONST(0.9425731976014469), + FX16_CONST(0.3354451470845316), FX16_CONST(0.9420597397710173), + FX16_CONST(0.33688985339222005), FX16_CONST(0.9415440651830208), + FX16_CONST(0.3383337669655411), FX16_CONST(0.9410261750508893), + FX16_CONST(0.33977688440682685), FX16_CONST(0.9405060705932683), + FX16_CONST(0.34121920232028236), FX16_CONST(0.939983753034014), + FX16_CONST(0.3426607173119944), FX16_CONST(0.9394592236021899), + FX16_CONST(0.3441014259899388), FX16_CONST(0.9389324835320646), + FX16_CONST(0.3455413249639891), FX16_CONST(0.9384035340631081), + FX16_CONST(0.3469804108459237), FX16_CONST(0.9378723764399899), + FX16_CONST(0.34841868024943456), FX16_CONST(0.937339011912575), + FX16_CONST(0.3498561297901349), FX16_CONST(0.9368034417359216), + FX16_CONST(0.3512927560855671), FX16_CONST(0.9362656671702783), + FX16_CONST(0.3527285557552107), FX16_CONST(0.9357256894810804), + FX16_CONST(0.35416352542049034), FX16_CONST(0.9351835099389476), + FX16_CONST(0.35559766170478385), FX16_CONST(0.9346391298196808), + FX16_CONST(0.35703096123343), FX16_CONST(0.9340925504042589), + FX16_CONST(0.35846342063373654), FX16_CONST(0.9335437729788362), + FX16_CONST(0.3598950365349881), FX16_CONST(0.932992798834739), + FX16_CONST(0.3613258055684543), FX16_CONST(0.9324396292684624), + FX16_CONST(0.3627557243673972), FX16_CONST(0.9318842655816681), + FX16_CONST(0.3641847895670799), FX16_CONST(0.9313267090811804), + FX16_CONST(0.36561299780477385), FX16_CONST(0.9307669610789837), + FX16_CONST(0.3670403457197672), FX16_CONST(0.9302050228922191), + FX16_CONST(0.3684668299533723), FX16_CONST(0.9296408958431812), + FX16_CONST(0.3698924471489341), FX16_CONST(0.9290745812593159), + FX16_CONST(0.37131719395183754), FX16_CONST(0.9285060804732156), + FX16_CONST(0.37274106700951576), FX16_CONST(0.9279353948226179), + FX16_CONST(0.37416406297145793), FX16_CONST(0.9273625256504011), + FX16_CONST(0.3755861784892172), FX16_CONST(0.9267874743045817), + FX16_CONST(0.37700741021641826), FX16_CONST(0.9262102421383114), + FX16_CONST(0.37842775480876556), FX16_CONST(0.9256308305098727), + FX16_CONST(0.37984720892405116), FX16_CONST(0.9250492407826776), + FX16_CONST(0.3812657692221624), FX16_CONST(0.9244654743252626), + FX16_CONST(0.3826834323650898), FX16_CONST(0.9238795325112867), + FX16_CONST(0.38410019501693504), FX16_CONST(0.9232914167195276), + FX16_CONST(0.38551605384391885), FX16_CONST(0.9227011283338786), + FX16_CONST(0.3869310055143886), FX16_CONST(0.9221086687433452), + FX16_CONST(0.38834504669882625), FX16_CONST(0.9215140393420419), + FX16_CONST(0.3897581740698564), FX16_CONST(0.9209172415291894), + FX16_CONST(0.39117038430225387), FX16_CONST(0.9203182767091106), + FX16_CONST(0.39258167407295147), FX16_CONST(0.9197171462912274), + FX16_CONST(0.3939920400610481), FX16_CONST(0.9191138516900578), + FX16_CONST(0.39540147894781635), FX16_CONST(0.9185083943252123), + FX16_CONST(0.3968099874167103), FX16_CONST(0.9179007756213905), + FX16_CONST(0.39821756215337356), FX16_CONST(0.9172909970083779), + FX16_CONST(0.3996241998456468), FX16_CONST(0.9166790599210427), + FX16_CONST(0.4010298971835756), FX16_CONST(0.9160649657993317), + FX16_CONST(0.40243465085941843), FX16_CONST(0.9154487160882678), + FX16_CONST(0.4038384575676541), FX16_CONST(0.9148303122379462), + FX16_CONST(0.40524131400498986), FX16_CONST(0.9142097557035307), + FX16_CONST(0.40664321687036903), FX16_CONST(0.9135870479452508), + FX16_CONST(0.4080441628649787), FX16_CONST(0.9129621904283982), + FX16_CONST(0.4094441486922576), FX16_CONST(0.9123351846233227), + FX16_CONST(0.4108431710579039), FX16_CONST(0.9117060320054299), + FX16_CONST(0.4122412266698829), FX16_CONST(0.9110747340551764), + FX16_CONST(0.4136383122384345), FX16_CONST(0.9104412922580672), + FX16_CONST(0.41503442447608163), FX16_CONST(0.9098057081046522), + FX16_CONST(0.41642956009763715), FX16_CONST(0.9091679830905224), + FX16_CONST(0.41782371582021227), FX16_CONST(0.9085281187163061), + FX16_CONST(0.4192168883632239), FX16_CONST(0.9078861164876663), + FX16_CONST(0.4206090744484025), FX16_CONST(0.9072419779152958), + FX16_CONST(0.4220002707997997), FX16_CONST(0.9065957045149153), + FX16_CONST(0.42339047414379605), FX16_CONST(0.9059472978072685), + FX16_CONST(0.4247796812091088), FX16_CONST(0.9052967593181188), + FX16_CONST(0.4261678887267996), FX16_CONST(0.9046440905782462), + FX16_CONST(0.4275550934302821), FX16_CONST(0.9039892931234433), + FX16_CONST(0.4289412920553295), FX16_CONST(0.9033323684945118), + FX16_CONST(0.4303264813400826), FX16_CONST(0.9026733182372588), + FX16_CONST(0.43171065802505726), FX16_CONST(0.9020121439024932), + FX16_CONST(0.43309381885315196), FX16_CONST(0.901348847046022), + FX16_CONST(0.43447596056965565), FX16_CONST(0.9006834292286469), + FX16_CONST(0.4358570799222555), FX16_CONST(0.9000158920161602), + FX16_CONST(0.4372371736610441), FX16_CONST(0.8993462369793416), + FX16_CONST(0.43861623853852766), FX16_CONST(0.8986744656939538), + FX16_CONST(0.43999427130963326), FX16_CONST(0.8980005797407399), + FX16_CONST(0.44137126873171667), FX16_CONST(0.8973245807054183), + FX16_CONST(0.44274722756457), FX16_CONST(0.8966464701786802), + FX16_CONST(0.4441221445704292), FX16_CONST(0.8959662497561852), + FX16_CONST(0.44549601651398174), FX16_CONST(0.8952839210385576), + FX16_CONST(0.44686884016237416), FX16_CONST(0.8945994856313827), + FX16_CONST(0.4482406122852199), FX16_CONST(0.8939129451452033), + FX16_CONST(0.44961132965460654), FX16_CONST(0.8932243011955153), + FX16_CONST(0.45098098904510386), FX16_CONST(0.8925335554027646), + FX16_CONST(0.4523495872337709), FX16_CONST(0.8918407093923427), + FX16_CONST(0.45371712100016387), FX16_CONST(0.8911457647945832), + FX16_CONST(0.45508358712634384), FX16_CONST(0.8904487232447579), + FX16_CONST(0.4564489823968839), FX16_CONST(0.8897495863830728), + FX16_CONST(0.4578133035988772), FX16_CONST(0.8890483558546646), + FX16_CONST(0.4591765475219441), FX16_CONST(0.8883450333095964), + FX16_CONST(0.46053871095824), FX16_CONST(0.8876396204028539), + FX16_CONST(0.46189979070246273), FX16_CONST(0.8869321187943422), + FX16_CONST(0.46325978355186015), FX16_CONST(0.8862225301488806), + FX16_CONST(0.4646186863062378), FX16_CONST(0.8855108561362), + FX16_CONST(0.4659764957679662), FX16_CONST(0.8847970984309378), + FX16_CONST(0.4673332087419884), FX16_CONST(0.884081258712635), + FX16_CONST(0.4686888220358279), FX16_CONST(0.8833633386657316), + FX16_CONST(0.4700433324595956), FX16_CONST(0.8826433399795628), + FX16_CONST(0.47139673682599764), FX16_CONST(0.881921264348355), + FX16_CONST(0.4727490319503428), FX16_CONST(0.8811971134712221), + FX16_CONST(0.47410021465054997), FX16_CONST(0.8804708890521608), + FX16_CONST(0.47545028174715587), FX16_CONST(0.8797425928000474), + FX16_CONST(0.4767992300633221), FX16_CONST(0.8790122264286335), + FX16_CONST(0.478147056424843), FX16_CONST(0.8782797916565416), + FX16_CONST(0.47949375766015295), FX16_CONST(0.8775452902072614), + FX16_CONST(0.48083933060033396), FX16_CONST(0.8768087238091457), + FX16_CONST(0.4821837720791227), FX16_CONST(0.8760700941954066), + FX16_CONST(0.4835270789329187), FX16_CONST(0.8753294031041109), + FX16_CONST(0.48486924800079106), FX16_CONST(0.8745866522781761), + FX16_CONST(0.4862102761244864), FX16_CONST(0.8738418434653669), + FX16_CONST(0.487550160148436), FX16_CONST(0.8730949784182901), + FX16_CONST(0.48888889691976317), FX16_CONST(0.8723460588943915), + FX16_CONST(0.49022648328829116), FX16_CONST(0.871595086655951), + FX16_CONST(0.4915629161065499), FX16_CONST(0.870842063470079), + FX16_CONST(0.49289819222978404), FX16_CONST(0.8700869911087115), + FX16_CONST(0.4942323085159597), FX16_CONST(0.8693298713486068), + FX16_CONST(0.49556526182577254), FX16_CONST(0.8685707059713409), + FX16_CONST(0.49689704902265447), FX16_CONST(0.8678094967633033), + FX16_CONST(0.4982276669727818), FX16_CONST(0.8670462455156926), + FX16_CONST(0.49955711254508184), FX16_CONST(0.866280954024513), + FX16_CONST(0.5008853826112407), FX16_CONST(0.8655136240905691), + FX16_CONST(0.5022124740457108), FX16_CONST(0.8647442575194624), + FX16_CONST(0.5035383837257176), FX16_CONST(0.8639728561215867), + FX16_CONST(0.5048631085312676), FX16_CONST(0.8631994217121242), + FX16_CONST(0.5061866453451552), FX16_CONST(0.8624239561110405), + FX16_CONST(0.5075089910529709), FX16_CONST(0.8616464611430813), + FX16_CONST(0.508830142543107), FX16_CONST(0.8608669386377673), + FX16_CONST(0.5101500967067668), FX16_CONST(0.8600853904293901), + FX16_CONST(0.5114688504379703), FX16_CONST(0.8593018183570085), + FX16_CONST(0.512786400633563), FX16_CONST(0.8585162242644427), + FX16_CONST(0.5141027441932217), FX16_CONST(0.8577286100002721), + FX16_CONST(0.5154178780194629), FX16_CONST(0.8569389774178288), + FX16_CONST(0.5167317990176499), FX16_CONST(0.8561473283751945), + FX16_CONST(0.5180445040959993), FX16_CONST(0.855353664735196), + FX16_CONST(0.5193559901655896), FX16_CONST(0.8545579883654005), + FX16_CONST(0.5206662541403672), FX16_CONST(0.8537603011381114), + FX16_CONST(0.5219752929371544), FX16_CONST(0.8529606049303636), + FX16_CONST(0.5232831034756564), FX16_CONST(0.8521589016239198), + FX16_CONST(0.524589682678469), FX16_CONST(0.8513551931052652), + FX16_CONST(0.5258950274710846), FX16_CONST(0.8505494812656035), + FX16_CONST(0.5271991347819013), FX16_CONST(0.8497417680008525), + FX16_CONST(0.5285020015422285), FX16_CONST(0.8489320552116396), + FX16_CONST(0.5298036246862946), FX16_CONST(0.8481203448032972), + FX16_CONST(0.531104001151255), FX16_CONST(0.8473066386858583), + FX16_CONST(0.5324031278771979), FX16_CONST(0.8464909387740521), + FX16_CONST(0.533701001807153), FX16_CONST(0.8456732469872991), + FX16_CONST(0.5349976198870972), FX16_CONST(0.8448535652497071), + FX16_CONST(0.5362929790659632), FX16_CONST(0.8440318954900664), + FX16_CONST(0.5375870762956454), FX16_CONST(0.8432082396418454), + FX16_CONST(0.5388799085310084), FX16_CONST(0.8423825996431858), + FX16_CONST(0.5401714727298929), FX16_CONST(0.8415549774368984), + FX16_CONST(0.5414617658531234), FX16_CONST(0.8407253749704581), + FX16_CONST(0.5427507848645159), FX16_CONST(0.8398937941959995), + FX16_CONST(0.5440385267308838), FX16_CONST(0.8390602370703127), + FX16_CONST(0.5453249884220465), FX16_CONST(0.8382247055548381), + FX16_CONST(0.5466101669108349), FX16_CONST(0.8373872016156619), + FX16_CONST(0.5478940591731002), FX16_CONST(0.836547727223512), + FX16_CONST(0.5491766621877197), FX16_CONST(0.8357062843537526), + FX16_CONST(0.5504579729366048), FX16_CONST(0.83486287498638), + FX16_CONST(0.5517379884047073), FX16_CONST(0.8340175011060181), + FX16_CONST(0.5530167055800275), FX16_CONST(0.8331701647019132), + FX16_CONST(0.55429412145362), FX16_CONST(0.8323208677679297), + FX16_CONST(0.5555702330196022), FX16_CONST(0.8314696123025452), + FX16_CONST(0.5568450372751601), FX16_CONST(0.8306164003088463), + FX16_CONST(0.5581185312205561), FX16_CONST(0.829761233794523), + FX16_CONST(0.5593907118591361), FX16_CONST(0.8289041147718649), + FX16_CONST(0.560661576197336), FX16_CONST(0.8280450452577558), + FX16_CONST(0.5619311212446894), FX16_CONST(0.8271840272736691), + FX16_CONST(0.5631993440138341), FX16_CONST(0.8263210628456635), + FX16_CONST(0.5644662415205194), FX16_CONST(0.8254561540043776), + FX16_CONST(0.5657318107836131), FX16_CONST(0.8245893027850253), + FX16_CONST(0.5669960488251087), FX16_CONST(0.8237205112273914), + FX16_CONST(0.5682589526701315), FX16_CONST(0.8228497813758264), + FX16_CONST(0.5695205193469471), FX16_CONST(0.8219771152792416), + FX16_CONST(0.5707807458869673), FX16_CONST(0.8211025149911046), + FX16_CONST(0.572039629324757), FX16_CONST(0.8202259825694347), + FX16_CONST(0.5732971666980422), FX16_CONST(0.819347520076797), + FX16_CONST(0.5745533550477158), FX16_CONST(0.8184671295802987), + FX16_CONST(0.5758081914178453), FX16_CONST(0.8175848131515837), + FX16_CONST(0.5770616728556794), FX16_CONST(0.8167005728668278), + FX16_CONST(0.5783137964116556), FX16_CONST(0.8158144108067338), + FX16_CONST(0.5795645591394056), FX16_CONST(0.8149263290565266), + FX16_CONST(0.5808139580957645), FX16_CONST(0.8140363297059484), + FX16_CONST(0.5820619903407754), FX16_CONST(0.8131444148492536), + FX16_CONST(0.5833086529376983), FX16_CONST(0.812250586585204), + FX16_CONST(0.5845539429530153), FX16_CONST(0.8113548470170637), + FX16_CONST(0.5857978574564389), FX16_CONST(0.8104571982525948), + FX16_CONST(0.587040393520918), FX16_CONST(0.8095576424040513), + FX16_CONST(0.5882815482226452), FX16_CONST(0.808656181588175), + FX16_CONST(0.5895213186410639), FX16_CONST(0.8077528179261904), + FX16_CONST(0.5907597018588742), FX16_CONST(0.8068475535437993), + FX16_CONST(0.591996694962041), FX16_CONST(0.8059403905711763), + FX16_CONST(0.5932322950397998), FX16_CONST(0.8050313311429637), + FX16_CONST(0.5944664991846644), FX16_CONST(0.8041203773982657), + FX16_CONST(0.5956993044924334), FX16_CONST(0.8032075314806449), + FX16_CONST(0.5969307080621964), FX16_CONST(0.8022927955381157), + FX16_CONST(0.5981607069963424), FX16_CONST(0.8013761717231402), + FX16_CONST(0.5993892984005645), FX16_CONST(0.8004576621926228), + FX16_CONST(0.600616479383869), FX16_CONST(0.799537269107905), + FX16_CONST(0.60184224705858), FX16_CONST(0.7986149946347609), + FX16_CONST(0.6030665985403482), FX16_CONST(0.7976908409433912), + FX16_CONST(0.604289530948156), FX16_CONST(0.7967648102084188), + FX16_CONST(0.6055110414043255), FX16_CONST(0.7958369046088836), + FX16_CONST(0.6067311270345245), FX16_CONST(0.794907126328237), + FX16_CONST(0.6079497849677736), FX16_CONST(0.7939754775543372), + FX16_CONST(0.6091670123364532), FX16_CONST(0.7930419604794436), + FX16_CONST(0.6103828062763095), FX16_CONST(0.7921065773002124), + FX16_CONST(0.6115971639264619), FX16_CONST(0.7911693302176902), + FX16_CONST(0.6128100824294097), FX16_CONST(0.79023022143731), + FX16_CONST(0.6140215589310385), FX16_CONST(0.7892892531688857), + FX16_CONST(0.6152315905806268), FX16_CONST(0.7883464276266062), + FX16_CONST(0.6164401745308536), FX16_CONST(0.7874017470290314), + FX16_CONST(0.6176473079378039), FX16_CONST(0.7864552135990858), + FX16_CONST(0.6188529879609763), FX16_CONST(0.7855068295640539), + FX16_CONST(0.6200572117632891), FX16_CONST(0.7845565971555752), + FX16_CONST(0.6212599765110876), FX16_CONST(0.7836045186096382), + FX16_CONST(0.62246127937415), FX16_CONST(0.7826505961665757), + FX16_CONST(0.6236611175256945), FX16_CONST(0.7816948320710594), + FX16_CONST(0.6248594881423863), FX16_CONST(0.7807372285720945), + FX16_CONST(0.6260563884043435), FX16_CONST(0.7797777879230146), + FX16_CONST(0.6272518154951441), FX16_CONST(0.778816512381476), + FX16_CONST(0.6284457666018327), FX16_CONST(0.7778534042094531), + FX16_CONST(0.629638238914927), FX16_CONST(0.7768884656732324), + FX16_CONST(0.6308292296284245), FX16_CONST(0.7759216990434077), + FX16_CONST(0.6320187359398091), FX16_CONST(0.7749531065948739), + FX16_CONST(0.6332067550500572), FX16_CONST(0.7739826906068229), + FX16_CONST(0.6343932841636455), FX16_CONST(0.773010453362737), + FX16_CONST(0.6355783204885561), FX16_CONST(0.7720363971503845), + FX16_CONST(0.6367618612362842), FX16_CONST(0.7710605242618138), + FX16_CONST(0.637943903621844), FX16_CONST(0.7700828369933479), + FX16_CONST(0.6391244448637757), FX16_CONST(0.7691033376455797), + FX16_CONST(0.6403034821841517), FX16_CONST(0.7681220285233654), + FX16_CONST(0.641481012808583), FX16_CONST(0.7671389119358204), + FX16_CONST(0.6426570339662269), FX16_CONST(0.7661539901963129), + FX16_CONST(0.6438315428897914), FX16_CONST(0.765167265622459), + FX16_CONST(0.6450045368155439), FX16_CONST(0.7641787405361167), + FX16_CONST(0.6461760129833163), FX16_CONST(0.7631884172633814), + FX16_CONST(0.6473459686365121), FX16_CONST(0.762196298134579), + FX16_CONST(0.6485144010221124), FX16_CONST(0.7612023854842618), + FX16_CONST(0.6496813073906832), FX16_CONST(0.7602066816512024), + FX16_CONST(0.6508466849963809), FX16_CONST(0.759209188978388), + FX16_CONST(0.6520105310969595), FX16_CONST(0.7582099098130153), + FX16_CONST(0.6531728429537768), FX16_CONST(0.7572088465064846), + FX16_CONST(0.6543336178318004), FX16_CONST(0.7562060014143945), + FX16_CONST(0.6554928529996153), FX16_CONST(0.7552013768965365), + FX16_CONST(0.6566505457294289), FX16_CONST(0.7541949753168892), + FX16_CONST(0.6578066932970786), FX16_CONST(0.7531867990436125), + FX16_CONST(0.6589612929820373), FX16_CONST(0.7521768504490427), + FX16_CONST(0.6601143420674205), FX16_CONST(0.7511651319096864), + FX16_CONST(0.6612658378399923), FX16_CONST(0.7501516458062151), + FX16_CONST(0.6624157775901718), FX16_CONST(0.7491363945234594), + FX16_CONST(0.6635641586120398), FX16_CONST(0.7481193804504036), + FX16_CONST(0.6647109782033448), FX16_CONST(0.7471006059801801), + FX16_CONST(0.6658562336655097), FX16_CONST(0.7460800735100638), + FX16_CONST(0.6669999223036375), FX16_CONST(0.745057785441466), + FX16_CONST(0.6681420414265185), FX16_CONST(0.7440337441799293), + FX16_CONST(0.669282588346636), FX16_CONST(0.7430079521351217), + FX16_CONST(0.6704215603801731), FX16_CONST(0.7419804117208311), + FX16_CONST(0.6715589548470183), FX16_CONST(0.7409511253549592), + FX16_CONST(0.6726947690707729), FX16_CONST(0.7399200954595162), + FX16_CONST(0.673829000378756), FX16_CONST(0.7388873244606151), + FX16_CONST(0.6749616461020119), FX16_CONST(0.737852814788466), + FX16_CONST(0.6760927035753159), FX16_CONST(0.7368165688773698), + FX16_CONST(0.6772221701371803), FX16_CONST(0.7357785891657136), + FX16_CONST(0.6783500431298615), FX16_CONST(0.7347388780959635), + FX16_CONST(0.679476319899365), FX16_CONST(0.7336974381146603), + FX16_CONST(0.680600997795453), FX16_CONST(0.7326542716724128), + FX16_CONST(0.6817240741716497), FX16_CONST(0.7316093812238926), + FX16_CONST(0.6828455463852481), FX16_CONST(0.7305627692278276), + FX16_CONST(0.6839654117973154), FX16_CONST(0.729514438146997), + FX16_CONST(0.6850836677727004), FX16_CONST(0.7284643904482252), + FX16_CONST(0.6862003116800386), FX16_CONST(0.7274126286023758), + FX16_CONST(0.687315340891759), FX16_CONST(0.726359155084346), + FX16_CONST(0.6884287527840904), FX16_CONST(0.7253039723730608), + FX16_CONST(0.6895405447370668), FX16_CONST(0.724247082951467), + FX16_CONST(0.6906507141345346), FX16_CONST(0.7231884893065275), + FX16_CONST(0.6917592583641577), FX16_CONST(0.7221281939292153), + FX16_CONST(0.6928661748174246), FX16_CONST(0.7210661993145081), + FX16_CONST(0.6939714608896539), FX16_CONST(0.7200025079613817), + FX16_CONST(0.6950751139800009), FX16_CONST(0.7189371223728045), + FX16_CONST(0.696177131491463), FX16_CONST(0.7178700450557317), + FX16_CONST(0.6972775108308865), FX16_CONST(0.7168012785210995), + FX16_CONST(0.6983762494089728), FX16_CONST(0.7157308252838187), + FX16_CONST(0.6994733446402838), FX16_CONST(0.7146586878627691), + FX16_CONST(0.7005687939432483), FX16_CONST(0.7135848687807935), + FX16_CONST(0.7016625947401685), FX16_CONST(0.7125093705646924), + FX16_CONST(0.7027547444572253), FX16_CONST(0.7114321957452164), + FX16_CONST(0.7038452405244849), FX16_CONST(0.7103533468570624), + FX16_CONST(0.7049340803759049), FX16_CONST(0.7092728264388657), + FX16_CONST(0.7060212614493397), FX16_CONST(0.7081906370331954), + FX16_CONST(0.7071067811865476), FX16_CONST(0.7071067811865476), + FX16_CONST(0.7081906370331954), FX16_CONST(0.7060212614493397), + FX16_CONST(0.7092728264388657), FX16_CONST(0.704934080375905), + FX16_CONST(0.7103533468570624), FX16_CONST(0.7038452405244849), + FX16_CONST(0.7114321957452164), FX16_CONST(0.7027547444572253), + FX16_CONST(0.7125093705646923), FX16_CONST(0.7016625947401685), + FX16_CONST(0.7135848687807935), FX16_CONST(0.7005687939432484), + FX16_CONST(0.7146586878627691), FX16_CONST(0.6994733446402838), + FX16_CONST(0.7157308252838186), FX16_CONST(0.6983762494089729), + FX16_CONST(0.7168012785210994), FX16_CONST(0.6972775108308866), + FX16_CONST(0.7178700450557317), FX16_CONST(0.696177131491463), + FX16_CONST(0.7189371223728044), FX16_CONST(0.6950751139800009), + FX16_CONST(0.7200025079613817), FX16_CONST(0.693971460889654), + FX16_CONST(0.7210661993145081), FX16_CONST(0.6928661748174247), + FX16_CONST(0.7221281939292153), FX16_CONST(0.6917592583641577), + FX16_CONST(0.7231884893065273), FX16_CONST(0.6906507141345346), + FX16_CONST(0.7242470829514669), FX16_CONST(0.6895405447370669), + FX16_CONST(0.7253039723730608), FX16_CONST(0.6884287527840904), + FX16_CONST(0.726359155084346), FX16_CONST(0.687315340891759), + FX16_CONST(0.7274126286023758), FX16_CONST(0.6862003116800386), + FX16_CONST(0.7284643904482252), FX16_CONST(0.6850836677727004), + FX16_CONST(0.7295144381469969), FX16_CONST(0.6839654117973155), + FX16_CONST(0.7305627692278276), FX16_CONST(0.6828455463852481), + FX16_CONST(0.7316093812238926), FX16_CONST(0.6817240741716498), + FX16_CONST(0.7326542716724128), FX16_CONST(0.680600997795453), + FX16_CONST(0.7336974381146603), FX16_CONST(0.679476319899365), + FX16_CONST(0.7347388780959635), FX16_CONST(0.6783500431298615), + FX16_CONST(0.7357785891657135), FX16_CONST(0.6772221701371804), + FX16_CONST(0.7368165688773698), FX16_CONST(0.676092703575316), + FX16_CONST(0.737852814788466), FX16_CONST(0.674961646102012), + FX16_CONST(0.7388873244606151), FX16_CONST(0.6738290003787561), + FX16_CONST(0.7399200954595161), FX16_CONST(0.672694769070773), + FX16_CONST(0.7409511253549591), FX16_CONST(0.6715589548470183), + FX16_CONST(0.741980411720831), FX16_CONST(0.6704215603801731), + FX16_CONST(0.7430079521351217), FX16_CONST(0.669282588346636), + FX16_CONST(0.7440337441799293), FX16_CONST(0.6681420414265186), + FX16_CONST(0.745057785441466), FX16_CONST(0.6669999223036375), + FX16_CONST(0.7460800735100637), FX16_CONST(0.6658562336655097), + FX16_CONST(0.7471006059801801), FX16_CONST(0.6647109782033449), + FX16_CONST(0.7481193804504035), FX16_CONST(0.6635641586120399), + FX16_CONST(0.7491363945234593), FX16_CONST(0.6624157775901718), + FX16_CONST(0.750151645806215), FX16_CONST(0.6612658378399923), + FX16_CONST(0.7511651319096864), FX16_CONST(0.6601143420674205), + FX16_CONST(0.7521768504490427), FX16_CONST(0.6589612929820373), + FX16_CONST(0.7531867990436125), FX16_CONST(0.6578066932970787), + FX16_CONST(0.7541949753168892), FX16_CONST(0.656650545729429), + FX16_CONST(0.7552013768965365), FX16_CONST(0.6554928529996155), + FX16_CONST(0.7562060014143945), FX16_CONST(0.6543336178318006), + FX16_CONST(0.7572088465064846), FX16_CONST(0.6531728429537769), + FX16_CONST(0.7582099098130153), FX16_CONST(0.6520105310969595), + FX16_CONST(0.759209188978388), FX16_CONST(0.650846684996381), + FX16_CONST(0.7602066816512024), FX16_CONST(0.6496813073906832), + FX16_CONST(0.7612023854842618), FX16_CONST(0.6485144010221126), + FX16_CONST(0.7621962981345789), FX16_CONST(0.6473459686365121), + FX16_CONST(0.7631884172633813), FX16_CONST(0.6461760129833164), + FX16_CONST(0.7641787405361167), FX16_CONST(0.645004536815544), + FX16_CONST(0.765167265622459), FX16_CONST(0.6438315428897915), + FX16_CONST(0.7661539901963128), FX16_CONST(0.6426570339662269), + FX16_CONST(0.7671389119358204), FX16_CONST(0.6414810128085832), + FX16_CONST(0.7681220285233653), FX16_CONST(0.6403034821841517), + FX16_CONST(0.7691033376455796), FX16_CONST(0.6391244448637757), + FX16_CONST(0.7700828369933479), FX16_CONST(0.6379439036218442), + FX16_CONST(0.7710605242618138), FX16_CONST(0.6367618612362842), + FX16_CONST(0.7720363971503844), FX16_CONST(0.6355783204885562), + FX16_CONST(0.7730104533627369), FX16_CONST(0.6343932841636455), + FX16_CONST(0.7739826906068228), FX16_CONST(0.6332067550500572), + FX16_CONST(0.7749531065948738), FX16_CONST(0.6320187359398091), + FX16_CONST(0.7759216990434076), FX16_CONST(0.6308292296284246), + FX16_CONST(0.7768884656732324), FX16_CONST(0.6296382389149271), + FX16_CONST(0.777853404209453), FX16_CONST(0.6284457666018327), + FX16_CONST(0.7788165123814759), FX16_CONST(0.6272518154951442), + FX16_CONST(0.7797777879230144), FX16_CONST(0.6260563884043435), + FX16_CONST(0.7807372285720945), FX16_CONST(0.6248594881423865), + FX16_CONST(0.7816948320710594), FX16_CONST(0.6236611175256946), + FX16_CONST(0.7826505961665757), FX16_CONST(0.6224612793741501), + FX16_CONST(0.7836045186096382), FX16_CONST(0.6212599765110877), + FX16_CONST(0.7845565971555752), FX16_CONST(0.6200572117632892), + FX16_CONST(0.7855068295640539), FX16_CONST(0.6188529879609763), + FX16_CONST(0.7864552135990858), FX16_CONST(0.617647307937804), + FX16_CONST(0.7874017470290313), FX16_CONST(0.6164401745308536), + FX16_CONST(0.7883464276266062), FX16_CONST(0.6152315905806268), + FX16_CONST(0.7892892531688857), FX16_CONST(0.6140215589310385), + FX16_CONST(0.79023022143731), FX16_CONST(0.6128100824294097), + FX16_CONST(0.7911693302176901), FX16_CONST(0.611597163926462), + FX16_CONST(0.7921065773002123), FX16_CONST(0.6103828062763095), + FX16_CONST(0.7930419604794436), FX16_CONST(0.6091670123364532), + FX16_CONST(0.7939754775543372), FX16_CONST(0.6079497849677737), + FX16_CONST(0.794907126328237), FX16_CONST(0.6067311270345245), + FX16_CONST(0.7958369046088835), FX16_CONST(0.6055110414043255), + FX16_CONST(0.7967648102084187), FX16_CONST(0.6042895309481561), + FX16_CONST(0.797690840943391), FX16_CONST(0.6030665985403483), + FX16_CONST(0.7986149946347608), FX16_CONST(0.60184224705858), + FX16_CONST(0.799537269107905), FX16_CONST(0.600616479383869), + FX16_CONST(0.8004576621926227), FX16_CONST(0.5993892984005645), + FX16_CONST(0.8013761717231401), FX16_CONST(0.5981607069963424), + FX16_CONST(0.8022927955381157), FX16_CONST(0.5969307080621965), + FX16_CONST(0.8032075314806448), FX16_CONST(0.5956993044924335), + FX16_CONST(0.8041203773982657), FX16_CONST(0.5944664991846645), + FX16_CONST(0.8050313311429637), FX16_CONST(0.5932322950397998), + FX16_CONST(0.8059403905711763), FX16_CONST(0.591996694962041), + FX16_CONST(0.8068475535437992), FX16_CONST(0.5907597018588743), + FX16_CONST(0.8077528179261902), FX16_CONST(0.5895213186410639), + FX16_CONST(0.808656181588175), FX16_CONST(0.5882815482226453), + FX16_CONST(0.8095576424040513), FX16_CONST(0.5870403935209181), + FX16_CONST(0.8104571982525948), FX16_CONST(0.5857978574564389), + FX16_CONST(0.8113548470170637), FX16_CONST(0.5845539429530153), + FX16_CONST(0.8122505865852039), FX16_CONST(0.5833086529376983), + FX16_CONST(0.8131444148492536), FX16_CONST(0.5820619903407755), + FX16_CONST(0.8140363297059483), FX16_CONST(0.5808139580957645), + FX16_CONST(0.8149263290565266), FX16_CONST(0.5795645591394057), + FX16_CONST(0.8158144108067338), FX16_CONST(0.5783137964116556), + FX16_CONST(0.8167005728668278), FX16_CONST(0.5770616728556796), + FX16_CONST(0.8175848131515837), FX16_CONST(0.5758081914178453), + FX16_CONST(0.8184671295802987), FX16_CONST(0.5745533550477158), + FX16_CONST(0.8193475200767969), FX16_CONST(0.5732971666980423), + FX16_CONST(0.8202259825694347), FX16_CONST(0.572039629324757), + FX16_CONST(0.8211025149911046), FX16_CONST(0.5707807458869674), + FX16_CONST(0.8219771152792416), FX16_CONST(0.5695205193469473), + FX16_CONST(0.8228497813758263), FX16_CONST(0.5682589526701315), + FX16_CONST(0.8237205112273913), FX16_CONST(0.5669960488251087), + FX16_CONST(0.8245893027850253), FX16_CONST(0.5657318107836132), + FX16_CONST(0.8254561540043774), FX16_CONST(0.5644662415205195), + FX16_CONST(0.8263210628456635), FX16_CONST(0.5631993440138341), + FX16_CONST(0.8271840272736691), FX16_CONST(0.5619311212446895), + FX16_CONST(0.8280450452577558), FX16_CONST(0.560661576197336), + FX16_CONST(0.8289041147718649), FX16_CONST(0.5593907118591361), + FX16_CONST(0.829761233794523), FX16_CONST(0.5581185312205561), + FX16_CONST(0.8306164003088462), FX16_CONST(0.5568450372751601), + FX16_CONST(0.8314696123025452), FX16_CONST(0.5555702330196023), + FX16_CONST(0.8323208677679297), FX16_CONST(0.5542941214536201), + FX16_CONST(0.8331701647019132), FX16_CONST(0.5530167055800276), + FX16_CONST(0.8340175011060181), FX16_CONST(0.5517379884047074), + FX16_CONST(0.83486287498638), FX16_CONST(0.5504579729366048), + FX16_CONST(0.8357062843537526), FX16_CONST(0.5491766621877198), + FX16_CONST(0.8365477272235119), FX16_CONST(0.5478940591731002), + FX16_CONST(0.8373872016156619), FX16_CONST(0.5466101669108349), + FX16_CONST(0.838224705554838), FX16_CONST(0.5453249884220465), + FX16_CONST(0.8390602370703126), FX16_CONST(0.5440385267308839), + FX16_CONST(0.8398937941959994), FX16_CONST(0.542750784864516), + FX16_CONST(0.840725374970458), FX16_CONST(0.5414617658531236), + FX16_CONST(0.8415549774368983), FX16_CONST(0.540171472729893), + FX16_CONST(0.8423825996431858), FX16_CONST(0.5388799085310084), + FX16_CONST(0.8432082396418454), FX16_CONST(0.5375870762956455), + FX16_CONST(0.8440318954900664), FX16_CONST(0.5362929790659632), + FX16_CONST(0.844853565249707), FX16_CONST(0.5349976198870973), + FX16_CONST(0.8456732469872991), FX16_CONST(0.533701001807153), + FX16_CONST(0.8464909387740521), FX16_CONST(0.532403127877198), + FX16_CONST(0.8473066386858583), FX16_CONST(0.531104001151255), + FX16_CONST(0.8481203448032971), FX16_CONST(0.5298036246862948), + FX16_CONST(0.8489320552116396), FX16_CONST(0.5285020015422285), + FX16_CONST(0.8497417680008524), FX16_CONST(0.5271991347819014), + FX16_CONST(0.8505494812656034), FX16_CONST(0.5258950274710847), + FX16_CONST(0.8513551931052652), FX16_CONST(0.5245896826784688), + FX16_CONST(0.8521589016239198), FX16_CONST(0.5232831034756564), + FX16_CONST(0.8529606049303636), FX16_CONST(0.5219752929371544), + FX16_CONST(0.8537603011381113), FX16_CONST(0.5206662541403673), + FX16_CONST(0.8545579883654005), FX16_CONST(0.5193559901655895), + FX16_CONST(0.855353664735196), FX16_CONST(0.5180445040959993), + FX16_CONST(0.8561473283751945), FX16_CONST(0.51673179901765), + FX16_CONST(0.8569389774178287), FX16_CONST(0.5154178780194631), + FX16_CONST(0.8577286100002721), FX16_CONST(0.5141027441932217), + FX16_CONST(0.8585162242644427), FX16_CONST(0.5127864006335631), + FX16_CONST(0.8593018183570084), FX16_CONST(0.5114688504379705), + FX16_CONST(0.8600853904293903), FX16_CONST(0.5101500967067667), + FX16_CONST(0.8608669386377673), FX16_CONST(0.508830142543107), + FX16_CONST(0.8616464611430813), FX16_CONST(0.5075089910529709), + FX16_CONST(0.8624239561110405), FX16_CONST(0.5061866453451553), + FX16_CONST(0.8631994217121242), FX16_CONST(0.5048631085312675), + FX16_CONST(0.8639728561215867), FX16_CONST(0.5035383837257176), + FX16_CONST(0.8647442575194624), FX16_CONST(0.5022124740457109), + FX16_CONST(0.865513624090569), FX16_CONST(0.5008853826112409), + FX16_CONST(0.866280954024513), FX16_CONST(0.49955711254508184), + FX16_CONST(0.8670462455156926), FX16_CONST(0.49822766697278187), + FX16_CONST(0.8678094967633032), FX16_CONST(0.49689704902265464), + FX16_CONST(0.8685707059713409), FX16_CONST(0.4955652618257725), + FX16_CONST(0.8693298713486067), FX16_CONST(0.49423230851595973), + FX16_CONST(0.8700869911087113), FX16_CONST(0.4928981922297841), + FX16_CONST(0.8708420634700789), FX16_CONST(0.49156291610655006), + FX16_CONST(0.8715950866559511), FX16_CONST(0.4902264832882911), + FX16_CONST(0.8723460588943914), FX16_CONST(0.4888888969197632), + FX16_CONST(0.8730949784182901), FX16_CONST(0.48755016014843605), + FX16_CONST(0.8738418434653668), FX16_CONST(0.48621027612448653), + FX16_CONST(0.8745866522781761), FX16_CONST(0.4848692480007911), + FX16_CONST(0.8753294031041108), FX16_CONST(0.48352707893291874), + FX16_CONST(0.8760700941954066), FX16_CONST(0.48218377207912283), + FX16_CONST(0.8768087238091458), FX16_CONST(0.4808393306003339), + FX16_CONST(0.8775452902072612), FX16_CONST(0.479493757660153), + FX16_CONST(0.8782797916565415), FX16_CONST(0.4781470564248431), + FX16_CONST(0.8790122264286334), FX16_CONST(0.47679923006332225), + FX16_CONST(0.8797425928000474), FX16_CONST(0.47545028174715587), + FX16_CONST(0.8804708890521608), FX16_CONST(0.47410021465055), + FX16_CONST(0.881197113471222), FX16_CONST(0.4727490319503429), + FX16_CONST(0.8819212643483549), FX16_CONST(0.4713967368259978), + FX16_CONST(0.8826433399795628), FX16_CONST(0.4700433324595956), + FX16_CONST(0.8833633386657316), FX16_CONST(0.46868882203582796), + FX16_CONST(0.884081258712635), FX16_CONST(0.4673332087419885), + FX16_CONST(0.8847970984309378), FX16_CONST(0.4659764957679661), + FX16_CONST(0.8855108561362), FX16_CONST(0.4646186863062378), + FX16_CONST(0.8862225301488806), FX16_CONST(0.46325978355186026), + FX16_CONST(0.8869321187943421), FX16_CONST(0.46189979070246284), + FX16_CONST(0.8876396204028539), FX16_CONST(0.46053871095824), + FX16_CONST(0.8883450333095964), FX16_CONST(0.45917654752194415), + FX16_CONST(0.8890483558546646), FX16_CONST(0.4578133035988773), + FX16_CONST(0.8897495863830729), FX16_CONST(0.45644898239688386), + FX16_CONST(0.8904487232447579), FX16_CONST(0.45508358712634384), + FX16_CONST(0.8911457647945832), FX16_CONST(0.4537171210001639), + FX16_CONST(0.8918407093923427), FX16_CONST(0.452349587233771), + FX16_CONST(0.8925335554027647), FX16_CONST(0.4509809890451038), + FX16_CONST(0.8932243011955153), FX16_CONST(0.4496113296546066), + FX16_CONST(0.8939129451452033), FX16_CONST(0.44824061228522), + FX16_CONST(0.8945994856313826), FX16_CONST(0.4468688401623743), + FX16_CONST(0.8952839210385576), FX16_CONST(0.44549601651398174), + FX16_CONST(0.8959662497561851), FX16_CONST(0.44412214457042926), + FX16_CONST(0.8966464701786802), FX16_CONST(0.44274722756457013), + FX16_CONST(0.8973245807054183), FX16_CONST(0.4413712687317166), + FX16_CONST(0.8980005797407399), FX16_CONST(0.43999427130963326), + FX16_CONST(0.8986744656939538), FX16_CONST(0.4386162385385277), + FX16_CONST(0.8993462369793415), FX16_CONST(0.4372371736610442), + FX16_CONST(0.9000158920161603), FX16_CONST(0.4358570799222555), + FX16_CONST(0.9006834292286469), FX16_CONST(0.4344759605696557), + FX16_CONST(0.901348847046022), FX16_CONST(0.433093818853152), + FX16_CONST(0.9020121439024931), FX16_CONST(0.43171065802505737), + FX16_CONST(0.9026733182372588), FX16_CONST(0.4303264813400826), + FX16_CONST(0.9033323684945118), FX16_CONST(0.42894129205532955), + FX16_CONST(0.9039892931234433), FX16_CONST(0.4275550934302822), + FX16_CONST(0.9046440905782462), FX16_CONST(0.4261678887267996), + FX16_CONST(0.9052967593181188), FX16_CONST(0.4247796812091088), + FX16_CONST(0.9059472978072685), FX16_CONST(0.4233904741437961), + FX16_CONST(0.9065957045149153), FX16_CONST(0.4220002707997998), + FX16_CONST(0.9072419779152959), FX16_CONST(0.4206090744484025), + FX16_CONST(0.9078861164876663), FX16_CONST(0.41921688836322396), + FX16_CONST(0.9085281187163061), FX16_CONST(0.4178237158202124), + FX16_CONST(0.9091679830905223), FX16_CONST(0.4164295600976373), + FX16_CONST(0.9098057081046522), FX16_CONST(0.41503442447608163), + FX16_CONST(0.9104412922580671), FX16_CONST(0.41363831223843456), + FX16_CONST(0.9110747340551762), FX16_CONST(0.412241226669883), + FX16_CONST(0.9117060320054299), FX16_CONST(0.4108431710579039), + FX16_CONST(0.9123351846233227), FX16_CONST(0.40944414869225765), + FX16_CONST(0.9129621904283981), FX16_CONST(0.40804416286497874), + FX16_CONST(0.9135870479452508), FX16_CONST(0.40664321687036914), + FX16_CONST(0.9142097557035307), FX16_CONST(0.40524131400498986), + FX16_CONST(0.9148303122379461), FX16_CONST(0.40383845756765413), + FX16_CONST(0.9154487160882678), FX16_CONST(0.40243465085941854), + FX16_CONST(0.9160649657993316), FX16_CONST(0.4010298971835758), + FX16_CONST(0.9166790599210427), FX16_CONST(0.3996241998456468), + FX16_CONST(0.9172909970083779), FX16_CONST(0.3982175621533736), + FX16_CONST(0.9179007756213904), FX16_CONST(0.3968099874167104), + FX16_CONST(0.9185083943252123), FX16_CONST(0.3954014789478163), + FX16_CONST(0.9191138516900578), FX16_CONST(0.3939920400610481), + FX16_CONST(0.9197171462912274), FX16_CONST(0.3925816740729515), + FX16_CONST(0.9203182767091105), FX16_CONST(0.391170384302254), + FX16_CONST(0.9209172415291894), FX16_CONST(0.3897581740698564), + FX16_CONST(0.9215140393420419), FX16_CONST(0.3883450466988263), + FX16_CONST(0.9221086687433451), FX16_CONST(0.3869310055143887), + FX16_CONST(0.9227011283338785), FX16_CONST(0.385516053843919), + FX16_CONST(0.9232914167195276), FX16_CONST(0.38410019501693504), + FX16_CONST(0.9238795325112867), FX16_CONST(0.38268343236508984), + FX16_CONST(0.9244654743252626), FX16_CONST(0.3812657692221625), + FX16_CONST(0.9250492407826776), FX16_CONST(0.3798472089240511), + FX16_CONST(0.9256308305098727), FX16_CONST(0.3784277548087656), + FX16_CONST(0.9262102421383113), FX16_CONST(0.3770074102164183), + FX16_CONST(0.9267874743045817), FX16_CONST(0.3755861784892173), + FX16_CONST(0.9273625256504011), FX16_CONST(0.374164062971458), + FX16_CONST(0.9279353948226179), FX16_CONST(0.3727410670095158), + FX16_CONST(0.9285060804732156), FX16_CONST(0.3713171939518376), + FX16_CONST(0.9290745812593157), FX16_CONST(0.36989244714893427), + FX16_CONST(0.9296408958431812), FX16_CONST(0.3684668299533723), + FX16_CONST(0.9302050228922191), FX16_CONST(0.36704034571976724), + FX16_CONST(0.9307669610789837), FX16_CONST(0.36561299780477396), + FX16_CONST(0.9313267090811804), FX16_CONST(0.36418478956707984), + FX16_CONST(0.9318842655816681), FX16_CONST(0.3627557243673972), + FX16_CONST(0.9324396292684624), FX16_CONST(0.36132580556845434), + FX16_CONST(0.9329927988347388), FX16_CONST(0.3598950365349883), + FX16_CONST(0.9335437729788362), FX16_CONST(0.35846342063373654), + FX16_CONST(0.9340925504042589), FX16_CONST(0.35703096123343003), + FX16_CONST(0.9346391298196808), FX16_CONST(0.35559766170478396), + FX16_CONST(0.9351835099389475), FX16_CONST(0.3541635254204905), + FX16_CONST(0.9357256894810804), FX16_CONST(0.3527285557552107), + FX16_CONST(0.9362656671702783), FX16_CONST(0.35129275608556715), + FX16_CONST(0.9368034417359216), FX16_CONST(0.34985612979013503), + FX16_CONST(0.937339011912575), FX16_CONST(0.3484186802494345), + FX16_CONST(0.9378723764399899), FX16_CONST(0.3469804108459237), + FX16_CONST(0.9384035340631081), FX16_CONST(0.34554132496398915), + FX16_CONST(0.9389324835320645), FX16_CONST(0.344101425989939), + FX16_CONST(0.9394592236021899), FX16_CONST(0.3426607173119944), + FX16_CONST(0.9399837530340139), FX16_CONST(0.3412192023202824), + FX16_CONST(0.9405060705932683), FX16_CONST(0.33977688440682696), + FX16_CONST(0.9410261750508893), FX16_CONST(0.3383337669655413), + FX16_CONST(0.9415440651830208), FX16_CONST(0.33688985339222005), + FX16_CONST(0.9420597397710173), FX16_CONST(0.33544514708453166), + FX16_CONST(0.9425731976014469), FX16_CONST(0.3339996514420095), + FX16_CONST(0.9430844374660935), FX16_CONST(0.3325533698660442), + FX16_CONST(0.9435934581619604), FX16_CONST(0.33110630575987643), + FX16_CONST(0.9441002584912727), FX16_CONST(0.32965846252858755), + FX16_CONST(0.9446048372614803), FX16_CONST(0.32820984357909266), + FX16_CONST(0.9451071932852606), FX16_CONST(0.3267604523201318), + FX16_CONST(0.9456073253805213), FX16_CONST(0.325310292162263), + FX16_CONST(0.9461052323704033), FX16_CONST(0.32385936651785296), + FX16_CONST(0.9466009130832835), FX16_CONST(0.32240767880107), + FX16_CONST(0.9470943663527772), FX16_CONST(0.3209552324278752), + FX16_CONST(0.9475855910177411), FX16_CONST(0.31950203081601575), + FX16_CONST(0.9480745859222762), FX16_CONST(0.31804807738501506), + FX16_CONST(0.9485613499157303), FX16_CONST(0.31659337555616585), + FX16_CONST(0.9490458818527006), FX16_CONST(0.31513792875252244), + FX16_CONST(0.9495281805930367), FX16_CONST(0.3136817403988916), + FX16_CONST(0.950008245001843), FX16_CONST(0.31222481392182505), + FX16_CONST(0.9504860739494817), FX16_CONST(0.3107671527496115), + FX16_CONST(0.9509616663115751), FX16_CONST(0.3093087603122688), + FX16_CONST(0.9514350209690083), FX16_CONST(0.307849640041535), + FX16_CONST(0.9519061368079322), FX16_CONST(0.3063897953708611), + FX16_CONST(0.9523750127197659), FX16_CONST(0.30492922973540243), + FX16_CONST(0.9528416476011987), FX16_CONST(0.30346794657201137), + FX16_CONST(0.9533060403541938), FX16_CONST(0.3020059493192282), + FX16_CONST(0.9537681898859903), FX16_CONST(0.3005432414172734), + FX16_CONST(0.9542280951091057), FX16_CONST(0.2990798263080405), + FX16_CONST(0.9546857549413383), FX16_CONST(0.2976157074350863), + FX16_CONST(0.9551411683057707), FX16_CONST(0.29615088824362396), + FX16_CONST(0.9555943341307711), FX16_CONST(0.2946853721805143), + FX16_CONST(0.9560452513499964), FX16_CONST(0.2932191626942587), + FX16_CONST(0.956493918902395), FX16_CONST(0.2917522632349894), + FX16_CONST(0.9569403357322089), FX16_CONST(0.29028467725446233), + FX16_CONST(0.9573845007889759), FX16_CONST(0.2888164082060495), + FX16_CONST(0.9578264130275329), FX16_CONST(0.28734745954472957), + FX16_CONST(0.9582660714080177), FX16_CONST(0.2858778347270807), + FX16_CONST(0.9587034748958716), FX16_CONST(0.2844075372112718), + FX16_CONST(0.9591386224618419), FX16_CONST(0.2829365704570554), + FX16_CONST(0.9595715130819845), FX16_CONST(0.28146493792575805), + FX16_CONST(0.9600021457376658), FX16_CONST(0.2799926430802734), + FX16_CONST(0.9604305194155658), FX16_CONST(0.27851968938505306), + FX16_CONST(0.9608566331076797), FX16_CONST(0.27704608030609995), + FX16_CONST(0.9612804858113206), FX16_CONST(0.27557181931095825), + FX16_CONST(0.9617020765291225), FX16_CONST(0.27409690986870633), + FX16_CONST(0.9621214042690416), FX16_CONST(0.272621355449949), + FX16_CONST(0.9625384680443592), FX16_CONST(0.27114515952680807), + FX16_CONST(0.9629532668736839), FX16_CONST(0.2696683255729152), + FX16_CONST(0.963365799780954), FX16_CONST(0.2681908570634032), + FX16_CONST(0.9637760657954398), FX16_CONST(0.2667127574748984), + FX16_CONST(0.9641840639517457), FX16_CONST(0.2652340302855119), + FX16_CONST(0.9645897932898126), FX16_CONST(0.2637546789748315), + FX16_CONST(0.9649932528549203), FX16_CONST(0.2622747070239136), + FX16_CONST(0.9653944416976894), FX16_CONST(0.26079411791527557), + FX16_CONST(0.9657933588740836), FX16_CONST(0.25931291513288635), + FX16_CONST(0.9661900034454126), FX16_CONST(0.25783110216215893), + FX16_CONST(0.9665843744783331), FX16_CONST(0.2563486824899429), + FX16_CONST(0.9669764710448521), FX16_CONST(0.2548656596045146), + FX16_CONST(0.9673662922223285), FX16_CONST(0.25338203699557027), + FX16_CONST(0.9677538370934755), FX16_CONST(0.2518978181542169), + FX16_CONST(0.9681391047463624), FX16_CONST(0.2504130065729653), + FX16_CONST(0.9685220942744173), FX16_CONST(0.24892760574572026), + FX16_CONST(0.9689028047764289), FX16_CONST(0.24744161916777344), + FX16_CONST(0.9692812353565485), FX16_CONST(0.2459550503357946), + FX16_CONST(0.9696573851242924), FX16_CONST(0.2444679027478242), + FX16_CONST(0.970031253194544), FX16_CONST(0.24298017990326398), + FX16_CONST(0.9704028386875555), FX16_CONST(0.2414918853028693), + FX16_CONST(0.9707721407289504), FX16_CONST(0.2400030224487415), + FX16_CONST(0.9711391584497251), FX16_CONST(0.2385135948443185), + FX16_CONST(0.9715038909862518), FX16_CONST(0.23702360599436734), + FX16_CONST(0.9718663374802794), FX16_CONST(0.23553305940497546), + FX16_CONST(0.9722264970789363), FX16_CONST(0.23404195858354346), + FX16_CONST(0.9725843689347322), FX16_CONST(0.23255030703877533), + FX16_CONST(0.9729399522055601), FX16_CONST(0.23105810828067128), + FX16_CONST(0.9732932460546982), FX16_CONST(0.22956536582051887), + FX16_CONST(0.9736442496508119), FX16_CONST(0.2280720831708858), + FX16_CONST(0.9739929621679558), FX16_CONST(0.2265782638456101), + FX16_CONST(0.9743393827855759), FX16_CONST(0.22508391135979278), + FX16_CONST(0.9746835106885107), FX16_CONST(0.22358902922979002), + FX16_CONST(0.9750253450669941), FX16_CONST(0.2220936209732036), + FX16_CONST(0.9753648851166569), FX16_CONST(0.22059769010887365), + FX16_CONST(0.9757021300385286), FX16_CONST(0.21910124015686977), + FX16_CONST(0.976037079039039), FX16_CONST(0.21760427463848367), + FX16_CONST(0.9763697313300211), FX16_CONST(0.2161067970762196), + FX16_CONST(0.9767000861287118), FX16_CONST(0.21460881099378692), + FX16_CONST(0.9770281426577544), FX16_CONST(0.21311031991609136), + FX16_CONST(0.9773539001452), FX16_CONST(0.2116113273692276), + FX16_CONST(0.9776773578245099), FX16_CONST(0.21011183688046972), + FX16_CONST(0.9779985149345571), FX16_CONST(0.20861185197826346), + FX16_CONST(0.9783173707196277), FX16_CONST(0.20711137619221856), + FX16_CONST(0.9786339244294231), FX16_CONST(0.20561041305309932), + FX16_CONST(0.9789481753190622), FX16_CONST(0.204108966092817), + FX16_CONST(0.979260122649082), FX16_CONST(0.2026070388444211), + FX16_CONST(0.9795697656854405), FX16_CONST(0.20110463484209196), + FX16_CONST(0.9798771036995176), FX16_CONST(0.19960175762113105), + FX16_CONST(0.9801821359681173), FX16_CONST(0.19809841071795373), + FX16_CONST(0.9804848617734694), FX16_CONST(0.19659459767008022), + FX16_CONST(0.9807852804032304), FX16_CONST(0.19509032201612833), + FX16_CONST(0.9810833911504866), FX16_CONST(0.19358558729580375), + FX16_CONST(0.9813791933137546), FX16_CONST(0.19208039704989238), + FX16_CONST(0.9816726861969831), FX16_CONST(0.1905747548202528), + FX16_CONST(0.9819638691095552), FX16_CONST(0.18906866414980628), + FX16_CONST(0.9822527413662894), FX16_CONST(0.18756212858252974), + FX16_CONST(0.9825393022874412), FX16_CONST(0.18605515166344663), + FX16_CONST(0.9828235511987052), FX16_CONST(0.18454773693861964), + FX16_CONST(0.9831054874312163), FX16_CONST(0.18303988795514106), + FX16_CONST(0.9833851103215512), FX16_CONST(0.18153160826112513), + FX16_CONST(0.9836624192117303), FX16_CONST(0.18002290140569951), + FX16_CONST(0.9839374134492189), FX16_CONST(0.1785137709389976), + FX16_CONST(0.984210092386929), FX16_CONST(0.17700422041214886), + FX16_CONST(0.9844804553832209), FX16_CONST(0.1754942533772714), + FX16_CONST(0.9847485018019042), FX16_CONST(0.17398387338746385), + FX16_CONST(0.9850142310122398), FX16_CONST(0.17247308399679603), + FX16_CONST(0.9852776423889412), FX16_CONST(0.17096188876030136), + FX16_CONST(0.9855387353121761), FX16_CONST(0.16945029123396793), + FX16_CONST(0.9857975091675674), FX16_CONST(0.16793829497473123), + FX16_CONST(0.9860539633461954), FX16_CONST(0.16642590354046422), + FX16_CONST(0.9863080972445987), FX16_CONST(0.1649131204899701), + FX16_CONST(0.9865599102647754), FX16_CONST(0.16339994938297323), + FX16_CONST(0.9868094018141854), FX16_CONST(0.16188639378011188), + FX16_CONST(0.987056571305751), FX16_CONST(0.1603724572429284), + FX16_CONST(0.9873014181578584), FX16_CONST(0.1588581433338614), + FX16_CONST(0.9875439417943592), FX16_CONST(0.15734345561623828), + FX16_CONST(0.9877841416445722), FX16_CONST(0.15582839765426532), + FX16_CONST(0.9880220171432835), FX16_CONST(0.15431297301302024), + FX16_CONST(0.9882575677307495), FX16_CONST(0.1527971852584434), + FX16_CONST(0.9884907928526966), FX16_CONST(0.15128103795733025), + FX16_CONST(0.9887216919603238), FX16_CONST(0.14976453467732162), + FX16_CONST(0.988950264510303), FX16_CONST(0.1482476789868962), + FX16_CONST(0.989176509964781), FX16_CONST(0.14673047445536175), + FX16_CONST(0.9894004277913804), FX16_CONST(0.14521292465284752), + FX16_CONST(0.9896220174632008), FX16_CONST(0.14369503315029458), + FX16_CONST(0.9898412784588205), FX16_CONST(0.142176803519448), + FX16_CONST(0.9900582102622971), FX16_CONST(0.14065823933284924), + FX16_CONST(0.9902728123631691), FX16_CONST(0.13913934416382628), + FX16_CONST(0.990485084256457), FX16_CONST(0.13762012158648618), + FX16_CONST(0.9906950254426646), FX16_CONST(0.1361005751757062), + FX16_CONST(0.99090263542778), FX16_CONST(0.13458070850712622), + FX16_CONST(0.9911079137232768), FX16_CONST(0.13306052515713918), + FX16_CONST(0.9913108598461154), FX16_CONST(0.13154002870288328), + FX16_CONST(0.9915114733187439), FX16_CONST(0.13001922272223335), + FX16_CONST(0.9917097536690995), FX16_CONST(0.12849811079379322), + FX16_CONST(0.9919057004306093), FX16_CONST(0.12697669649688598), + FX16_CONST(0.9920993131421918), FX16_CONST(0.1254549834115462), + FX16_CONST(0.9922905913482574), FX16_CONST(0.1239329751185122), + FX16_CONST(0.99247953459871), FX16_CONST(0.12241067519921628), + FX16_CONST(0.992666142448948), FX16_CONST(0.12088808723577722), + FX16_CONST(0.9928504144598651), FX16_CONST(0.11936521481099135), + FX16_CONST(0.9930323501978514), FX16_CONST(0.11784206150832502), + FX16_CONST(0.9932119492347945), FX16_CONST(0.11631863091190488), + FX16_CONST(0.9933892111480807), FX16_CONST(0.11479492660651025), + FX16_CONST(0.9935641355205953), FX16_CONST(0.11327095217756436), + FX16_CONST(0.9937367219407246), FX16_CONST(0.11174671121112666), + FX16_CONST(0.9939069700023561), FX16_CONST(0.11022220729388318), + FX16_CONST(0.9940748793048794), FX16_CONST(0.10869744401313867), + FX16_CONST(0.9942404494531879), FX16_CONST(0.10717242495680887), + FX16_CONST(0.9944036800576791), FX16_CONST(0.1056471537134107), + FX16_CONST(0.9945645707342554), FX16_CONST(0.10412163387205473), + FX16_CONST(0.9947231211043257), FX16_CONST(0.10259586902243628), + FX16_CONST(0.9948793307948056), FX16_CONST(0.10106986275482788), + FX16_CONST(0.9950331994381186), FX16_CONST(0.09954361866006944), + FX16_CONST(0.9951847266721968), FX16_CONST(0.09801714032956077), + FX16_CONST(0.9953339121404823), FX16_CONST(0.0964904313552526), + FX16_CONST(0.9954807554919269), FX16_CONST(0.09496349532963906), + FX16_CONST(0.9956252563809943), FX16_CONST(0.09343633584574791), + FX16_CONST(0.9957674144676598), FX16_CONST(0.0919089564971327), + FX16_CONST(0.9959072294174117), FX16_CONST(0.09038136087786501), + FX16_CONST(0.996044700901252), FX16_CONST(0.08885355258252468), + FX16_CONST(0.9961798285956969), FX16_CONST(0.08732553520619223), + FX16_CONST(0.996312612182778), FX16_CONST(0.08579731234443988), + FX16_CONST(0.9964430513500426), FX16_CONST(0.08426888759332413), + FX16_CONST(0.9965711457905548), FX16_CONST(0.0827402645493758), + FX16_CONST(0.9966968952028961), FX16_CONST(0.08121144680959239), + FX16_CONST(0.9968202992911657), FX16_CONST(0.07968243797143013), + FX16_CONST(0.9969413577649822), FX16_CONST(0.07815324163279432), + FX16_CONST(0.997060070339483), FX16_CONST(0.07662386139203162), + FX16_CONST(0.9971764367353262), FX16_CONST(0.07509430084792129), + FX16_CONST(0.9972904566786902), FX16_CONST(0.07356456359966745), + FX16_CONST(0.9974021299012753), FX16_CONST(0.07203465324688942), + FX16_CONST(0.9975114561403035), FX16_CONST(0.07050457338961401), + FX16_CONST(0.9976184351385196), FX16_CONST(0.06897432762826673), + FX16_CONST(0.9977230666441916), FX16_CONST(0.0674439195636641), + FX16_CONST(0.9978253504111116), FX16_CONST(0.06591335279700393), + FX16_CONST(0.997925286198596), FX16_CONST(0.06438263092985741), + FX16_CONST(0.9980228737714862), FX16_CONST(0.06285175756416142), + FX16_CONST(0.9981181129001492), FX16_CONST(0.06132073630220865), + FX16_CONST(0.9982110033604782), FX16_CONST(0.05978957074664001), + FX16_CONST(0.9983015449338929), FX16_CONST(0.05825826450043573), + FX16_CONST(0.9983897374073402), FX16_CONST(0.05672682116690778), + FX16_CONST(0.9984755805732948), FX16_CONST(0.05519524434969003), + FX16_CONST(0.9985590742297593), FX16_CONST(0.05366353765273068), + FX16_CONST(0.9986402181802653), FX16_CONST(0.05213170468028332), + FX16_CONST(0.9987190122338729), FX16_CONST(0.05059974903689934), + FX16_CONST(0.9987954562051724), FX16_CONST(0.049067674327418126), + FX16_CONST(0.9988695499142836), FX16_CONST(0.04753548415695926), + FX16_CONST(0.9989412931868569), FX16_CONST(0.046003182130914644), + FX16_CONST(0.9990106858540734), FX16_CONST(0.044470771854938744), + FX16_CONST(0.9990777277526454), FX16_CONST(0.04293825693494096), + FX16_CONST(0.9991424187248169), FX16_CONST(0.04140564097707671), + FX16_CONST(0.9992047586183639), FX16_CONST(0.039872927587739845), + FX16_CONST(0.9992647472865944), FX16_CONST(0.03834012037355279), + FX16_CONST(0.9993223845883495), FX16_CONST(0.03680722294135899), + FX16_CONST(0.9993776703880028), FX16_CONST(0.03527423889821395), + FX16_CONST(0.9994306045554617), FX16_CONST(0.03374117185137764), + FX16_CONST(0.999481186966167), FX16_CONST(0.032208025408304704), + FX16_CONST(0.9995294175010931), FX16_CONST(0.03067480317663658), + FX16_CONST(0.9995752960467492), FX16_CONST(0.02914150876419374), + FX16_CONST(0.9996188224951786), FX16_CONST(0.02760814577896582), + FX16_CONST(0.9996599967439592), FX16_CONST(0.02607471782910404), + FX16_CONST(0.9996988186962042), FX16_CONST(0.024541228522912264), + FX16_CONST(0.9997352882605617), FX16_CONST(0.02300768146883941), + FX16_CONST(0.9997694053512153), FX16_CONST(0.021474080275469605), + FX16_CONST(0.9998011698878843), FX16_CONST(0.019940428551514598), + FX16_CONST(0.9998305817958234), FX16_CONST(0.01840672990580482), + FX16_CONST(0.9998576410058239), FX16_CONST(0.016872987947281773), + FX16_CONST(0.9998823474542126), FX16_CONST(0.01533920628498822), + FX16_CONST(0.9999047010828529), FX16_CONST(0.013805388528060349), + FX16_CONST(0.9999247018391445), FX16_CONST(0.012271538285719944), + FX16_CONST(0.9999423496760239), FX16_CONST(0.010737659167264572), + FX16_CONST(0.9999576445519639), FX16_CONST(0.00920375478205996), + FX16_CONST(0.9999705864309741), FX16_CONST(0.007669828739531077), + FX16_CONST(0.9999811752826011), FX16_CONST(0.006135884649154515), + FX16_CONST(0.9999894110819284), FX16_CONST(0.004601926120448672), + FX16_CONST(0.9999952938095762), FX16_CONST(0.003067956762966138), + FX16_CONST(0.9999988234517019), FX16_CONST(0.0015339801862847662), + FX16_CONST(1.0), FX16_CONST(6.123233995736766e-17), + FX16_CONST(0.9999988234517019), FX16_CONST(-0.0015339801862846436), + FX16_CONST(0.9999952938095762), FX16_CONST(-0.0030679567629660156), + FX16_CONST(0.9999894110819284), FX16_CONST(-0.00460192612044855), + FX16_CONST(0.9999811752826011), FX16_CONST(-0.006135884649154393), + FX16_CONST(0.9999705864309741), FX16_CONST(-0.007669828739530955), + FX16_CONST(0.9999576445519639), FX16_CONST(-0.009203754782059837), + FX16_CONST(0.9999423496760239), FX16_CONST(-0.010737659167264449), + FX16_CONST(0.9999247018391445), FX16_CONST(-0.012271538285719823), + FX16_CONST(0.9999047010828529), FX16_CONST(-0.013805388528060226), + FX16_CONST(0.9998823474542126), FX16_CONST(-0.015339206284988098), + FX16_CONST(0.9998576410058239), FX16_CONST(-0.01687298794728165), + FX16_CONST(0.9998305817958234), FX16_CONST(-0.018406729905804695), + FX16_CONST(0.9998011698878843), FX16_CONST(-0.019940428551514476), + FX16_CONST(0.9997694053512153), FX16_CONST(-0.021474080275469484), + FX16_CONST(0.9997352882605617), FX16_CONST(-0.02300768146883929), + FX16_CONST(0.9996988186962042), FX16_CONST(-0.024541228522912142), + FX16_CONST(0.9996599967439592), FX16_CONST(-0.026074717829103915), + FX16_CONST(0.9996188224951786), FX16_CONST(-0.027608145778965698), + FX16_CONST(0.9995752960467492), FX16_CONST(-0.029141508764193618), + FX16_CONST(0.9995294175010931), FX16_CONST(-0.03067480317663646), + FX16_CONST(0.999481186966167), FX16_CONST(-0.03220802540830458), + FX16_CONST(0.9994306045554617), FX16_CONST(-0.03374117185137752), + FX16_CONST(0.9993776703880028), FX16_CONST(-0.03527423889821382), + FX16_CONST(0.9993223845883495), FX16_CONST(-0.036807222941358866), + FX16_CONST(0.9992647472865944), FX16_CONST(-0.038340120373552666), + FX16_CONST(0.9992047586183639), FX16_CONST(-0.03987292758773973), + FX16_CONST(0.9991424187248169), FX16_CONST(-0.041405640977076594), + FX16_CONST(0.9990777277526454), FX16_CONST(-0.042938256934940834), + FX16_CONST(0.9990106858540734), FX16_CONST(-0.04447077185493862), + FX16_CONST(0.9989412931868569), FX16_CONST(-0.04600318213091452), + FX16_CONST(0.9988695499142836), FX16_CONST(-0.047535484156959136), + FX16_CONST(0.9987954562051724), FX16_CONST(-0.04906767432741801), + FX16_CONST(0.9987190122338729), FX16_CONST(-0.05059974903689921), + FX16_CONST(0.9986402181802653), FX16_CONST(-0.05213170468028319), + FX16_CONST(0.9985590742297593), FX16_CONST(-0.053663537652730554), + FX16_CONST(0.9984755805732948), FX16_CONST(-0.05519524434968991), + FX16_CONST(0.9983897374073402), FX16_CONST(-0.05672682116690766), + FX16_CONST(0.9983015449338929), FX16_CONST(-0.05825826450043561), + FX16_CONST(0.9982110033604782), FX16_CONST(-0.05978957074663988), + FX16_CONST(0.9981181129001492), FX16_CONST(-0.06132073630220853), + FX16_CONST(0.9980228737714862), FX16_CONST(-0.06285175756416131), + FX16_CONST(0.997925286198596), FX16_CONST(-0.06438263092985728), + FX16_CONST(0.9978253504111116), FX16_CONST(-0.0659133527970038), + FX16_CONST(0.9977230666441916), FX16_CONST(-0.06744391956366398), + FX16_CONST(0.9976184351385196), FX16_CONST(-0.06897432762826661), + FX16_CONST(0.9975114561403035), FX16_CONST(-0.0705045733896139), + FX16_CONST(0.9974021299012753), FX16_CONST(-0.07203465324688929), + FX16_CONST(0.9972904566786902), FX16_CONST(-0.07356456359966733), + FX16_CONST(0.9971764367353262), FX16_CONST(-0.07509430084792117), + FX16_CONST(0.997060070339483), FX16_CONST(-0.0766238613920315), + FX16_CONST(0.9969413577649822), FX16_CONST(-0.07815324163279419), + FX16_CONST(0.9968202992911658), FX16_CONST(-0.07968243797143001), + FX16_CONST(0.9966968952028961), FX16_CONST(-0.08121144680959226), + FX16_CONST(0.9965711457905548), FX16_CONST(-0.08274026454937568), + FX16_CONST(0.9964430513500426), FX16_CONST(-0.084268887593324), + FX16_CONST(0.996312612182778), FX16_CONST(-0.08579731234443976), + FX16_CONST(0.9961798285956969), FX16_CONST(-0.0873255352061921), + FX16_CONST(0.996044700901252), FX16_CONST(-0.08885355258252456), + FX16_CONST(0.9959072294174117), FX16_CONST(-0.09038136087786489), + FX16_CONST(0.9957674144676598), FX16_CONST(-0.09190895649713257), + FX16_CONST(0.9956252563809943), FX16_CONST(-0.09343633584574779), + FX16_CONST(0.9954807554919269), FX16_CONST(-0.09496349532963895), + FX16_CONST(0.9953339121404823), FX16_CONST(-0.09649043135525248), + FX16_CONST(0.9951847266721969), FX16_CONST(-0.09801714032956065), + FX16_CONST(0.9950331994381186), FX16_CONST(-0.09954361866006932), + FX16_CONST(0.9948793307948056), FX16_CONST(-0.10106986275482775), + FX16_CONST(0.9947231211043257), FX16_CONST(-0.10259586902243616), + FX16_CONST(0.9945645707342554), FX16_CONST(-0.1041216338720546), + FX16_CONST(0.9944036800576791), FX16_CONST(-0.10564715371341057), + FX16_CONST(0.9942404494531879), FX16_CONST(-0.10717242495680876), + FX16_CONST(0.9940748793048795), FX16_CONST(-0.10869744401313856), + FX16_CONST(0.9939069700023561), FX16_CONST(-0.11022220729388306), + FX16_CONST(0.9937367219407246), FX16_CONST(-0.11174671121112655), + FX16_CONST(0.9935641355205953), FX16_CONST(-0.11327095217756424), + FX16_CONST(0.9933892111480807), FX16_CONST(-0.11479492660651013), + FX16_CONST(0.9932119492347945), FX16_CONST(-0.11631863091190475), + FX16_CONST(0.9930323501978514), FX16_CONST(-0.1178420615083249), + FX16_CONST(0.9928504144598651), FX16_CONST(-0.11936521481099123), + FX16_CONST(0.992666142448948), FX16_CONST(-0.1208880872357771), + FX16_CONST(0.99247953459871), FX16_CONST(-0.12241067519921615), + FX16_CONST(0.9922905913482574), FX16_CONST(-0.12393297511851208), + FX16_CONST(0.9920993131421918), FX16_CONST(-0.12545498341154607), + FX16_CONST(0.9919057004306093), FX16_CONST(-0.12697669649688587), + FX16_CONST(0.9917097536690995), FX16_CONST(-0.1284981107937931), + FX16_CONST(0.991511473318744), FX16_CONST(-0.13001922272223324), + FX16_CONST(0.9913108598461154), FX16_CONST(-0.13154002870288314), + FX16_CONST(0.9911079137232769), FX16_CONST(-0.13306052515713904), + FX16_CONST(0.99090263542778), FX16_CONST(-0.1345807085071261), + FX16_CONST(0.9906950254426646), FX16_CONST(-0.13610057517570606), + FX16_CONST(0.990485084256457), FX16_CONST(-0.13762012158648607), + FX16_CONST(0.9902728123631691), FX16_CONST(-0.13913934416382617), + FX16_CONST(0.9900582102622971), FX16_CONST(-0.14065823933284913), + FX16_CONST(0.9898412784588205), FX16_CONST(-0.1421768035194479), + FX16_CONST(0.9896220174632009), FX16_CONST(-0.14369503315029444), + FX16_CONST(0.9894004277913804), FX16_CONST(-0.1452129246528474), + FX16_CONST(0.989176509964781), FX16_CONST(-0.14673047445536164), + FX16_CONST(0.988950264510303), FX16_CONST(-0.1482476789868961), + FX16_CONST(0.9887216919603238), FX16_CONST(-0.1497645346773215), + FX16_CONST(0.9884907928526967), FX16_CONST(-0.15128103795733014), + FX16_CONST(0.9882575677307495), FX16_CONST(-0.1527971852584433), + FX16_CONST(0.9880220171432835), FX16_CONST(-0.15431297301302013), + FX16_CONST(0.9877841416445722), FX16_CONST(-0.1558283976542652), + FX16_CONST(0.9875439417943593), FX16_CONST(-0.15734345561623816), + FX16_CONST(0.9873014181578584), FX16_CONST(-0.15885814333386128), + FX16_CONST(0.987056571305751), FX16_CONST(-0.16037245724292826), + FX16_CONST(0.9868094018141855), FX16_CONST(-0.16188639378011177), + FX16_CONST(0.9865599102647755), FX16_CONST(-0.16339994938297311), + FX16_CONST(0.9863080972445987), FX16_CONST(-0.16491312048996995), + FX16_CONST(0.9860539633461954), FX16_CONST(-0.1664259035404641), + FX16_CONST(0.9857975091675675), FX16_CONST(-0.1679382949747311), + FX16_CONST(0.9855387353121761), FX16_CONST(-0.16945029123396782), + FX16_CONST(0.9852776423889412), FX16_CONST(-0.17096188876030124), + FX16_CONST(0.9850142310122398), FX16_CONST(-0.17247308399679592), + FX16_CONST(0.9847485018019042), FX16_CONST(-0.1739838733874637), + FX16_CONST(0.9844804553832209), FX16_CONST(-0.17549425337727126), + FX16_CONST(0.984210092386929), FX16_CONST(-0.17700422041214875), + FX16_CONST(0.9839374134492189), FX16_CONST(-0.17851377093899745), + FX16_CONST(0.9836624192117303), FX16_CONST(-0.1800229014056994), + FX16_CONST(0.9833851103215512), FX16_CONST(-0.18153160826112502), + FX16_CONST(0.9831054874312163), FX16_CONST(-0.18303988795514092), + FX16_CONST(0.9828235511987053), FX16_CONST(-0.18454773693861953), + FX16_CONST(0.9825393022874412), FX16_CONST(-0.1860551516634465), + FX16_CONST(0.9822527413662894), FX16_CONST(-0.1875621285825296), + FX16_CONST(0.9819638691095552), FX16_CONST(-0.18906866414980616), + FX16_CONST(0.9816726861969831), FX16_CONST(-0.19057475482025266), + FX16_CONST(0.9813791933137546), FX16_CONST(-0.19208039704989227), + FX16_CONST(0.9810833911504867), FX16_CONST(-0.1935855872958036), + FX16_CONST(0.9807852804032304), FX16_CONST(-0.1950903220161282), + FX16_CONST(0.9804848617734694), FX16_CONST(-0.1965945976700801), + FX16_CONST(0.9801821359681174), FX16_CONST(-0.19809841071795362), + FX16_CONST(0.9798771036995176), FX16_CONST(-0.19960175762113094), + FX16_CONST(0.9795697656854405), FX16_CONST(-0.20110463484209182), + FX16_CONST(0.9792601226490821), FX16_CONST(-0.20260703884442097), + FX16_CONST(0.9789481753190622), FX16_CONST(-0.2041089660928169), + FX16_CONST(0.9786339244294232), FX16_CONST(-0.2056104130530992), + FX16_CONST(0.9783173707196277), FX16_CONST(-0.20711137619221845), + FX16_CONST(0.9779985149345571), FX16_CONST(-0.20861185197826332), + FX16_CONST(0.9776773578245099), FX16_CONST(-0.2101118368804696), + FX16_CONST(0.9773539001452001), FX16_CONST(-0.2116113273692275), + FX16_CONST(0.9770281426577544), FX16_CONST(-0.21311031991609125), + FX16_CONST(0.9767000861287118), FX16_CONST(-0.2146088109937868), + FX16_CONST(0.9763697313300211), FX16_CONST(-0.2161067970762195), + FX16_CONST(0.9760370790390391), FX16_CONST(-0.21760427463848356), + FX16_CONST(0.9757021300385286), FX16_CONST(-0.21910124015686966), + FX16_CONST(0.975364885116657), FX16_CONST(-0.22059769010887353), + FX16_CONST(0.9750253450669941), FX16_CONST(-0.22209362097320348), + FX16_CONST(0.9746835106885107), FX16_CONST(-0.22358902922978988), + FX16_CONST(0.9743393827855759), FX16_CONST(-0.22508391135979267), + FX16_CONST(0.9739929621679558), FX16_CONST(-0.22657826384560997), + FX16_CONST(0.973644249650812), FX16_CONST(-0.22807208317088568), + FX16_CONST(0.9732932460546982), FX16_CONST(-0.22956536582051876), + FX16_CONST(0.9729399522055602), FX16_CONST(-0.23105810828067114), + FX16_CONST(0.9725843689347322), FX16_CONST(-0.23255030703877522), + FX16_CONST(0.9722264970789364), FX16_CONST(-0.23404195858354332), + FX16_CONST(0.9718663374802794), FX16_CONST(-0.23553305940497535), + FX16_CONST(0.9715038909862518), FX16_CONST(-0.23702360599436723), + FX16_CONST(0.9711391584497251), FX16_CONST(-0.2385135948443184), + FX16_CONST(0.9707721407289504), FX16_CONST(-0.2400030224487414), + FX16_CONST(0.9704028386875555), FX16_CONST(-0.24149188530286916), + FX16_CONST(0.970031253194544), FX16_CONST(-0.24298017990326387), + FX16_CONST(0.9696573851242924), FX16_CONST(-0.2444679027478241), + FX16_CONST(0.9692812353565485), FX16_CONST(-0.24595505033579448), + FX16_CONST(0.9689028047764289), FX16_CONST(-0.24744161916777332), + FX16_CONST(0.9685220942744174), FX16_CONST(-0.24892760574572012), + FX16_CONST(0.9681391047463624), FX16_CONST(-0.25041300657296517), + FX16_CONST(0.9677538370934755), FX16_CONST(-0.2518978181542168), + FX16_CONST(0.9673662922223285), FX16_CONST(-0.25338203699557016), + FX16_CONST(0.9669764710448521), FX16_CONST(-0.2548656596045145), + FX16_CONST(0.9665843744783331), FX16_CONST(-0.25634868248994275), + FX16_CONST(0.9661900034454126), FX16_CONST(-0.2578311021621588), + FX16_CONST(0.9657933588740837), FX16_CONST(-0.25931291513288623), + FX16_CONST(0.9653944416976894), FX16_CONST(-0.26079411791527546), + FX16_CONST(0.9649932528549204), FX16_CONST(-0.2622747070239135), + FX16_CONST(0.9645897932898128), FX16_CONST(-0.2637546789748314), + FX16_CONST(0.9641840639517458), FX16_CONST(-0.2652340302855118), + FX16_CONST(0.9637760657954398), FX16_CONST(-0.2667127574748983), + FX16_CONST(0.963365799780954), FX16_CONST(-0.268190857063403), + FX16_CONST(0.9629532668736839), FX16_CONST(-0.2696683255729151), + FX16_CONST(0.9625384680443592), FX16_CONST(-0.27114515952680796), + FX16_CONST(0.9621214042690416), FX16_CONST(-0.27262135544994887), + FX16_CONST(0.9617020765291225), FX16_CONST(-0.2740969098687062), + FX16_CONST(0.9612804858113206), FX16_CONST(-0.27557181931095814), + FX16_CONST(0.9608566331076797), FX16_CONST(-0.27704608030609984), + FX16_CONST(0.9604305194155659), FX16_CONST(-0.27851968938505295), + FX16_CONST(0.9600021457376658), FX16_CONST(-0.2799926430802733), + FX16_CONST(0.9595715130819845), FX16_CONST(-0.28146493792575794), + FX16_CONST(0.959138622461842), FX16_CONST(-0.2829365704570553), + FX16_CONST(0.9587034748958716), FX16_CONST(-0.2844075372112717), + FX16_CONST(0.9582660714080177), FX16_CONST(-0.2858778347270806), + FX16_CONST(0.9578264130275329), FX16_CONST(-0.28734745954472946), + FX16_CONST(0.957384500788976), FX16_CONST(-0.28881640820604937), + FX16_CONST(0.9569403357322089), FX16_CONST(-0.29028467725446216), + FX16_CONST(0.9564939189023951), FX16_CONST(-0.29175226323498926), + FX16_CONST(0.9560452513499965), FX16_CONST(-0.2932191626942586), + FX16_CONST(0.9555943341307711), FX16_CONST(-0.2946853721805142), + FX16_CONST(0.9551411683057707), FX16_CONST(-0.29615088824362384), + FX16_CONST(0.9546857549413383), FX16_CONST(-0.2976157074350862), + FX16_CONST(0.9542280951091057), FX16_CONST(-0.29907982630804036), + FX16_CONST(0.9537681898859903), FX16_CONST(-0.3005432414172733), + FX16_CONST(0.9533060403541939), FX16_CONST(-0.3020059493192281), + FX16_CONST(0.9528416476011987), FX16_CONST(-0.30346794657201126), + FX16_CONST(0.9523750127197659), FX16_CONST(-0.30492922973540226), + FX16_CONST(0.9519061368079323), FX16_CONST(-0.306389795370861), + FX16_CONST(0.9514350209690083), FX16_CONST(-0.30784964004153487), + FX16_CONST(0.9509616663115751), FX16_CONST(-0.3093087603122686), + FX16_CONST(0.9504860739494818), FX16_CONST(-0.31076715274961136), + FX16_CONST(0.950008245001843), FX16_CONST(-0.31222481392182494), + FX16_CONST(0.9495281805930367), FX16_CONST(-0.3136817403988914), + FX16_CONST(0.9490458818527006), FX16_CONST(-0.31513792875252233), + FX16_CONST(0.9485613499157304), FX16_CONST(-0.31659337555616573), + FX16_CONST(0.9480745859222762), FX16_CONST(-0.31804807738501495), + FX16_CONST(0.9475855910177412), FX16_CONST(-0.31950203081601564), + FX16_CONST(0.9470943663527772), FX16_CONST(-0.3209552324278751), + FX16_CONST(0.9466009130832835), FX16_CONST(-0.32240767880106985), + FX16_CONST(0.9461052323704034), FX16_CONST(-0.32385936651785285), + FX16_CONST(0.9456073253805214), FX16_CONST(-0.32531029216226287), + FX16_CONST(0.9451071932852606), FX16_CONST(-0.3267604523201316), + FX16_CONST(0.9446048372614803), FX16_CONST(-0.32820984357909255), + FX16_CONST(0.9441002584912727), FX16_CONST(-0.32965846252858744), + FX16_CONST(0.9435934581619604), FX16_CONST(-0.3311063057598763), + FX16_CONST(0.9430844374660935), FX16_CONST(-0.33255336986604406), + FX16_CONST(0.9425731976014469), FX16_CONST(-0.3339996514420094), + FX16_CONST(0.9420597397710174), FX16_CONST(-0.33544514708453155), + FX16_CONST(0.9415440651830208), FX16_CONST(-0.33688985339221994), + FX16_CONST(0.9410261750508893), FX16_CONST(-0.3383337669655412), + FX16_CONST(0.9405060705932683), FX16_CONST(-0.33977688440682685), + FX16_CONST(0.939983753034014), FX16_CONST(-0.3412192023202823), + FX16_CONST(0.9394592236021899), FX16_CONST(-0.34266071731199427), + FX16_CONST(0.9389324835320645), FX16_CONST(-0.34410142598993887), + FX16_CONST(0.9384035340631082), FX16_CONST(-0.34554132496398904), + FX16_CONST(0.9378723764399899), FX16_CONST(-0.34698041084592357), + FX16_CONST(0.937339011912575), FX16_CONST(-0.3484186802494344), + FX16_CONST(0.9368034417359216), FX16_CONST(-0.3498561297901349), + FX16_CONST(0.9362656671702783), FX16_CONST(-0.35129275608556704), + FX16_CONST(0.9357256894810804), FX16_CONST(-0.3527285557552106), + FX16_CONST(0.9351835099389476), FX16_CONST(-0.3541635254204904), + FX16_CONST(0.9346391298196808), FX16_CONST(-0.35559766170478385), + FX16_CONST(0.934092550404259), FX16_CONST(-0.3570309612334299), + FX16_CONST(0.9335437729788363), FX16_CONST(-0.35846342063373643), + FX16_CONST(0.9329927988347388), FX16_CONST(-0.35989503653498817), + FX16_CONST(0.9324396292684624), FX16_CONST(-0.36132580556845423), + FX16_CONST(0.9318842655816681), FX16_CONST(-0.3627557243673971), + FX16_CONST(0.9313267090811805), FX16_CONST(-0.3641847895670797), + FX16_CONST(0.9307669610789837), FX16_CONST(-0.36561299780477385), + FX16_CONST(0.9302050228922191), FX16_CONST(-0.3670403457197671), + FX16_CONST(0.9296408958431813), FX16_CONST(-0.3684668299533722), + FX16_CONST(0.9290745812593157), FX16_CONST(-0.36989244714893416), + FX16_CONST(0.9285060804732156), FX16_CONST(-0.3713171939518375), + FX16_CONST(0.9279353948226179), FX16_CONST(-0.3727410670095157), + FX16_CONST(0.9273625256504011), FX16_CONST(-0.3741640629714579), + FX16_CONST(0.9267874743045817), FX16_CONST(-0.3755861784892172), + FX16_CONST(0.9262102421383114), FX16_CONST(-0.3770074102164182), + FX16_CONST(0.9256308305098728), FX16_CONST(-0.37842775480876545), + FX16_CONST(0.9250492407826777), FX16_CONST(-0.379847208924051), + FX16_CONST(0.9244654743252626), FX16_CONST(-0.3812657692221624), + FX16_CONST(0.9238795325112867), FX16_CONST(-0.3826834323650897), + FX16_CONST(0.9232914167195277), FX16_CONST(-0.38410019501693493), + FX16_CONST(0.9227011283338785), FX16_CONST(-0.3855160538439189), + FX16_CONST(0.9221086687433452), FX16_CONST(-0.3869310055143886), + FX16_CONST(0.921514039342042), FX16_CONST(-0.3883450466988262), + FX16_CONST(0.9209172415291895), FX16_CONST(-0.3897581740698563), + FX16_CONST(0.9203182767091106), FX16_CONST(-0.39117038430225387), + FX16_CONST(0.9197171462912274), FX16_CONST(-0.3925816740729514), + FX16_CONST(0.9191138516900578), FX16_CONST(-0.393992040061048), + FX16_CONST(0.9185083943252123), FX16_CONST(-0.3954014789478162), + FX16_CONST(0.9179007756213905), FX16_CONST(-0.3968099874167103), + FX16_CONST(0.917290997008378), FX16_CONST(-0.3982175621533735), + FX16_CONST(0.9166790599210427), FX16_CONST(-0.3996241998456467), + FX16_CONST(0.9160649657993317), FX16_CONST(-0.4010298971835757), + FX16_CONST(0.9154487160882678), FX16_CONST(-0.40243465085941843), + FX16_CONST(0.9148303122379462), FX16_CONST(-0.403838457567654), + FX16_CONST(0.9142097557035307), FX16_CONST(-0.40524131400498975), + FX16_CONST(0.9135870479452508), FX16_CONST(-0.40664321687036903), + FX16_CONST(0.9129621904283982), FX16_CONST(-0.40804416286497863), + FX16_CONST(0.9123351846233229), FX16_CONST(-0.40944414869225754), + FX16_CONST(0.9117060320054299), FX16_CONST(-0.4108431710579038), + FX16_CONST(0.9110747340551764), FX16_CONST(-0.4122412266698829), + FX16_CONST(0.9104412922580672), FX16_CONST(-0.4136383122384345), + FX16_CONST(0.9098057081046523), FX16_CONST(-0.4150344244760815), + FX16_CONST(0.9091679830905225), FX16_CONST(-0.416429560097637), + FX16_CONST(0.9085281187163061), FX16_CONST(-0.41782371582021227), + FX16_CONST(0.9078861164876662), FX16_CONST(-0.41921688836322407), + FX16_CONST(0.9072419779152959), FX16_CONST(-0.4206090744484024), + FX16_CONST(0.9065957045149153), FX16_CONST(-0.4220002707997997), + FX16_CONST(0.9059472978072686), FX16_CONST(-0.42339047414379577), + FX16_CONST(0.9052967593181188), FX16_CONST(-0.4247796812091087), + FX16_CONST(0.9046440905782461), FX16_CONST(-0.42616788872679967), + FX16_CONST(0.9039892931234434), FX16_CONST(-0.42755509343028186), + FX16_CONST(0.9033323684945118), FX16_CONST(-0.42894129205532944), + FX16_CONST(0.9026733182372587), FX16_CONST(-0.4303264813400827), + FX16_CONST(0.9020121439024933), FX16_CONST(-0.4317106580250571), + FX16_CONST(0.901348847046022), FX16_CONST(-0.4330938188531519), + FX16_CONST(0.9006834292286469), FX16_CONST(-0.4344759605696558), + FX16_CONST(0.9000158920161603), FX16_CONST(-0.43585707992225536), + FX16_CONST(0.8993462369793416), FX16_CONST(-0.4372371736610441), + FX16_CONST(0.8986744656939539), FX16_CONST(-0.4386162385385274), + FX16_CONST(0.8980005797407399), FX16_CONST(-0.43999427130963314), + FX16_CONST(0.8973245807054183), FX16_CONST(-0.4413712687317167), + FX16_CONST(0.8966464701786803), FX16_CONST(-0.4427472275645698), + FX16_CONST(0.8959662497561852), FX16_CONST(-0.44412214457042914), + FX16_CONST(0.8952839210385575), FX16_CONST(-0.4454960165139818), + FX16_CONST(0.8945994856313828), FX16_CONST(-0.446868840162374), + FX16_CONST(0.8939129451452033), FX16_CONST(-0.4482406122852199), + FX16_CONST(0.8932243011955152), FX16_CONST(-0.4496113296546067), + FX16_CONST(0.8925335554027647), FX16_CONST(-0.4509809890451037), + FX16_CONST(0.8918407093923427), FX16_CONST(-0.4523495872337709), + FX16_CONST(0.8911457647945834), FX16_CONST(-0.4537171210001636), + FX16_CONST(0.890448723244758), FX16_CONST(-0.4550835871263437), + FX16_CONST(0.8897495863830728), FX16_CONST(-0.456448982396884), + FX16_CONST(0.8890483558546647), FX16_CONST(-0.457813303598877), + FX16_CONST(0.8883450333095964), FX16_CONST(-0.45917654752194403), + FX16_CONST(0.8876396204028539), FX16_CONST(-0.46053871095824006), + FX16_CONST(0.8869321187943423), FX16_CONST(-0.46189979070246256), + FX16_CONST(0.8862225301488806), FX16_CONST(-0.46325978355186015), + FX16_CONST(0.8855108561361998), FX16_CONST(-0.4646186863062379), + FX16_CONST(0.8847970984309379), FX16_CONST(-0.465976495767966), + FX16_CONST(0.884081258712635), FX16_CONST(-0.4673332087419884), + FX16_CONST(0.8833633386657317), FX16_CONST(-0.4686888220358277), + FX16_CONST(0.8826433399795628), FX16_CONST(-0.4700433324595955), + FX16_CONST(0.881921264348355), FX16_CONST(-0.4713967368259977), + FX16_CONST(0.8811971134712222), FX16_CONST(-0.47274903195034257), + FX16_CONST(0.8804708890521609), FX16_CONST(-0.4741002146505499), + FX16_CONST(0.8797425928000474), FX16_CONST(-0.4754502817471559), + FX16_CONST(0.8790122264286335), FX16_CONST(-0.4767992300633219), + FX16_CONST(0.8782797916565416), FX16_CONST(-0.478147056424843), + FX16_CONST(0.8775452902072612), FX16_CONST(-0.4794937576601531), + FX16_CONST(0.8768087238091458), FX16_CONST(-0.4808393306003338), + FX16_CONST(0.8760700941954066), FX16_CONST(-0.4821837720791227), + FX16_CONST(0.875329403104111), FX16_CONST(-0.48352707893291846), + FX16_CONST(0.8745866522781762), FX16_CONST(-0.484869248000791), + FX16_CONST(0.8738418434653668), FX16_CONST(-0.4862102761244864), + FX16_CONST(0.8730949784182902), FX16_CONST(-0.4875501601484357), + FX16_CONST(0.8723460588943915), FX16_CONST(-0.4888888969197631), + FX16_CONST(0.871595086655951), FX16_CONST(-0.4902264832882912), + FX16_CONST(0.870842063470079), FX16_CONST(-0.49156291610654973), + FX16_CONST(0.8700869911087115), FX16_CONST(-0.492898192229784), + FX16_CONST(0.8693298713486067), FX16_CONST(-0.49423230851595984), + FX16_CONST(0.868570705971341), FX16_CONST(-0.4955652618257724), + FX16_CONST(0.8678094967633032), FX16_CONST(-0.4968970490226545), + FX16_CONST(0.8670462455156928), FX16_CONST(-0.4982276669727816), + FX16_CONST(0.8662809540245131), FX16_CONST(-0.4995571125450818), + FX16_CONST(0.8655136240905691), FX16_CONST(-0.5008853826112408), + FX16_CONST(0.8647442575194625), FX16_CONST(-0.5022124740457106), + FX16_CONST(0.8639728561215868), FX16_CONST(-0.5035383837257175), + FX16_CONST(0.8631994217121242), FX16_CONST(-0.5048631085312676), + FX16_CONST(0.8624239561110406), FX16_CONST(-0.5061866453451551), + FX16_CONST(0.8616464611430814), FX16_CONST(-0.5075089910529708), + FX16_CONST(0.8608669386377672), FX16_CONST(-0.5088301425431071), + FX16_CONST(0.8600853904293903), FX16_CONST(-0.5101500967067666), + FX16_CONST(0.8593018183570085), FX16_CONST(-0.5114688504379704), + FX16_CONST(0.858516224264443), FX16_CONST(-0.5127864006335627), + FX16_CONST(0.8577286100002721), FX16_CONST(-0.5141027441932216), + FX16_CONST(0.8569389774178287), FX16_CONST(-0.515417878019463), + FX16_CONST(0.8561473283751946), FX16_CONST(-0.5167317990176497), + FX16_CONST(0.855353664735196), FX16_CONST(-0.5180445040959992), + FX16_CONST(0.8545579883654005), FX16_CONST(-0.5193559901655896), + FX16_CONST(0.8537603011381115), FX16_CONST(-0.5206662541403669), + FX16_CONST(0.8529606049303637), FX16_CONST(-0.5219752929371543), + FX16_CONST(0.8521589016239197), FX16_CONST(-0.5232831034756565), + FX16_CONST(0.8513551931052652), FX16_CONST(-0.5245896826784687), + FX16_CONST(0.8505494812656035), FX16_CONST(-0.5258950274710846), + FX16_CONST(0.8497417680008527), FX16_CONST(-0.5271991347819011), + FX16_CONST(0.8489320552116397), FX16_CONST(-0.5285020015422284), + FX16_CONST(0.8481203448032972), FX16_CONST(-0.5298036246862947), + FX16_CONST(0.8473066386858585), FX16_CONST(-0.5311040011512548), + FX16_CONST(0.8464909387740521), FX16_CONST(-0.5324031278771979), + FX16_CONST(0.8456732469872991), FX16_CONST(-0.533701001807153), + FX16_CONST(0.8448535652497072), FX16_CONST(-0.534997619887097), + FX16_CONST(0.8440318954900664), FX16_CONST(-0.5362929790659631), + FX16_CONST(0.8432082396418453), FX16_CONST(-0.5375870762956456), + FX16_CONST(0.842382599643186), FX16_CONST(-0.5388799085310083), + FX16_CONST(0.8415549774368984), FX16_CONST(-0.5401714727298929), + FX16_CONST(0.8407253749704582), FX16_CONST(-0.5414617658531232), + FX16_CONST(0.8398937941959995), FX16_CONST(-0.5427507848645158), + FX16_CONST(0.8390602370703127), FX16_CONST(-0.5440385267308839), + FX16_CONST(0.8382247055548382), FX16_CONST(-0.5453249884220462), + FX16_CONST(0.8373872016156619), FX16_CONST(-0.5466101669108347), + FX16_CONST(0.836547727223512), FX16_CONST(-0.5478940591731002), + FX16_CONST(0.8357062843537527), FX16_CONST(-0.5491766621877195), + FX16_CONST(0.8348628749863801), FX16_CONST(-0.5504579729366047), + FX16_CONST(0.834017501106018), FX16_CONST(-0.5517379884047074), + FX16_CONST(0.8331701647019133), FX16_CONST(-0.5530167055800274), + FX16_CONST(0.8323208677679297), FX16_CONST(-0.5542941214536201), + FX16_CONST(0.8314696123025453), FX16_CONST(-0.555570233019602), + FX16_CONST(0.8306164003088463), FX16_CONST(-0.55684503727516), + FX16_CONST(0.829761233794523), FX16_CONST(-0.5581185312205561), + FX16_CONST(0.8289041147718651), FX16_CONST(-0.5593907118591358), + FX16_CONST(0.8280450452577558), FX16_CONST(-0.5606615761973359), + FX16_CONST(0.827184027273669), FX16_CONST(-0.5619311212446895), + FX16_CONST(0.8263210628456636), FX16_CONST(-0.5631993440138339), + FX16_CONST(0.8254561540043776), FX16_CONST(-0.5644662415205194), + FX16_CONST(0.8245893027850252), FX16_CONST(-0.5657318107836132), + FX16_CONST(0.8237205112273915), FX16_CONST(-0.5669960488251085), + FX16_CONST(0.8228497813758263), FX16_CONST(-0.5682589526701315), + FX16_CONST(0.8219771152792414), FX16_CONST(-0.5695205193469473), + FX16_CONST(0.8211025149911048), FX16_CONST(-0.5707807458869671), + FX16_CONST(0.8202259825694347), FX16_CONST(-0.572039629324757), + FX16_CONST(0.8193475200767971), FX16_CONST(-0.573297166698042), + FX16_CONST(0.8184671295802988), FX16_CONST(-0.5745533550477158), + FX16_CONST(0.8175848131515837), FX16_CONST(-0.5758081914178453), + FX16_CONST(0.816700572866828), FX16_CONST(-0.5770616728556793), + FX16_CONST(0.8158144108067338), FX16_CONST(-0.5783137964116555), + FX16_CONST(0.8149263290565265), FX16_CONST(-0.5795645591394059), + FX16_CONST(0.8140363297059485), FX16_CONST(-0.5808139580957644), + FX16_CONST(0.8131444148492536), FX16_CONST(-0.5820619903407755), + FX16_CONST(0.8122505865852039), FX16_CONST(-0.5833086529376984), + FX16_CONST(0.8113548470170638), FX16_CONST(-0.5845539429530152), + FX16_CONST(0.8104571982525948), FX16_CONST(-0.5857978574564389), + FX16_CONST(0.8095576424040515), FX16_CONST(-0.5870403935209177), + FX16_CONST(0.8086561815881751), FX16_CONST(-0.5882815482226452), + FX16_CONST(0.8077528179261904), FX16_CONST(-0.5895213186410639), + FX16_CONST(0.8068475535437994), FX16_CONST(-0.590759701858874), + FX16_CONST(0.8059403905711764), FX16_CONST(-0.5919966949620409), + FX16_CONST(0.8050313311429635), FX16_CONST(-0.5932322950397999), + FX16_CONST(0.8041203773982658), FX16_CONST(-0.5944664991846643), + FX16_CONST(0.8032075314806449), FX16_CONST(-0.5956993044924334), + FX16_CONST(0.8022927955381156), FX16_CONST(-0.5969307080621966), + FX16_CONST(0.8013761717231402), FX16_CONST(-0.5981607069963422), + FX16_CONST(0.8004576621926228), FX16_CONST(-0.5993892984005645), + FX16_CONST(0.7995372691079052), FX16_CONST(-0.6006164793838688), + FX16_CONST(0.7986149946347609), FX16_CONST(-0.60184224705858), + FX16_CONST(0.797690840943391), FX16_CONST(-0.6030665985403483), + FX16_CONST(0.7967648102084189), FX16_CONST(-0.6042895309481559), + FX16_CONST(0.7958369046088836), FX16_CONST(-0.6055110414043254), + FX16_CONST(0.7949071263282369), FX16_CONST(-0.6067311270345246), + FX16_CONST(0.7939754775543373), FX16_CONST(-0.6079497849677735), + FX16_CONST(0.7930419604794436), FX16_CONST(-0.6091670123364532), + FX16_CONST(0.7921065773002123), FX16_CONST(-0.6103828062763096), + FX16_CONST(0.7911693302176903), FX16_CONST(-0.6115971639264618), + FX16_CONST(0.79023022143731), FX16_CONST(-0.6128100824294097), + FX16_CONST(0.7892892531688859), FX16_CONST(-0.6140215589310382), + FX16_CONST(0.7883464276266063), FX16_CONST(-0.6152315905806267), + FX16_CONST(0.7874017470290313), FX16_CONST(-0.6164401745308536), + FX16_CONST(0.7864552135990859), FX16_CONST(-0.6176473079378038), + FX16_CONST(0.785506829564054), FX16_CONST(-0.6188529879609762), + FX16_CONST(0.7845565971555751), FX16_CONST(-0.6200572117632892), + FX16_CONST(0.7836045186096383), FX16_CONST(-0.6212599765110874), + FX16_CONST(0.7826505961665757), FX16_CONST(-0.62246127937415), + FX16_CONST(0.7816948320710593), FX16_CONST(-0.6236611175256946), + FX16_CONST(0.7807372285720946), FX16_CONST(-0.6248594881423862), + FX16_CONST(0.7797777879230144), FX16_CONST(-0.6260563884043435), + FX16_CONST(0.7788165123814761), FX16_CONST(-0.6272518154951439), + FX16_CONST(0.7778534042094531), FX16_CONST(-0.6284457666018326), + FX16_CONST(0.7768884656732324), FX16_CONST(-0.6296382389149271), + FX16_CONST(0.7759216990434078), FX16_CONST(-0.6308292296284244), + FX16_CONST(0.7749531065948739), FX16_CONST(-0.632018735939809), + FX16_CONST(0.7739826906068228), FX16_CONST(-0.6332067550500573), + FX16_CONST(0.7730104533627371), FX16_CONST(-0.6343932841636454), + FX16_CONST(0.7720363971503845), FX16_CONST(-0.6355783204885561), + FX16_CONST(0.7710605242618137), FX16_CONST(-0.6367618612362843), + FX16_CONST(0.7700828369933481), FX16_CONST(-0.6379439036218439), + FX16_CONST(0.7691033376455796), FX16_CONST(-0.6391244448637757), + FX16_CONST(0.7681220285233655), FX16_CONST(-0.6403034821841515), + FX16_CONST(0.7671389119358204), FX16_CONST(-0.641481012808583), + FX16_CONST(0.7661539901963128), FX16_CONST(-0.6426570339662269), + FX16_CONST(0.7651672656224591), FX16_CONST(-0.6438315428897913), + FX16_CONST(0.7641787405361168), FX16_CONST(-0.6450045368155439), + FX16_CONST(0.7631884172633812), FX16_CONST(-0.6461760129833164), + FX16_CONST(0.762196298134579), FX16_CONST(-0.647345968636512), + FX16_CONST(0.7612023854842619), FX16_CONST(-0.6485144010221124), + FX16_CONST(0.7602066816512023), FX16_CONST(-0.6496813073906833), + FX16_CONST(0.7592091889783881), FX16_CONST(-0.6508466849963808), + FX16_CONST(0.7582099098130153), FX16_CONST(-0.6520105310969595), + FX16_CONST(0.7572088465064847), FX16_CONST(-0.6531728429537765), + FX16_CONST(0.7562060014143945), FX16_CONST(-0.6543336178318004), + FX16_CONST(0.7552013768965364), FX16_CONST(-0.6554928529996155), + FX16_CONST(0.7541949753168893), FX16_CONST(-0.6566505457294288), + FX16_CONST(0.7531867990436125), FX16_CONST(-0.6578066932970785), + FX16_CONST(0.7521768504490427), FX16_CONST(-0.6589612929820374), + FX16_CONST(0.7511651319096866), FX16_CONST(-0.6601143420674204), + FX16_CONST(0.7501516458062151), FX16_CONST(-0.6612658378399922), + FX16_CONST(0.7491363945234593), FX16_CONST(-0.6624157775901719), + FX16_CONST(0.7481193804504037), FX16_CONST(-0.6635641586120397), + FX16_CONST(0.7471006059801801), FX16_CONST(-0.6647109782033449), + FX16_CONST(0.746080073510064), FX16_CONST(-0.6658562336655095), + FX16_CONST(0.7450577854414661), FX16_CONST(-0.6669999223036374), + FX16_CONST(0.7440337441799292), FX16_CONST(-0.6681420414265186), + FX16_CONST(0.7430079521351218), FX16_CONST(-0.6692825883466359), + FX16_CONST(0.7419804117208311), FX16_CONST(-0.6704215603801731), + FX16_CONST(0.740951125354959), FX16_CONST(-0.6715589548470184), + FX16_CONST(0.7399200954595163), FX16_CONST(-0.6726947690707727), + FX16_CONST(0.7388873244606152), FX16_CONST(-0.673829000378756), + FX16_CONST(0.7378528147884659), FX16_CONST(-0.674961646102012), + FX16_CONST(0.73681656887737), FX16_CONST(-0.6760927035753158), + FX16_CONST(0.7357785891657136), FX16_CONST(-0.6772221701371804), + FX16_CONST(0.7347388780959637), FX16_CONST(-0.6783500431298612), + FX16_CONST(0.7336974381146604), FX16_CONST(-0.679476319899365), + FX16_CONST(0.7326542716724128), FX16_CONST(-0.680600997795453), + FX16_CONST(0.7316093812238927), FX16_CONST(-0.6817240741716496), + FX16_CONST(0.7305627692278276), FX16_CONST(-0.682845546385248), + FX16_CONST(0.729514438146997), FX16_CONST(-0.6839654117973155), + FX16_CONST(0.7284643904482253), FX16_CONST(-0.6850836677727002), + FX16_CONST(0.7274126286023758), FX16_CONST(-0.6862003116800386), + FX16_CONST(0.7263591550843459), FX16_CONST(-0.6873153408917592), + FX16_CONST(0.7253039723730609), FX16_CONST(-0.6884287527840903), + FX16_CONST(0.7242470829514669), FX16_CONST(-0.6895405447370669), + FX16_CONST(0.7231884893065276), FX16_CONST(-0.6906507141345344), + FX16_CONST(0.7221281939292155), FX16_CONST(-0.6917592583641576), + FX16_CONST(0.7210661993145081), FX16_CONST(-0.6928661748174247), + FX16_CONST(0.7200025079613818), FX16_CONST(-0.6939714608896538), + FX16_CONST(0.7189371223728045), FX16_CONST(-0.6950751139800008), + FX16_CONST(0.7178700450557317), FX16_CONST(-0.696177131491463), + FX16_CONST(0.7168012785210996), FX16_CONST(-0.6972775108308864), + FX16_CONST(0.7157308252838187), FX16_CONST(-0.6983762494089728), + FX16_CONST(0.714658687862769), FX16_CONST(-0.6994733446402839), + FX16_CONST(0.7135848687807936), FX16_CONST(-0.7005687939432482), + FX16_CONST(0.7125093705646923), FX16_CONST(-0.7016625947401685), + FX16_CONST(0.7114321957452167), FX16_CONST(-0.7027547444572251), + FX16_CONST(0.7103533468570624), FX16_CONST(-0.7038452405244848), + FX16_CONST(0.7092728264388656), FX16_CONST(-0.7049340803759049), + FX16_CONST(0.7081906370331955), FX16_CONST(-0.7060212614493396), + FX16_CONST(0.7071067811865476), FX16_CONST(-0.7071067811865475), + FX16_CONST(0.7060212614493397), FX16_CONST(-0.7081906370331954), + FX16_CONST(0.7049340803759051), FX16_CONST(-0.7092728264388655), + FX16_CONST(0.703845240524485), FX16_CONST(-0.7103533468570623), + FX16_CONST(0.7027547444572252), FX16_CONST(-0.7114321957452165), + FX16_CONST(0.7016625947401687), FX16_CONST(-0.7125093705646922), + FX16_CONST(0.7005687939432483), FX16_CONST(-0.7135848687807935), + FX16_CONST(0.699473344640284), FX16_CONST(-0.7146586878627689), + FX16_CONST(0.6983762494089729), FX16_CONST(-0.7157308252838186), + FX16_CONST(0.6972775108308865), FX16_CONST(-0.7168012785210995), + FX16_CONST(0.6961771314914631), FX16_CONST(-0.7178700450557316), + FX16_CONST(0.6950751139800009), FX16_CONST(-0.7189371223728044), + FX16_CONST(0.6939714608896539), FX16_CONST(-0.7200025079613817), + FX16_CONST(0.6928661748174249), FX16_CONST(-0.7210661993145079), + FX16_CONST(0.6917592583641579), FX16_CONST(-0.7221281939292152), + FX16_CONST(0.6906507141345346), FX16_CONST(-0.7231884893065275), + FX16_CONST(0.689540544737067), FX16_CONST(-0.7242470829514668), + FX16_CONST(0.6884287527840904), FX16_CONST(-0.7253039723730608), + FX16_CONST(0.6873153408917593), FX16_CONST(-0.7263591550843458), + FX16_CONST(0.6862003116800387), FX16_CONST(-0.7274126286023757), + FX16_CONST(0.6850836677727004), FX16_CONST(-0.7284643904482252), + FX16_CONST(0.6839654117973156), FX16_CONST(-0.7295144381469968), + FX16_CONST(0.6828455463852481), FX16_CONST(-0.7305627692278275), + FX16_CONST(0.6817240741716497), FX16_CONST(-0.7316093812238926), + FX16_CONST(0.6806009977954532), FX16_CONST(-0.7326542716724127), + FX16_CONST(0.6794763198993651), FX16_CONST(-0.7336974381146603), + FX16_CONST(0.6783500431298614), FX16_CONST(-0.7347388780959635), + FX16_CONST(0.6772221701371806), FX16_CONST(-0.7357785891657134), + FX16_CONST(0.6760927035753159), FX16_CONST(-0.7368165688773698), + FX16_CONST(0.6749616461020123), FX16_CONST(-0.7378528147884658), + FX16_CONST(0.6738290003787561), FX16_CONST(-0.7388873244606151), + FX16_CONST(0.6726947690707729), FX16_CONST(-0.7399200954595162), + FX16_CONST(0.6715589548470186), FX16_CONST(-0.7409511253549589), + FX16_CONST(0.6704215603801732), FX16_CONST(-0.741980411720831), + FX16_CONST(0.669282588346636), FX16_CONST(-0.7430079521351217), + FX16_CONST(0.6681420414265187), FX16_CONST(-0.7440337441799291), + FX16_CONST(0.6669999223036376), FX16_CONST(-0.745057785441466), + FX16_CONST(0.6658562336655096), FX16_CONST(-0.7460800735100638), + FX16_CONST(0.664710978203345), FX16_CONST(-0.74710060598018), + FX16_CONST(0.6635641586120398), FX16_CONST(-0.7481193804504036), + FX16_CONST(0.662415777590172), FX16_CONST(-0.7491363945234591), + FX16_CONST(0.6612658378399923), FX16_CONST(-0.750151645806215), + FX16_CONST(0.6601143420674205), FX16_CONST(-0.7511651319096864), + FX16_CONST(0.6589612929820375), FX16_CONST(-0.7521768504490425), + FX16_CONST(0.6578066932970787), FX16_CONST(-0.7531867990436124), + FX16_CONST(0.656650545729429), FX16_CONST(-0.7541949753168892), + FX16_CONST(0.6554928529996156), FX16_CONST(-0.7552013768965364), + FX16_CONST(0.6543336178318006), FX16_CONST(-0.7562060014143945), + FX16_CONST(0.6531728429537766), FX16_CONST(-0.7572088465064847), + FX16_CONST(0.6520105310969597), FX16_CONST(-0.7582099098130152), + FX16_CONST(0.650846684996381), FX16_CONST(-0.759209188978388), + FX16_CONST(0.6496813073906834), FX16_CONST(-0.7602066816512022), + FX16_CONST(0.6485144010221126), FX16_CONST(-0.7612023854842617), + FX16_CONST(0.6473459686365121), FX16_CONST(-0.7621962981345789), + FX16_CONST(0.6461760129833166), FX16_CONST(-0.7631884172633812), + FX16_CONST(0.645004536815544), FX16_CONST(-0.7641787405361167), + FX16_CONST(0.6438315428897914), FX16_CONST(-0.765167265622459), + FX16_CONST(0.6426570339662271), FX16_CONST(-0.7661539901963128), + FX16_CONST(0.6414810128085832), FX16_CONST(-0.7671389119358204), + FX16_CONST(0.6403034821841516), FX16_CONST(-0.7681220285233654), + FX16_CONST(0.6391244448637758), FX16_CONST(-0.7691033376455795), + FX16_CONST(0.637943903621844), FX16_CONST(-0.7700828369933479), + FX16_CONST(0.6367618612362844), FX16_CONST(-0.7710605242618136), + FX16_CONST(0.6355783204885562), FX16_CONST(-0.7720363971503844), + FX16_CONST(0.6343932841636455), FX16_CONST(-0.773010453362737), + FX16_CONST(0.6332067550500574), FX16_CONST(-0.7739826906068227), + FX16_CONST(0.6320187359398091), FX16_CONST(-0.7749531065948738), + FX16_CONST(0.6308292296284245), FX16_CONST(-0.7759216990434077), + FX16_CONST(0.6296382389149272), FX16_CONST(-0.7768884656732323), + FX16_CONST(0.6284457666018327), FX16_CONST(-0.777853404209453), + FX16_CONST(0.6272518154951441), FX16_CONST(-0.778816512381476), + FX16_CONST(0.6260563884043436), FX16_CONST(-0.7797777879230143), + FX16_CONST(0.6248594881423863), FX16_CONST(-0.7807372285720945), + FX16_CONST(0.6236611175256949), FX16_CONST(-0.7816948320710593), + FX16_CONST(0.6224612793741501), FX16_CONST(-0.7826505961665756), + FX16_CONST(0.6212599765110876), FX16_CONST(-0.7836045186096382), + FX16_CONST(0.6200572117632894), FX16_CONST(-0.784556597155575), + FX16_CONST(0.6188529879609764), FX16_CONST(-0.7855068295640539), + FX16_CONST(0.6176473079378039), FX16_CONST(-0.7864552135990858), + FX16_CONST(0.6164401745308538), FX16_CONST(-0.7874017470290312), + FX16_CONST(0.6152315905806269), FX16_CONST(-0.7883464276266062), + FX16_CONST(0.6140215589310384), FX16_CONST(-0.7892892531688858), + FX16_CONST(0.6128100824294098), FX16_CONST(-0.7902302214373099), + FX16_CONST(0.6115971639264619), FX16_CONST(-0.7911693302176902), + FX16_CONST(0.6103828062763097), FX16_CONST(-0.7921065773002122), + FX16_CONST(0.6091670123364533), FX16_CONST(-0.7930419604794436), + FX16_CONST(0.6079497849677736), FX16_CONST(-0.7939754775543372), + FX16_CONST(0.6067311270345247), FX16_CONST(-0.7949071263282368), + FX16_CONST(0.6055110414043257), FX16_CONST(-0.7958369046088835), + FX16_CONST(0.604289530948156), FX16_CONST(-0.7967648102084187), + FX16_CONST(0.6030665985403484), FX16_CONST(-0.7976908409433909), + FX16_CONST(0.6018422470585801), FX16_CONST(-0.7986149946347608), + FX16_CONST(0.6006164793838689), FX16_CONST(-0.7995372691079051), + FX16_CONST(0.5993892984005647), FX16_CONST(-0.8004576621926226), + FX16_CONST(0.5981607069963424), FX16_CONST(-0.8013761717231402), + FX16_CONST(0.5969307080621967), FX16_CONST(-0.8022927955381155), + FX16_CONST(0.5956993044924335), FX16_CONST(-0.8032075314806448), + FX16_CONST(0.5944664991846644), FX16_CONST(-0.8041203773982657), + FX16_CONST(0.5932322950398), FX16_CONST(-0.8050313311429634), + FX16_CONST(0.591996694962041), FX16_CONST(-0.8059403905711763), + FX16_CONST(0.5907597018588742), FX16_CONST(-0.8068475535437993), + FX16_CONST(0.589521318641064), FX16_CONST(-0.8077528179261902), + FX16_CONST(0.5882815482226453), FX16_CONST(-0.808656181588175), + FX16_CONST(0.5870403935209179), FX16_CONST(-0.8095576424040514), + FX16_CONST(0.585797857456439), FX16_CONST(-0.8104571982525947), + FX16_CONST(0.5845539429530153), FX16_CONST(-0.8113548470170637), + FX16_CONST(0.5833086529376985), FX16_CONST(-0.8122505865852038), + FX16_CONST(0.5820619903407757), FX16_CONST(-0.8131444148492535), + FX16_CONST(0.5808139580957645), FX16_CONST(-0.8140363297059484), + FX16_CONST(0.579564559139406), FX16_CONST(-0.8149263290565264), + FX16_CONST(0.5783137964116557), FX16_CONST(-0.8158144108067338), + FX16_CONST(0.5770616728556794), FX16_CONST(-0.8167005728668278), + FX16_CONST(0.5758081914178454), FX16_CONST(-0.8175848131515836), + FX16_CONST(0.5745533550477159), FX16_CONST(-0.8184671295802987), + FX16_CONST(0.5732971666980421), FX16_CONST(-0.819347520076797), + FX16_CONST(0.5720396293247573), FX16_CONST(-0.8202259825694346), + FX16_CONST(0.5707807458869673), FX16_CONST(-0.8211025149911046), + FX16_CONST(0.5695205193469475), FX16_CONST(-0.8219771152792413), + FX16_CONST(0.5682589526701317), FX16_CONST(-0.8228497813758262), + FX16_CONST(0.5669960488251087), FX16_CONST(-0.8237205112273914), + FX16_CONST(0.5657318107836135), FX16_CONST(-0.8245893027850251), + FX16_CONST(0.5644662415205195), FX16_CONST(-0.8254561540043774), + FX16_CONST(0.5631993440138341), FX16_CONST(-0.8263210628456635), + FX16_CONST(0.5619311212446896), FX16_CONST(-0.827184027273669), + FX16_CONST(0.5606615761973361), FX16_CONST(-0.8280450452577557), + FX16_CONST(0.559390711859136), FX16_CONST(-0.828904114771865), + FX16_CONST(0.5581185312205563), FX16_CONST(-0.8297612337945229), + FX16_CONST(0.5568450372751601), FX16_CONST(-0.8306164003088462), + FX16_CONST(0.5555702330196022), FX16_CONST(-0.8314696123025453), + FX16_CONST(0.5542941214536202), FX16_CONST(-0.8323208677679296), + FX16_CONST(0.5530167055800275), FX16_CONST(-0.8331701647019132), + FX16_CONST(0.5517379884047077), FX16_CONST(-0.8340175011060179), + FX16_CONST(0.5504579729366049), FX16_CONST(-0.83486287498638), + FX16_CONST(0.5491766621877197), FX16_CONST(-0.8357062843537526), + FX16_CONST(0.5478940591731004), FX16_CONST(-0.8365477272235119), + FX16_CONST(0.546610166910835), FX16_CONST(-0.8373872016156618), + FX16_CONST(0.5453249884220464), FX16_CONST(-0.8382247055548381), + FX16_CONST(0.544038526730884), FX16_CONST(-0.8390602370703126), + FX16_CONST(0.5427507848645159), FX16_CONST(-0.8398937941959995), + FX16_CONST(0.5414617658531233), FX16_CONST(-0.8407253749704581), + FX16_CONST(0.540171472729893), FX16_CONST(-0.8415549774368983), + FX16_CONST(0.5388799085310084), FX16_CONST(-0.8423825996431858), + FX16_CONST(0.5375870762956457), FX16_CONST(-0.8432082396418453), + FX16_CONST(0.5362929790659633), FX16_CONST(-0.8440318954900664), + FX16_CONST(0.5349976198870972), FX16_CONST(-0.8448535652497071), + FX16_CONST(0.5337010018071532), FX16_CONST(-0.845673246987299), + FX16_CONST(0.532403127877198), FX16_CONST(-0.846490938774052), + FX16_CONST(0.5311040011512549), FX16_CONST(-0.8473066386858584), + FX16_CONST(0.5298036246862948), FX16_CONST(-0.8481203448032971), + FX16_CONST(0.5285020015422285), FX16_CONST(-0.8489320552116396), + FX16_CONST(0.5271991347819013), FX16_CONST(-0.8497417680008525), + FX16_CONST(0.5258950274710849), FX16_CONST(-0.8505494812656034), + FX16_CONST(0.524589682678469), FX16_CONST(-0.8513551931052652), + FX16_CONST(0.5232831034756567), FX16_CONST(-0.8521589016239196), + FX16_CONST(0.5219752929371544), FX16_CONST(-0.8529606049303636), + FX16_CONST(0.5206662541403672), FX16_CONST(-0.8537603011381114), + FX16_CONST(0.5193559901655898), FX16_CONST(-0.8545579883654004), + FX16_CONST(0.5180445040959994), FX16_CONST(-0.8553536647351959), + FX16_CONST(0.5167317990176498), FX16_CONST(-0.8561473283751945), + FX16_CONST(0.5154178780194631), FX16_CONST(-0.8569389774178287), + FX16_CONST(0.5141027441932218), FX16_CONST(-0.857728610000272), + FX16_CONST(0.512786400633563), FX16_CONST(-0.8585162242644429), + FX16_CONST(0.5114688504379705), FX16_CONST(-0.8593018183570084), + FX16_CONST(0.5101500967067668), FX16_CONST(-0.8600853904293901), + FX16_CONST(0.5088301425431073), FX16_CONST(-0.8608669386377672), + FX16_CONST(0.507508991052971), FX16_CONST(-0.8616464611430813), + FX16_CONST(0.5061866453451552), FX16_CONST(-0.8624239561110405), + FX16_CONST(0.5048631085312677), FX16_CONST(-0.863199421712124), + FX16_CONST(0.5035383837257176), FX16_CONST(-0.8639728561215867), + FX16_CONST(0.5022124740457107), FX16_CONST(-0.8647442575194624), + FX16_CONST(0.5008853826112409), FX16_CONST(-0.865513624090569), + FX16_CONST(0.4995571125450819), FX16_CONST(-0.866280954024513), + FX16_CONST(0.49822766697278176), FX16_CONST(-0.8670462455156926), + FX16_CONST(0.4968970490226547), FX16_CONST(-0.8678094967633032), + FX16_CONST(0.49556526182577254), FX16_CONST(-0.8685707059713409), + FX16_CONST(0.49423230851596), FX16_CONST(-0.8693298713486066), + FX16_CONST(0.49289819222978415), FX16_CONST(-0.8700869911087113), + FX16_CONST(0.4915629161065499), FX16_CONST(-0.8708420634700789), + FX16_CONST(0.4902264832882914), FX16_CONST(-0.8715950866559509), + FX16_CONST(0.4888888969197632), FX16_CONST(-0.8723460588943914), + FX16_CONST(0.4875501601484359), FX16_CONST(-0.8730949784182901), + FX16_CONST(0.4862102761244866), FX16_CONST(-0.8738418434653668), + FX16_CONST(0.4848692480007911), FX16_CONST(-0.8745866522781761), + FX16_CONST(0.48352707893291863), FX16_CONST(-0.8753294031041109), + FX16_CONST(0.4821837720791229), FX16_CONST(-0.8760700941954065), + FX16_CONST(0.48083933060033396), FX16_CONST(-0.8768087238091457), + FX16_CONST(0.4794937576601533), FX16_CONST(-0.8775452902072611), + FX16_CONST(0.4781470564248432), FX16_CONST(-0.8782797916565415), + FX16_CONST(0.4767992300633221), FX16_CONST(-0.8790122264286335), + FX16_CONST(0.4754502817471561), FX16_CONST(-0.8797425928000473), + FX16_CONST(0.4741002146505501), FX16_CONST(-0.8804708890521608), + FX16_CONST(0.47274903195034274), FX16_CONST(-0.8811971134712221), + FX16_CONST(0.4713967368259978), FX16_CONST(-0.8819212643483549), + FX16_CONST(0.4700433324595957), FX16_CONST(-0.8826433399795628), + FX16_CONST(0.46868882203582785), FX16_CONST(-0.8833633386657317), + FX16_CONST(0.4673332087419886), FX16_CONST(-0.8840812587126349), + FX16_CONST(0.4659764957679662), FX16_CONST(-0.8847970984309378), + FX16_CONST(0.4646186863062381), FX16_CONST(-0.8855108561361998), + FX16_CONST(0.4632597835518603), FX16_CONST(-0.8862225301488805), + FX16_CONST(0.46189979070246273), FX16_CONST(-0.8869321187943422), + FX16_CONST(0.4605387109582402), FX16_CONST(-0.8876396204028538), + FX16_CONST(0.4591765475219442), FX16_CONST(-0.8883450333095962), + FX16_CONST(0.4578133035988772), FX16_CONST(-0.8890483558546646), + FX16_CONST(0.45644898239688414), FX16_CONST(-0.8897495863830727), + FX16_CONST(0.4550835871263439), FX16_CONST(-0.8904487232447579), + FX16_CONST(0.45371712100016376), FX16_CONST(-0.8911457647945833), + FX16_CONST(0.45234958723377106), FX16_CONST(-0.8918407093923426), + FX16_CONST(0.45098098904510386), FX16_CONST(-0.8925335554027646), + FX16_CONST(0.4496113296546069), FX16_CONST(-0.8932243011955152), + FX16_CONST(0.44824061228522005), FX16_CONST(-0.8939129451452031), + FX16_CONST(0.44686884016237416), FX16_CONST(-0.8945994856313827), + FX16_CONST(0.44549601651398196), FX16_CONST(-0.8952839210385574), + FX16_CONST(0.4441221445704293), FX16_CONST(-0.8959662497561851), + FX16_CONST(0.44274722756456997), FX16_CONST(-0.8966464701786803), + FX16_CONST(0.4413712687317169), FX16_CONST(-0.8973245807054182), + FX16_CONST(0.4399942713096333), FX16_CONST(-0.8980005797407398), + FX16_CONST(0.43861623853852755), FX16_CONST(-0.8986744656939539), + FX16_CONST(0.43723717366104425), FX16_CONST(-0.8993462369793415), + FX16_CONST(0.43585707992225553), FX16_CONST(-0.9000158920161602), + FX16_CONST(0.434475960569656), FX16_CONST(-0.9006834292286467), + FX16_CONST(0.43309381885315207), FX16_CONST(-0.9013488470460219), + FX16_CONST(0.43171065802505726), FX16_CONST(-0.9020121439024932), + FX16_CONST(0.4303264813400829), FX16_CONST(-0.9026733182372587), + FX16_CONST(0.4289412920553296), FX16_CONST(-0.9033323684945118), + FX16_CONST(0.42755509343028203), FX16_CONST(-0.9039892931234433), + FX16_CONST(0.42616788872679984), FX16_CONST(-0.9046440905782461), + FX16_CONST(0.42477968120910886), FX16_CONST(-0.9052967593181187), + FX16_CONST(0.42339047414379594), FX16_CONST(-0.9059472978072685), + FX16_CONST(0.42200027079979985), FX16_CONST(-0.9065957045149153), + FX16_CONST(0.42060907444840256), FX16_CONST(-0.9072419779152958), + FX16_CONST(0.41921688836322424), FX16_CONST(-0.907886116487666), + FX16_CONST(0.41782371582021244), FX16_CONST(-0.9085281187163061), + FX16_CONST(0.41642956009763715), FX16_CONST(-0.9091679830905224), + FX16_CONST(0.41503442447608185), FX16_CONST(-0.9098057081046521), + FX16_CONST(0.41363831223843467), FX16_CONST(-0.9104412922580671), + FX16_CONST(0.41224122666988283), FX16_CONST(-0.9110747340551764), + FX16_CONST(0.41084317105790413), FX16_CONST(-0.9117060320054298), + FX16_CONST(0.4094441486922577), FX16_CONST(-0.9123351846233227), + FX16_CONST(0.4080441628649786), FX16_CONST(-0.9129621904283982), + FX16_CONST(0.4066432168703692), FX16_CONST(-0.9135870479452507), + FX16_CONST(0.4052413140049899), FX16_CONST(-0.9142097557035307), + FX16_CONST(0.4038384575676544), FX16_CONST(-0.914830312237946), + FX16_CONST(0.4024346508594186), FX16_CONST(-0.9154487160882677), + FX16_CONST(0.4010298971835756), FX16_CONST(-0.9160649657993317), + FX16_CONST(0.39962419984564707), FX16_CONST(-0.9166790599210426), + FX16_CONST(0.39821756215337367), FX16_CONST(-0.9172909970083779), + FX16_CONST(0.39680998741671025), FX16_CONST(-0.9179007756213905), + FX16_CONST(0.3954014789478165), FX16_CONST(-0.9185083943252121), + FX16_CONST(0.39399204006104815), FX16_CONST(-0.9191138516900578), + FX16_CONST(0.3925816740729514), FX16_CONST(-0.9197171462912274), + FX16_CONST(0.39117038430225404), FX16_CONST(-0.9203182767091105), + FX16_CONST(0.38975817406985647), FX16_CONST(-0.9209172415291894), + FX16_CONST(0.3883450466988266), FX16_CONST(-0.9215140393420418), + FX16_CONST(0.38693100551438875), FX16_CONST(-0.9221086687433451), + FX16_CONST(0.38551605384391885), FX16_CONST(-0.9227011283338786), + FX16_CONST(0.3841001950169353), FX16_CONST(-0.9232914167195275), + FX16_CONST(0.3826834323650899), FX16_CONST(-0.9238795325112867), + FX16_CONST(0.3812657692221623), FX16_CONST(-0.9244654743252626), + FX16_CONST(0.3798472089240514), FX16_CONST(-0.9250492407826775), + FX16_CONST(0.37842775480876567), FX16_CONST(-0.9256308305098727), + FX16_CONST(0.37700741021641815), FX16_CONST(-0.9262102421383114), + FX16_CONST(0.3755861784892174), FX16_CONST(-0.9267874743045817), + FX16_CONST(0.37416406297145804), FX16_CONST(-0.9273625256504011), + FX16_CONST(0.3727410670095161), FX16_CONST(-0.9279353948226178), + FX16_CONST(0.3713171939518377), FX16_CONST(-0.9285060804732155), + FX16_CONST(0.3698924471489341), FX16_CONST(-0.9290745812593159), + FX16_CONST(0.3684668299533726), FX16_CONST(-0.9296408958431812), + FX16_CONST(0.3670403457197673), FX16_CONST(-0.9302050228922191), + FX16_CONST(0.3656129978047738), FX16_CONST(-0.9307669610789837), + FX16_CONST(0.3641847895670801), FX16_CONST(-0.9313267090811803), + FX16_CONST(0.3627557243673973), FX16_CONST(-0.931884265581668), + FX16_CONST(0.3613258055684542), FX16_CONST(-0.9324396292684625), + FX16_CONST(0.35989503653498833), FX16_CONST(-0.9329927988347388), + FX16_CONST(0.3584634206337366), FX16_CONST(-0.9335437729788362), + FX16_CONST(0.3570309612334303), FX16_CONST(-0.9340925504042588), + FX16_CONST(0.355597661704784), FX16_CONST(-0.9346391298196807), + FX16_CONST(0.3541635254204904), FX16_CONST(-0.9351835099389476), + FX16_CONST(0.35272855575521095), FX16_CONST(-0.9357256894810803), + FX16_CONST(0.3512927560855672), FX16_CONST(-0.9362656671702783), + FX16_CONST(0.34985612979013486), FX16_CONST(-0.9368034417359217), + FX16_CONST(0.3484186802494348), FX16_CONST(-0.9373390119125748), + FX16_CONST(0.34698041084592374), FX16_CONST(-0.9378723764399898), + FX16_CONST(0.345541324963989), FX16_CONST(-0.9384035340631082), + FX16_CONST(0.34410142598993904), FX16_CONST(-0.9389324835320645), + FX16_CONST(0.34266071731199443), FX16_CONST(-0.9394592236021899), + FX16_CONST(0.3412192023202827), FX16_CONST(-0.9399837530340138), + FX16_CONST(0.339776884406827), FX16_CONST(-0.9405060705932683), + FX16_CONST(0.3383337669655412), FX16_CONST(-0.9410261750508893), + FX16_CONST(0.33688985339222033), FX16_CONST(-0.9415440651830207), + FX16_CONST(0.3354451470845317), FX16_CONST(-0.9420597397710173), + FX16_CONST(0.3339996514420094), FX16_CONST(-0.9425731976014469), + FX16_CONST(0.33255336986604445), FX16_CONST(-0.9430844374660934), + FX16_CONST(0.3311063057598765), FX16_CONST(-0.9435934581619604), + FX16_CONST(0.32965846252858744), FX16_CONST(-0.9441002584912727), + FX16_CONST(0.3282098435790927), FX16_CONST(-0.9446048372614801), + FX16_CONST(0.32676045232013184), FX16_CONST(-0.9451071932852606), + FX16_CONST(0.32531029216226326), FX16_CONST(-0.9456073253805212), + FX16_CONST(0.323859366517853), FX16_CONST(-0.9461052323704033), + FX16_CONST(0.32240767880106985), FX16_CONST(-0.9466009130832835), + FX16_CONST(0.3209552324278755), FX16_CONST(-0.9470943663527771), + FX16_CONST(0.3195020308160158), FX16_CONST(-0.9475855910177411), + FX16_CONST(0.3180480773850149), FX16_CONST(-0.9480745859222762), + FX16_CONST(0.31659337555616607), FX16_CONST(-0.9485613499157303), + FX16_CONST(0.3151379287525225), FX16_CONST(-0.9490458818527006), + FX16_CONST(0.3136817403988914), FX16_CONST(-0.9495281805930367), + FX16_CONST(0.3122248139218251), FX16_CONST(-0.950008245001843), + FX16_CONST(0.31076715274961153), FX16_CONST(-0.9504860739494817), + FX16_CONST(0.309308760312269), FX16_CONST(-0.950961666311575), + FX16_CONST(0.30784964004153503), FX16_CONST(-0.9514350209690083), + FX16_CONST(0.3063897953708609), FX16_CONST(-0.9519061368079323), + FX16_CONST(0.30492922973540265), FX16_CONST(-0.9523750127197658), + FX16_CONST(0.3034679465720114), FX16_CONST(-0.9528416476011986), + FX16_CONST(0.30200594931922803), FX16_CONST(-0.9533060403541939), + FX16_CONST(0.3005432414172737), FX16_CONST(-0.9537681898859902), + FX16_CONST(0.29907982630804053), FX16_CONST(-0.9542280951091056), + FX16_CONST(0.29761570743508614), FX16_CONST(-0.9546857549413383), + FX16_CONST(0.296150888243624), FX16_CONST(-0.9551411683057707), + FX16_CONST(0.2946853721805144), FX16_CONST(-0.9555943341307711), + FX16_CONST(0.29321916269425896), FX16_CONST(-0.9560452513499963), + FX16_CONST(0.29175226323498943), FX16_CONST(-0.956493918902395), + FX16_CONST(0.2902846772544624), FX16_CONST(-0.9569403357322088), + FX16_CONST(0.28881640820604976), FX16_CONST(-0.9573845007889759), + FX16_CONST(0.2873474595447296), FX16_CONST(-0.9578264130275329), + FX16_CONST(0.28587783472708056), FX16_CONST(-0.9582660714080177), + FX16_CONST(0.2844075372112721), FX16_CONST(-0.9587034748958715), + FX16_CONST(0.28293657045705545), FX16_CONST(-0.9591386224618419), + FX16_CONST(0.2814649379257579), FX16_CONST(-0.9595715130819845), + FX16_CONST(0.27999264308027344), FX16_CONST(-0.9600021457376658), + FX16_CONST(0.27851968938505317), FX16_CONST(-0.9604305194155658), + FX16_CONST(0.27704608030610023), FX16_CONST(-0.9608566331076795), + FX16_CONST(0.2755718193109583), FX16_CONST(-0.9612804858113206), + FX16_CONST(0.2740969098687064), FX16_CONST(-0.9617020765291225), + FX16_CONST(0.27262135544994925), FX16_CONST(-0.9621214042690415), + FX16_CONST(0.2711451595268081), FX16_CONST(-0.9625384680443592), + FX16_CONST(0.2696683255729151), FX16_CONST(-0.9629532668736839), + FX16_CONST(0.2681908570634034), FX16_CONST(-0.9633657997809539), + FX16_CONST(0.2667127574748985), FX16_CONST(-0.9637760657954398), + FX16_CONST(0.26523403028551173), FX16_CONST(-0.9641840639517458), + FX16_CONST(0.26375467897483157), FX16_CONST(-0.9645897932898126), + FX16_CONST(0.2622747070239137), FX16_CONST(-0.9649932528549203), + FX16_CONST(0.26079411791527585), FX16_CONST(-0.9653944416976893), + FX16_CONST(0.2593129151328864), FX16_CONST(-0.9657933588740836), + FX16_CONST(0.257831102162159), FX16_CONST(-0.9661900034454125), + FX16_CONST(0.2563486824899432), FX16_CONST(-0.966584374478333), + FX16_CONST(0.2548656596045147), FX16_CONST(-0.9669764710448521), + FX16_CONST(0.2533820369955701), FX16_CONST(-0.9673662922223285), + FX16_CONST(0.2518978181542172), FX16_CONST(-0.9677538370934754), + FX16_CONST(0.25041300657296534), FX16_CONST(-0.9681391047463623), + FX16_CONST(0.2489276057457201), FX16_CONST(-0.9685220942744174), + FX16_CONST(0.2474416191677735), FX16_CONST(-0.9689028047764289), + FX16_CONST(0.24595505033579465), FX16_CONST(-0.9692812353565484), + FX16_CONST(0.24446790274782448), FX16_CONST(-0.9696573851242923), + FX16_CONST(0.24298017990326407), FX16_CONST(-0.970031253194544), + FX16_CONST(0.24149188530286936), FX16_CONST(-0.9704028386875555), + FX16_CONST(0.24000302244874178), FX16_CONST(-0.9707721407289502), + FX16_CONST(0.23851359484431855), FX16_CONST(-0.9711391584497251), + FX16_CONST(0.23702360599436717), FX16_CONST(-0.9715038909862518), + FX16_CONST(0.23553305940497574), FX16_CONST(-0.9718663374802793), + FX16_CONST(0.2340419585835435), FX16_CONST(-0.9722264970789363), + FX16_CONST(0.23255030703877516), FX16_CONST(-0.9725843689347322), + FX16_CONST(0.23105810828067133), FX16_CONST(-0.9729399522055601), + FX16_CONST(0.22956536582051892), FX16_CONST(-0.9732932460546982), + FX16_CONST(0.22807208317088606), FX16_CONST(-0.9736442496508119), + FX16_CONST(0.22657826384561017), FX16_CONST(-0.9739929621679558), + FX16_CONST(0.22508391135979283), FX16_CONST(-0.9743393827855759), + FX16_CONST(0.2235890292297903), FX16_CONST(-0.9746835106885107), + FX16_CONST(0.22209362097320365), FX16_CONST(-0.9750253450669941), + FX16_CONST(0.2205976901088735), FX16_CONST(-0.975364885116657), + FX16_CONST(0.21910124015687005), FX16_CONST(-0.9757021300385285), + FX16_CONST(0.21760427463848372), FX16_CONST(-0.976037079039039), + FX16_CONST(0.21610679707621944), FX16_CONST(-0.9763697313300211), + FX16_CONST(0.21460881099378698), FX16_CONST(-0.9767000861287117), + FX16_CONST(0.21311031991609142), FX16_CONST(-0.9770281426577544), + FX16_CONST(0.2116113273692279), FX16_CONST(-0.9773539001452), + FX16_CONST(0.2101118368804698), FX16_CONST(-0.9776773578245099), + FX16_CONST(0.2086118519782635), FX16_CONST(-0.9779985149345571), + FX16_CONST(0.20711137619221884), FX16_CONST(-0.9783173707196275), + FX16_CONST(0.20561041305309938), FX16_CONST(-0.9786339244294231), + FX16_CONST(0.20410896609281684), FX16_CONST(-0.9789481753190622), + FX16_CONST(0.20260703884442138), FX16_CONST(-0.979260122649082), + FX16_CONST(0.201104634842092), FX16_CONST(-0.9795697656854405), + FX16_CONST(0.19960175762113092), FX16_CONST(-0.9798771036995176), + FX16_CONST(0.1980984107179538), FX16_CONST(-0.9801821359681173), + FX16_CONST(0.19659459767008028), FX16_CONST(-0.9804848617734694), + FX16_CONST(0.1950903220161286), FX16_CONST(-0.9807852804032304), + FX16_CONST(0.1935855872958038), FX16_CONST(-0.9810833911504866), + FX16_CONST(0.19208039704989247), FX16_CONST(-0.9813791933137546), + FX16_CONST(0.19057475482025307), FX16_CONST(-0.9816726861969831), + FX16_CONST(0.18906866414980636), FX16_CONST(-0.9819638691095552), + FX16_CONST(0.18756212858252957), FX16_CONST(-0.9822527413662894), + FX16_CONST(0.1860551516634469), FX16_CONST(-0.9825393022874412), + FX16_CONST(0.1845477369386197), FX16_CONST(-0.9828235511987052), + FX16_CONST(0.1830398879551409), FX16_CONST(-0.9831054874312163), + FX16_CONST(0.18153160826112522), FX16_CONST(-0.9833851103215512), + FX16_CONST(0.18002290140569957), FX16_CONST(-0.9836624192117303), + FX16_CONST(0.17851377093899742), FX16_CONST(-0.9839374134492189), + FX16_CONST(0.17700422041214894), FX16_CONST(-0.984210092386929), + FX16_CONST(0.17549425337727145), FX16_CONST(-0.9844804553832209), + FX16_CONST(0.17398387338746413), FX16_CONST(-0.9847485018019042), + FX16_CONST(0.17247308399679612), FX16_CONST(-0.9850142310122398), + FX16_CONST(0.17096188876030122), FX16_CONST(-0.9852776423889412), + FX16_CONST(0.1694502912339682), FX16_CONST(-0.9855387353121761), + FX16_CONST(0.16793829497473128), FX16_CONST(-0.9857975091675674), + FX16_CONST(0.16642590354046405), FX16_CONST(-0.9860539633461954), + FX16_CONST(0.16491312048997014), FX16_CONST(-0.9863080972445986), + FX16_CONST(0.16339994938297328), FX16_CONST(-0.9865599102647754), + FX16_CONST(0.16188639378011174), FX16_CONST(-0.9868094018141855), + FX16_CONST(0.16037245724292845), FX16_CONST(-0.987056571305751), + FX16_CONST(0.15885814333386147), FX16_CONST(-0.9873014181578584), + FX16_CONST(0.15734345561623855), FX16_CONST(-0.9875439417943592), + FX16_CONST(0.15582839765426537), FX16_CONST(-0.9877841416445722), + FX16_CONST(0.15431297301302008), FX16_CONST(-0.9880220171432835), + FX16_CONST(0.15279718525844369), FX16_CONST(-0.9882575677307495), + FX16_CONST(0.1512810379573303), FX16_CONST(-0.9884907928526966), + FX16_CONST(0.14976453467732145), FX16_CONST(-0.9887216919603238), + FX16_CONST(0.14824767898689625), FX16_CONST(-0.988950264510303), + FX16_CONST(0.1467304744553618), FX16_CONST(-0.989176509964781), + FX16_CONST(0.14521292465284735), FX16_CONST(-0.9894004277913804), + FX16_CONST(0.14369503315029464), FX16_CONST(-0.9896220174632008), + FX16_CONST(0.1421768035194481), FX16_CONST(-0.9898412784588205), + FX16_CONST(0.14065823933284954), FX16_CONST(-0.990058210262297), + FX16_CONST(0.13913934416382634), FX16_CONST(-0.9902728123631691), + FX16_CONST(0.13762012158648604), FX16_CONST(-0.9904850842564571), + FX16_CONST(0.13610057517570648), FX16_CONST(-0.9906950254426646), + FX16_CONST(0.13458070850712628), FX16_CONST(-0.99090263542778), + FX16_CONST(0.133060525157139), FX16_CONST(-0.9911079137232769), + FX16_CONST(0.13154002870288334), FX16_CONST(-0.9913108598461154), + FX16_CONST(0.13001922272223343), FX16_CONST(-0.9915114733187439), + FX16_CONST(0.12849811079379309), FX16_CONST(-0.9917097536690995), + FX16_CONST(0.12697669649688606), FX16_CONST(-0.9919057004306093), + FX16_CONST(0.12545498341154626), FX16_CONST(-0.9920993131421918), + FX16_CONST(0.12393297511851248), FX16_CONST(-0.9922905913482573), + FX16_CONST(0.12241067519921635), FX16_CONST(-0.99247953459871), + FX16_CONST(0.12088808723577706), FX16_CONST(-0.992666142448948), + FX16_CONST(0.11936521481099163), FX16_CONST(-0.9928504144598651), + FX16_CONST(0.11784206150832509), FX16_CONST(-0.9930323501978514), + FX16_CONST(0.11631863091190471), FX16_CONST(-0.9932119492347945), + FX16_CONST(0.1147949266065103), FX16_CONST(-0.9933892111480807), + FX16_CONST(0.11327095217756442), FX16_CONST(-0.9935641355205953), + FX16_CONST(0.1117467112111265), FX16_CONST(-0.9937367219407246), + FX16_CONST(0.11022220729388324), FX16_CONST(-0.9939069700023561), + FX16_CONST(0.10869744401313874), FX16_CONST(-0.9940748793048794), + FX16_CONST(0.10717242495680916), FX16_CONST(-0.9942404494531879), + FX16_CONST(0.10564715371341075), FX16_CONST(-0.9944036800576791), + FX16_CONST(0.10412163387205457), FX16_CONST(-0.9945645707342554), + FX16_CONST(0.10259586902243656), FX16_CONST(-0.9947231211043257), + FX16_CONST(0.10106986275482793), FX16_CONST(-0.9948793307948056), + FX16_CONST(0.09954361866006928), FX16_CONST(-0.9950331994381186), + FX16_CONST(0.09801714032956083), FX16_CONST(-0.9951847266721968), + FX16_CONST(0.09649043135525266), FX16_CONST(-0.9953339121404823), + FX16_CONST(0.09496349532963891), FX16_CONST(-0.9954807554919269), + FX16_CONST(0.09343633584574797), FX16_CONST(-0.9956252563809943), + FX16_CONST(0.09190895649713275), FX16_CONST(-0.9957674144676598), + FX16_CONST(0.09038136087786529), FX16_CONST(-0.9959072294174117), + FX16_CONST(0.08885355258252475), FX16_CONST(-0.996044700901252), + FX16_CONST(0.08732553520619206), FX16_CONST(-0.996179828595697), + FX16_CONST(0.08579731234444016), FX16_CONST(-0.996312612182778), + FX16_CONST(0.08426888759332418), FX16_CONST(-0.9964430513500426), + FX16_CONST(0.08274026454937564), FX16_CONST(-0.9965711457905548), + FX16_CONST(0.08121144680959266), FX16_CONST(-0.9966968952028961), + FX16_CONST(0.0796824379714302), FX16_CONST(-0.9968202992911657), + FX16_CONST(0.07815324163279415), FX16_CONST(-0.9969413577649822), + FX16_CONST(0.07662386139203169), FX16_CONST(-0.997060070339483), + FX16_CONST(0.07509430084792135), FX16_CONST(-0.9971764367353261), + FX16_CONST(0.07356456359966773), FX16_CONST(-0.9972904566786902), + FX16_CONST(0.07203465324688947), FX16_CONST(-0.9974021299012753), + FX16_CONST(0.07050457338961386), FX16_CONST(-0.9975114561403035), + FX16_CONST(0.06897432762826702), FX16_CONST(-0.9976184351385196), + FX16_CONST(0.06744391956366418), FX16_CONST(-0.9977230666441916), + FX16_CONST(0.06591335279700376), FX16_CONST(-0.9978253504111116), + FX16_CONST(0.0643826309298577), FX16_CONST(-0.997925286198596), + FX16_CONST(0.06285175756416149), FX16_CONST(-0.9980228737714862), + FX16_CONST(0.06132073630220849), FX16_CONST(-0.9981181129001492), + FX16_CONST(0.05978957074664007), FX16_CONST(-0.9982110033604782), + FX16_CONST(0.058258264500435794), FX16_CONST(-0.9983015449338929), + FX16_CONST(0.05672682116690807), FX16_CONST(-0.9983897374073402), + FX16_CONST(0.055195244349690094), FX16_CONST(-0.9984755805732948), + FX16_CONST(0.05366353765273052), FX16_CONST(-0.9985590742297593), + FX16_CONST(0.052131704680283594), FX16_CONST(-0.9986402181802652), + FX16_CONST(0.05059974903689939), FX16_CONST(-0.9987190122338729), + FX16_CONST(0.049067674327417966), FX16_CONST(-0.9987954562051724), + FX16_CONST(0.04753548415695954), FX16_CONST(-0.9988695499142836), + FX16_CONST(0.046003182130914706), FX16_CONST(-0.9989412931868569), + FX16_CONST(0.044470771854938584), FX16_CONST(-0.9990106858540734), + FX16_CONST(0.04293825693494102), FX16_CONST(-0.9990777277526454), + FX16_CONST(0.041405640977076774), FX16_CONST(-0.9991424187248169), + FX16_CONST(0.03987292758774013), FX16_CONST(-0.9992047586183639), + FX16_CONST(0.038340120373552854), FX16_CONST(-0.9992647472865944), + FX16_CONST(0.03680722294135883), FX16_CONST(-0.9993223845883495), + FX16_CONST(0.03527423889821423), FX16_CONST(-0.9993776703880028), + FX16_CONST(0.033741171851377705), FX16_CONST(-0.9994306045554617), + FX16_CONST(0.032208025408304544), FX16_CONST(-0.999481186966167), + FX16_CONST(0.030674803176636865), FX16_CONST(-0.9995294175010931), + FX16_CONST(0.029141508764193802), FX16_CONST(-0.9995752960467492), + FX16_CONST(0.02760814577896566), FX16_CONST(-0.9996188224951786), + FX16_CONST(0.0260747178291041), FX16_CONST(-0.9996599967439592), + FX16_CONST(0.024541228522912326), FX16_CONST(-0.9996988186962042), + FX16_CONST(0.023007681468839695), FX16_CONST(-0.9997352882605617), + FX16_CONST(0.021474080275469667), FX16_CONST(-0.9997694053512153), + FX16_CONST(0.019940428551514438), FX16_CONST(-0.9998011698878843), + FX16_CONST(0.0184067299058051), FX16_CONST(-0.9998305817958234), + FX16_CONST(0.016872987947281835), FX16_CONST(-0.9998576410058239), + FX16_CONST(0.01533920628498806), FX16_CONST(-0.9998823474542126), + FX16_CONST(0.013805388528060632), FX16_CONST(-0.9999047010828528), + FX16_CONST(0.012271538285720007), FX16_CONST(-0.9999247018391445), + FX16_CONST(0.01073765916726441), FX16_CONST(-0.9999423496760239), + FX16_CONST(0.00920375478206002), FX16_CONST(-0.9999576445519639), + FX16_CONST(0.007669828739531138), FX16_CONST(-0.9999705864309741), + FX16_CONST(0.006135884649154799), FX16_CONST(-0.9999811752826011), + FX16_CONST(0.004601926120448733), FX16_CONST(-0.9999894110819284), + FX16_CONST(0.003067956762965977), FX16_CONST(-0.9999952938095762), + FX16_CONST(0.0015339801862850493), FX16_CONST(-0.9999988234517019), + FX16_CONST(1.2246467991473532e-16), FX16_CONST(-1.0), + FX16_CONST(-0.0015339801862848043), FX16_CONST(-0.9999988234517019), + FX16_CONST(-0.0030679567629657324), FX16_CONST(-0.9999952938095762), + FX16_CONST(-0.004601926120448488), FX16_CONST(-0.9999894110819284), + FX16_CONST(-0.006135884649154554), FX16_CONST(-0.9999811752826011), + FX16_CONST(-0.007669828739530893), FX16_CONST(-0.9999705864309741), + FX16_CONST(-0.009203754782059776), FX16_CONST(-0.9999576445519639), + FX16_CONST(-0.010737659167264166), FX16_CONST(-0.9999423496760239), + FX16_CONST(-0.012271538285719762), FX16_CONST(-0.9999247018391445), + FX16_CONST(-0.013805388528060387), FX16_CONST(-0.9999047010828529), + FX16_CONST(-0.015339206284987816), FX16_CONST(-0.9998823474542126), + FX16_CONST(-0.01687298794728159), FX16_CONST(-0.9998576410058239), + FX16_CONST(-0.01840672990580486), FX16_CONST(-0.9998305817958234), + FX16_CONST(-0.01994042855151419), FX16_CONST(-0.9998011698878843), + FX16_CONST(-0.02147408027546942), FX16_CONST(-0.9997694053512153), + FX16_CONST(-0.02300768146883945), FX16_CONST(-0.9997352882605617), + FX16_CONST(-0.02454122852291208), FX16_CONST(-0.9996988186962042), + FX16_CONST(-0.026074717829103856), FX16_CONST(-0.9996599967439592), + FX16_CONST(-0.027608145778965414), FX16_CONST(-0.9996188224951786), + FX16_CONST(-0.029141508764193556), FX16_CONST(-0.9995752960467492), + FX16_CONST(-0.03067480317663662), FX16_CONST(-0.9995294175010931), + FX16_CONST(-0.032208025408304294), FX16_CONST(-0.999481186966167), + FX16_CONST(-0.033741171851377455), FX16_CONST(-0.9994306045554617), + FX16_CONST(-0.03527423889821398), FX16_CONST(-0.9993776703880028), + FX16_CONST(-0.03680722294135858), FX16_CONST(-0.9993223845883495), + FX16_CONST(-0.03834012037355261), FX16_CONST(-0.9992647472865944), + FX16_CONST(-0.03987292758773989), FX16_CONST(-0.9992047586183639), + FX16_CONST(-0.04140564097707653), FX16_CONST(-0.9991424187248169), + FX16_CONST(-0.04293825693494078), FX16_CONST(-0.9990777277526454), + FX16_CONST(-0.044470771854938335), FX16_CONST(-0.9990106858540734), + FX16_CONST(-0.046003182130914456), FX16_CONST(-0.9989412931868569), + FX16_CONST(-0.047535484156959296), FX16_CONST(-0.9988695499142836), + FX16_CONST(-0.049067674327417724), FX16_CONST(-0.9987954562051724), + FX16_CONST(-0.05059974903689915), FX16_CONST(-0.9987190122338729), + FX16_CONST(-0.05213170468028335), FX16_CONST(-0.9986402181802653), + FX16_CONST(-0.05366353765273028), FX16_CONST(-0.9985590742297593), + FX16_CONST(-0.05519524434968985), FX16_CONST(-0.9984755805732948), + FX16_CONST(-0.05672682116690782), FX16_CONST(-0.9983897374073402), + FX16_CONST(-0.05825826450043555), FX16_CONST(-0.9983015449338929), + FX16_CONST(-0.05978957074663983), FX16_CONST(-0.9982110033604782), + FX16_CONST(-0.061320736302208245), FX16_CONST(-0.9981181129001492), + FX16_CONST(-0.06285175756416124), FX16_CONST(-0.9980228737714862), + FX16_CONST(-0.06438263092985745), FX16_CONST(-0.997925286198596), + FX16_CONST(-0.06591335279700353), FX16_CONST(-0.9978253504111116), + FX16_CONST(-0.06744391956366393), FX16_CONST(-0.9977230666441916), + FX16_CONST(-0.06897432762826677), FX16_CONST(-0.9976184351385196), + FX16_CONST(-0.0705045733896136), FX16_CONST(-0.9975114561403035), + FX16_CONST(-0.07203465324688924), FX16_CONST(-0.9974021299012753), + FX16_CONST(-0.0735645635996675), FX16_CONST(-0.9972904566786902), + FX16_CONST(-0.0750943008479211), FX16_CONST(-0.9971764367353262), + FX16_CONST(-0.07662386139203144), FX16_CONST(-0.997060070339483), + FX16_CONST(-0.0781532416327939), FX16_CONST(-0.9969413577649822), + FX16_CONST(-0.07968243797142995), FX16_CONST(-0.9968202992911658), + FX16_CONST(-0.08121144680959243), FX16_CONST(-0.9966968952028961), + FX16_CONST(-0.0827402645493754), FX16_CONST(-0.9965711457905548), + FX16_CONST(-0.08426888759332393), FX16_CONST(-0.9964430513500426), + FX16_CONST(-0.08579731234443992), FX16_CONST(-0.996312612182778), + FX16_CONST(-0.08732553520619181), FX16_CONST(-0.996179828595697), + FX16_CONST(-0.0888535525825245), FX16_CONST(-0.996044700901252), + FX16_CONST(-0.09038136087786505), FX16_CONST(-0.9959072294174117), + FX16_CONST(-0.09190895649713252), FX16_CONST(-0.9957674144676598), + FX16_CONST(-0.09343633584574773), FX16_CONST(-0.9956252563809943), + FX16_CONST(-0.09496349532963866), FX16_CONST(-0.9954807554919269), + FX16_CONST(-0.09649043135525241), FX16_CONST(-0.9953339121404823), + FX16_CONST(-0.09801714032956059), FX16_CONST(-0.9951847266721969), + FX16_CONST(-0.09954361866006904), FX16_CONST(-0.9950331994381186), + FX16_CONST(-0.10106986275482768), FX16_CONST(-0.9948793307948056), + FX16_CONST(-0.10259586902243631), FX16_CONST(-0.9947231211043257), + FX16_CONST(-0.10412163387205432), FX16_CONST(-0.9945645707342555), + FX16_CONST(-0.10564715371341052), FX16_CONST(-0.9944036800576791), + FX16_CONST(-0.10717242495680891), FX16_CONST(-0.9942404494531879), + FX16_CONST(-0.1086974440131385), FX16_CONST(-0.9940748793048795), + FX16_CONST(-0.110222207293883), FX16_CONST(-0.9939069700023561), + FX16_CONST(-0.11174671121112625), FX16_CONST(-0.9937367219407247), + FX16_CONST(-0.11327095217756417), FX16_CONST(-0.9935641355205953), + FX16_CONST(-0.11479492660651007), FX16_CONST(-0.9933892111480807), + FX16_CONST(-0.11631863091190447), FX16_CONST(-0.9932119492347946), + FX16_CONST(-0.11784206150832484), FX16_CONST(-0.9930323501978514), + FX16_CONST(-0.11936521481099138), FX16_CONST(-0.9928504144598651), + FX16_CONST(-0.12088808723577682), FX16_CONST(-0.992666142448948), + FX16_CONST(-0.1224106751992161), FX16_CONST(-0.99247953459871), + FX16_CONST(-0.12393297511851223), FX16_CONST(-0.9922905913482574), + FX16_CONST(-0.125454983411546), FX16_CONST(-0.9920993131421918), + FX16_CONST(-0.1269766964968858), FX16_CONST(-0.9919057004306093), + FX16_CONST(-0.12849811079379284), FX16_CONST(-0.9917097536690995), + FX16_CONST(-0.13001922272223318), FX16_CONST(-0.991511473318744), + FX16_CONST(-0.1315400287028831), FX16_CONST(-0.9913108598461154), + FX16_CONST(-0.13306052515713876), FX16_CONST(-0.9911079137232769), + FX16_CONST(-0.13458070850712606), FX16_CONST(-0.99090263542778), + FX16_CONST(-0.13610057517570623), FX16_CONST(-0.9906950254426646), + FX16_CONST(-0.1376201215864858), FX16_CONST(-0.9904850842564571), + FX16_CONST(-0.13913934416382612), FX16_CONST(-0.9902728123631691), + FX16_CONST(-0.1406582393328493), FX16_CONST(-0.9900582102622971), + FX16_CONST(-0.14217680351944784), FX16_CONST(-0.9898412784588205), + FX16_CONST(-0.1436950331502944), FX16_CONST(-0.9896220174632009), + FX16_CONST(-0.14521292465284713), FX16_CONST(-0.9894004277913804), + FX16_CONST(-0.14673047445536158), FX16_CONST(-0.989176509964781), + FX16_CONST(-0.14824767898689603), FX16_CONST(-0.988950264510303), + FX16_CONST(-0.1497645346773212), FX16_CONST(-0.9887216919603238), + FX16_CONST(-0.15128103795733008), FX16_CONST(-0.9884907928526967), + FX16_CONST(-0.15279718525844344), FX16_CONST(-0.9882575677307495), + FX16_CONST(-0.15431297301301983), FX16_CONST(-0.9880220171432836), + FX16_CONST(-0.15582839765426512), FX16_CONST(-0.9877841416445722), + FX16_CONST(-0.1573434556162383), FX16_CONST(-0.9875439417943592), + FX16_CONST(-0.15885814333386122), FX16_CONST(-0.9873014181578584), + FX16_CONST(-0.1603724572429282), FX16_CONST(-0.987056571305751), + FX16_CONST(-0.1618863937801115), FX16_CONST(-0.9868094018141855), + FX16_CONST(-0.16339994938297306), FX16_CONST(-0.9865599102647755), + FX16_CONST(-0.1649131204899699), FX16_CONST(-0.9863080972445987), + FX16_CONST(-0.16642590354046383), FX16_CONST(-0.9860539633461954), + FX16_CONST(-0.16793829497473103), FX16_CONST(-0.9857975091675675), + FX16_CONST(-0.169450291233968), FX16_CONST(-0.9855387353121761), + FX16_CONST(-0.17096188876030097), FX16_CONST(-0.9852776423889413), + FX16_CONST(-0.17247308399679587), FX16_CONST(-0.9850142310122398), + FX16_CONST(-0.17398387338746388), FX16_CONST(-0.9847485018019042), + FX16_CONST(-0.1754942533772712), FX16_CONST(-0.9844804553832209), + FX16_CONST(-0.1770042204121487), FX16_CONST(-0.9842100923869291), + FX16_CONST(-0.17851377093899717), FX16_CONST(-0.9839374134492189), + FX16_CONST(-0.18002290140569935), FX16_CONST(-0.9836624192117303), + FX16_CONST(-0.18153160826112497), FX16_CONST(-0.9833851103215512), + FX16_CONST(-0.18303988795514065), FX16_CONST(-0.9831054874312164), + FX16_CONST(-0.18454773693861948), FX16_CONST(-0.9828235511987053), + FX16_CONST(-0.18605515166344666), FX16_CONST(-0.9825393022874412), + FX16_CONST(-0.18756212858252932), FX16_CONST(-0.9822527413662895), + FX16_CONST(-0.1890686641498061), FX16_CONST(-0.9819638691095552), + FX16_CONST(-0.19057475482025282), FX16_CONST(-0.9816726861969831), + FX16_CONST(-0.19208039704989222), FX16_CONST(-0.9813791933137547), + FX16_CONST(-0.19358558729580355), FX16_CONST(-0.9810833911504867), + FX16_CONST(-0.19509032201612836), FX16_CONST(-0.9807852804032304), + FX16_CONST(-0.19659459767008003), FX16_CONST(-0.9804848617734694), + FX16_CONST(-0.19809841071795356), FX16_CONST(-0.9801821359681174), + FX16_CONST(-0.19960175762113067), FX16_CONST(-0.9798771036995177), + FX16_CONST(-0.20110463484209176), FX16_CONST(-0.9795697656854405), + FX16_CONST(-0.20260703884442113), FX16_CONST(-0.979260122649082), + FX16_CONST(-0.20410896609281662), FX16_CONST(-0.9789481753190622), + FX16_CONST(-0.20561041305309916), FX16_CONST(-0.9786339244294232), + FX16_CONST(-0.2071113761922186), FX16_CONST(-0.9783173707196277), + FX16_CONST(-0.20861185197826326), FX16_CONST(-0.9779985149345571), + FX16_CONST(-0.21011183688046955), FX16_CONST(-0.97767735782451), + FX16_CONST(-0.21161132736922766), FX16_CONST(-0.9773539001452), + FX16_CONST(-0.2131103199160912), FX16_CONST(-0.9770281426577544), + FX16_CONST(-0.21460881099378673), FX16_CONST(-0.9767000861287118), + FX16_CONST(-0.21610679707621921), FX16_CONST(-0.9763697313300213), + FX16_CONST(-0.21760427463848347), FX16_CONST(-0.9760370790390391), + FX16_CONST(-0.2191012401568698), FX16_CONST(-0.9757021300385286), + FX16_CONST(-0.22059769010887326), FX16_CONST(-0.975364885116657), + FX16_CONST(-0.22209362097320343), FX16_CONST(-0.9750253450669941), + FX16_CONST(-0.22358902922979004), FX16_CONST(-0.9746835106885107), + FX16_CONST(-0.2250839113597926), FX16_CONST(-0.9743393827855759), + FX16_CONST(-0.22657826384560992), FX16_CONST(-0.973992962167956), + FX16_CONST(-0.22807208317088581), FX16_CONST(-0.9736442496508119), + FX16_CONST(-0.2295653658205187), FX16_CONST(-0.9732932460546982), + FX16_CONST(-0.23105810828067108), FX16_CONST(-0.9729399522055602), + FX16_CONST(-0.23255030703877494), FX16_CONST(-0.9725843689347323), + FX16_CONST(-0.23404195858354326), FX16_CONST(-0.9722264970789364), + FX16_CONST(-0.23553305940497551), FX16_CONST(-0.9718663374802794), + FX16_CONST(-0.23702360599436695), FX16_CONST(-0.9715038909862519), + FX16_CONST(-0.2385135948443183), FX16_CONST(-0.9711391584497252), + FX16_CONST(-0.24000302244874153), FX16_CONST(-0.9707721407289502), + FX16_CONST(-0.2414918853028691), FX16_CONST(-0.9704028386875555), + FX16_CONST(-0.24298017990326382), FX16_CONST(-0.970031253194544), + FX16_CONST(-0.24446790274782426), FX16_CONST(-0.9696573851242924), + FX16_CONST(-0.24595505033579443), FX16_CONST(-0.9692812353565485), + FX16_CONST(-0.24744161916777327), FX16_CONST(-0.9689028047764289), + FX16_CONST(-0.24892760574571987), FX16_CONST(-0.9685220942744174), + FX16_CONST(-0.2504130065729651), FX16_CONST(-0.9681391047463624), + FX16_CONST(-0.25189781815421697), FX16_CONST(-0.9677538370934755), + FX16_CONST(-0.2533820369955699), FX16_CONST(-0.9673662922223286), + FX16_CONST(-0.25486565960451446), FX16_CONST(-0.9669764710448522), + FX16_CONST(-0.2563486824899429), FX16_CONST(-0.9665843744783331), + FX16_CONST(-0.25783110216215877), FX16_CONST(-0.9661900034454126), + FX16_CONST(-0.2593129151328862), FX16_CONST(-0.9657933588740837), + FX16_CONST(-0.2607941179152756), FX16_CONST(-0.9653944416976894), + FX16_CONST(-0.2622747070239134), FX16_CONST(-0.9649932528549204), + FX16_CONST(-0.26375467897483135), FX16_CONST(-0.9645897932898128), + FX16_CONST(-0.2652340302855115), FX16_CONST(-0.9641840639517458), + FX16_CONST(-0.26671275747489825), FX16_CONST(-0.96377606579544), + FX16_CONST(-0.2681908570634032), FX16_CONST(-0.963365799780954), + FX16_CONST(-0.2696683255729148), FX16_CONST(-0.962953266873684), + FX16_CONST(-0.2711451595268079), FX16_CONST(-0.9625384680443592), + FX16_CONST(-0.27262135544994903), FX16_CONST(-0.9621214042690416), + FX16_CONST(-0.27409690986870616), FX16_CONST(-0.9617020765291227), + FX16_CONST(-0.2755718193109581), FX16_CONST(-0.9612804858113206), + FX16_CONST(-0.2770460803061), FX16_CONST(-0.9608566331076795), + FX16_CONST(-0.2785196893850529), FX16_CONST(-0.9604305194155659), + FX16_CONST(-0.2799926430802732), FX16_CONST(-0.960002145737666), + FX16_CONST(-0.28146493792575766), FX16_CONST(-0.9595715130819846), + FX16_CONST(-0.28293657045705517), FX16_CONST(-0.959138622461842), + FX16_CONST(-0.2844075372112718), FX16_CONST(-0.9587034748958716), + FX16_CONST(-0.28587783472708034), FX16_CONST(-0.9582660714080178), + FX16_CONST(-0.2873474595447294), FX16_CONST(-0.9578264130275329), + FX16_CONST(-0.28881640820604954), FX16_CONST(-0.9573845007889759), + FX16_CONST(-0.2902846772544621), FX16_CONST(-0.9569403357322089), + FX16_CONST(-0.2917522632349892), FX16_CONST(-0.9564939189023951), + FX16_CONST(-0.29321916269425874), FX16_CONST(-0.9560452513499964), + FX16_CONST(-0.29468537218051416), FX16_CONST(-0.9555943341307711), + FX16_CONST(-0.2961508882436238), FX16_CONST(-0.9551411683057708), + FX16_CONST(-0.2976157074350859), FX16_CONST(-0.9546857549413384), + FX16_CONST(-0.2990798263080403), FX16_CONST(-0.9542280951091057), + FX16_CONST(-0.30054324141727345), FX16_CONST(-0.9537681898859903), + FX16_CONST(-0.3020059493192278), FX16_CONST(-0.953306040354194), + FX16_CONST(-0.3034679465720112), FX16_CONST(-0.9528416476011987), + FX16_CONST(-0.30492922973540243), FX16_CONST(-0.9523750127197659), + FX16_CONST(-0.3063897953708607), FX16_CONST(-0.9519061368079323), + FX16_CONST(-0.3078496400415348), FX16_CONST(-0.9514350209690083), + FX16_CONST(-0.3093087603122688), FX16_CONST(-0.9509616663115751), + FX16_CONST(-0.3107671527496113), FX16_CONST(-0.9504860739494818), + FX16_CONST(-0.3122248139218249), FX16_CONST(-0.950008245001843), + FX16_CONST(-0.3136817403988912), FX16_CONST(-0.9495281805930368), + FX16_CONST(-0.3151379287525222), FX16_CONST(-0.9490458818527007), + FX16_CONST(-0.31659337555616585), FX16_CONST(-0.9485613499157303), + FX16_CONST(-0.31804807738501467), FX16_CONST(-0.9480745859222763), + FX16_CONST(-0.3195020308160156), FX16_CONST(-0.9475855910177412), + FX16_CONST(-0.32095523242787527), FX16_CONST(-0.9470943663527772), + FX16_CONST(-0.32240767880106963), FX16_CONST(-0.9466009130832836), + FX16_CONST(-0.3238593665178528), FX16_CONST(-0.9461052323704034), + FX16_CONST(-0.325310292162263), FX16_CONST(-0.9456073253805213), + FX16_CONST(-0.32676045232013157), FX16_CONST(-0.9451071932852606), + FX16_CONST(-0.3282098435790925), FX16_CONST(-0.9446048372614803), + FX16_CONST(-0.3296584625285872), FX16_CONST(-0.9441002584912728), + FX16_CONST(-0.33110630575987626), FX16_CONST(-0.9435934581619604), + FX16_CONST(-0.3325533698660442), FX16_CONST(-0.9430844374660935), + FX16_CONST(-0.3339996514420091), FX16_CONST(-0.942573197601447), + FX16_CONST(-0.3354451470845315), FX16_CONST(-0.9420597397710174), + FX16_CONST(-0.3368898533922201), FX16_CONST(-0.9415440651830208), + FX16_CONST(-0.3383337669655409), FX16_CONST(-0.9410261750508894), + FX16_CONST(-0.3397768844068268), FX16_CONST(-0.9405060705932684), + FX16_CONST(-0.34121920232028247), FX16_CONST(-0.9399837530340139), + FX16_CONST(-0.3426607173119942), FX16_CONST(-0.93945922360219), + FX16_CONST(-0.3441014259899388), FX16_CONST(-0.9389324835320646), + FX16_CONST(-0.34554132496398876), FX16_CONST(-0.9384035340631083), + FX16_CONST(-0.3469804108459235), FX16_CONST(-0.9378723764399899), + FX16_CONST(-0.34841868024943456), FX16_CONST(-0.937339011912575), + FX16_CONST(-0.34985612979013464), FX16_CONST(-0.9368034417359217), + FX16_CONST(-0.351292756085567), FX16_CONST(-0.9362656671702783), + FX16_CONST(-0.3527285557552107), FX16_CONST(-0.9357256894810804), + FX16_CONST(-0.3541635254204901), FX16_CONST(-0.9351835099389477), + FX16_CONST(-0.3555976617047838), FX16_CONST(-0.9346391298196808), + FX16_CONST(-0.3570309612334301), FX16_CONST(-0.9340925504042589), + FX16_CONST(-0.3584634206337364), FX16_CONST(-0.9335437729788363), + FX16_CONST(-0.3598950365349881), FX16_CONST(-0.932992798834739), + FX16_CONST(-0.36132580556845395), FX16_CONST(-0.9324396292684625), + FX16_CONST(-0.36275572436739706), FX16_CONST(-0.9318842655816681), + FX16_CONST(-0.3641847895670799), FX16_CONST(-0.9313267090811804), + FX16_CONST(-0.3656129978047736), FX16_CONST(-0.9307669610789838), + FX16_CONST(-0.36704034571976707), FX16_CONST(-0.9302050228922191), + FX16_CONST(-0.3684668299533724), FX16_CONST(-0.9296408958431812), + FX16_CONST(-0.3698924471489339), FX16_CONST(-0.9290745812593159), + FX16_CONST(-0.37131719395183743), FX16_CONST(-0.9285060804732156), + FX16_CONST(-0.37274106700951587), FX16_CONST(-0.9279353948226178), + FX16_CONST(-0.3741640629714578), FX16_CONST(-0.9273625256504011), + FX16_CONST(-0.37558617848921716), FX16_CONST(-0.9267874743045819), + FX16_CONST(-0.3770074102164179), FX16_CONST(-0.9262102421383115), + FX16_CONST(-0.3784277548087654), FX16_CONST(-0.9256308305098728), + FX16_CONST(-0.37984720892405116), FX16_CONST(-0.9250492407826776), + FX16_CONST(-0.3812657692221621), FX16_CONST(-0.9244654743252627), + FX16_CONST(-0.38268343236508967), FX16_CONST(-0.9238795325112868), + FX16_CONST(-0.3841001950169351), FX16_CONST(-0.9232914167195276), + FX16_CONST(-0.3855160538439186), FX16_CONST(-0.9227011283338786), + FX16_CONST(-0.3869310055143885), FX16_CONST(-0.9221086687433452), + FX16_CONST(-0.38834504669882636), FX16_CONST(-0.9215140393420419), + FX16_CONST(-0.38975817406985624), FX16_CONST(-0.9209172415291895), + FX16_CONST(-0.3911703843022538), FX16_CONST(-0.9203182767091106), + FX16_CONST(-0.3925816740729512), FX16_CONST(-0.9197171462912275), + FX16_CONST(-0.39399204006104793), FX16_CONST(-0.9191138516900578), + FX16_CONST(-0.3954014789478163), FX16_CONST(-0.9185083943252123), + FX16_CONST(-0.39680998741671003), FX16_CONST(-0.9179007756213906), + FX16_CONST(-0.39821756215337345), FX16_CONST(-0.917290997008378), + FX16_CONST(-0.39962419984564684), FX16_CONST(-0.9166790599210427), + FX16_CONST(-0.4010298971835754), FX16_CONST(-0.9160649657993318), + FX16_CONST(-0.4024346508594184), FX16_CONST(-0.9154487160882678), + FX16_CONST(-0.4038384575676542), FX16_CONST(-0.9148303122379461), + FX16_CONST(-0.4052413140049897), FX16_CONST(-0.9142097557035307), + FX16_CONST(-0.406643216870369), FX16_CONST(-0.9135870479452508), + FX16_CONST(-0.40804416286497835), FX16_CONST(-0.9129621904283983), + FX16_CONST(-0.4094441486922574), FX16_CONST(-0.9123351846233229), + FX16_CONST(-0.4108431710579039), FX16_CONST(-0.9117060320054299), + FX16_CONST(-0.4122412266698826), FX16_CONST(-0.9110747340551765), + FX16_CONST(-0.4136383122384344), FX16_CONST(-0.9104412922580672), + FX16_CONST(-0.41503442447608163), FX16_CONST(-0.9098057081046522), + FX16_CONST(-0.41642956009763693), FX16_CONST(-0.9091679830905225), + FX16_CONST(-0.4178237158202122), FX16_CONST(-0.9085281187163061), + FX16_CONST(-0.419216888363224), FX16_CONST(-0.9078861164876662), + FX16_CONST(-0.42060907444840234), FX16_CONST(-0.9072419779152959), + FX16_CONST(-0.4220002707997996), FX16_CONST(-0.9065957045149154), + FX16_CONST(-0.4233904741437957), FX16_CONST(-0.9059472978072686), + FX16_CONST(-0.42477968120910864), FX16_CONST(-0.9052967593181188), + FX16_CONST(-0.4261678887267996), FX16_CONST(-0.9046440905782462), + FX16_CONST(-0.4275550934302818), FX16_CONST(-0.9039892931234434), + FX16_CONST(-0.4289412920553294), FX16_CONST(-0.9033323684945119), + FX16_CONST(-0.43032648134008267), FX16_CONST(-0.9026733182372588), + FX16_CONST(-0.43171065802505704), FX16_CONST(-0.9020121439024933), + FX16_CONST(-0.43309381885315185), FX16_CONST(-0.901348847046022), + FX16_CONST(-0.43447596056965576), FX16_CONST(-0.9006834292286469), + FX16_CONST(-0.4358570799222553), FX16_CONST(-0.9000158920161603), + FX16_CONST(-0.43723717366104403), FX16_CONST(-0.8993462369793416), + FX16_CONST(-0.4386162385385273), FX16_CONST(-0.898674465693954), + FX16_CONST(-0.4399942713096331), FX16_CONST(-0.8980005797407399), + FX16_CONST(-0.44137126873171667), FX16_CONST(-0.8973245807054183), + FX16_CONST(-0.44274722756456975), FX16_CONST(-0.8966464701786804), + FX16_CONST(-0.4441221445704291), FX16_CONST(-0.8959662497561852), + FX16_CONST(-0.44549601651398174), FX16_CONST(-0.8952839210385575), + FX16_CONST(-0.44686884016237394), FX16_CONST(-0.8945994856313828), + FX16_CONST(-0.44824061228521983), FX16_CONST(-0.8939129451452033), + FX16_CONST(-0.44961132965460665), FX16_CONST(-0.8932243011955153), + FX16_CONST(-0.45098098904510364), FX16_CONST(-0.8925335554027647), + FX16_CONST(-0.45234958723377083), FX16_CONST(-0.8918407093923427), + FX16_CONST(-0.45371712100016354), FX16_CONST(-0.8911457647945834), + FX16_CONST(-0.45508358712634367), FX16_CONST(-0.890448723244758), + FX16_CONST(-0.4564489823968839), FX16_CONST(-0.8897495863830728), + FX16_CONST(-0.45781330359887695), FX16_CONST(-0.8890483558546647), + FX16_CONST(-0.459176547521944), FX16_CONST(-0.8883450333095964), + FX16_CONST(-0.46053871095824006), FX16_CONST(-0.8876396204028539), + FX16_CONST(-0.4618997907024625), FX16_CONST(-0.8869321187943423), + FX16_CONST(-0.4632597835518601), FX16_CONST(-0.8862225301488806), + FX16_CONST(-0.46461868630623787), FX16_CONST(-0.8855108561362), + FX16_CONST(-0.46597649576796596), FX16_CONST(-0.8847970984309379), + FX16_CONST(-0.46733320874198836), FX16_CONST(-0.884081258712635), + FX16_CONST(-0.4686888220358276), FX16_CONST(-0.8833633386657318), + FX16_CONST(-0.47004333245959545), FX16_CONST(-0.8826433399795629), + FX16_CONST(-0.47139673682599764), FX16_CONST(-0.881921264348355), + FX16_CONST(-0.4727490319503425), FX16_CONST(-0.8811971134712222), + FX16_CONST(-0.47410021465054986), FX16_CONST(-0.8804708890521609), + FX16_CONST(-0.47545028174715587), FX16_CONST(-0.8797425928000474), + FX16_CONST(-0.47679923006332187), FX16_CONST(-0.8790122264286336), + FX16_CONST(-0.47814705642484295), FX16_CONST(-0.8782797916565416), + FX16_CONST(-0.47949375766015306), FX16_CONST(-0.8775452902072612), + FX16_CONST(-0.48083933060033374), FX16_CONST(-0.8768087238091458), + FX16_CONST(-0.48218377207912266), FX16_CONST(-0.8760700941954066), + FX16_CONST(-0.4835270789329184), FX16_CONST(-0.875329403104111), + FX16_CONST(-0.48486924800079095), FX16_CONST(-0.8745866522781762), + FX16_CONST(-0.48621027612448636), FX16_CONST(-0.8738418434653669), + FX16_CONST(-0.48755016014843566), FX16_CONST(-0.8730949784182902), + FX16_CONST(-0.48888889691976306), FX16_CONST(-0.8723460588943915), + FX16_CONST(-0.49022648328829116), FX16_CONST(-0.8715950866559511), + FX16_CONST(-0.4915629161065497), FX16_CONST(-0.8708420634700791), + FX16_CONST(-0.4928981922297839), FX16_CONST(-0.8700869911087115), + FX16_CONST(-0.4942323085159598), FX16_CONST(-0.8693298713486067), + FX16_CONST(-0.4955652618257723), FX16_CONST(-0.868570705971341), + FX16_CONST(-0.49689704902265447), FX16_CONST(-0.8678094967633033), + FX16_CONST(-0.49822766697278154), FX16_CONST(-0.8670462455156929), + FX16_CONST(-0.4995571125450817), FX16_CONST(-0.8662809540245131), + FX16_CONST(-0.5008853826112407), FX16_CONST(-0.8655136240905691), + FX16_CONST(-0.5022124740457106), FX16_CONST(-0.8647442575194625), + FX16_CONST(-0.5035383837257175), FX16_CONST(-0.8639728561215868), + FX16_CONST(-0.5048631085312676), FX16_CONST(-0.8631994217121242), + FX16_CONST(-0.506186645345155), FX16_CONST(-0.8624239561110407), + FX16_CONST(-0.5075089910529708), FX16_CONST(-0.8616464611430814), + FX16_CONST(-0.5088301425431071), FX16_CONST(-0.8608669386377673), + FX16_CONST(-0.5101500967067666), FX16_CONST(-0.8600853904293903), + FX16_CONST(-0.5114688504379703), FX16_CONST(-0.8593018183570085), + FX16_CONST(-0.5127864006335627), FX16_CONST(-0.858516224264443), + FX16_CONST(-0.5141027441932216), FX16_CONST(-0.8577286100002721), + FX16_CONST(-0.5154178780194629), FX16_CONST(-0.8569389774178288), + FX16_CONST(-0.5167317990176497), FX16_CONST(-0.8561473283751947), + FX16_CONST(-0.5180445040959992), FX16_CONST(-0.8553536647351961), + FX16_CONST(-0.5193559901655895), FX16_CONST(-0.8545579883654005), + FX16_CONST(-0.5206662541403669), FX16_CONST(-0.8537603011381115), + FX16_CONST(-0.5219752929371543), FX16_CONST(-0.8529606049303637), + FX16_CONST(-0.5232831034756564), FX16_CONST(-0.8521589016239198), + FX16_CONST(-0.5245896826784687), FX16_CONST(-0.8513551931052653), + FX16_CONST(-0.5258950274710846), FX16_CONST(-0.8505494812656035), + FX16_CONST(-0.5271991347819011), FX16_CONST(-0.8497417680008527), + FX16_CONST(-0.5285020015422283), FX16_CONST(-0.8489320552116397), + FX16_CONST(-0.5298036246862946), FX16_CONST(-0.8481203448032972), + FX16_CONST(-0.5311040011512547), FX16_CONST(-0.8473066386858585), + FX16_CONST(-0.5324031278771978), FX16_CONST(-0.8464909387740521), + FX16_CONST(-0.533701001807153), FX16_CONST(-0.8456732469872991), + FX16_CONST(-0.5349976198870969), FX16_CONST(-0.8448535652497072), + FX16_CONST(-0.5362929790659631), FX16_CONST(-0.8440318954900665), + FX16_CONST(-0.5375870762956455), FX16_CONST(-0.8432082396418454), + FX16_CONST(-0.5388799085310082), FX16_CONST(-0.842382599643186), + FX16_CONST(-0.5401714727298929), FX16_CONST(-0.8415549774368984), + FX16_CONST(-0.5414617658531232), FX16_CONST(-0.8407253749704582), + FX16_CONST(-0.5427507848645158), FX16_CONST(-0.8398937941959996), + FX16_CONST(-0.5440385267308838), FX16_CONST(-0.8390602370703127), + FX16_CONST(-0.5453249884220461), FX16_CONST(-0.8382247055548382), + FX16_CONST(-0.5466101669108347), FX16_CONST(-0.837387201615662), + FX16_CONST(-0.5478940591731002), FX16_CONST(-0.836547727223512), + FX16_CONST(-0.5491766621877194), FX16_CONST(-0.8357062843537527), + FX16_CONST(-0.5504579729366047), FX16_CONST(-0.8348628749863801), + FX16_CONST(-0.5517379884047074), FX16_CONST(-0.8340175011060181), + FX16_CONST(-0.5530167055800274), FX16_CONST(-0.8331701647019133), + FX16_CONST(-0.55429412145362), FX16_CONST(-0.8323208677679297), + FX16_CONST(-0.555570233019602), FX16_CONST(-0.8314696123025455), + FX16_CONST(-0.5568450372751599), FX16_CONST(-0.8306164003088464), + FX16_CONST(-0.5581185312205561), FX16_CONST(-0.829761233794523), + FX16_CONST(-0.5593907118591358), FX16_CONST(-0.8289041147718651), + FX16_CONST(-0.5606615761973359), FX16_CONST(-0.8280450452577559), + FX16_CONST(-0.5619311212446894), FX16_CONST(-0.8271840272736691), + FX16_CONST(-0.5631993440138339), FX16_CONST(-0.8263210628456636), + FX16_CONST(-0.5644662415205194), FX16_CONST(-0.8254561540043776), + FX16_CONST(-0.5657318107836132), FX16_CONST(-0.8245893027850253), + FX16_CONST(-0.5669960488251085), FX16_CONST(-0.8237205112273915), + FX16_CONST(-0.5682589526701315), FX16_CONST(-0.8228497813758264), + FX16_CONST(-0.5695205193469473), FX16_CONST(-0.8219771152792416), + FX16_CONST(-0.5707807458869671), FX16_CONST(-0.8211025149911048), + FX16_CONST(-0.572039629324757), FX16_CONST(-0.8202259825694347), + FX16_CONST(-0.573297166698042), FX16_CONST(-0.8193475200767971), + FX16_CONST(-0.5745533550477157), FX16_CONST(-0.8184671295802988), + FX16_CONST(-0.5758081914178453), FX16_CONST(-0.8175848131515837), + FX16_CONST(-0.5770616728556793), FX16_CONST(-0.816700572866828), + FX16_CONST(-0.5783137964116555), FX16_CONST(-0.8158144108067339), + FX16_CONST(-0.5795645591394057), FX16_CONST(-0.8149263290565266), + FX16_CONST(-0.5808139580957643), FX16_CONST(-0.8140363297059485), + FX16_CONST(-0.5820619903407754), FX16_CONST(-0.8131444148492536), + FX16_CONST(-0.5833086529376983), FX16_CONST(-0.8122505865852039), + FX16_CONST(-0.5845539429530151), FX16_CONST(-0.8113548470170638), + FX16_CONST(-0.5857978574564389), FX16_CONST(-0.8104571982525949), + FX16_CONST(-0.5870403935209177), FX16_CONST(-0.8095576424040515), + FX16_CONST(-0.5882815482226451), FX16_CONST(-0.8086561815881751), + FX16_CONST(-0.5895213186410639), FX16_CONST(-0.8077528179261904), + FX16_CONST(-0.5907597018588739), FX16_CONST(-0.8068475535437994), + FX16_CONST(-0.5919966949620409), FX16_CONST(-0.8059403905711764), + FX16_CONST(-0.5932322950397998), FX16_CONST(-0.8050313311429635), + FX16_CONST(-0.5944664991846642), FX16_CONST(-0.8041203773982659), + FX16_CONST(-0.5956993044924332), FX16_CONST(-0.8032075314806449), + FX16_CONST(-0.5969307080621965), FX16_CONST(-0.8022927955381157), + FX16_CONST(-0.5981607069963422), FX16_CONST(-0.8013761717231404), + FX16_CONST(-0.5993892984005645), FX16_CONST(-0.8004576621926228), + FX16_CONST(-0.6006164793838686), FX16_CONST(-0.7995372691079052), + FX16_CONST(-0.6018422470585799), FX16_CONST(-0.7986149946347609), + FX16_CONST(-0.6030665985403482), FX16_CONST(-0.7976908409433912), + FX16_CONST(-0.6042895309481559), FX16_CONST(-0.7967648102084189), + FX16_CONST(-0.6055110414043254), FX16_CONST(-0.7958369046088836), + FX16_CONST(-0.6067311270345245), FX16_CONST(-0.794907126328237), + FX16_CONST(-0.6079497849677735), FX16_CONST(-0.7939754775543373), + FX16_CONST(-0.6091670123364531), FX16_CONST(-0.7930419604794438), + FX16_CONST(-0.6103828062763095), FX16_CONST(-0.7921065773002123), + FX16_CONST(-0.6115971639264618), FX16_CONST(-0.7911693302176903), + FX16_CONST(-0.6128100824294097), FX16_CONST(-0.79023022143731), + FX16_CONST(-0.6140215589310382), FX16_CONST(-0.7892892531688859), + FX16_CONST(-0.6152315905806267), FX16_CONST(-0.7883464276266063), + FX16_CONST(-0.6164401745308536), FX16_CONST(-0.7874017470290314), + FX16_CONST(-0.6176473079378038), FX16_CONST(-0.7864552135990859), + FX16_CONST(-0.6188529879609762), FX16_CONST(-0.785506829564054), + FX16_CONST(-0.6200572117632892), FX16_CONST(-0.7845565971555752), + FX16_CONST(-0.6212599765110874), FX16_CONST(-0.7836045186096384), + FX16_CONST(-0.6224612793741499), FX16_CONST(-0.7826505961665758), + FX16_CONST(-0.6236611175256946), FX16_CONST(-0.7816948320710594), + FX16_CONST(-0.6248594881423862), FX16_CONST(-0.7807372285720946), + FX16_CONST(-0.6260563884043435), FX16_CONST(-0.7797777879230146), + FX16_CONST(-0.6272518154951439), FX16_CONST(-0.7788165123814762), + FX16_CONST(-0.6284457666018326), FX16_CONST(-0.7778534042094533), + FX16_CONST(-0.629638238914927), FX16_CONST(-0.7768884656732324), + FX16_CONST(-0.6308292296284242), FX16_CONST(-0.7759216990434078), + FX16_CONST(-0.632018735939809), FX16_CONST(-0.7749531065948739), + FX16_CONST(-0.6332067550500573), FX16_CONST(-0.7739826906068228), + FX16_CONST(-0.6343932841636453), FX16_CONST(-0.7730104533627371), + FX16_CONST(-0.6355783204885561), FX16_CONST(-0.7720363971503845), + FX16_CONST(-0.6367618612362843), FX16_CONST(-0.7710605242618137), + FX16_CONST(-0.6379439036218439), FX16_CONST(-0.7700828369933481), + FX16_CONST(-0.6391244448637757), FX16_CONST(-0.7691033376455797), + FX16_CONST(-0.6403034821841515), FX16_CONST(-0.7681220285233656), + FX16_CONST(-0.641481012808583), FX16_CONST(-0.7671389119358205), + FX16_CONST(-0.6426570339662269), FX16_CONST(-0.7661539901963129), + FX16_CONST(-0.6438315428897913), FX16_CONST(-0.7651672656224591), + FX16_CONST(-0.6450045368155438), FX16_CONST(-0.7641787405361168), + FX16_CONST(-0.6461760129833164), FX16_CONST(-0.7631884172633813), + FX16_CONST(-0.6473459686365118), FX16_CONST(-0.7621962981345791), + FX16_CONST(-0.6485144010221123), FX16_CONST(-0.7612023854842619), + FX16_CONST(-0.6496813073906832), FX16_CONST(-0.7602066816512024), + FX16_CONST(-0.6508466849963808), FX16_CONST(-0.7592091889783882), + FX16_CONST(-0.6520105310969595), FX16_CONST(-0.7582099098130154), + FX16_CONST(-0.6531728429537765), FX16_CONST(-0.7572088465064848), + FX16_CONST(-0.6543336178318003), FX16_CONST(-0.7562060014143946), + FX16_CONST(-0.6554928529996153), FX16_CONST(-0.7552013768965365), + FX16_CONST(-0.6566505457294288), FX16_CONST(-0.7541949753168894), + FX16_CONST(-0.6578066932970785), FX16_CONST(-0.7531867990436125), + FX16_CONST(-0.6589612929820373), FX16_CONST(-0.7521768504490427), + FX16_CONST(-0.6601143420674203), FX16_CONST(-0.7511651319096866), + FX16_CONST(-0.6612658378399922), FX16_CONST(-0.7501516458062151), + FX16_CONST(-0.6624157775901718), FX16_CONST(-0.7491363945234593), + FX16_CONST(-0.6635641586120397), FX16_CONST(-0.7481193804504037), + FX16_CONST(-0.6647109782033448), FX16_CONST(-0.7471006059801802), + FX16_CONST(-0.6658562336655094), FX16_CONST(-0.746080073510064), + FX16_CONST(-0.6669999223036374), FX16_CONST(-0.7450577854414661), + FX16_CONST(-0.6681420414265185), FX16_CONST(-0.7440337441799293), + FX16_CONST(-0.6692825883466358), FX16_CONST(-0.7430079521351219), + FX16_CONST(-0.670421560380173), FX16_CONST(-0.7419804117208311), + FX16_CONST(-0.6715589548470184), FX16_CONST(-0.7409511253549591), + FX16_CONST(-0.6726947690707727), FX16_CONST(-0.7399200954595163), + FX16_CONST(-0.6738290003787559), FX16_CONST(-0.7388873244606152), + FX16_CONST(-0.674961646102012), FX16_CONST(-0.737852814788466), + FX16_CONST(-0.6760927035753158), FX16_CONST(-0.73681656887737), + FX16_CONST(-0.6772221701371803), FX16_CONST(-0.7357785891657136), + FX16_CONST(-0.6783500431298612), FX16_CONST(-0.7347388780959637), + FX16_CONST(-0.6794763198993649), FX16_CONST(-0.7336974381146604), + FX16_CONST(-0.680600997795453), FX16_CONST(-0.7326542716724128), + FX16_CONST(-0.6817240741716496), FX16_CONST(-0.7316093812238927), + FX16_CONST(-0.682845546385248), FX16_CONST(-0.7305627692278277), + FX16_CONST(-0.6839654117973154), FX16_CONST(-0.729514438146997), + FX16_CONST(-0.6850836677727001), FX16_CONST(-0.7284643904482254), + FX16_CONST(-0.6862003116800385), FX16_CONST(-0.7274126286023759), + FX16_CONST(-0.6873153408917592), FX16_CONST(-0.7263591550843459), + FX16_CONST(-0.6884287527840903), FX16_CONST(-0.7253039723730609), + FX16_CONST(-0.6895405447370668), FX16_CONST(-0.724247082951467), + FX16_CONST(-0.6906507141345344), FX16_CONST(-0.7231884893065277), + FX16_CONST(-0.6917592583641576), FX16_CONST(-0.7221281939292155), + FX16_CONST(-0.6928661748174246), FX16_CONST(-0.7210661993145081), + FX16_CONST(-0.6939714608896538), FX16_CONST(-0.7200025079613819), + FX16_CONST(-0.6950751139800008), FX16_CONST(-0.7189371223728045), + FX16_CONST(-0.696177131491463), FX16_CONST(-0.7178700450557317), + FX16_CONST(-0.6972775108308864), FX16_CONST(-0.7168012785210996), + FX16_CONST(-0.6983762494089728), FX16_CONST(-0.7157308252838187), + FX16_CONST(-0.6994733446402839), FX16_CONST(-0.714658687862769), + FX16_CONST(-0.7005687939432482), FX16_CONST(-0.7135848687807937), + FX16_CONST(-0.7016625947401685), FX16_CONST(-0.7125093705646924), + FX16_CONST(-0.7027547444572251), FX16_CONST(-0.7114321957452167), + FX16_CONST(-0.7038452405244848), FX16_CONST(-0.7103533468570625), + FX16_CONST(-0.7049340803759049), FX16_CONST(-0.7092728264388657), + FX16_CONST(-0.7060212614493395), FX16_CONST(-0.7081906370331955), + FX16_CONST(-0.7071067811865475), FX16_CONST(-0.7071067811865477), + FX16_CONST(-0.7081906370331953), FX16_CONST(-0.7060212614493397), + FX16_CONST(-0.7092728264388655), FX16_CONST(-0.7049340803759051), + FX16_CONST(-0.7103533468570623), FX16_CONST(-0.703845240524485), + FX16_CONST(-0.7114321957452164), FX16_CONST(-0.7027547444572253), + FX16_CONST(-0.7125093705646922), FX16_CONST(-0.7016625947401687), + FX16_CONST(-0.7135848687807935), FX16_CONST(-0.7005687939432484), + FX16_CONST(-0.7146586878627688), FX16_CONST(-0.6994733446402841), + FX16_CONST(-0.7157308252838185), FX16_CONST(-0.698376249408973), + FX16_CONST(-0.7168012785210994), FX16_CONST(-0.6972775108308866), + FX16_CONST(-0.7178700450557315), FX16_CONST(-0.6961771314914632), + FX16_CONST(-0.7189371223728044), FX16_CONST(-0.695075113980001), + FX16_CONST(-0.7200025079613817), FX16_CONST(-0.693971460889654), + FX16_CONST(-0.7210661993145079), FX16_CONST(-0.6928661748174249), + FX16_CONST(-0.7221281939292152), FX16_CONST(-0.6917592583641579), + FX16_CONST(-0.7231884893065275), FX16_CONST(-0.6906507141345346), + FX16_CONST(-0.7242470829514668), FX16_CONST(-0.689540544737067), + FX16_CONST(-0.7253039723730607), FX16_CONST(-0.6884287527840905), + FX16_CONST(-0.7263591550843458), FX16_CONST(-0.6873153408917594), + FX16_CONST(-0.7274126286023757), FX16_CONST(-0.6862003116800387), + FX16_CONST(-0.7284643904482252), FX16_CONST(-0.6850836677727004), + FX16_CONST(-0.7295144381469968), FX16_CONST(-0.6839654117973156), + FX16_CONST(-0.7305627692278275), FX16_CONST(-0.6828455463852482), + FX16_CONST(-0.7316093812238925), FX16_CONST(-0.6817240741716498), + FX16_CONST(-0.7326542716724127), FX16_CONST(-0.6806009977954532), + FX16_CONST(-0.7336974381146601), FX16_CONST(-0.6794763198993651), + FX16_CONST(-0.7347388780959635), FX16_CONST(-0.6783500431298615), + FX16_CONST(-0.7357785891657134), FX16_CONST(-0.6772221701371806), + FX16_CONST(-0.7368165688773698), FX16_CONST(-0.676092703575316), + FX16_CONST(-0.7378528147884658), FX16_CONST(-0.6749616461020123), + FX16_CONST(-0.738887324460615), FX16_CONST(-0.6738290003787561), + FX16_CONST(-0.7399200954595161), FX16_CONST(-0.672694769070773), + FX16_CONST(-0.7409511253549589), FX16_CONST(-0.6715589548470187), + FX16_CONST(-0.741980411720831), FX16_CONST(-0.6704215603801732), + FX16_CONST(-0.7430079521351217), FX16_CONST(-0.669282588346636), + FX16_CONST(-0.7440337441799291), FX16_CONST(-0.6681420414265187), + FX16_CONST(-0.7450577854414658), FX16_CONST(-0.6669999223036376), + FX16_CONST(-0.7460800735100638), FX16_CONST(-0.6658562336655096), + FX16_CONST(-0.7471006059801799), FX16_CONST(-0.664710978203345), + FX16_CONST(-0.7481193804504035), FX16_CONST(-0.6635641586120399), + FX16_CONST(-0.749136394523459), FX16_CONST(-0.662415777590172), + FX16_CONST(-0.750151645806215), FX16_CONST(-0.6612658378399924), + FX16_CONST(-0.7511651319096864), FX16_CONST(-0.6601143420674205), + FX16_CONST(-0.7521768504490425), FX16_CONST(-0.6589612929820375), + FX16_CONST(-0.7531867990436124), FX16_CONST(-0.6578066932970787), + FX16_CONST(-0.7541949753168892), FX16_CONST(-0.656650545729429), + FX16_CONST(-0.7552013768965363), FX16_CONST(-0.6554928529996156), + FX16_CONST(-0.7562060014143944), FX16_CONST(-0.6543336178318007), + FX16_CONST(-0.7572088465064842), FX16_CONST(-0.6531728429537771), + FX16_CONST(-0.7582099098130151), FX16_CONST(-0.6520105310969597), + FX16_CONST(-0.759209188978388), FX16_CONST(-0.650846684996381), + FX16_CONST(-0.7602066816512024), FX16_CONST(-0.6496813073906831), + FX16_CONST(-0.761202385484262), FX16_CONST(-0.6485144010221122), + FX16_CONST(-0.7621962981345786), FX16_CONST(-0.6473459686365125), + FX16_CONST(-0.763188417263381), FX16_CONST(-0.6461760129833166), + FX16_CONST(-0.7641787405361166), FX16_CONST(-0.6450045368155441), + FX16_CONST(-0.765167265622459), FX16_CONST(-0.6438315428897915), + FX16_CONST(-0.766153990196313), FX16_CONST(-0.6426570339662268), + FX16_CONST(-0.7671389119358201), FX16_CONST(-0.6414810128085836), + FX16_CONST(-0.7681220285233652), FX16_CONST(-0.640303482184152), + FX16_CONST(-0.7691033376455795), FX16_CONST(-0.639124444863776), + FX16_CONST(-0.7700828369933479), FX16_CONST(-0.6379439036218442), + FX16_CONST(-0.7710605242618138), FX16_CONST(-0.6367618612362842), + FX16_CONST(-0.7720363971503846), FX16_CONST(-0.635578320488556), + FX16_CONST(-0.7730104533627367), FX16_CONST(-0.6343932841636459), + FX16_CONST(-0.7739826906068226), FX16_CONST(-0.6332067550500575), + FX16_CONST(-0.7749531065948738), FX16_CONST(-0.6320187359398092), + FX16_CONST(-0.7759216990434076), FX16_CONST(-0.6308292296284246), + FX16_CONST(-0.7768884656732326), FX16_CONST(-0.6296382389149269), + FX16_CONST(-0.7778534042094527), FX16_CONST(-0.6284457666018332), + FX16_CONST(-0.7788165123814756), FX16_CONST(-0.6272518154951444), + FX16_CONST(-0.7797777879230143), FX16_CONST(-0.6260563884043437), + FX16_CONST(-0.7807372285720944), FX16_CONST(-0.6248594881423865), + FX16_CONST(-0.7816948320710595), FX16_CONST(-0.6236611175256945), + FX16_CONST(-0.7826505961665758), FX16_CONST(-0.6224612793741497), + FX16_CONST(-0.7836045186096379), FX16_CONST(-0.621259976511088), + FX16_CONST(-0.784556597155575), FX16_CONST(-0.6200572117632894), + FX16_CONST(-0.7855068295640538), FX16_CONST(-0.6188529879609764), + FX16_CONST(-0.7864552135990858), FX16_CONST(-0.617647307937804), + FX16_CONST(-0.7874017470290315), FX16_CONST(-0.6164401745308535), + FX16_CONST(-0.7883464276266059), FX16_CONST(-0.6152315905806273), + FX16_CONST(-0.7892892531688854), FX16_CONST(-0.6140215589310387), + FX16_CONST(-0.7902302214373099), FX16_CONST(-0.6128100824294099), + FX16_CONST(-0.7911693302176901), FX16_CONST(-0.611597163926462), + FX16_CONST(-0.7921065773002124), FX16_CONST(-0.6103828062763094), + FX16_CONST(-0.7930419604794439), FX16_CONST(-0.609167012336453), + FX16_CONST(-0.7939754775543368), FX16_CONST(-0.6079497849677741), + FX16_CONST(-0.7949071263282368), FX16_CONST(-0.6067311270345248), + FX16_CONST(-0.7958369046088835), FX16_CONST(-0.6055110414043257), + FX16_CONST(-0.7967648102084187), FX16_CONST(-0.6042895309481561), + FX16_CONST(-0.7976908409433912), FX16_CONST(-0.603066598540348), + FX16_CONST(-0.7986149946347605), FX16_CONST(-0.6018422470585805), + FX16_CONST(-0.7995372691079048), FX16_CONST(-0.6006164793838693), + FX16_CONST(-0.8004576621926226), FX16_CONST(-0.5993892984005648), + FX16_CONST(-0.8013761717231401), FX16_CONST(-0.5981607069963424), + FX16_CONST(-0.8022927955381157), FX16_CONST(-0.5969307080621964), + FX16_CONST(-0.803207531480645), FX16_CONST(-0.5956993044924331), + FX16_CONST(-0.8041203773982655), FX16_CONST(-0.5944664991846649), + FX16_CONST(-0.8050313311429634), FX16_CONST(-0.5932322950398001), + FX16_CONST(-0.8059403905711762), FX16_CONST(-0.5919966949620411), + FX16_CONST(-0.8068475535437992), FX16_CONST(-0.5907597018588743), + FX16_CONST(-0.8077528179261905), FX16_CONST(-0.5895213186410638), + FX16_CONST(-0.8086561815881746), FX16_CONST(-0.5882815482226458), + FX16_CONST(-0.809557642404051), FX16_CONST(-0.5870403935209183), + FX16_CONST(-0.8104571982525947), FX16_CONST(-0.5857978574564391), + FX16_CONST(-0.8113548470170637), FX16_CONST(-0.5845539429530153), + FX16_CONST(-0.812250586585204), FX16_CONST(-0.5833086529376983), + FX16_CONST(-0.8131444148492537), FX16_CONST(-0.5820619903407753), + FX16_CONST(-0.8140363297059481), FX16_CONST(-0.580813958095765), + FX16_CONST(-0.8149263290565264), FX16_CONST(-0.579564559139406), + FX16_CONST(-0.8158144108067337), FX16_CONST(-0.5783137964116557), + FX16_CONST(-0.8167005728668278), FX16_CONST(-0.5770616728556796), + FX16_CONST(-0.8175848131515838), FX16_CONST(-0.5758081914178452), + FX16_CONST(-0.8184671295802983), FX16_CONST(-0.5745533550477163), + FX16_CONST(-0.8193475200767967), FX16_CONST(-0.5732971666980425), + FX16_CONST(-0.8202259825694345), FX16_CONST(-0.5720396293247573), + FX16_CONST(-0.8211025149911046), FX16_CONST(-0.5707807458869674), + FX16_CONST(-0.8219771152792416), FX16_CONST(-0.5695205193469471), + FX16_CONST(-0.8228497813758264), FX16_CONST(-0.5682589526701314), + FX16_CONST(-0.8237205112273911), FX16_CONST(-0.566996048825109), + FX16_CONST(-0.8245893027850251), FX16_CONST(-0.5657318107836135), + FX16_CONST(-0.8254561540043774), FX16_CONST(-0.5644662415205196), + FX16_CONST(-0.8263210628456634), FX16_CONST(-0.5631993440138341), + FX16_CONST(-0.8271840272736692), FX16_CONST(-0.5619311212446892), + FX16_CONST(-0.8280450452577555), FX16_CONST(-0.5606615761973365), + FX16_CONST(-0.8289041147718647), FX16_CONST(-0.5593907118591365), + FX16_CONST(-0.8297612337945229), FX16_CONST(-0.5581185312205563), + FX16_CONST(-0.8306164003088462), FX16_CONST(-0.5568450372751601), + FX16_CONST(-0.8314696123025452), FX16_CONST(-0.5555702330196022), + FX16_CONST(-0.8323208677679298), FX16_CONST(-0.5542941214536199), + FX16_CONST(-0.8331701647019129), FX16_CONST(-0.5530167055800279), + FX16_CONST(-0.8340175011060179), FX16_CONST(-0.5517379884047077), + FX16_CONST(-0.8348628749863799), FX16_CONST(-0.5504579729366049), + FX16_CONST(-0.8357062843537526), FX16_CONST(-0.5491766621877198), + FX16_CONST(-0.8365477272235121), FX16_CONST(-0.5478940591731001), + FX16_CONST(-0.8373872016156616), FX16_CONST(-0.5466101669108354), + FX16_CONST(-0.8382247055548379), FX16_CONST(-0.5453249884220468), + FX16_CONST(-0.8390602370703125), FX16_CONST(-0.5440385267308842), + FX16_CONST(-0.8398937941959994), FX16_CONST(-0.542750784864516), + FX16_CONST(-0.8407253749704581), FX16_CONST(-0.5414617658531234), + FX16_CONST(-0.8415549774368986), FX16_CONST(-0.5401714727298927), + FX16_CONST(-0.8423825996431856), FX16_CONST(-0.5388799085310089), + FX16_CONST(-0.8432082396418452), FX16_CONST(-0.5375870762956457), + FX16_CONST(-0.8440318954900663), FX16_CONST(-0.5362929790659633), + FX16_CONST(-0.8448535652497071), FX16_CONST(-0.5349976198870973), + FX16_CONST(-0.8456732469872992), FX16_CONST(-0.5337010018071529), + FX16_CONST(-0.8464909387740518), FX16_CONST(-0.5324031278771985), + FX16_CONST(-0.8473066386858581), FX16_CONST(-0.5311040011512553), + FX16_CONST(-0.8481203448032971), FX16_CONST(-0.5298036246862949), + FX16_CONST(-0.8489320552116396), FX16_CONST(-0.5285020015422286), + FX16_CONST(-0.8497417680008525), FX16_CONST(-0.5271991347819013), + FX16_CONST(-0.8505494812656036), FX16_CONST(-0.5258950274710845), + FX16_CONST(-0.8513551931052649), FX16_CONST(-0.5245896826784693), + FX16_CONST(-0.8521589016239196), FX16_CONST(-0.5232831034756568), + FX16_CONST(-0.8529606049303635), FX16_CONST(-0.5219752929371545), + FX16_CONST(-0.8537603011381114), FX16_CONST(-0.5206662541403672), + FX16_CONST(-0.8545579883654005), FX16_CONST(-0.5193559901655894), + FX16_CONST(-0.8553536647351957), FX16_CONST(-0.5180445040959999), + FX16_CONST(-0.8561473283751942), FX16_CONST(-0.5167317990176502), + FX16_CONST(-0.8569389774178287), FX16_CONST(-0.5154178780194633), + FX16_CONST(-0.857728610000272), FX16_CONST(-0.5141027441932218), + FX16_CONST(-0.8585162242644429), FX16_CONST(-0.512786400633563), + FX16_CONST(-0.8593018183570085), FX16_CONST(-0.5114688504379702), + FX16_CONST(-0.8600853904293899), FX16_CONST(-0.5101500967067673), + FX16_CONST(-0.8608669386377671), FX16_CONST(-0.5088301425431073), + FX16_CONST(-0.8616464611430812), FX16_CONST(-0.507508991052971), + FX16_CONST(-0.8624239561110405), FX16_CONST(-0.5061866453451553), + FX16_CONST(-0.8631994217121243), FX16_CONST(-0.5048631085312674), + FX16_CONST(-0.8639728561215865), FX16_CONST(-0.503538383725718), + FX16_CONST(-0.8647442575194622), FX16_CONST(-0.5022124740457111), + FX16_CONST(-0.865513624090569), FX16_CONST(-0.500885382611241), + FX16_CONST(-0.8662809540245129), FX16_CONST(-0.49955711254508195), + FX16_CONST(-0.8670462455156926), FX16_CONST(-0.4982276669727818), + FX16_CONST(-0.8678094967633033), FX16_CONST(-0.49689704902265436), + FX16_CONST(-0.8685707059713407), FX16_CONST(-0.495565261825773), + FX16_CONST(-0.8693298713486066), FX16_CONST(-0.49423230851596), + FX16_CONST(-0.8700869911087113), FX16_CONST(-0.4928981922297842), + FX16_CONST(-0.8708420634700789), FX16_CONST(-0.49156291610654995), + FX16_CONST(-0.8715950866559511), FX16_CONST(-0.49022648328829105), + FX16_CONST(-0.8723460588943912), FX16_CONST(-0.48888889691976367), + FX16_CONST(-0.8730949784182899), FX16_CONST(-0.48755016014843633), + FX16_CONST(-0.8738418434653666), FX16_CONST(-0.48621027612448664), + FX16_CONST(-0.8745866522781761), FX16_CONST(-0.4848692480007912), + FX16_CONST(-0.8753294031041109), FX16_CONST(-0.4835270789329187), + FX16_CONST(-0.8760700941954067), FX16_CONST(-0.48218377207912255), + FX16_CONST(-0.8768087238091454), FX16_CONST(-0.4808393306003344), + FX16_CONST(-0.8775452902072611), FX16_CONST(-0.47949375766015334), + FX16_CONST(-0.8782797916565415), FX16_CONST(-0.47814705642484323), + FX16_CONST(-0.8790122264286334), FX16_CONST(-0.47679923006332214), + FX16_CONST(-0.8797425928000475), FX16_CONST(-0.47545028174715576), + FX16_CONST(-0.8804708890521605), FX16_CONST(-0.4741002146505505), + FX16_CONST(-0.8811971134712219), FX16_CONST(-0.4727490319503432), + FX16_CONST(-0.8819212643483549), FX16_CONST(-0.47139673682599786), + FX16_CONST(-0.8826433399795628), FX16_CONST(-0.47004333245959573), + FX16_CONST(-0.8833633386657316), FX16_CONST(-0.4686888220358279), + FX16_CONST(-0.8840812587126351), FX16_CONST(-0.46733320874198825), + FX16_CONST(-0.8847970984309376), FX16_CONST(-0.4659764957679666), + FX16_CONST(-0.8855108561361997), FX16_CONST(-0.46461868630623815), + FX16_CONST(-0.8862225301488805), FX16_CONST(-0.46325978355186037), + FX16_CONST(-0.8869321187943422), FX16_CONST(-0.4618997907024628), + FX16_CONST(-0.887639620402854), FX16_CONST(-0.4605387109582399), + FX16_CONST(-0.888345033309596), FX16_CONST(-0.45917654752194464), + FX16_CONST(-0.8890483558546644), FX16_CONST(-0.4578133035988776), + FX16_CONST(-0.8897495863830727), FX16_CONST(-0.4564489823968842), + FX16_CONST(-0.8904487232447579), FX16_CONST(-0.45508358712634395), + FX16_CONST(-0.8911457647945833), FX16_CONST(-0.4537171210001638), + FX16_CONST(-0.8918407093923428), FX16_CONST(-0.45234958723377067), + FX16_CONST(-0.8925335554027644), FX16_CONST(-0.4509809890451043), + FX16_CONST(-0.8932243011955152), FX16_CONST(-0.44961132965460693), + FX16_CONST(-0.8939129451452031), FX16_CONST(-0.4482406122852201), + FX16_CONST(-0.8945994856313827), FX16_CONST(-0.4468688401623742), + FX16_CONST(-0.8952839210385576), FX16_CONST(-0.44549601651398163), + FX16_CONST(-0.8959662497561849), FX16_CONST(-0.44412214457042976), + FX16_CONST(-0.89664647017868), FX16_CONST(-0.4427472275645704), + FX16_CONST(-0.8973245807054182), FX16_CONST(-0.44137126873171695), + FX16_CONST(-0.8980005797407398), FX16_CONST(-0.43999427130963337), + FX16_CONST(-0.8986744656939538), FX16_CONST(-0.4386162385385276), + FX16_CONST(-0.8993462369793417), FX16_CONST(-0.4372371736610439), + FX16_CONST(-0.90001589201616), FX16_CONST(-0.435857079922256), + FX16_CONST(-0.9006834292286467), FX16_CONST(-0.43447596056965604), + FX16_CONST(-0.9013488470460219), FX16_CONST(-0.4330938188531521), + FX16_CONST(-0.9020121439024932), FX16_CONST(-0.4317106580250573), + FX16_CONST(-0.9026733182372588), FX16_CONST(-0.4303264813400825), + FX16_CONST(-0.9033323684945116), FX16_CONST(-0.42894129205533005), + FX16_CONST(-0.9039892931234431), FX16_CONST(-0.4275550934302825), + FX16_CONST(-0.9046440905782461), FX16_CONST(-0.4261678887267999), + FX16_CONST(-0.9052967593181187), FX16_CONST(-0.4247796812091089), + FX16_CONST(-0.9059472978072685), FX16_CONST(-0.423390474143796), + FX16_CONST(-0.9065957045149154), FX16_CONST(-0.4220002707997995), + FX16_CONST(-0.9072419779152956), FX16_CONST(-0.420609074448403), + FX16_CONST(-0.907886116487666), FX16_CONST(-0.4192168883632243), + FX16_CONST(-0.908528118716306), FX16_CONST(-0.4178237158202125), + FX16_CONST(-0.9091679830905224), FX16_CONST(-0.4164295600976372), + FX16_CONST(-0.9098057081046523), FX16_CONST(-0.4150344244760815), + FX16_CONST(-0.9104412922580669), FX16_CONST(-0.4136383122384351), + FX16_CONST(-0.9110747340551761), FX16_CONST(-0.4122412266698833), + FX16_CONST(-0.9117060320054298), FX16_CONST(-0.4108431710579042), + FX16_CONST(-0.9123351846233227), FX16_CONST(-0.40944414869225776), + FX16_CONST(-0.9129621904283982), FX16_CONST(-0.40804416286497863), + FX16_CONST(-0.9135870479452509), FX16_CONST(-0.40664321687036886), + FX16_CONST(-0.9142097557035305), FX16_CONST(-0.40524131400499036), + FX16_CONST(-0.914830312237946), FX16_CONST(-0.40383845756765446), + FX16_CONST(-0.9154487160882677), FX16_CONST(-0.40243465085941865), + FX16_CONST(-0.9160649657993317), FX16_CONST(-0.4010298971835757), + FX16_CONST(-0.9166790599210427), FX16_CONST(-0.39962419984564673), + FX16_CONST(-0.9172909970083777), FX16_CONST(-0.39821756215337417), + FX16_CONST(-0.9179007756213903), FX16_CONST(-0.39680998741671075), + FX16_CONST(-0.9185083943252121), FX16_CONST(-0.3954014789478166), + FX16_CONST(-0.9191138516900577), FX16_CONST(-0.3939920400610482), + FX16_CONST(-0.9197171462912274), FX16_CONST(-0.39258167407295147), + FX16_CONST(-0.9203182767091106), FX16_CONST(-0.3911703843022537), + FX16_CONST(-0.9209172415291893), FX16_CONST(-0.38975817406985697), + FX16_CONST(-0.9215140393420418), FX16_CONST(-0.38834504669882663), + FX16_CONST(-0.9221086687433451), FX16_CONST(-0.3869310055143888), + FX16_CONST(-0.9227011283338785), FX16_CONST(-0.3855160538439189), + FX16_CONST(-0.9232914167195276), FX16_CONST(-0.38410019501693493), + FX16_CONST(-0.9238795325112865), FX16_CONST(-0.38268343236509034), + FX16_CONST(-0.9244654743252625), FX16_CONST(-0.38126576922216276), + FX16_CONST(-0.9250492407826775), FX16_CONST(-0.37984720892405144), + FX16_CONST(-0.9256308305098727), FX16_CONST(-0.3784277548087657), + FX16_CONST(-0.9262102421383114), FX16_CONST(-0.3770074102164182), + FX16_CONST(-0.9267874743045819), FX16_CONST(-0.37558617848921705), + FX16_CONST(-0.9273625256504009), FX16_CONST(-0.3741640629714585), + FX16_CONST(-0.9279353948226177), FX16_CONST(-0.37274106700951615), + FX16_CONST(-0.9285060804732155), FX16_CONST(-0.37131719395183777), + FX16_CONST(-0.9290745812593157), FX16_CONST(-0.36989244714893416), + FX16_CONST(-0.9296408958431813), FX16_CONST(-0.3684668299533722), + FX16_CONST(-0.9302050228922192), FX16_CONST(-0.36704034571976696), + FX16_CONST(-0.9307669610789836), FX16_CONST(-0.3656129978047743), + FX16_CONST(-0.9313267090811803), FX16_CONST(-0.36418478956708017), + FX16_CONST(-0.931884265581668), FX16_CONST(-0.36275572436739734), + FX16_CONST(-0.9324396292684624), FX16_CONST(-0.36132580556845423), + FX16_CONST(-0.932992798834739), FX16_CONST(-0.35989503653498794), + FX16_CONST(-0.933543772978836), FX16_CONST(-0.35846342063373704), + FX16_CONST(-0.9340925504042588), FX16_CONST(-0.35703096123343037), + FX16_CONST(-0.9346391298196807), FX16_CONST(-0.3555976617047841), + FX16_CONST(-0.9351835099389476), FX16_CONST(-0.35416352542049045), + FX16_CONST(-0.9357256894810804), FX16_CONST(-0.3527285557552106), + FX16_CONST(-0.9362656671702784), FX16_CONST(-0.35129275608556687), + FX16_CONST(-0.9368034417359214), FX16_CONST(-0.34985612979013536), + FX16_CONST(-0.9373390119125748), FX16_CONST(-0.34841868024943484), + FX16_CONST(-0.9378723764399898), FX16_CONST(-0.3469804108459238), + FX16_CONST(-0.9384035340631082), FX16_CONST(-0.34554132496398904), + FX16_CONST(-0.9389324835320646), FX16_CONST(-0.34410142598993865), + FX16_CONST(-0.9394592236021897), FX16_CONST(-0.3426607173119949), + FX16_CONST(-0.9399837530340138), FX16_CONST(-0.34121920232028274), + FX16_CONST(-0.9405060705932683), FX16_CONST(-0.3397768844068271), + FX16_CONST(-0.9410261750508893), FX16_CONST(-0.33833376696554124), + FX16_CONST(-0.9415440651830208), FX16_CONST(-0.33688985339221994), + FX16_CONST(-0.9420597397710174), FX16_CONST(-0.3354451470845314), + FX16_CONST(-0.9425731976014468), FX16_CONST(-0.3339996514420098), + FX16_CONST(-0.9430844374660934), FX16_CONST(-0.3325533698660445), + FX16_CONST(-0.9435934581619603), FX16_CONST(-0.33110630575987654), + FX16_CONST(-0.9441002584912727), FX16_CONST(-0.3296584625285875), + FX16_CONST(-0.9446048372614804), FX16_CONST(-0.32820984357909233), + FX16_CONST(-0.9451071932852604), FX16_CONST(-0.3267604523201323), + FX16_CONST(-0.9456073253805212), FX16_CONST(-0.3253102921622633), + FX16_CONST(-0.9461052323704033), FX16_CONST(-0.3238593665178531), + FX16_CONST(-0.9466009130832835), FX16_CONST(-0.3224076788010699), + FX16_CONST(-0.9470943663527772), FX16_CONST(-0.32095523242787516), + FX16_CONST(-0.9475855910177412), FX16_CONST(-0.3195020308160154), + FX16_CONST(-0.9480745859222761), FX16_CONST(-0.3180480773850154), + FX16_CONST(-0.9485613499157302), FX16_CONST(-0.3165933755561662), + FX16_CONST(-0.9490458818527006), FX16_CONST(-0.31513792875252256), + FX16_CONST(-0.9495281805930367), FX16_CONST(-0.31368174039889146), + FX16_CONST(-0.9500082450018431), FX16_CONST(-0.3122248139218248), + FX16_CONST(-0.9504860739494816), FX16_CONST(-0.31076715274961203), + FX16_CONST(-0.950961666311575), FX16_CONST(-0.30930876031226906), + FX16_CONST(-0.9514350209690083), FX16_CONST(-0.3078496400415351), + FX16_CONST(-0.9519061368079323), FX16_CONST(-0.306389795370861), + FX16_CONST(-0.9523750127197659), FX16_CONST(-0.3049292297354023), + FX16_CONST(-0.9528416476011987), FX16_CONST(-0.30346794657201104), + FX16_CONST(-0.9533060403541936), FX16_CONST(-0.30200594931922853), + FX16_CONST(-0.9537681898859902), FX16_CONST(-0.30054324141727373), + FX16_CONST(-0.9542280951091056), FX16_CONST(-0.2990798263080406), + FX16_CONST(-0.9546857549413383), FX16_CONST(-0.2976157074350862), + FX16_CONST(-0.9551411683057708), FX16_CONST(-0.2961508882436237), + FX16_CONST(-0.9555943341307709), FX16_CONST(-0.2946853721805149), + FX16_CONST(-0.9560452513499963), FX16_CONST(-0.293219162694259), + FX16_CONST(-0.956493918902395), FX16_CONST(-0.2917522632349895), + FX16_CONST(-0.9569403357322088), FX16_CONST(-0.29028467725446244), + FX16_CONST(-0.957384500788976), FX16_CONST(-0.28881640820604937), + FX16_CONST(-0.957826413027533), FX16_CONST(-0.2873474595447293), + FX16_CONST(-0.9582660714080176), FX16_CONST(-0.28587783472708106), + FX16_CONST(-0.9587034748958715), FX16_CONST(-0.28440753721127215), + FX16_CONST(-0.9591386224618419), FX16_CONST(-0.2829365704570555), + FX16_CONST(-0.9595715130819845), FX16_CONST(-0.28146493792575794), + FX16_CONST(-0.960002145737666), FX16_CONST(-0.27999264308027305), + FX16_CONST(-0.9604305194155657), FX16_CONST(-0.2785196893850536), + FX16_CONST(-0.9608566331076795), FX16_CONST(-0.2770460803061003), + FX16_CONST(-0.9612804858113205), FX16_CONST(-0.27557181931095837), + FX16_CONST(-0.9617020765291225), FX16_CONST(-0.27409690986870644), + FX16_CONST(-0.9621214042690416), FX16_CONST(-0.27262135544994887), + FX16_CONST(-0.9625384680443593), FX16_CONST(-0.2711451595268078), + FX16_CONST(-0.9629532668736838), FX16_CONST(-0.26966832557291553), + FX16_CONST(-0.9633657997809539), FX16_CONST(-0.2681908570634035), + FX16_CONST(-0.9637760657954398), FX16_CONST(-0.26671275747489853), + FX16_CONST(-0.9641840639517458), FX16_CONST(-0.2652340302855118), + FX16_CONST(-0.9645897932898128), FX16_CONST(-0.26375467897483124), + FX16_CONST(-0.9649932528549202), FX16_CONST(-0.26227470702391414), + FX16_CONST(-0.9653944416976893), FX16_CONST(-0.2607941179152759), + FX16_CONST(-0.9657933588740836), FX16_CONST(-0.25931291513288646), + FX16_CONST(-0.9661900034454125), FX16_CONST(-0.25783110216215904), + FX16_CONST(-0.9665843744783331), FX16_CONST(-0.2563486824899428), + FX16_CONST(-0.9669764710448522), FX16_CONST(-0.25486565960451435), + FX16_CONST(-0.9673662922223284), FX16_CONST(-0.2533820369955706), + FX16_CONST(-0.9677538370934754), FX16_CONST(-0.25189781815421725), + FX16_CONST(-0.9681391047463623), FX16_CONST(-0.2504130065729654), + FX16_CONST(-0.9685220942744173), FX16_CONST(-0.24892760574572015), + FX16_CONST(-0.9689028047764289), FX16_CONST(-0.24744161916777313), + FX16_CONST(-0.9692812353565483), FX16_CONST(-0.24595505033579515), + FX16_CONST(-0.9696573851242923), FX16_CONST(-0.24446790274782454), + FX16_CONST(-0.970031253194544), FX16_CONST(-0.24298017990326412), + FX16_CONST(-0.9704028386875555), FX16_CONST(-0.2414918853028694), + FX16_CONST(-0.9707721407289504), FX16_CONST(-0.2400030224487414), + FX16_CONST(-0.9711391584497252), FX16_CONST(-0.2385135948443182), + FX16_CONST(-0.9715038909862517), FX16_CONST(-0.23702360599436767), + FX16_CONST(-0.9718663374802793), FX16_CONST(-0.2355330594049758), + FX16_CONST(-0.9722264970789363), FX16_CONST(-0.23404195858354357), + FX16_CONST(-0.9725843689347322), FX16_CONST(-0.23255030703877522), + FX16_CONST(-0.9729399522055602), FX16_CONST(-0.23105810828067094), + FX16_CONST(-0.9732932460546981), FX16_CONST(-0.22956536582051942), + FX16_CONST(-0.9736442496508119), FX16_CONST(-0.22807208317088612), + FX16_CONST(-0.9739929621679558), FX16_CONST(-0.22657826384561022), + FX16_CONST(-0.9743393827855759), FX16_CONST(-0.22508391135979292), + FX16_CONST(-0.9746835106885107), FX16_CONST(-0.2235890292297899), + FX16_CONST(-0.9750253450669942), FX16_CONST(-0.2220936209732033), + FX16_CONST(-0.9753648851166569), FX16_CONST(-0.22059769010887398), + FX16_CONST(-0.9757021300385285), FX16_CONST(-0.2191012401568701), + FX16_CONST(-0.976037079039039), FX16_CONST(-0.21760427463848378), + FX16_CONST(-0.9763697313300211), FX16_CONST(-0.2161067970762195), + FX16_CONST(-0.9767000861287118), FX16_CONST(-0.2146088109937866), + FX16_CONST(-0.9770281426577543), FX16_CONST(-0.21311031991609192), + FX16_CONST(-0.9773539001452), FX16_CONST(-0.21161132736922797), + FX16_CONST(-0.9776773578245099), FX16_CONST(-0.21011183688046986), + FX16_CONST(-0.977998514934557), FX16_CONST(-0.20861185197826357), + FX16_CONST(-0.9783173707196277), FX16_CONST(-0.20711137619221848), + FX16_CONST(-0.9786339244294232), FX16_CONST(-0.20561041305309902), + FX16_CONST(-0.9789481753190621), FX16_CONST(-0.20410896609281734), + FX16_CONST(-0.979260122649082), FX16_CONST(-0.20260703884442144), + FX16_CONST(-0.9795697656854405), FX16_CONST(-0.20110463484209207), + FX16_CONST(-0.9798771036995176), FX16_CONST(-0.19960175762113097), + FX16_CONST(-0.9801821359681174), FX16_CONST(-0.19809841071795342), + FX16_CONST(-0.9804848617734693), FX16_CONST(-0.19659459767008078), + FX16_CONST(-0.9807852804032303), FX16_CONST(-0.19509032201612866), + FX16_CONST(-0.9810833911504866), FX16_CONST(-0.19358558729580386), + FX16_CONST(-0.9813791933137546), FX16_CONST(-0.19208039704989252), + FX16_CONST(-0.9816726861969831), FX16_CONST(-0.19057475482025268), + FX16_CONST(-0.9819638691095554), FX16_CONST(-0.18906866414980597), + FX16_CONST(-0.9822527413662894), FX16_CONST(-0.18756212858253007), + FX16_CONST(-0.9825393022874412), FX16_CONST(-0.18605515166344697), + FX16_CONST(-0.9828235511987052), FX16_CONST(-0.18454773693861978), + FX16_CONST(-0.9831054874312163), FX16_CONST(-0.18303988795514095), + FX16_CONST(-0.9833851103215513), FX16_CONST(-0.18153160826112483), + FX16_CONST(-0.9836624192117301), FX16_CONST(-0.18002290140570007), + FX16_CONST(-0.9839374134492188), FX16_CONST(-0.17851377093899792), + FX16_CONST(-0.984210092386929), FX16_CONST(-0.177004220412149), + FX16_CONST(-0.9844804553832209), FX16_CONST(-0.1754942533772715), + FX16_CONST(-0.9847485018019042), FX16_CONST(-0.17398387338746374), + FX16_CONST(-0.9850142310122398), FX16_CONST(-0.17247308399679573), + FX16_CONST(-0.9852776423889411), FX16_CONST(-0.1709618887603017), + FX16_CONST(-0.9855387353121761), FX16_CONST(-0.1694502912339683), + FX16_CONST(-0.9857975091675674), FX16_CONST(-0.16793829497473134), + FX16_CONST(-0.9860539633461954), FX16_CONST(-0.1664259035404641), + FX16_CONST(-0.9863080972445987), FX16_CONST(-0.16491312048996976), + FX16_CONST(-0.9865599102647754), FX16_CONST(-0.16339994938297378), + FX16_CONST(-0.9868094018141854), FX16_CONST(-0.16188639378011224), + FX16_CONST(-0.987056571305751), FX16_CONST(-0.1603724572429285), + FX16_CONST(-0.9873014181578583), FX16_CONST(-0.15885814333386153), + FX16_CONST(-0.9875439417943593), FX16_CONST(-0.1573434556162382), + FX16_CONST(-0.9877841416445722), FX16_CONST(-0.15582839765426498), + FX16_CONST(-0.9880220171432835), FX16_CONST(-0.15431297301302058), + FX16_CONST(-0.9882575677307495), FX16_CONST(-0.15279718525844374), + FX16_CONST(-0.9884907928526966), FX16_CONST(-0.15128103795733036), + FX16_CONST(-0.9887216919603238), FX16_CONST(-0.1497645346773215), + FX16_CONST(-0.988950264510303), FX16_CONST(-0.1482476789868959), + FX16_CONST(-0.9891765099647809), FX16_CONST(-0.1467304744553623), + FX16_CONST(-0.9894004277913803), FX16_CONST(-0.14521292465284785), + FX16_CONST(-0.9896220174632008), FX16_CONST(-0.1436950331502947), + FX16_CONST(-0.9898412784588205), FX16_CONST(-0.14217680351944814), + FX16_CONST(-0.9900582102622971), FX16_CONST(-0.14065823933284916), + FX16_CONST(-0.9902728123631691), FX16_CONST(-0.13913934416382598), + FX16_CONST(-0.990485084256457), FX16_CONST(-0.13762012158648654), + FX16_CONST(-0.9906950254426646), FX16_CONST(-0.13610057517570653), + FX16_CONST(-0.99090263542778), FX16_CONST(-0.13458070850712636), + FX16_CONST(-0.9911079137232769), FX16_CONST(-0.13306052515713906), + FX16_CONST(-0.9913108598461154), FX16_CONST(-0.13154002870288295), + FX16_CONST(-0.9915114733187439), FX16_CONST(-0.13001922272223393), + FX16_CONST(-0.9917097536690995), FX16_CONST(-0.12849811079379359), + FX16_CONST(-0.9919057004306093), FX16_CONST(-0.12697669649688612), + FX16_CONST(-0.9920993131421918), FX16_CONST(-0.12545498341154632), + FX16_CONST(-0.9922905913482574), FX16_CONST(-0.12393297511851209), + FX16_CONST(-0.9924795345987101), FX16_CONST(-0.12241067519921596), + FX16_CONST(-0.9926661424489479), FX16_CONST(-0.12088808723577757), + FX16_CONST(-0.9928504144598651), FX16_CONST(-0.11936521481099169), + FX16_CONST(-0.9930323501978514), FX16_CONST(-0.11784206150832514), + FX16_CONST(-0.9932119492347945), FX16_CONST(-0.11631863091190477), + FX16_CONST(-0.9933892111480807), FX16_CONST(-0.11479492660650993), + FX16_CONST(-0.9935641355205953), FX16_CONST(-0.11327095217756492), + FX16_CONST(-0.9937367219407246), FX16_CONST(-0.111746711211127), + FX16_CONST(-0.9939069700023561), FX16_CONST(-0.11022220729388331), + FX16_CONST(-0.9940748793048794), FX16_CONST(-0.1086974440131388), + FX16_CONST(-0.9942404494531879), FX16_CONST(-0.10717242495680877), + FX16_CONST(-0.9944036800576791), FX16_CONST(-0.10564715371341038), + FX16_CONST(-0.9945645707342554), FX16_CONST(-0.10412163387205507), + FX16_CONST(-0.9947231211043257), FX16_CONST(-0.10259586902243661), + FX16_CONST(-0.9948793307948056), FX16_CONST(-0.10106986275482799), + FX16_CONST(-0.9950331994381186), FX16_CONST(-0.09954361866006935), + FX16_CONST(-0.9951847266721969), FX16_CONST(-0.09801714032956045), + FX16_CONST(-0.9953339121404822), FX16_CONST(-0.09649043135525316), + FX16_CONST(-0.9954807554919269), FX16_CONST(-0.09496349532963941), + FX16_CONST(-0.9956252563809943), FX16_CONST(-0.09343633584574804), + FX16_CONST(-0.9957674144676598), FX16_CONST(-0.09190895649713282), + FX16_CONST(-0.9959072294174117), FX16_CONST(-0.09038136087786491), + FX16_CONST(-0.996044700901252), FX16_CONST(-0.08885355258252436), + FX16_CONST(-0.9961798285956969), FX16_CONST(-0.08732553520619256), + FX16_CONST(-0.996312612182778), FX16_CONST(-0.08579731234444023), + FX16_CONST(-0.9964430513500426), FX16_CONST(-0.08426888759332424), + FX16_CONST(-0.9965711457905548), FX16_CONST(-0.0827402645493757), + FX16_CONST(-0.9966968952028961), FX16_CONST(-0.08121144680959229), + FX16_CONST(-0.9968202992911657), FX16_CONST(-0.0796824379714307), + FX16_CONST(-0.996941357764982), FX16_CONST(-0.07815324163279465), + FX16_CONST(-0.997060070339483), FX16_CONST(-0.07662386139203174), + FX16_CONST(-0.9971764367353261), FX16_CONST(-0.0750943008479214), + FX16_CONST(-0.9972904566786902), FX16_CONST(-0.07356456359966736), + FX16_CONST(-0.9974021299012753), FX16_CONST(-0.0720346532468891), + FX16_CONST(-0.9975114561403035), FX16_CONST(-0.07050457338961436), + FX16_CONST(-0.9976184351385196), FX16_CONST(-0.06897432762826708), + FX16_CONST(-0.9977230666441916), FX16_CONST(-0.06744391956366423), + FX16_CONST(-0.9978253504111116), FX16_CONST(-0.06591335279700383), + FX16_CONST(-0.997925286198596), FX16_CONST(-0.06438263092985731), + FX16_CONST(-0.9980228737714861), FX16_CONST(-0.06285175756416199), + FX16_CONST(-0.9981181129001492), FX16_CONST(-0.061320736302208995), + FX16_CONST(-0.9982110033604782), FX16_CONST(-0.05978957074664013), + FX16_CONST(-0.9983015449338928), FX16_CONST(-0.058258264500435857), + FX16_CONST(-0.9983897374073402), FX16_CONST(-0.056726821166907686), + FX16_CONST(-0.9984755805732948), FX16_CONST(-0.05519524434968971), + FX16_CONST(-0.9985590742297593), FX16_CONST(-0.053663537652731026), + FX16_CONST(-0.9986402181802652), FX16_CONST(-0.05213170468028366), + FX16_CONST(-0.9987190122338729), FX16_CONST(-0.050599749036899455), + FX16_CONST(-0.9987954562051724), FX16_CONST(-0.04906767432741803), + FX16_CONST(-0.9988695499142836), FX16_CONST(-0.04753548415695916), + FX16_CONST(-0.9989412931868569), FX16_CONST(-0.046003182130915206), + FX16_CONST(-0.9990106858540733), FX16_CONST(-0.044470771854939084), + FX16_CONST(-0.9990777277526454), FX16_CONST(-0.042938256934941084), + FX16_CONST(-0.9991424187248169), FX16_CONST(-0.04140564097707684), + FX16_CONST(-0.9992047586183639), FX16_CONST(-0.03987292758773975), + FX16_CONST(-0.9992647472865944), FX16_CONST(-0.03834012037355247), + FX16_CONST(-0.9993223845883494), FX16_CONST(-0.03680722294135933), + FX16_CONST(-0.9993776703880028), FX16_CONST(-0.035274238898214294), + FX16_CONST(-0.9994306045554617), FX16_CONST(-0.03374117185137776), + FX16_CONST(-0.999481186966167), FX16_CONST(-0.0322080254083046), + FX16_CONST(-0.9995294175010931), FX16_CONST(-0.030674803176636484), + FX16_CONST(-0.9995752960467492), FX16_CONST(-0.02914150876419431), + FX16_CONST(-0.9996188224951786), FX16_CONST(-0.027608145778966163), + FX16_CONST(-0.9996599967439592), FX16_CONST(-0.02607471782910416), + FX16_CONST(-0.9996988186962042), FX16_CONST(-0.02454122852291239), + FX16_CONST(-0.9997352882605617), FX16_CONST(-0.02300768146883931), + FX16_CONST(-0.9997694053512153), FX16_CONST(-0.021474080275469286), + FX16_CONST(-0.9998011698878843), FX16_CONST(-0.019940428551514944), + FX16_CONST(-0.9998305817958234), FX16_CONST(-0.018406729905805164), + FX16_CONST(-0.9998576410058239), FX16_CONST(-0.016872987947281894), + FX16_CONST(-0.9998823474542126), FX16_CONST(-0.015339206284988121), + FX16_CONST(-0.9999047010828529), FX16_CONST(-0.01380538852806025), + FX16_CONST(-0.9999247018391445), FX16_CONST(-0.012271538285720512), + FX16_CONST(-0.9999423496760239), FX16_CONST(-0.010737659167264916), + FX16_CONST(-0.9999576445519639), FX16_CONST(-0.009203754782060083), + FX16_CONST(-0.9999705864309741), FX16_CONST(-0.007669828739531199), + FX16_CONST(-0.9999811752826011), FX16_CONST(-0.006135884649154416), + FX16_CONST(-0.9999894110819284), FX16_CONST(-0.00460192612044835), + FX16_CONST(-0.9999952938095762), FX16_CONST(-0.0030679567629664827), + FX16_CONST(-0.9999988234517019), FX16_CONST(-0.0015339801862851105), + FX16_CONST(-1.0), FX16_CONST(-1.8369701987210297e-16), + FX16_CONST(-0.9999988234517019), FX16_CONST(0.0015339801862847432), + FX16_CONST(-0.9999952938095762), FX16_CONST(0.003067956762966115), + FX16_CONST(-0.9999894110819284), FX16_CONST(0.004601926120447982), + FX16_CONST(-0.9999811752826011), FX16_CONST(0.0061358846491540485), + FX16_CONST(-0.9999705864309741), FX16_CONST(0.007669828739530832), + FX16_CONST(-0.9999576445519639), FX16_CONST(0.009203754782059715), + FX16_CONST(-0.9999423496760239), FX16_CONST(0.010737659167264548), + FX16_CONST(-0.9999247018391445), FX16_CONST(0.012271538285720144), + FX16_CONST(-0.9999047010828529), FX16_CONST(0.013805388528059882), + FX16_CONST(-0.9998823474542126), FX16_CONST(0.015339206284987753), + FX16_CONST(-0.9998576410058239), FX16_CONST(0.016872987947281527), + FX16_CONST(-0.9998305817958234), FX16_CONST(0.018406729905804796), + FX16_CONST(-0.9998011698878843), FX16_CONST(0.019940428551514577), + FX16_CONST(-0.9997694053512153), FX16_CONST(0.021474080275468918), + FX16_CONST(-0.9997352882605617), FX16_CONST(0.023007681468838945), + FX16_CONST(-0.9996988186962042), FX16_CONST(0.02454122852291202), + FX16_CONST(-0.9996599967439592), FX16_CONST(0.026074717829103793), + FX16_CONST(-0.9996188224951786), FX16_CONST(0.027608145778965795), + FX16_CONST(-0.9995752960467492), FX16_CONST(0.02914150876419394), + FX16_CONST(-0.9995294175010931), FX16_CONST(0.030674803176636116), + FX16_CONST(-0.999481186966167), FX16_CONST(0.03220802540830423), + FX16_CONST(-0.9994306045554617), FX16_CONST(0.0337411718513774), + FX16_CONST(-0.9993776703880028), FX16_CONST(0.035274238898213926), + FX16_CONST(-0.9993223845883495), FX16_CONST(0.036807222941358964), + FX16_CONST(-0.9992647472865945), FX16_CONST(0.038340120373552104), + FX16_CONST(-0.9992047586183639), FX16_CONST(0.03987292758773938), + FX16_CONST(-0.9991424187248169), FX16_CONST(0.04140564097707647), + FX16_CONST(-0.9990777277526454), FX16_CONST(0.042938256934940716), + FX16_CONST(-0.9990106858540734), FX16_CONST(0.044470771854938716), + FX16_CONST(-0.9989412931868569), FX16_CONST(0.046003182130914845), + FX16_CONST(-0.9988695499142836), FX16_CONST(0.04753548415695879), + FX16_CONST(-0.9987954562051724), FX16_CONST(0.04906767432741766), + FX16_CONST(-0.9987190122338729), FX16_CONST(0.05059974903689909), + FX16_CONST(-0.9986402181802653), FX16_CONST(0.05213170468028329), + FX16_CONST(-0.9985590742297593), FX16_CONST(0.05366353765273066), + FX16_CONST(-0.9984755805732948), FX16_CONST(0.055195244349689344), + FX16_CONST(-0.9983897374073402), FX16_CONST(0.05672682116690732), + FX16_CONST(-0.9983015449338929), FX16_CONST(0.05825826450043549), + FX16_CONST(-0.9982110033604782), FX16_CONST(0.059789570746639764), + FX16_CONST(-0.9981181129001492), FX16_CONST(0.06132073630220863), + FX16_CONST(-0.9980228737714862), FX16_CONST(0.06285175756416163), + FX16_CONST(-0.997925286198596), FX16_CONST(0.06438263092985695), + FX16_CONST(-0.9978253504111116), FX16_CONST(0.06591335279700346), + FX16_CONST(-0.9977230666441916), FX16_CONST(0.06744391956366387), + FX16_CONST(-0.9976184351385196), FX16_CONST(0.06897432762826672), + FX16_CONST(-0.9975114561403035), FX16_CONST(0.070504573389614), + FX16_CONST(-0.9974021299012753), FX16_CONST(0.07203465324688872), + FX16_CONST(-0.9972904566786902), FX16_CONST(0.07356456359966698), + FX16_CONST(-0.9971764367353262), FX16_CONST(0.07509430084792104), + FX16_CONST(-0.997060070339483), FX16_CONST(0.07662386139203138), + FX16_CONST(-0.9969413577649822), FX16_CONST(0.07815324163279429), + FX16_CONST(-0.9968202992911657), FX16_CONST(0.07968243797143033), + FX16_CONST(-0.9966968952028961), FX16_CONST(0.08121144680959191), + FX16_CONST(-0.9965711457905548), FX16_CONST(0.08274026454937533), + FX16_CONST(-0.9964430513500426), FX16_CONST(0.08426888759332388), + FX16_CONST(-0.996312612182778), FX16_CONST(0.08579731234443985), + FX16_CONST(-0.9961798285956969), FX16_CONST(0.0873255352061922), + FX16_CONST(-0.9960447009012521), FX16_CONST(0.088853552582524), + FX16_CONST(-0.9959072294174117), FX16_CONST(0.09038136087786454), + FX16_CONST(-0.9957674144676598), FX16_CONST(0.09190895649713245), + FX16_CONST(-0.9956252563809943), FX16_CONST(0.09343633584574766), + FX16_CONST(-0.9954807554919269), FX16_CONST(0.09496349532963905), + FX16_CONST(-0.9953339121404823), FX16_CONST(0.0964904313552528), + FX16_CONST(-0.9951847266721969), FX16_CONST(0.09801714032956009), + FX16_CONST(-0.9950331994381186), FX16_CONST(0.09954361866006897), + FX16_CONST(-0.9948793307948056), FX16_CONST(0.10106986275482763), + FX16_CONST(-0.9947231211043257), FX16_CONST(0.10259586902243625), + FX16_CONST(-0.9945645707342554), FX16_CONST(0.1041216338720547), + FX16_CONST(-0.9944036800576791), FX16_CONST(0.10564715371341002), + FX16_CONST(-0.994240449453188), FX16_CONST(0.10717242495680841), + FX16_CONST(-0.9940748793048795), FX16_CONST(0.10869744401313844), + FX16_CONST(-0.9939069700023561), FX16_CONST(0.11022220729388293), + FX16_CONST(-0.9937367219407246), FX16_CONST(0.11174671121112664), + FX16_CONST(-0.9935641355205953), FX16_CONST(0.11327095217756455), + FX16_CONST(-0.9933892111480808), FX16_CONST(0.11479492660650957), + FX16_CONST(-0.9932119492347946), FX16_CONST(0.1163186309119044), + FX16_CONST(-0.9930323501978514), FX16_CONST(0.11784206150832478), + FX16_CONST(-0.9928504144598651), FX16_CONST(0.11936521481099133), + FX16_CONST(-0.992666142448948), FX16_CONST(0.1208880872357772), + FX16_CONST(-0.9924795345987101), FX16_CONST(0.1224106751992156), + FX16_CONST(-0.9922905913482574), FX16_CONST(0.12393297511851173), + FX16_CONST(-0.9920993131421918), FX16_CONST(0.12545498341154596), + FX16_CONST(-0.9919057004306093), FX16_CONST(0.12697669649688575), + FX16_CONST(-0.9917097536690995), FX16_CONST(0.12849811079379322), + FX16_CONST(-0.9915114733187439), FX16_CONST(0.13001922272223354), + FX16_CONST(-0.9913108598461154), FX16_CONST(0.1315400287028826), + FX16_CONST(-0.9911079137232769), FX16_CONST(0.1330605251571387), + FX16_CONST(-0.99090263542778), FX16_CONST(0.13458070850712597), + FX16_CONST(-0.9906950254426646), FX16_CONST(0.13610057517570617), + FX16_CONST(-0.990485084256457), FX16_CONST(0.13762012158648618), + FX16_CONST(-0.9902728123631692), FX16_CONST(0.13913934416382562), + FX16_CONST(-0.9900582102622971), FX16_CONST(0.1406582393328488), + FX16_CONST(-0.9898412784588205), FX16_CONST(0.14217680351944778), + FX16_CONST(-0.9896220174632009), FX16_CONST(0.14369503315029433), + FX16_CONST(-0.9894004277913804), FX16_CONST(0.1452129246528475), + FX16_CONST(-0.9891765099647809), FX16_CONST(0.14673047445536194), + FX16_CONST(-0.9889502645103031), FX16_CONST(0.14824767898689553), + FX16_CONST(-0.9887216919603238), FX16_CONST(0.14976453467732115), + FX16_CONST(-0.9884907928526967), FX16_CONST(0.15128103795733), + FX16_CONST(-0.9882575677307495), FX16_CONST(0.15279718525844338), + FX16_CONST(-0.9880220171432835), FX16_CONST(0.15431297301302022), + FX16_CONST(-0.9877841416445723), FX16_CONST(0.15582839765426462), + FX16_CONST(-0.9875439417943593), FX16_CONST(0.1573434556162378), + FX16_CONST(-0.9873014181578584), FX16_CONST(0.15885814333386117), + FX16_CONST(-0.9870565713057511), FX16_CONST(0.16037245724292815), + FX16_CONST(-0.9868094018141854), FX16_CONST(0.16188639378011188), + FX16_CONST(-0.9865599102647754), FX16_CONST(0.16339994938297342), + FX16_CONST(-0.9863080972445988), FX16_CONST(0.1649131204899694), + FX16_CONST(-0.9860539633461955), FX16_CONST(0.16642590354046374), + FX16_CONST(-0.9857975091675675), FX16_CONST(0.16793829497473098), + FX16_CONST(-0.9855387353121761), FX16_CONST(0.16945029123396793), + FX16_CONST(-0.9852776423889412), FX16_CONST(0.17096188876030133), + FX16_CONST(-0.98501423101224), FX16_CONST(0.17247308399679537), + FX16_CONST(-0.9847485018019043), FX16_CONST(0.17398387338746338), + FX16_CONST(-0.9844804553832209), FX16_CONST(0.17549425337727115), + FX16_CONST(-0.9842100923869291), FX16_CONST(0.17700422041214864), + FX16_CONST(-0.9839374134492189), FX16_CONST(0.17851377093899756), + FX16_CONST(-0.9836624192117303), FX16_CONST(0.1800229014056997), + FX16_CONST(-0.9833851103215513), FX16_CONST(0.18153160826112447), + FX16_CONST(-0.9831054874312164), FX16_CONST(0.1830398879551406), + FX16_CONST(-0.9828235511987053), FX16_CONST(0.1845477369386194), + FX16_CONST(-0.9825393022874412), FX16_CONST(0.1860551516634466), + FX16_CONST(-0.9822527413662894), FX16_CONST(0.1875621285825297), + FX16_CONST(-0.9819638691095554), FX16_CONST(0.1890686641498056), + FX16_CONST(-0.9816726861969832), FX16_CONST(0.19057475482025232), + FX16_CONST(-0.9813791933137547), FX16_CONST(0.19208039704989216), + FX16_CONST(-0.9810833911504867), FX16_CONST(0.1935855872958035), + FX16_CONST(-0.9807852804032304), FX16_CONST(0.1950903220161283), + FX16_CONST(-0.9804848617734693), FX16_CONST(0.19659459767008042), + FX16_CONST(-0.9801821359681175), FX16_CONST(0.19809841071795306), + FX16_CONST(-0.9798771036995177), FX16_CONST(0.1996017576211306), + FX16_CONST(-0.9795697656854406), FX16_CONST(0.2011046348420917), + FX16_CONST(-0.979260122649082), FX16_CONST(0.20260703884442108), + FX16_CONST(-0.9789481753190622), FX16_CONST(0.20410896609281698), + FX16_CONST(-0.9786339244294233), FX16_CONST(0.20561041305309866), + FX16_CONST(-0.9783173707196278), FX16_CONST(0.20711137619221812), + FX16_CONST(-0.9779985149345571), FX16_CONST(0.2086118519782632), + FX16_CONST(-0.97767735782451), FX16_CONST(0.2101118368804695), + FX16_CONST(-0.9773539001452), FX16_CONST(0.2116113273692276), + FX16_CONST(-0.9770281426577543), FX16_CONST(0.21311031991609156), + FX16_CONST(-0.976700086128712), FX16_CONST(0.21460881099378626), + FX16_CONST(-0.9763697313300213), FX16_CONST(0.21610679707621913), + FX16_CONST(-0.9760370790390391), FX16_CONST(0.21760427463848342), + FX16_CONST(-0.9757021300385286), FX16_CONST(0.21910124015686974), + FX16_CONST(-0.975364885116657), FX16_CONST(0.22059769010887362), + FX16_CONST(-0.9750253450669942), FX16_CONST(0.22209362097320293), + FX16_CONST(-0.9746835106885108), FX16_CONST(0.22358902922978954), + FX16_CONST(-0.974339382785576), FX16_CONST(0.22508391135979255), + FX16_CONST(-0.973992962167956), FX16_CONST(0.22657826384560986), + FX16_CONST(-0.9736442496508119), FX16_CONST(0.22807208317088576), + FX16_CONST(-0.9732932460546981), FX16_CONST(0.22956536582051906), + FX16_CONST(-0.9729399522055603), FX16_CONST(0.23105810828067058), + FX16_CONST(-0.9725843689347323), FX16_CONST(0.23255030703877488), + FX16_CONST(-0.9722264970789364), FX16_CONST(0.2340419585835432), + FX16_CONST(-0.9718663374802794), FX16_CONST(0.23553305940497546), + FX16_CONST(-0.9715038909862518), FX16_CONST(0.2370236059943673), + FX16_CONST(-0.9711391584497253), FX16_CONST(0.23851359484431783), + FX16_CONST(-0.9707721407289505), FX16_CONST(0.24000302244874103), + FX16_CONST(-0.9704028386875555), FX16_CONST(0.24149188530286905), + FX16_CONST(-0.970031253194544), FX16_CONST(0.24298017990326376), + FX16_CONST(-0.9696573851242924), FX16_CONST(0.24446790274782418), + FX16_CONST(-0.9692812353565484), FX16_CONST(0.2459550503357948), + FX16_CONST(-0.968902804776429), FX16_CONST(0.24744161916777277), + FX16_CONST(-0.9685220942744174), FX16_CONST(0.2489276057457198), + FX16_CONST(-0.9681391047463624), FX16_CONST(0.25041300657296506), + FX16_CONST(-0.9677538370934755), FX16_CONST(0.2518978181542169), + FX16_CONST(-0.9673662922223285), FX16_CONST(0.25338203699557027), + FX16_CONST(-0.9669764710448523), FX16_CONST(0.25486565960451396), + FX16_CONST(-0.9665843744783332), FX16_CONST(0.25634868248994247), + FX16_CONST(-0.9661900034454126), FX16_CONST(0.2578311021621587), + FX16_CONST(-0.9657933588740837), FX16_CONST(0.2593129151328861), + FX16_CONST(-0.9653944416976894), FX16_CONST(0.2607941179152755), + FX16_CONST(-0.9649932528549203), FX16_CONST(0.2622747070239138), + FX16_CONST(-0.9645897932898129), FX16_CONST(0.26375467897483085), + FX16_CONST(-0.9641840639517459), FX16_CONST(0.26523403028551146), + FX16_CONST(-0.96377606579544), FX16_CONST(0.2667127574748982), + FX16_CONST(-0.963365799780954), FX16_CONST(0.2681908570634031), + FX16_CONST(-0.9629532668736839), FX16_CONST(0.2696683255729152), + FX16_CONST(-0.9625384680443594), FX16_CONST(0.2711451595268074), + FX16_CONST(-0.9621214042690417), FX16_CONST(0.27262135544994853), + FX16_CONST(-0.9617020765291227), FX16_CONST(0.2740969098687061), + FX16_CONST(-0.9612804858113206), FX16_CONST(0.27557181931095803), + FX16_CONST(-0.9608566331076797), FX16_CONST(0.27704608030609995), + FX16_CONST(-0.9604305194155658), FX16_CONST(0.2785196893850533), + FX16_CONST(-0.9600021457376661), FX16_CONST(0.2799926430802727), + FX16_CONST(-0.9595715130819846), FX16_CONST(0.2814649379257576), + FX16_CONST(-0.959138622461842), FX16_CONST(0.2829365704570551), + FX16_CONST(-0.9587034748958716), FX16_CONST(0.28440753721127177), + FX16_CONST(-0.9582660714080177), FX16_CONST(0.28587783472708067), + FX16_CONST(-0.957826413027533), FX16_CONST(0.2873474595447289), + FX16_CONST(-0.9573845007889761), FX16_CONST(0.28881640820604904), + FX16_CONST(-0.9569403357322089), FX16_CONST(0.29028467725446205), + FX16_CONST(-0.9564939189023951), FX16_CONST(0.29175226323498915), + FX16_CONST(-0.9560452513499964), FX16_CONST(0.2932191626942587), + FX16_CONST(-0.955594334130771), FX16_CONST(0.2946853721805145), + FX16_CONST(-0.9551411683057709), FX16_CONST(0.2961508882436233), + FX16_CONST(-0.9546857549413384), FX16_CONST(0.29761570743508586), + FX16_CONST(-0.9542280951091057), FX16_CONST(0.29907982630804025), + FX16_CONST(-0.9537681898859903), FX16_CONST(0.3005432414172734), + FX16_CONST(-0.9533060403541939), FX16_CONST(0.30200594931922814), + FX16_CONST(-0.9528416476011988), FX16_CONST(0.3034679465720107), + FX16_CONST(-0.952375012719766), FX16_CONST(0.304929229735402), + FX16_CONST(-0.9519061368079325), FX16_CONST(0.30638979537086064), + FX16_CONST(-0.9514350209690084), FX16_CONST(0.30784964004153476), + FX16_CONST(-0.9509616663115751), FX16_CONST(0.3093087603122687), + FX16_CONST(-0.9504860739494817), FX16_CONST(0.31076715274961164), + FX16_CONST(-0.9500082450018432), FX16_CONST(0.3122248139218244), + FX16_CONST(-0.9495281805930368), FX16_CONST(0.31368174039889113), + FX16_CONST(-0.9490458818527007), FX16_CONST(0.31513792875252217), + FX16_CONST(-0.9485613499157303), FX16_CONST(0.3165933755561658), + FX16_CONST(-0.9480745859222762), FX16_CONST(0.318048077385015), + FX16_CONST(-0.9475855910177413), FX16_CONST(0.3195020308160151), + FX16_CONST(-0.9470943663527773), FX16_CONST(0.32095523242787477), + FX16_CONST(-0.9466009130832836), FX16_CONST(0.3224076788010696), + FX16_CONST(-0.9461052323704034), FX16_CONST(0.32385936651785274), + FX16_CONST(-0.9456073253805213), FX16_CONST(0.3253102921622629), + FX16_CONST(-0.9451071932852605), FX16_CONST(0.32676045232013196), + FX16_CONST(-0.9446048372614805), FX16_CONST(0.328209843579092), + FX16_CONST(-0.9441002584912728), FX16_CONST(0.32965846252858716), + FX16_CONST(-0.9435934581619604), FX16_CONST(0.3311063057598762), + FX16_CONST(-0.9430844374660935), FX16_CONST(0.33255336986604417), + FX16_CONST(-0.9425731976014469), FX16_CONST(0.3339996514420095), + FX16_CONST(-0.9420597397710175), FX16_CONST(0.33544514708453105), + FX16_CONST(-0.9415440651830209), FX16_CONST(0.3368898533922196), + FX16_CONST(-0.9410261750508894), FX16_CONST(0.33833376696554085), + FX16_CONST(-0.9405060705932684), FX16_CONST(0.33977688440682674), + FX16_CONST(-0.9399837530340139), FX16_CONST(0.3412192023202824), + FX16_CONST(-0.9394592236021898), FX16_CONST(0.34266071731199454), + FX16_CONST(-0.9389324835320647), FX16_CONST(0.3441014259899383), + FX16_CONST(-0.9384035340631083), FX16_CONST(0.3455413249639887), + FX16_CONST(-0.9378723764399899), FX16_CONST(0.34698041084592346), + FX16_CONST(-0.937339011912575), FX16_CONST(0.3484186802494345), + FX16_CONST(-0.9368034417359216), FX16_CONST(0.34985612979013503), + FX16_CONST(-0.9362656671702785), FX16_CONST(0.35129275608556654), + FX16_CONST(-0.9357256894810805), FX16_CONST(0.3527285557552103), + FX16_CONST(-0.9351835099389477), FX16_CONST(0.35416352542049007), + FX16_CONST(-0.9346391298196808), FX16_CONST(0.35559766170478374), + FX16_CONST(-0.9340925504042589), FX16_CONST(0.35703096123343003), + FX16_CONST(-0.9335437729788362), FX16_CONST(0.3584634206337367), + FX16_CONST(-0.9329927988347391), FX16_CONST(0.3598950365349876), + FX16_CONST(-0.9324396292684626), FX16_CONST(0.3613258055684539), + FX16_CONST(-0.9318842655816681), FX16_CONST(0.362755724367397), + FX16_CONST(-0.9313267090811805), FX16_CONST(0.36418478956707984), + FX16_CONST(-0.9307669610789837), FX16_CONST(0.36561299780477396), + FX16_CONST(-0.9302050228922193), FX16_CONST(0.36704034571976657), + FX16_CONST(-0.9296408958431814), FX16_CONST(0.3684668299533719), + FX16_CONST(-0.9290745812593159), FX16_CONST(0.3698924471489338), + FX16_CONST(-0.9285060804732156), FX16_CONST(0.3713171939518374), + FX16_CONST(-0.9279353948226179), FX16_CONST(0.3727410670095158), + FX16_CONST(-0.927362525650401), FX16_CONST(0.37416406297145816), + FX16_CONST(-0.926787474304582), FX16_CONST(0.3755861784892167), + FX16_CONST(-0.9262102421383115), FX16_CONST(0.37700741021641787), + FX16_CONST(-0.9256308305098728), FX16_CONST(0.37842775480876534), + FX16_CONST(-0.9250492407826776), FX16_CONST(0.3798472089240511), + FX16_CONST(-0.9244654743252626), FX16_CONST(0.38126576922216243), + FX16_CONST(-0.9238795325112866), FX16_CONST(0.38268343236509), + FX16_CONST(-0.9232914167195279), FX16_CONST(0.3841001950169346), + FX16_CONST(-0.9227011283338787), FX16_CONST(0.38551605384391857), + FX16_CONST(-0.9221086687433452), FX16_CONST(0.38693100551438847), + FX16_CONST(-0.9215140393420419), FX16_CONST(0.3883450466988263), + FX16_CONST(-0.9209172415291894), FX16_CONST(0.38975817406985663), + FX16_CONST(-0.9203182767091108), FX16_CONST(0.39117038430225337), + FX16_CONST(-0.9197171462912275), FX16_CONST(0.39258167407295114), + FX16_CONST(-0.9191138516900579), FX16_CONST(0.3939920400610479), + FX16_CONST(-0.9185083943252123), FX16_CONST(0.39540147894781624), + FX16_CONST(-0.9179007756213904), FX16_CONST(0.3968099874167104), + FX16_CONST(-0.9172909970083778), FX16_CONST(0.39821756215337384), + FX16_CONST(-0.9166790599210428), FX16_CONST(0.3996241998456464), + FX16_CONST(-0.9160649657993318), FX16_CONST(0.40102989718357535), + FX16_CONST(-0.9154487160882678), FX16_CONST(0.4024346508594183), + FX16_CONST(-0.9148303122379462), FX16_CONST(0.40383845756765413), + FX16_CONST(-0.9142097557035306), FX16_CONST(0.40524131400499), + FX16_CONST(-0.913587047945251), FX16_CONST(0.4066432168703685), + FX16_CONST(-0.9129621904283983), FX16_CONST(0.4080441628649783), + FX16_CONST(-0.9123351846233229), FX16_CONST(0.40944414869225737), + FX16_CONST(-0.9117060320054299), FX16_CONST(0.41084317105790386), + FX16_CONST(-0.9110747340551762), FX16_CONST(0.41224122666988294), + FX16_CONST(-0.9104412922580671), FX16_CONST(0.4136383122384348), + FX16_CONST(-0.9098057081046524), FX16_CONST(0.4150344244760812), + FX16_CONST(-0.9091679830905225), FX16_CONST(0.4164295600976369), + FX16_CONST(-0.9085281187163062), FX16_CONST(0.41782371582021216), + FX16_CONST(-0.9078861164876663), FX16_CONST(0.41921688836322396), + FX16_CONST(-0.9072419779152958), FX16_CONST(0.4206090744484027), + FX16_CONST(-0.9065957045149156), FX16_CONST(0.4220002707997992), + FX16_CONST(-0.9059472978072687), FX16_CONST(0.42339047414379566), + FX16_CONST(-0.9052967593181189), FX16_CONST(0.4247796812091086), + FX16_CONST(-0.9046440905782462), FX16_CONST(0.42616788872679956), + FX16_CONST(-0.9039892931234433), FX16_CONST(0.42755509343028214), + FX16_CONST(-0.9033323684945117), FX16_CONST(0.4289412920553297), + FX16_CONST(-0.902673318237259), FX16_CONST(0.43032648134008217), + FX16_CONST(-0.9020121439024933), FX16_CONST(0.431710658025057), + FX16_CONST(-0.9013488470460221), FX16_CONST(0.4330938188531518), + FX16_CONST(-0.9006834292286469), FX16_CONST(0.4344759605696557), + FX16_CONST(-0.9000158920161602), FX16_CONST(0.43585707992225564), + FX16_CONST(-0.8993462369793418), FX16_CONST(0.4372371736610436), + FX16_CONST(-0.898674465693954), FX16_CONST(0.43861623853852727), + FX16_CONST(-0.89800057974074), FX16_CONST(0.43999427130963303), + FX16_CONST(-0.8973245807054183), FX16_CONST(0.4413712687317166), + FX16_CONST(-0.8966464701786802), FX16_CONST(0.4427472275645701), + FX16_CONST(-0.895966249756185), FX16_CONST(0.4441221445704294), + FX16_CONST(-0.8952839210385577), FX16_CONST(0.4454960165139813), + FX16_CONST(-0.8945994856313828), FX16_CONST(0.4468688401623739), + FX16_CONST(-0.8939129451452034), FX16_CONST(0.4482406122852198), + FX16_CONST(-0.8932243011955153), FX16_CONST(0.4496113296546066), + FX16_CONST(-0.8925335554027646), FX16_CONST(0.45098098904510403), + FX16_CONST(-0.891840709392343), FX16_CONST(0.4523495872337704), + FX16_CONST(-0.8911457647945834), FX16_CONST(0.4537171210001635), + FX16_CONST(-0.890448723244758), FX16_CONST(0.4550835871263436), + FX16_CONST(-0.8897495863830729), FX16_CONST(0.45644898239688386), + FX16_CONST(-0.8890483558546646), FX16_CONST(0.4578133035988773), + FX16_CONST(-0.8883450333095962), FX16_CONST(0.45917654752194437), + FX16_CONST(-0.8876396204028542), FX16_CONST(0.46053871095823956), + FX16_CONST(-0.8869321187943423), FX16_CONST(0.46189979070246245), + FX16_CONST(-0.8862225301488807), FX16_CONST(0.46325978355186004), + FX16_CONST(-0.8855108561362), FX16_CONST(0.4646186863062378), + FX16_CONST(-0.8847970984309377), FX16_CONST(0.4659764957679663), + FX16_CONST(-0.8840812587126353), FX16_CONST(0.4673332087419879), + FX16_CONST(-0.8833633386657318), FX16_CONST(0.46868882203582757), + FX16_CONST(-0.8826433399795629), FX16_CONST(0.4700433324595954), + FX16_CONST(-0.881921264348355), FX16_CONST(0.4713967368259976), + FX16_CONST(-0.881197113471222), FX16_CONST(0.47274903195034285), + FX16_CONST(-0.8804708890521606), FX16_CONST(0.4741002146505502), + FX16_CONST(-0.8797425928000476), FX16_CONST(0.4754502817471554), + FX16_CONST(-0.8790122264286336), FX16_CONST(0.4767992300633218), + FX16_CONST(-0.8782797916565416), FX16_CONST(0.4781470564248429), + FX16_CONST(-0.8775452902072612), FX16_CONST(0.479493757660153), + FX16_CONST(-0.8768087238091457), FX16_CONST(0.48083933060033407), + FX16_CONST(-0.8760700941954069), FX16_CONST(0.4821837720791222), + FX16_CONST(-0.875329403104111), FX16_CONST(0.48352707893291835), + FX16_CONST(-0.8745866522781762), FX16_CONST(0.4848692480007909), + FX16_CONST(-0.8738418434653669), FX16_CONST(0.4862102761244863), + FX16_CONST(-0.8730949784182901), FX16_CONST(0.487550160148436), + FX16_CONST(-0.8723460588943914), FX16_CONST(0.4888888969197634), + FX16_CONST(-0.8715950866559513), FX16_CONST(0.4902264832882907), + FX16_CONST(-0.8708420634700791), FX16_CONST(0.4915629161065497), + FX16_CONST(-0.8700869911087115), FX16_CONST(0.49289819222978387), + FX16_CONST(-0.8693298713486067), FX16_CONST(0.49423230851595973), + FX16_CONST(-0.8685707059713408), FX16_CONST(0.49556526182577265), + FX16_CONST(-0.8678094967633035), FX16_CONST(0.496897049022654), + FX16_CONST(-0.8670462455156929), FX16_CONST(0.4982276669727815), + FX16_CONST(-0.8662809540245131), FX16_CONST(0.49955711254508167), + FX16_CONST(-0.8655136240905691), FX16_CONST(0.5008853826112407), + FX16_CONST(-0.8647442575194624), FX16_CONST(0.5022124740457108), + FX16_CONST(-0.8639728561215866), FX16_CONST(0.5035383837257178), + FX16_CONST(-0.8631994217121244), FX16_CONST(0.5048631085312671), + FX16_CONST(-0.8624239561110407), FX16_CONST(0.506186645345155), + FX16_CONST(-0.8616464611430814), FX16_CONST(0.5075089910529706), + FX16_CONST(-0.8608669386377673), FX16_CONST(0.508830142543107), + FX16_CONST(-0.8600853904293901), FX16_CONST(0.5101500967067669), + FX16_CONST(-0.8593018183570087), FX16_CONST(0.5114688504379699), + FX16_CONST(-0.858516224264443), FX16_CONST(0.5127864006335626), + FX16_CONST(-0.8577286100002722), FX16_CONST(0.5141027441932216), + FX16_CONST(-0.8569389774178288), FX16_CONST(0.5154178780194629), + FX16_CONST(-0.8561473283751945), FX16_CONST(0.5167317990176499), + FX16_CONST(-0.8553536647351959), FX16_CONST(0.5180445040959996), + FX16_CONST(-0.8545579883654008), FX16_CONST(0.5193559901655892), + FX16_CONST(-0.8537603011381115), FX16_CONST(0.5206662541403668), + FX16_CONST(-0.8529606049303637), FX16_CONST(0.5219752929371542), + FX16_CONST(-0.8521589016239198), FX16_CONST(0.5232831034756564), + FX16_CONST(-0.8513551931052651), FX16_CONST(0.5245896826784691), + FX16_CONST(-0.8505494812656038), FX16_CONST(0.5258950274710842), + FX16_CONST(-0.8497417680008528), FX16_CONST(0.527199134781901), + FX16_CONST(-0.8489320552116397), FX16_CONST(0.5285020015422283), + FX16_CONST(-0.8481203448032973), FX16_CONST(0.5298036246862946), + FX16_CONST(-0.8473066386858583), FX16_CONST(0.531104001151255), + FX16_CONST(-0.8464909387740519), FX16_CONST(0.5324031278771981), + FX16_CONST(-0.8456732469872993), FX16_CONST(0.5337010018071525), + FX16_CONST(-0.8448535652497072), FX16_CONST(0.5349976198870969), + FX16_CONST(-0.8440318954900665), FX16_CONST(0.536292979065963), + FX16_CONST(-0.8432082396418454), FX16_CONST(0.5375870762956455), + FX16_CONST(-0.8423825996431858), FX16_CONST(0.5388799085310085), + FX16_CONST(-0.8415549774368988), FX16_CONST(0.5401714727298924), + FX16_CONST(-0.8407253749704583), FX16_CONST(0.5414617658531231), + FX16_CONST(-0.8398937941959996), FX16_CONST(0.5427507848645157), + FX16_CONST(-0.8390602370703127), FX16_CONST(0.5440385267308838), + FX16_CONST(-0.838224705554838), FX16_CONST(0.5453249884220465), + FX16_CONST(-0.8373872016156618), FX16_CONST(0.5466101669108351), + FX16_CONST(-0.8365477272235122), FX16_CONST(0.5478940591730997), + FX16_CONST(-0.8357062843537528), FX16_CONST(0.5491766621877194), + FX16_CONST(-0.8348628749863801), FX16_CONST(0.5504579729366046), + FX16_CONST(-0.8340175011060181), FX16_CONST(0.5517379884047073), + FX16_CONST(-0.8331701647019131), FX16_CONST(0.5530167055800277), + FX16_CONST(-0.83232086776793), FX16_CONST(0.5542941214536197), + FX16_CONST(-0.8314696123025455), FX16_CONST(0.5555702330196018), + FX16_CONST(-0.8306164003088464), FX16_CONST(0.5568450372751599), + FX16_CONST(-0.8297612337945232), FX16_CONST(0.558118531220556), + FX16_CONST(-0.8289041147718649), FX16_CONST(0.5593907118591361), + FX16_CONST(-0.8280450452577557), FX16_CONST(0.5606615761973361), + FX16_CONST(-0.8271840272736694), FX16_CONST(0.561931121244689), + FX16_CONST(-0.8263210628456636), FX16_CONST(0.5631993440138339), + FX16_CONST(-0.8254561540043777), FX16_CONST(0.5644662415205193), + FX16_CONST(-0.8245893027850253), FX16_CONST(0.5657318107836131), + FX16_CONST(-0.8237205112273913), FX16_CONST(0.5669960488251088), + FX16_CONST(-0.8228497813758266), FX16_CONST(0.568258952670131), + FX16_CONST(-0.8219771152792418), FX16_CONST(0.5695205193469468), + FX16_CONST(-0.8211025149911049), FX16_CONST(0.570780745886967), + FX16_CONST(-0.8202259825694347), FX16_CONST(0.5720396293247569), + FX16_CONST(-0.8193475200767969), FX16_CONST(0.5732971666980422), + FX16_CONST(-0.8184671295802985), FX16_CONST(0.574553355047716), + FX16_CONST(-0.8175848131515839), FX16_CONST(0.5758081914178449), + FX16_CONST(-0.816700572866828), FX16_CONST(0.5770616728556792), + FX16_CONST(-0.8158144108067339), FX16_CONST(0.5783137964116554), + FX16_CONST(-0.8149263290565266), FX16_CONST(0.5795645591394057), + FX16_CONST(-0.8140363297059483), FX16_CONST(0.5808139580957646), + FX16_CONST(-0.8131444148492539), FX16_CONST(0.5820619903407751), + FX16_CONST(-0.8122505865852042), FX16_CONST(0.583308652937698), + FX16_CONST(-0.811354847017064), FX16_CONST(0.5845539429530151), + FX16_CONST(-0.8104571982525949), FX16_CONST(0.5857978574564388), + FX16_CONST(-0.8095576424040513), FX16_CONST(0.5870403935209181), + FX16_CONST(-0.8086561815881749), FX16_CONST(0.5882815482226454), + FX16_CONST(-0.8077528179261906), FX16_CONST(0.5895213186410635), + FX16_CONST(-0.8068475535437994), FX16_CONST(0.5907597018588739), + FX16_CONST(-0.8059403905711764), FX16_CONST(0.5919966949620408), + FX16_CONST(-0.8050313311429637), FX16_CONST(0.5932322950397998), + FX16_CONST(-0.8041203773982657), FX16_CONST(0.5944664991846645), + FX16_CONST(-0.8032075314806453), FX16_CONST(0.5956993044924328), + FX16_CONST(-0.8022927955381159), FX16_CONST(0.5969307080621962), + FX16_CONST(-0.8013761717231404), FX16_CONST(0.598160706996342), + FX16_CONST(-0.8004576621926228), FX16_CONST(0.5993892984005644), + FX16_CONST(-0.799537269107905), FX16_CONST(0.600616479383869), + FX16_CONST(-0.7986149946347607), FX16_CONST(0.6018422470585802), + FX16_CONST(-0.7976908409433914), FX16_CONST(0.6030665985403478), + FX16_CONST(-0.7967648102084189), FX16_CONST(0.6042895309481557), + FX16_CONST(-0.7958369046088837), FX16_CONST(0.6055110414043253), + FX16_CONST(-0.794907126328237), FX16_CONST(0.6067311270345245), + FX16_CONST(-0.7939754775543371), FX16_CONST(0.6079497849677737), + FX16_CONST(-0.7930419604794441), FX16_CONST(0.6091670123364527), + FX16_CONST(-0.7921065773002126), FX16_CONST(0.6103828062763091), + FX16_CONST(-0.7911693302176903), FX16_CONST(0.6115971639264617), + FX16_CONST(-0.7902302214373101), FX16_CONST(0.6128100824294096), + FX16_CONST(-0.7892892531688857), FX16_CONST(0.6140215589310385), + FX16_CONST(-0.7883464276266061), FX16_CONST(0.615231590580627), + FX16_CONST(-0.7874017470290317), FX16_CONST(0.6164401745308532), + FX16_CONST(-0.786455213599086), FX16_CONST(0.6176473079378036), + FX16_CONST(-0.785506829564054), FX16_CONST(0.6188529879609762), + FX16_CONST(-0.7845565971555752), FX16_CONST(0.6200572117632892), + FX16_CONST(-0.7836045186096382), FX16_CONST(0.6212599765110877), + FX16_CONST(-0.7826505961665761), FX16_CONST(0.6224612793741495), + FX16_CONST(-0.7816948320710597), FX16_CONST(0.6236611175256942), + FX16_CONST(-0.7807372285720947), FX16_CONST(0.6248594881423861), + FX16_CONST(-0.7797777879230146), FX16_CONST(0.6260563884043434), + FX16_CONST(-0.7788165123814759), FX16_CONST(0.6272518154951442), + FX16_CONST(-0.7778534042094529), FX16_CONST(0.6284457666018328), + FX16_CONST(-0.7768884656732328), FX16_CONST(0.6296382389149267), + FX16_CONST(-0.7759216990434078), FX16_CONST(0.6308292296284242), + FX16_CONST(-0.774953106594874), FX16_CONST(0.6320187359398088), + FX16_CONST(-0.7739826906068228), FX16_CONST(0.6332067550500572), + FX16_CONST(-0.7730104533627369), FX16_CONST(0.6343932841636456), + FX16_CONST(-0.7720363971503849), FX16_CONST(0.6355783204885557), + FX16_CONST(-0.771060524261814), FX16_CONST(0.6367618612362839), + FX16_CONST(-0.7700828369933481), FX16_CONST(0.6379439036218438), + FX16_CONST(-0.7691033376455797), FX16_CONST(0.6391244448637756), + FX16_CONST(-0.7681220285233654), FX16_CONST(0.6403034821841517), + FX16_CONST(-0.7671389119358203), FX16_CONST(0.6414810128085833), + FX16_CONST(-0.7661539901963133), FX16_CONST(0.6426570339662265), + FX16_CONST(-0.7651672656224592), FX16_CONST(0.6438315428897912), + FX16_CONST(-0.7641787405361168), FX16_CONST(0.6450045368155438), + FX16_CONST(-0.7631884172633813), FX16_CONST(0.6461760129833163), + FX16_CONST(-0.7621962981345789), FX16_CONST(0.6473459686365122), + FX16_CONST(-0.7612023854842622), FX16_CONST(0.648514401022112), + FX16_CONST(-0.7602066816512026), FX16_CONST(0.6496813073906829), + FX16_CONST(-0.7592091889783882), FX16_CONST(0.6508466849963808), + FX16_CONST(-0.7582099098130154), FX16_CONST(0.6520105310969595), + FX16_CONST(-0.7572088465064846), FX16_CONST(0.6531728429537768), + FX16_CONST(-0.7562060014143943), FX16_CONST(0.6543336178318007), + FX16_CONST(-0.7552013768965369), FX16_CONST(0.655492852999615), + FX16_CONST(-0.7541949753168894), FX16_CONST(0.6566505457294287), + FX16_CONST(-0.7531867990436126), FX16_CONST(0.6578066932970785), + FX16_CONST(-0.7521768504490427), FX16_CONST(0.6589612929820373), + FX16_CONST(-0.7511651319096864), FX16_CONST(0.6601143420674206), + FX16_CONST(-0.7501516458062154), FX16_CONST(0.6612658378399917), + FX16_CONST(-0.7491363945234596), FX16_CONST(0.6624157775901715), + FX16_CONST(-0.7481193804504037), FX16_CONST(0.6635641586120395), + FX16_CONST(-0.7471006059801802), FX16_CONST(0.6647109782033448), + FX16_CONST(-0.7460800735100638), FX16_CONST(0.6658562336655097), + FX16_CONST(-0.7450577854414658), FX16_CONST(0.6669999223036377), + FX16_CONST(-0.7440337441799296), FX16_CONST(0.6681420414265181), + FX16_CONST(-0.7430079521351219), FX16_CONST(0.6692825883466358), + FX16_CONST(-0.7419804117208312), FX16_CONST(0.670421560380173), + FX16_CONST(-0.7409511253549591), FX16_CONST(0.6715589548470183), + FX16_CONST(-0.7399200954595161), FX16_CONST(0.672694769070773), + FX16_CONST(-0.7388873244606156), FX16_CONST(0.6738290003787556), + FX16_CONST(-0.7378528147884663), FX16_CONST(0.6749616461020117), + FX16_CONST(-0.7368165688773701), FX16_CONST(0.6760927035753157), + FX16_CONST(-0.7357785891657136), FX16_CONST(0.6772221701371803), + FX16_CONST(-0.7347388780959634), FX16_CONST(0.6783500431298615), + FX16_CONST(-0.7336974381146601), FX16_CONST(0.6794763198993652), + FX16_CONST(-0.7326542716724131), FX16_CONST(0.6806009977954527), + FX16_CONST(-0.7316093812238929), FX16_CONST(0.6817240741716495), + FX16_CONST(-0.7305627692278277), FX16_CONST(0.6828455463852479), + FX16_CONST(-0.729514438146997), FX16_CONST(0.6839654117973154), + FX16_CONST(-0.7284643904482251), FX16_CONST(0.6850836677727005), + FX16_CONST(-0.7274126286023762), FX16_CONST(0.6862003116800381), + FX16_CONST(-0.7263591550843463), FX16_CONST(0.6873153408917587), + FX16_CONST(-0.725303972373061), FX16_CONST(0.6884287527840902), + FX16_CONST(-0.724247082951467), FX16_CONST(0.6895405447370668), + FX16_CONST(-0.7231884893065273), FX16_CONST(0.6906507141345346), + FX16_CONST(-0.7221281939292151), FX16_CONST(0.6917592583641579), + FX16_CONST(-0.7210661993145084), FX16_CONST(0.6928661748174243), + FX16_CONST(-0.7200025079613819), FX16_CONST(0.6939714608896537), + FX16_CONST(-0.7189371223728046), FX16_CONST(0.6950751139800007), + FX16_CONST(-0.7178700450557318), FX16_CONST(0.6961771314914629), + FX16_CONST(-0.7168012785210994), FX16_CONST(0.6972775108308866), + FX16_CONST(-0.715730825283819), FX16_CONST(0.6983762494089724), + FX16_CONST(-0.7146586878627694), FX16_CONST(0.6994733446402834), + FX16_CONST(-0.7135848687807937), FX16_CONST(0.7005687939432481), + FX16_CONST(-0.7125093705646924), FX16_CONST(0.7016625947401685), + FX16_CONST(-0.7114321957452164), FX16_CONST(0.7027547444572253), + FX16_CONST(-0.7103533468570622), FX16_CONST(0.703845240524485), + FX16_CONST(-0.709272826438866), FX16_CONST(0.7049340803759045), + FX16_CONST(-0.7081906370331956), FX16_CONST(0.7060212614493395), + FX16_CONST(-0.7071067811865477), FX16_CONST(0.7071067811865474), + FX16_CONST(-0.7060212614493399), FX16_CONST(0.7081906370331953), + FX16_CONST(-0.7049340803759048), FX16_CONST(0.7092728264388657), + FX16_CONST(-0.7038452405244854), FX16_CONST(0.7103533468570619), + FX16_CONST(-0.7027547444572256), FX16_CONST(0.7114321957452161), + FX16_CONST(-0.7016625947401687), FX16_CONST(0.7125093705646921), + FX16_CONST(-0.7005687939432484), FX16_CONST(0.7135848687807935), + FX16_CONST(-0.6994733446402838), FX16_CONST(0.7146586878627691), + FX16_CONST(-0.6983762494089727), FX16_CONST(0.7157308252838188), + FX16_CONST(-0.697277510830887), FX16_CONST(0.7168012785210991), + FX16_CONST(-0.6961771314914632), FX16_CONST(0.7178700450557315), + FX16_CONST(-0.695075113980001), FX16_CONST(0.7189371223728043), + FX16_CONST(-0.693971460889654), FX16_CONST(0.7200025079613817), + FX16_CONST(-0.6928661748174246), FX16_CONST(0.7210661993145082), + FX16_CONST(-0.6917592583641582), FX16_CONST(0.7221281939292149), + FX16_CONST(-0.6906507141345349), FX16_CONST(0.7231884893065271), + FX16_CONST(-0.6895405447370672), FX16_CONST(0.7242470829514667), + FX16_CONST(-0.6884287527840905), FX16_CONST(0.7253039723730607), + FX16_CONST(-0.687315340891759), FX16_CONST(0.726359155084346), + FX16_CONST(-0.6862003116800385), FX16_CONST(0.7274126286023759), + FX16_CONST(-0.6850836677727008), FX16_CONST(0.7284643904482249), + FX16_CONST(-0.6839654117973157), FX16_CONST(0.7295144381469967), + FX16_CONST(-0.6828455463852482), FX16_CONST(0.7305627692278274), + FX16_CONST(-0.6817240741716498), FX16_CONST(0.7316093812238925), + FX16_CONST(-0.680600997795453), FX16_CONST(0.7326542716724129), + FX16_CONST(-0.6794763198993655), FX16_CONST(0.7336974381146598), + FX16_CONST(-0.6783500431298618), FX16_CONST(0.7347388780959632), + FX16_CONST(-0.6772221701371807), FX16_CONST(0.7357785891657133), + FX16_CONST(-0.676092703575316), FX16_CONST(0.7368165688773698), + FX16_CONST(-0.674961646102012), FX16_CONST(0.737852814788466), + FX16_CONST(-0.6738290003787559), FX16_CONST(0.7388873244606152), + FX16_CONST(-0.6726947690707733), FX16_CONST(0.7399200954595158), + FX16_CONST(-0.6715589548470187), FX16_CONST(0.7409511253549589), + FX16_CONST(-0.6704215603801733), FX16_CONST(0.7419804117208308), + FX16_CONST(-0.6692825883466361), FX16_CONST(0.7430079521351216), + FX16_CONST(-0.6681420414265185), FX16_CONST(0.7440337441799294), + FX16_CONST(-0.666999922303638), FX16_CONST(0.7450577854414656), + FX16_CONST(-0.6658562336655101), FX16_CONST(0.7460800735100634), + FX16_CONST(-0.6647109782033451), FX16_CONST(0.7471006059801799), + FX16_CONST(-0.6635641586120399), FX16_CONST(0.7481193804504035), + FX16_CONST(-0.6624157775901718), FX16_CONST(0.7491363945234594), + FX16_CONST(-0.661265837839992), FX16_CONST(0.7501516458062152), + FX16_CONST(-0.6601143420674209), FX16_CONST(0.751165131909686), + FX16_CONST(-0.6589612929820376), FX16_CONST(0.7521768504490425), + FX16_CONST(-0.6578066932970789), FX16_CONST(0.7531867990436123), + FX16_CONST(-0.656650545729429), FX16_CONST(0.7541949753168892), + FX16_CONST(-0.6554928529996153), FX16_CONST(0.7552013768965365), + FX16_CONST(-0.654333617831801), FX16_CONST(0.7562060014143941), + FX16_CONST(-0.6531728429537771), FX16_CONST(0.7572088465064842), + FX16_CONST(-0.6520105310969597), FX16_CONST(0.7582099098130151), + FX16_CONST(-0.650846684996381), FX16_CONST(0.759209188978388), + FX16_CONST(-0.6496813073906832), FX16_CONST(0.7602066816512024), + FX16_CONST(-0.6485144010221123), FX16_CONST(0.7612023854842619), + FX16_CONST(-0.6473459686365125), FX16_CONST(0.7621962981345786), + FX16_CONST(-0.6461760129833166), FX16_CONST(0.763188417263381), + FX16_CONST(-0.6450045368155441), FX16_CONST(0.7641787405361166), + FX16_CONST(-0.6438315428897915), FX16_CONST(0.7651672656224588), + FX16_CONST(-0.6426570339662268), FX16_CONST(0.7661539901963129), + FX16_CONST(-0.6414810128085836), FX16_CONST(0.76713891193582), + FX16_CONST(-0.640303482184152), FX16_CONST(0.7681220285233651), + FX16_CONST(-0.639124444863776), FX16_CONST(0.7691033376455795), + FX16_CONST(-0.6379439036218442), FX16_CONST(0.7700828369933479), + FX16_CONST(-0.6367618612362842), FX16_CONST(0.7710605242618138), + FX16_CONST(-0.635578320488556), FX16_CONST(0.7720363971503846), + FX16_CONST(-0.6343932841636459), FX16_CONST(0.7730104533627365), + FX16_CONST(-0.6332067550500575), FX16_CONST(0.7739826906068226), + FX16_CONST(-0.6320187359398092), FX16_CONST(0.7749531065948737), + FX16_CONST(-0.6308292296284246), FX16_CONST(0.7759216990434076), + FX16_CONST(-0.629638238914927), FX16_CONST(0.7768884656732326), + FX16_CONST(-0.6284457666018332), FX16_CONST(0.7778534042094527), + FX16_CONST(-0.6272518154951445), FX16_CONST(0.7788165123814756), + FX16_CONST(-0.6260563884043437), FX16_CONST(0.7797777879230143), + FX16_CONST(-0.6248594881423865), FX16_CONST(0.7807372285720944), + FX16_CONST(-0.6236611175256945), FX16_CONST(0.7816948320710594), + FX16_CONST(-0.6224612793741499), FX16_CONST(0.7826505961665758), + FX16_CONST(-0.621259976511088), FX16_CONST(0.7836045186096379), + FX16_CONST(-0.6200572117632894), FX16_CONST(0.784556597155575), + FX16_CONST(-0.6188529879609765), FX16_CONST(0.7855068295640538), + FX16_CONST(-0.617647307937804), FX16_CONST(0.7864552135990857), + FX16_CONST(-0.6164401745308535), FX16_CONST(0.7874017470290314), + FX16_CONST(-0.6152315905806274), FX16_CONST(0.7883464276266059), + FX16_CONST(-0.6140215589310388), FX16_CONST(0.7892892531688854), + FX16_CONST(-0.6128100824294099), FX16_CONST(0.7902302214373098), + FX16_CONST(-0.611597163926462), FX16_CONST(0.7911693302176901), + FX16_CONST(-0.6103828062763095), FX16_CONST(0.7921065773002124), + FX16_CONST(-0.6091670123364531), FX16_CONST(0.7930419604794438), + FX16_CONST(-0.6079497849677741), FX16_CONST(0.7939754775543368), + FX16_CONST(-0.6067311270345248), FX16_CONST(0.7949071263282368), + FX16_CONST(-0.6055110414043257), FX16_CONST(0.7958369046088833), + FX16_CONST(-0.6042895309481561), FX16_CONST(0.7967648102084187), + FX16_CONST(-0.6030665985403482), FX16_CONST(0.7976908409433912), + FX16_CONST(-0.6018422470585806), FX16_CONST(0.7986149946347605), + FX16_CONST(-0.6006164793838693), FX16_CONST(0.7995372691079048), + FX16_CONST(-0.5993892984005648), FX16_CONST(0.8004576621926226), + FX16_CONST(-0.5981607069963424), FX16_CONST(0.8013761717231401), + FX16_CONST(-0.5969307080621965), FX16_CONST(0.8022927955381157), + FX16_CONST(-0.5956993044924332), FX16_CONST(0.803207531480645), + FX16_CONST(-0.5944664991846649), FX16_CONST(0.8041203773982655), + FX16_CONST(-0.5932322950398001), FX16_CONST(0.8050313311429633), + FX16_CONST(-0.5919966949620411), FX16_CONST(0.8059403905711762), + FX16_CONST(-0.5907597018588743), FX16_CONST(0.8068475535437992), + FX16_CONST(-0.5895213186410638), FX16_CONST(0.8077528179261904), + FX16_CONST(-0.5882815482226458), FX16_CONST(0.8086561815881746), + FX16_CONST(-0.5870403935209184), FX16_CONST(0.8095576424040509), + FX16_CONST(-0.5857978574564391), FX16_CONST(0.8104571982525945), + FX16_CONST(-0.5845539429530154), FX16_CONST(0.8113548470170636), + FX16_CONST(-0.5833086529376983), FX16_CONST(0.8122505865852039), + FX16_CONST(-0.5820619903407754), FX16_CONST(0.8131444148492536), + FX16_CONST(-0.580813958095765), FX16_CONST(0.8140363297059481), + FX16_CONST(-0.5795645591394061), FX16_CONST(0.8149263290565264), + FX16_CONST(-0.5783137964116558), FX16_CONST(0.8158144108067337), + FX16_CONST(-0.5770616728556796), FX16_CONST(0.8167005728668277), + FX16_CONST(-0.5758081914178452), FX16_CONST(0.8175848131515837), + FX16_CONST(-0.5745533550477163), FX16_CONST(0.8184671295802983), + FX16_CONST(-0.5732971666980426), FX16_CONST(0.8193475200767967), + FX16_CONST(-0.5720396293247574), FX16_CONST(0.8202259825694345), + FX16_CONST(-0.5707807458869674), FX16_CONST(0.8211025149911046), + FX16_CONST(-0.5695205193469471), FX16_CONST(0.8219771152792416), + FX16_CONST(-0.5682589526701314), FX16_CONST(0.8228497813758264), + FX16_CONST(-0.5669960488251091), FX16_CONST(0.8237205112273911), + FX16_CONST(-0.5657318107836136), FX16_CONST(0.8245893027850251), + FX16_CONST(-0.5644662415205196), FX16_CONST(0.8254561540043773), + FX16_CONST(-0.5631993440138342), FX16_CONST(0.8263210628456634), + FX16_CONST(-0.5619311212446894), FX16_CONST(0.8271840272736691), + FX16_CONST(-0.5606615761973366), FX16_CONST(0.8280450452577554), + FX16_CONST(-0.5593907118591365), FX16_CONST(0.8289041147718647), + FX16_CONST(-0.5581185312205563), FX16_CONST(0.8297612337945228), + FX16_CONST(-0.5568450372751602), FX16_CONST(0.8306164003088462), + FX16_CONST(-0.5555702330196022), FX16_CONST(0.8314696123025452), + FX16_CONST(-0.55429412145362), FX16_CONST(0.8323208677679297), + FX16_CONST(-0.553016705580028), FX16_CONST(0.8331701647019129), + FX16_CONST(-0.5517379884047078), FX16_CONST(0.8340175011060179), + FX16_CONST(-0.550457972936605), FX16_CONST(0.8348628749863799), + FX16_CONST(-0.5491766621877198), FX16_CONST(0.8357062843537525), + FX16_CONST(-0.5478940591731001), FX16_CONST(0.836547727223512), + FX16_CONST(-0.5466101669108354), FX16_CONST(0.8373872016156616), + FX16_CONST(-0.5453249884220468), FX16_CONST(0.8382247055548377), + FX16_CONST(-0.5440385267308842), FX16_CONST(0.8390602370703125), + FX16_CONST(-0.542750784864516), FX16_CONST(0.8398937941959994), + FX16_CONST(-0.5414617658531234), FX16_CONST(0.8407253749704581), + FX16_CONST(-0.5401714727298927), FX16_CONST(0.8415549774368986), + FX16_CONST(-0.5388799085310089), FX16_CONST(0.8423825996431855), + FX16_CONST(-0.5375870762956458), FX16_CONST(0.8432082396418452), + FX16_CONST(-0.5362929790659634), FX16_CONST(0.8440318954900663), + FX16_CONST(-0.5349976198870973), FX16_CONST(0.844853565249707), + FX16_CONST(-0.5337010018071529), FX16_CONST(0.8456732469872991), + FX16_CONST(-0.5324031278771986), FX16_CONST(0.8464909387740517), + FX16_CONST(-0.5311040011512553), FX16_CONST(0.8473066386858581), + FX16_CONST(-0.5298036246862949), FX16_CONST(0.8481203448032971), + FX16_CONST(-0.5285020015422286), FX16_CONST(0.8489320552116395), + FX16_CONST(-0.5271991347819014), FX16_CONST(0.8497417680008524), + FX16_CONST(-0.5258950274710845), FX16_CONST(0.8505494812656035), + FX16_CONST(-0.5245896826784694), FX16_CONST(0.8513551931052649), + FX16_CONST(-0.5232831034756568), FX16_CONST(0.8521589016239196), + FX16_CONST(-0.5219752929371545), FX16_CONST(0.8529606049303635), + FX16_CONST(-0.5206662541403673), FX16_CONST(0.8537603011381113), + FX16_CONST(-0.5193559901655895), FX16_CONST(0.8545579883654005), + FX16_CONST(-0.5180445040959999), FX16_CONST(0.8553536647351957), + FX16_CONST(-0.5167317990176503), FX16_CONST(0.8561473283751942), + FX16_CONST(-0.5154178780194633), FX16_CONST(0.8569389774178285), + FX16_CONST(-0.5141027441932219), FX16_CONST(0.857728610000272), + FX16_CONST(-0.512786400633563), FX16_CONST(0.8585162242644427), + FX16_CONST(-0.5114688504379703), FX16_CONST(0.8593018183570085), + FX16_CONST(-0.5101500967067673), FX16_CONST(0.8600853904293899), + FX16_CONST(-0.5088301425431074), FX16_CONST(0.8608669386377671), + FX16_CONST(-0.5075089910529711), FX16_CONST(0.8616464611430812), + FX16_CONST(-0.5061866453451553), FX16_CONST(0.8624239561110405), + FX16_CONST(-0.5048631085312675), FX16_CONST(0.8631994217121242), + FX16_CONST(-0.5035383837257181), FX16_CONST(0.8639728561215864), + FX16_CONST(-0.5022124740457112), FX16_CONST(0.8647442575194622), + FX16_CONST(-0.500885382611241), FX16_CONST(0.8655136240905689), + FX16_CONST(-0.499557112545082), FX16_CONST(0.8662809540245129), + FX16_CONST(-0.49822766697278187), FX16_CONST(0.8670462455156926), + FX16_CONST(-0.4968970490226544), FX16_CONST(0.8678094967633033), + FX16_CONST(-0.49556526182577304), FX16_CONST(0.8685707059713406), + FX16_CONST(-0.49423230851596006), FX16_CONST(0.8693298713486066), + FX16_CONST(-0.49289819222978426), FX16_CONST(0.8700869911087113), + FX16_CONST(-0.49156291610655), FX16_CONST(0.8708420634700789), + FX16_CONST(-0.4902264832882911), FX16_CONST(0.8715950866559511), + FX16_CONST(-0.4888888969197637), FX16_CONST(0.8723460588943912), + FX16_CONST(-0.4875501601484364), FX16_CONST(0.8730949784182899), + FX16_CONST(-0.4862102761244867), FX16_CONST(0.8738418434653666), + FX16_CONST(-0.48486924800079123), FX16_CONST(0.874586652278176), + FX16_CONST(-0.48352707893291874), FX16_CONST(0.8753294031041108), + FX16_CONST(-0.4821837720791226), FX16_CONST(0.8760700941954067), + FX16_CONST(-0.48083933060033446), FX16_CONST(0.8768087238091454), + FX16_CONST(-0.4794937576601534), FX16_CONST(0.8775452902072611), + FX16_CONST(-0.4781470564248433), FX16_CONST(0.8782797916565414), + FX16_CONST(-0.4767992300633222), FX16_CONST(0.8790122264286334), + FX16_CONST(-0.4754502817471558), FX16_CONST(0.8797425928000475), + FX16_CONST(-0.4741002146505506), FX16_CONST(0.8804708890521604), + FX16_CONST(-0.47274903195034323), FX16_CONST(0.8811971134712218), + FX16_CONST(-0.4713967368259979), FX16_CONST(0.8819212643483548), + FX16_CONST(-0.4700433324595958), FX16_CONST(0.8826433399795627), + FX16_CONST(-0.46868882203582796), FX16_CONST(0.8833633386657316), + FX16_CONST(-0.4673332087419883), FX16_CONST(0.8840812587126351), + FX16_CONST(-0.4659764957679667), FX16_CONST(0.8847970984309375), + FX16_CONST(-0.4646186863062382), FX16_CONST(0.8855108561361997), + FX16_CONST(-0.4632597835518604), FX16_CONST(0.8862225301488805), + FX16_CONST(-0.46189979070246284), FX16_CONST(0.8869321187943421), + FX16_CONST(-0.46053871095823995), FX16_CONST(0.8876396204028539), + FX16_CONST(-0.4591765475219447), FX16_CONST(0.888345033309596), + FX16_CONST(-0.4578133035988777), FX16_CONST(0.8890483558546644), + FX16_CONST(-0.45644898239688425), FX16_CONST(0.8897495863830727), + FX16_CONST(-0.455083587126344), FX16_CONST(0.8904487232447578), + FX16_CONST(-0.45371712100016387), FX16_CONST(0.8911457647945832), + FX16_CONST(-0.4523495872337707), FX16_CONST(0.8918407093923428), + FX16_CONST(-0.45098098904510436), FX16_CONST(0.8925335554027644), + FX16_CONST(-0.449611329654607), FX16_CONST(0.8932243011955151), + FX16_CONST(-0.44824061228522016), FX16_CONST(0.8939129451452031), + FX16_CONST(-0.44686884016237427), FX16_CONST(0.8945994856313826), + FX16_CONST(-0.4454960165139817), FX16_CONST(0.8952839210385576), + FX16_CONST(-0.4441221445704298), FX16_CONST(0.8959662497561849), + FX16_CONST(-0.44274722756457047), FX16_CONST(0.8966464701786799), + FX16_CONST(-0.441371268731717), FX16_CONST(0.8973245807054181), + FX16_CONST(-0.4399942713096334), FX16_CONST(0.8980005797407398), + FX16_CONST(-0.43861623853852766), FX16_CONST(0.8986744656939538), + FX16_CONST(-0.437237173661044), FX16_CONST(0.8993462369793416), + FX16_CONST(-0.43585707992225603), FX16_CONST(0.90001589201616), + FX16_CONST(-0.4344759605696561), FX16_CONST(0.9006834292286467), + FX16_CONST(-0.4330938188531522), FX16_CONST(0.9013488470460219), + FX16_CONST(-0.43171065802505737), FX16_CONST(0.9020121439024932), + FX16_CONST(-0.43032648134008256), FX16_CONST(0.9026733182372588), + FX16_CONST(-0.4289412920553301), FX16_CONST(0.9033323684945116), + FX16_CONST(-0.42755509343028253), FX16_CONST(0.9039892931234431), + FX16_CONST(-0.42616788872679995), FX16_CONST(0.904644090578246), + FX16_CONST(-0.42477968120910903), FX16_CONST(0.9052967593181187), + FX16_CONST(-0.42339047414379605), FX16_CONST(0.9059472978072685), + FX16_CONST(-0.42200027079979957), FX16_CONST(0.9065957045149154), + FX16_CONST(-0.42060907444840306), FX16_CONST(0.9072419779152956), + FX16_CONST(-0.41921688836322435), FX16_CONST(0.907886116487666), + FX16_CONST(-0.41782371582021255), FX16_CONST(0.908528118716306), + FX16_CONST(-0.41642956009763726), FX16_CONST(0.9091679830905224), + FX16_CONST(-0.4150344244760816), FX16_CONST(0.9098057081046522), + FX16_CONST(-0.41363831223843517), FX16_CONST(0.9104412922580669), + FX16_CONST(-0.41224122666988333), FX16_CONST(0.9110747340551761), + FX16_CONST(-0.41084317105790424), FX16_CONST(0.9117060320054297), + FX16_CONST(-0.40944414869225776), FX16_CONST(0.9123351846233226), + FX16_CONST(-0.4080441628649787), FX16_CONST(0.9129621904283981), + FX16_CONST(-0.40664321687036886), FX16_CONST(0.9135870479452509), + FX16_CONST(-0.4052413140049904), FX16_CONST(0.9142097557035305), + FX16_CONST(-0.4038384575676545), FX16_CONST(0.914830312237946), + FX16_CONST(-0.4024346508594187), FX16_CONST(0.9154487160882677), + FX16_CONST(-0.40102989718357573), FX16_CONST(0.9160649657993316), + FX16_CONST(-0.3996241998456468), FX16_CONST(0.9166790599210427), + FX16_CONST(-0.3982175621533742), FX16_CONST(0.9172909970083777), + FX16_CONST(-0.3968099874167108), FX16_CONST(0.9179007756213903), + FX16_CONST(-0.39540147894781663), FX16_CONST(0.918508394325212), + FX16_CONST(-0.39399204006104827), FX16_CONST(0.9191138516900577), + FX16_CONST(-0.3925816740729515), FX16_CONST(0.9197171462912274), + FX16_CONST(-0.39117038430225376), FX16_CONST(0.9203182767091106), + FX16_CONST(-0.389758174069857), FX16_CONST(0.9209172415291892), + FX16_CONST(-0.3883450466988267), FX16_CONST(0.9215140393420418), + FX16_CONST(-0.38693100551438886), FX16_CONST(0.9221086687433451), + FX16_CONST(-0.38551605384391896), FX16_CONST(0.9227011283338785), + FX16_CONST(-0.384100195016935), FX16_CONST(0.9232914167195276), + FX16_CONST(-0.3826834323650904), FX16_CONST(0.9238795325112865), + FX16_CONST(-0.3812657692221628), FX16_CONST(0.9244654743252624), + FX16_CONST(-0.3798472089240515), FX16_CONST(0.9250492407826775), + FX16_CONST(-0.3784277548087658), FX16_CONST(0.9256308305098727), + FX16_CONST(-0.37700741021641826), FX16_CONST(0.9262102421383114), + FX16_CONST(-0.3755861784892171), FX16_CONST(0.9267874743045819), + FX16_CONST(-0.37416406297145854), FX16_CONST(0.9273625256504009), + FX16_CONST(-0.3727410670095162), FX16_CONST(0.9279353948226177), + FX16_CONST(-0.3713171939518378), FX16_CONST(0.9285060804732155), + FX16_CONST(-0.3698924471489342), FX16_CONST(0.9290745812593157), + FX16_CONST(-0.36846682995337227), FX16_CONST(0.9296408958431813), + FX16_CONST(-0.367040345719767), FX16_CONST(0.9302050228922192), + FX16_CONST(-0.36561299780477435), FX16_CONST(0.9307669610789835), + FX16_CONST(-0.3641847895670802), FX16_CONST(0.9313267090811803), + FX16_CONST(-0.3627557243673974), FX16_CONST(0.931884265581668), + FX16_CONST(-0.3613258055684543), FX16_CONST(0.9324396292684624), + FX16_CONST(-0.359895036534988), FX16_CONST(0.932992798834739), + FX16_CONST(-0.3584634206337371), FX16_CONST(0.933543772978836), + FX16_CONST(-0.3570309612334304), FX16_CONST(0.9340925504042588), + FX16_CONST(-0.35559766170478413), FX16_CONST(0.9346391298196807), + FX16_CONST(-0.3541635254204905), FX16_CONST(0.9351835099389475), + FX16_CONST(-0.35272855575521067), FX16_CONST(0.9357256894810804), + FX16_CONST(-0.3512927560855669), FX16_CONST(0.9362656671702784), + FX16_CONST(-0.3498561297901354), FX16_CONST(0.9368034417359214), + FX16_CONST(-0.3484186802494349), FX16_CONST(0.9373390119125748), + FX16_CONST(-0.34698041084592385), FX16_CONST(0.9378723764399898), + FX16_CONST(-0.3455413249639891), FX16_CONST(0.9384035340631081), + FX16_CONST(-0.34410142598993876), FX16_CONST(0.9389324835320646), + FX16_CONST(-0.34266071731199493), FX16_CONST(0.9394592236021897), + FX16_CONST(-0.3412192023202828), FX16_CONST(0.9399837530340138), + FX16_CONST(-0.33977688440682713), FX16_CONST(0.9405060705932682), + FX16_CONST(-0.3383337669655413), FX16_CONST(0.9410261750508893), + FX16_CONST(-0.33688985339222), FX16_CONST(0.9415440651830208), + FX16_CONST(-0.33544514708453144), FX16_CONST(0.9420597397710174), + FX16_CONST(-0.3339996514420099), FX16_CONST(0.9425731976014468), + FX16_CONST(-0.33255336986604456), FX16_CONST(0.9430844374660934), + FX16_CONST(-0.3311063057598766), FX16_CONST(0.9435934581619603), + FX16_CONST(-0.32965846252858755), FX16_CONST(0.9441002584912727), + FX16_CONST(-0.3282098435790924), FX16_CONST(0.9446048372614803), + FX16_CONST(-0.32676045232013234), FX16_CONST(0.9451071932852604), + FX16_CONST(-0.32531029216226337), FX16_CONST(0.9456073253805212), + FX16_CONST(-0.32385936651785313), FX16_CONST(0.9461052323704033), + FX16_CONST(-0.32240767880106996), FX16_CONST(0.9466009130832835), + FX16_CONST(-0.3209552324278752), FX16_CONST(0.9470943663527772), + FX16_CONST(-0.31950203081601547), FX16_CONST(0.9475855910177412), + FX16_CONST(-0.31804807738501545), FX16_CONST(0.9480745859222761), + FX16_CONST(-0.31659337555616623), FX16_CONST(0.9485613499157302), + FX16_CONST(-0.3151379287525226), FX16_CONST(0.9490458818527006), + FX16_CONST(-0.3136817403988915), FX16_CONST(0.9495281805930367), + FX16_CONST(-0.31222481392182483), FX16_CONST(0.9500082450018431), + FX16_CONST(-0.3107671527496121), FX16_CONST(0.9504860739494815), + FX16_CONST(-0.30930876031226917), FX16_CONST(0.950961666311575), + FX16_CONST(-0.30784964004153514), FX16_CONST(0.9514350209690082), + FX16_CONST(-0.3063897953708611), FX16_CONST(0.9519061368079322), + FX16_CONST(-0.3049292297354024), FX16_CONST(0.9523750127197659), + FX16_CONST(-0.3034679465720111), FX16_CONST(0.9528416476011987), + FX16_CONST(-0.3020059493192286), FX16_CONST(0.9533060403541936), + FX16_CONST(-0.3005432414172738), FX16_CONST(0.9537681898859902), + FX16_CONST(-0.29907982630804064), FX16_CONST(0.9542280951091056), + FX16_CONST(-0.29761570743508625), FX16_CONST(0.9546857549413383), + FX16_CONST(-0.29615088824362373), FX16_CONST(0.9551411683057708), + FX16_CONST(-0.29468537218051494), FX16_CONST(0.9555943341307709), + FX16_CONST(-0.2932191626942591), FX16_CONST(0.9560452513499963), + FX16_CONST(-0.29175226323498954), FX16_CONST(0.956493918902395), + FX16_CONST(-0.2902846772544625), FX16_CONST(0.9569403357322088), + FX16_CONST(-0.2888164082060494), FX16_CONST(0.957384500788976), + FX16_CONST(-0.28734745954472934), FX16_CONST(0.9578264130275329), + FX16_CONST(-0.2858778347270811), FX16_CONST(0.9582660714080176), + FX16_CONST(-0.2844075372112722), FX16_CONST(0.9587034748958715), + FX16_CONST(-0.28293657045705556), FX16_CONST(0.9591386224618419), + FX16_CONST(-0.28146493792575805), FX16_CONST(0.9595715130819845), + FX16_CONST(-0.2799926430802731), FX16_CONST(0.960002145737666), + FX16_CONST(-0.27851968938505367), FX16_CONST(0.9604305194155657), + FX16_CONST(-0.27704608030610034), FX16_CONST(0.9608566331076795), + FX16_CONST(-0.2755718193109584), FX16_CONST(0.9612804858113205), + FX16_CONST(-0.2740969098687065), FX16_CONST(0.9617020765291225), + FX16_CONST(-0.2726213554499489), FX16_CONST(0.9621214042690416), + FX16_CONST(-0.27114515952680784), FX16_CONST(0.9625384680443592), + FX16_CONST(-0.2696683255729156), FX16_CONST(0.9629532668736838), + FX16_CONST(-0.26819085706340356), FX16_CONST(0.9633657997809539), + FX16_CONST(-0.2667127574748986), FX16_CONST(0.9637760657954398), + FX16_CONST(-0.26523403028551185), FX16_CONST(0.9641840639517458), + FX16_CONST(-0.2637546789748313), FX16_CONST(0.9645897932898128), + FX16_CONST(-0.2622747070239142), FX16_CONST(0.9649932528549202), + FX16_CONST(-0.26079411791527596), FX16_CONST(0.9653944416976893), + FX16_CONST(-0.2593129151328865), FX16_CONST(0.9657933588740836), + FX16_CONST(-0.25783110216215915), FX16_CONST(0.9661900034454125), + FX16_CONST(-0.25634868248994286), FX16_CONST(0.9665843744783331), + FX16_CONST(-0.2548656596045144), FX16_CONST(0.9669764710448522), + FX16_CONST(-0.25338203699557066), FX16_CONST(0.9673662922223284), + FX16_CONST(-0.2518978181542173), FX16_CONST(0.9677538370934754), + FX16_CONST(-0.25041300657296545), FX16_CONST(0.9681391047463623), + FX16_CONST(-0.2489276057457202), FX16_CONST(0.9685220942744173), + FX16_CONST(-0.24744161916777319), FX16_CONST(0.9689028047764289), + FX16_CONST(-0.2459550503357952), FX16_CONST(0.9692812353565483), + FX16_CONST(-0.2444679027478246), FX16_CONST(0.9696573851242923), + FX16_CONST(-0.24298017990326418), FX16_CONST(0.970031253194544), + FX16_CONST(-0.24149188530286947), FX16_CONST(0.9704028386875554), + FX16_CONST(-0.24000302244874144), FX16_CONST(0.9707721407289504), + FX16_CONST(-0.23851359484431825), FX16_CONST(0.9711391584497252), + FX16_CONST(-0.23702360599436773), FX16_CONST(0.9715038909862517), + FX16_CONST(-0.23553305940497588), FX16_CONST(0.9718663374802793), + FX16_CONST(-0.23404195858354362), FX16_CONST(0.9722264970789363), + FX16_CONST(-0.2325503070387753), FX16_CONST(0.9725843689347322), + FX16_CONST(-0.231058108280671), FX16_CONST(0.9729399522055602), + FX16_CONST(-0.22956536582051948), FX16_CONST(0.9732932460546981), + FX16_CONST(-0.22807208317088618), FX16_CONST(0.9736442496508119), + FX16_CONST(-0.22657826384561028), FX16_CONST(0.9739929621679558), + FX16_CONST(-0.22508391135979297), FX16_CONST(0.9743393827855759), + FX16_CONST(-0.22358902922978996), FX16_CONST(0.9746835106885107), + FX16_CONST(-0.22209362097320334), FX16_CONST(0.9750253450669942), + FX16_CONST(-0.22059769010887406), FX16_CONST(0.9753648851166569), + FX16_CONST(-0.21910124015687016), FX16_CONST(0.9757021300385285), + FX16_CONST(-0.21760427463848384), FX16_CONST(0.976037079039039), + FX16_CONST(-0.21610679707621955), FX16_CONST(0.9763697313300211), + FX16_CONST(-0.21460881099378668), FX16_CONST(0.9767000861287118), + FX16_CONST(-0.21311031991609197), FX16_CONST(0.9770281426577542), + FX16_CONST(-0.21161132736922802), FX16_CONST(0.9773539001452), + FX16_CONST(-0.21011183688046992), FX16_CONST(0.9776773578245099), + FX16_CONST(-0.20861185197826362), FX16_CONST(0.977998514934557), + FX16_CONST(-0.20711137619221853), FX16_CONST(0.9783173707196277), + FX16_CONST(-0.20561041305309907), FX16_CONST(0.9786339244294232), + FX16_CONST(-0.2041089660928174), FX16_CONST(0.9789481753190621), + FX16_CONST(-0.2026070388444215), FX16_CONST(0.979260122649082), + FX16_CONST(-0.20110463484209212), FX16_CONST(0.9795697656854405), + FX16_CONST(-0.19960175762113103), FX16_CONST(0.9798771036995176), + FX16_CONST(-0.19809841071795348), FX16_CONST(0.9801821359681174), + FX16_CONST(-0.19659459767008083), FX16_CONST(0.9804848617734693), + FX16_CONST(-0.19509032201612872), FX16_CONST(0.9807852804032303), + FX16_CONST(-0.1935855872958039), FX16_CONST(0.9810833911504866), + FX16_CONST(-0.19208039704989258), FX16_CONST(0.9813791933137546), + FX16_CONST(-0.19057475482025274), FX16_CONST(0.9816726861969831), + FX16_CONST(-0.18906866414980603), FX16_CONST(0.9819638691095554), + FX16_CONST(-0.18756212858253013), FX16_CONST(0.9822527413662893), + FX16_CONST(-0.18605515166344702), FX16_CONST(0.9825393022874411), + FX16_CONST(-0.18454773693861984), FX16_CONST(0.9828235511987052), + FX16_CONST(-0.183039887955141), FX16_CONST(0.9831054874312163), + FX16_CONST(-0.18153160826112488), FX16_CONST(0.9833851103215512), + FX16_CONST(-0.18002290140570013), FX16_CONST(0.9836624192117301), + FX16_CONST(-0.17851377093899798), FX16_CONST(0.9839374134492188), + FX16_CONST(-0.17700422041214905), FX16_CONST(0.984210092386929), + FX16_CONST(-0.17549425337727156), FX16_CONST(0.9844804553832209), + FX16_CONST(-0.1739838733874638), FX16_CONST(0.9847485018019042), + FX16_CONST(-0.17247308399679578), FX16_CONST(0.9850142310122398), + FX16_CONST(-0.17096188876030177), FX16_CONST(0.9852776423889411), + FX16_CONST(-0.16945029123396835), FX16_CONST(0.985538735312176), + FX16_CONST(-0.1679382949747314), FX16_CONST(0.9857975091675674), + FX16_CONST(-0.1664259035404642), FX16_CONST(0.9860539633461954), + FX16_CONST(-0.1649131204899698), FX16_CONST(0.9863080972445987), + FX16_CONST(-0.16339994938297386), FX16_CONST(0.9865599102647753), + FX16_CONST(-0.1618863937801123), FX16_CONST(0.9868094018141854), + FX16_CONST(-0.16037245724292856), FX16_CONST(0.987056571305751), + FX16_CONST(-0.15885814333386158), FX16_CONST(0.9873014181578583), + FX16_CONST(-0.15734345561623825), FX16_CONST(0.9875439417943592), + FX16_CONST(-0.15582839765426507), FX16_CONST(0.9877841416445722), + FX16_CONST(-0.15431297301302063), FX16_CONST(0.9880220171432835), + FX16_CONST(-0.1527971852584438), FX16_CONST(0.9882575677307495), + FX16_CONST(-0.15128103795733044), FX16_CONST(0.9884907928526966), + FX16_CONST(-0.1497645346773216), FX16_CONST(0.9887216919603238), + FX16_CONST(-0.14824767898689595), FX16_CONST(0.988950264510303), + FX16_CONST(-0.1467304744553624), FX16_CONST(0.9891765099647809), + FX16_CONST(-0.14521292465284794), FX16_CONST(0.9894004277913803), + FX16_CONST(-0.14369503315029475), FX16_CONST(0.9896220174632008), + FX16_CONST(-0.1421768035194482), FX16_CONST(0.9898412784588205), + FX16_CONST(-0.1406582393328492), FX16_CONST(0.9900582102622971), + FX16_CONST(-0.13913934416382603), FX16_CONST(0.9902728123631691), + FX16_CONST(-0.1376201215864866), FX16_CONST(0.990485084256457), + FX16_CONST(-0.1361005751757066), FX16_CONST(0.9906950254426646), + FX16_CONST(-0.13458070850712642), FX16_CONST(0.99090263542778), + FX16_CONST(-0.13306052515713912), FX16_CONST(0.9911079137232768), + FX16_CONST(-0.131540028702883), FX16_CONST(0.9913108598461154), + FX16_CONST(-0.13001922272223398), FX16_CONST(0.9915114733187439), + FX16_CONST(-0.12849811079379364), FX16_CONST(0.9917097536690994), + FX16_CONST(-0.12697669649688617), FX16_CONST(0.9919057004306093), + FX16_CONST(-0.12545498341154637), FX16_CONST(0.9920993131421917), + FX16_CONST(-0.12393297511851216), FX16_CONST(0.9922905913482574), + FX16_CONST(-0.12241067519921603), FX16_CONST(0.99247953459871), + FX16_CONST(-0.12088808723577762), FX16_CONST(0.9926661424489479), + FX16_CONST(-0.11936521481099176), FX16_CONST(0.992850414459865), + FX16_CONST(-0.1178420615083252), FX16_CONST(0.9930323501978514), + FX16_CONST(-0.11631863091190484), FX16_CONST(0.9932119492347945), + FX16_CONST(-0.11479492660650999), FX16_CONST(0.9933892111480807), + FX16_CONST(-0.11327095217756497), FX16_CONST(0.9935641355205953), + FX16_CONST(-0.11174671121112706), FX16_CONST(0.9937367219407246), + FX16_CONST(-0.11022220729388336), FX16_CONST(0.9939069700023561), + FX16_CONST(-0.10869744401313887), FX16_CONST(0.9940748793048794), + FX16_CONST(-0.10717242495680884), FX16_CONST(0.9942404494531879), + FX16_CONST(-0.10564715371341044), FX16_CONST(0.9944036800576791), + FX16_CONST(-0.10412163387205513), FX16_CONST(0.9945645707342554), + FX16_CONST(-0.10259586902243668), FX16_CONST(0.9947231211043257), + FX16_CONST(-0.10106986275482806), FX16_CONST(0.9948793307948056), + FX16_CONST(-0.0995436186600694), FX16_CONST(0.9950331994381186), + FX16_CONST(-0.0980171403295605), FX16_CONST(0.9951847266721969), + FX16_CONST(-0.09649043135525323), FX16_CONST(0.9953339121404822), + FX16_CONST(-0.09496349532963948), FX16_CONST(0.9954807554919269), + FX16_CONST(-0.09343633584574809), FX16_CONST(0.9956252563809943), + FX16_CONST(-0.09190895649713288), FX16_CONST(0.9957674144676598), + FX16_CONST(-0.09038136087786497), FX16_CONST(0.9959072294174117), + FX16_CONST(-0.08885355258252442), FX16_CONST(0.996044700901252), + FX16_CONST(-0.08732553520619263), FX16_CONST(0.9961798285956969), + FX16_CONST(-0.08579731234444028), FX16_CONST(0.996312612182778), + FX16_CONST(-0.08426888759332431), FX16_CONST(0.9964430513500426), + FX16_CONST(-0.08274026454937576), FX16_CONST(0.9965711457905548), + FX16_CONST(-0.08121144680959234), FX16_CONST(0.9966968952028961), + FX16_CONST(-0.07968243797143075), FX16_CONST(0.9968202992911657), + FX16_CONST(-0.07815324163279472), FX16_CONST(0.996941357764982), + FX16_CONST(-0.07662386139203181), FX16_CONST(0.997060070339483), + FX16_CONST(-0.07509430084792147), FX16_CONST(0.9971764367353261), + FX16_CONST(-0.07356456359966741), FX16_CONST(0.9972904566786902), + FX16_CONST(-0.07203465324688915), FX16_CONST(0.9974021299012753), + FX16_CONST(-0.07050457338961442), FX16_CONST(0.9975114561403035), + FX16_CONST(-0.06897432762826713), FX16_CONST(0.9976184351385196), + FX16_CONST(-0.06744391956366429), FX16_CONST(0.9977230666441916), + FX16_CONST(-0.06591335279700389), FX16_CONST(0.9978253504111116), + FX16_CONST(-0.06438263092985737), FX16_CONST(0.997925286198596), + FX16_CONST(-0.06285175756416206), FX16_CONST(0.9980228737714861), + FX16_CONST(-0.06132073630220906), FX16_CONST(0.9981181129001492), + FX16_CONST(-0.05978957074664019), FX16_CONST(0.9982110033604782), + FX16_CONST(-0.05825826450043591), FX16_CONST(0.9983015449338928), + FX16_CONST(-0.05672682116690774), FX16_CONST(0.9983897374073402), + FX16_CONST(-0.055195244349689775), FX16_CONST(0.9984755805732948), + FX16_CONST(-0.05366353765273108), FX16_CONST(0.9985590742297593), + FX16_CONST(-0.05213170468028372), FX16_CONST(0.9986402181802652), + FX16_CONST(-0.05059974903689952), FX16_CONST(0.9987190122338729), + FX16_CONST(-0.04906767432741809), FX16_CONST(0.9987954562051724), + FX16_CONST(-0.04753548415695922), FX16_CONST(0.9988695499142836), + FX16_CONST(-0.04600318213091527), FX16_CONST(0.9989412931868569), + FX16_CONST(-0.044470771854939146), FX16_CONST(0.9990106858540733), + FX16_CONST(-0.04293825693494114), FX16_CONST(0.9990777277526454), + FX16_CONST(-0.0414056409770769), FX16_CONST(0.9991424187248169), + FX16_CONST(-0.03987292758773981), FX16_CONST(0.9992047586183639), + FX16_CONST(-0.038340120373552534), FX16_CONST(0.9992647472865944), + FX16_CONST(-0.036807222941359394), FX16_CONST(0.9993223845883494), + FX16_CONST(-0.03527423889821435), FX16_CONST(0.9993776703880028), + FX16_CONST(-0.03374117185137782), FX16_CONST(0.9994306045554617), + FX16_CONST(-0.03220802540830466), FX16_CONST(0.999481186966167), + FX16_CONST(-0.030674803176636543), FX16_CONST(0.9995294175010931), + FX16_CONST(-0.029141508764194368), FX16_CONST(0.9995752960467492), + FX16_CONST(-0.027608145778966225), FX16_CONST(0.9996188224951786), + FX16_CONST(-0.02607471782910422), FX16_CONST(0.9996599967439592), + FX16_CONST(-0.024541228522912448), FX16_CONST(0.9996988186962042), + FX16_CONST(-0.023007681468839372), FX16_CONST(0.9997352882605617), + FX16_CONST(-0.021474080275469345), FX16_CONST(0.9997694053512153), + FX16_CONST(-0.019940428551515003), FX16_CONST(0.9998011698878843), + FX16_CONST(-0.018406729905805226), FX16_CONST(0.9998305817958234), + FX16_CONST(-0.016872987947281957), FX16_CONST(0.9998576410058239), + FX16_CONST(-0.015339206284988182), FX16_CONST(0.9998823474542126), + FX16_CONST(-0.01380538852806031), FX16_CONST(0.9999047010828529), + FX16_CONST(-0.012271538285720572), FX16_CONST(0.9999247018391445), + FX16_CONST(-0.010737659167264976), FX16_CONST(0.9999423496760239), + FX16_CONST(-0.009203754782060144), FX16_CONST(0.9999576445519639), + FX16_CONST(-0.007669828739531261), FX16_CONST(0.9999705864309741), + FX16_CONST(-0.006135884649154477), FX16_CONST(0.9999811752826011), + FX16_CONST(-0.004601926120448411), FX16_CONST(0.9999894110819284), + FX16_CONST(-0.003067956762966544), FX16_CONST(0.9999952938095762), + FX16_CONST(-0.0015339801862851719), FX16_CONST(0.9999988234517019) +}; diff --git a/arm9/lib/NitroSDK/src/FX_vec.c b/arm9/lib/NitroSDK/src/FX_vec.c new file mode 100644 index 00000000..005872ac --- /dev/null +++ b/arm9/lib/NitroSDK/src/FX_vec.c @@ -0,0 +1,109 @@ +#include "fx.h" + +#include "global.h" +#include "registers.h" + +ARM_FUNC void VEC_Add(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ + dst->x = a->x + b->x; + dst->y = a->y + b->y; + dst->z = a->z + b->z; +} + +ARM_FUNC void VEC_Subtract(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ + dst->x = a->x - b->x; + dst->y = a->y - b->y; + dst->z = a->z - b->z; +} + +ARM_FUNC void VEC_Fx16Add(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst){ + dst->x = (s16)(a->x + b->x); + dst->y = (s16)(a->y + b->y); + dst->z = (s16)(a->z + b->z); +} + +ARM_FUNC fx32 VEC_DotProduct(struct Vecx32 *a, struct Vecx32 *b){ + return (fx32)(((fx64)a->x * b->x + (fx64)a->y * b->y + (fx64)a->z * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); +} + +ARM_FUNC fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b){ + fx32 temp1, temp2; + temp1 = (a->x * b->x) + (a->y * b->y); + temp2 = (a->z * b->z) + (1 << (FX64_INT_SHIFT - 1)); + return (fx32)(((fx64)temp1 + temp2) >> FX64_INT_SHIFT); +} + +ARM_FUNC void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ + fx32 x, y, z; + x = (fx32)(((fx64)a->y * b->z - (fx64)a->z * b->y + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + y = (fx32)(((fx64)a->z * b->x - (fx64)a->x * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + z = (fx32)(((fx64)a->x * b->y - (fx64)a->y * b->x + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + dst->x = x; + dst->y = y; + dst->z = z; +} + +ARM_FUNC void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst){ + fx32 x, y, z; + x = ((a->y * b->z - a->z * b->y + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + y = ((a->z * b->x - a->x * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + z = ((a->x * b->y - a->y * b->x + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); + dst->x = (fx16)x; + dst->y = (fx16)y; + dst->z = (fx16)z; +} + +ARM_FUNC fx32 VEC_Mag(struct Vecx32 *a){ + fx64 l2 = (fx64)a->x * a->x; + l2 += (fx64)a->y * a->y; + l2 += (fx64)a->z * a->z; + reg_CP_SQRTCNT = 0x1; + reg_CP_SQRT_PARAM = (u64)(l2 * 4); + while (reg_CP_SQRTCNT & 0x8000) {} //wait for coprocessor to finish + return ((fx32)reg_CP_SQRT_RESULT + 1) >> 1; +} + +ARM_FUNC void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst){ + fx64 l2 = (fx64)a->x * a->x; + l2 += (fx64)a->y * a->y; + l2 += (fx64)a->z * a->z; + //1/sqrt(l) is computed by calculating sqrt(l)*(1/l) + reg_CP_DIVCNT = 0x2; + reg_CP_DIV_NUMER = 0x0100000000000000; + reg_CP_DIV_DENOM = (u64)l2; + reg_CP_SQRTCNT = 0x1; + reg_CP_SQRT_PARAM = (u64)(l2 * 4); + while (reg_CP_SQRTCNT & 0x8000) {} //wait for sqrt to finish + fx32 sqrtresult = (fx32)reg_CP_SQRT_RESULT; + while (reg_CP_DIVCNT & 0x8000) {} //wait for division to finish + l2 = (fx64)reg_CP_DIV_RESULT; + l2 = sqrtresult * l2; + dst->x = (fx32)((l2 * a->x + (1LL << (0x2D - 1))) >> 0x2D); + dst->y = (fx32)((l2 * a->y + (1LL << (0x2D - 1))) >> 0x2D); + dst->z = (fx32)((l2 * a->z + (1LL << (0x2D - 1))) >> 0x2D); +} + +ARM_FUNC void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst){ + fx64 l2 = a->x * a->x; + l2 += a->y * a->y; + l2 += a->z * a->z; + //1/sqrt(l) is computed by calculating sqrt(l)*(1/l) + reg_CP_DIVCNT = 0x2; + reg_CP_DIV_NUMER = 0x0100000000000000; + reg_CP_DIV_DENOM = (u64)l2; + reg_CP_SQRTCNT = 0x1; + reg_CP_SQRT_PARAM = (u64)(l2 * 4); + while (reg_CP_SQRTCNT & 0x8000) {} //wait for sqrt to finish + fx32 sqrtresult = (fx32)reg_CP_SQRT_RESULT; + while (reg_CP_DIVCNT & 0x8000) {} //wait for division to finish + l2 = (fx64)reg_CP_DIV_RESULT; + l2 = sqrtresult * l2; + dst->x = (fx16)((l2 * a->x + (1LL << (0x2D - 1))) >> 0x2D); + dst->y = (fx16)((l2 * a->y + (1LL << (0x2D - 1))) >> 0x2D); + dst->z = (fx16)((l2 * a->z + (1LL << (0x2D - 1))) >> 0x2D); +} + +ARM_FUNC void VEC_MultAdd(fx32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ + dst->x = (fx32)(((fx64)factor * a->x) >> FX32_INT_SHIFT) + b->x; + dst->y = (fx32)(((fx64)factor * a->y) >> FX32_INT_SHIFT) + b->y; + dst->z = (fx32)(((fx64)factor * a->z) >> FX32_INT_SHIFT) + b->z; +} diff --git a/arm9/lib/NitroSDK/src/GX.c b/arm9/lib/NitroSDK/src/GX.c new file mode 100644 index 00000000..f47c0131 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX.c @@ -0,0 +1,126 @@ +#include "gx.h" + +#include "global.h" +#include "OS_spinLock.h" +#include "OS_terminate_proc.h" + +u32 GXi_DmaId = 3; +vu16 GXi_VRamLockId = 0; + +static u16 sDispMode = 0; +static u16 sIsDispOn = TRUE; + +#define _powcnt_init_mask (REG_GX_POWCNT_E2DGB_MASK | REG_GX_POWCNT_E2DG_MASK | REG_GX_POWCNT_RE_MASK | REG_GX_POWCNT_GE_MASK) + +ARM_FUNC void GX_Init(){ + reg_GX_POWCNT |= REG_GX_POWCNT_DSEL_MASK; + reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~_powcnt_init_mask) | _powcnt_init_mask); + reg_GX_POWCNT = (u16)(reg_GX_POWCNT | REG_GX_POWCNT_LCD_MASK); + GX_InitGXState(); + s32 temp; + while (GXi_VRamLockId == 0) + { + temp = OS_GetLockID(); + if (temp == OS_LOCK_ID_ERROR) + { + OS_Terminate(); + } + GXi_VRamLockId = (vu16)temp; + } + reg_GX_DISPSTAT = 0x0; + reg_GX_DISPCNT = 0x0; + if (GXi_DmaId != -1) + { + MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MI_DmaFill32(GXi_DmaId, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); + } + else + { + MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); + } + reg_G2_BG2PA = 0x100; + reg_G2_BG2PD = 0x100; + reg_G2_BG3PA = 0x100; + reg_G2_BG3PD = 0x100; + reg_G2S_DB_BG2PA = 0x100; + reg_G2S_DB_BG2PD = 0x100; + reg_G2S_DB_BG3PA = 0x100; + reg_G2S_DB_BG3PD = 0x100; +} + +ARM_FUNC u32 GX_HBlankIntr(u32 enable){ + u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_HBI_MASK); + if (enable) + { + reg_GX_DISPSTAT |= REG_GX_DISPSTAT_HBI_MASK; + } + else + { + reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_HBI_MASK; + } + return temp; +} + +ARM_FUNC u32 GX_VBlankIntr(u32 enable){ + u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_VBI_MASK); + if (enable) + { + reg_GX_DISPSTAT |= REG_GX_DISPSTAT_VBI_MASK; + } + else + { + reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_VBI_MASK; + } + return temp; +} + +ARM_FUNC void GX_DispOff(){ + u32 temp = reg_GX_DISPCNT; + sIsDispOn = FALSE; + sDispMode = (u16)((temp & REG_GX_DISPCNT_MODE_MASK) >> REG_GX_DISPCNT_MODE_SHIFT); + reg_GX_DISPCNT = temp & ~REG_GX_DISPCNT_MODE_MASK; +} + +ARM_FUNC void GX_DispOn(){ + sIsDispOn = TRUE; + if (sDispMode) + { + reg_GX_DISPCNT = (reg_GX_DISPCNT & ~REG_GX_DISPCNT_MODE_MASK) | (sDispMode << REG_GX_DISPCNT_MODE_SHIFT); + } + else + { + reg_GX_DISPCNT = reg_GX_DISPCNT | (GX_DISPMODE_GRAPHICS << REG_GX_DISPCNT_MODE_SHIFT); + } +} + +ARM_FUNC void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d){ + u32 temp2 = reg_GX_DISPCNT; + sDispMode = (u16)dispMode; + if (!sIsDispOn) + dispMode = 0; + reg_GX_DISPCNT = ((bgMode << REG_GX_DISPCNT_BGMODE_SHIFT) | ((temp2 & ~(REG_GX_DISPCNT_BGMODE_MASK | REG_GX_DISPCNT_MODE_MASK | REG_GX_DISPCNT_BG02D3D_MASK | REG_GX_DISPCNT_VRAM_MASK)) | (dispMode << REG_GX_DISPCNT_MODE_SHIFT))) | (bg0_2d3d << REG_GX_DISPCNT_BG02D3D_SHIFT); + if (!sDispMode) + sIsDispOn = FALSE; +} + +ARM_FUNC void GXS_SetGraphicsMode(GXBGMode mode){ + reg_GXS_DB_DISPCNT = (reg_GXS_DB_DISPCNT & ~REG_GXS_DB_DISPCNT_BGMODE_MASK) | mode; +} + +ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ + if (!brightness) + { + *dst = 0x0; + } + else if (brightness > 0) + { + *dst = (u16)((1 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | brightness); + } + else + { + *dst = (u16)((2 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | -brightness); + } +} diff --git a/arm9/lib/NitroSDK/src/GX_asm.c b/arm9/lib/NitroSDK/src/GX_asm.c new file mode 100644 index 00000000..1eb0a011 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_asm.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +//looks like asm and says asm on the tin... +ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){ + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + bx lr +} diff --git a/arm9/lib/NitroSDK/src/GX_bgcnt.c b/arm9/lib/NitroSDK/src/GX_bgcnt.c new file mode 100644 index 00000000..91a67655 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_bgcnt.c @@ -0,0 +1,194 @@ +#include "global.h" +#include "gx.h" + +ARM_FUNC void *G2_GetBG0ScrPtr(){ + u32 temp = (u32)(((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +ARM_FUNC void *G2S_GetBG0ScrPtr(){ + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x1F00) >> 0x8) << 0xB)); +} + +ARM_FUNC void *G2_GetBG1ScrPtr(){ + u32 temp = (u32)(((reg_G2_BG1CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +ARM_FUNC void *G2S_GetBG1ScrPtr(){ + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x1F00) >> 0x8) << 0xB)); +} + +ARM_FUNC void *G2_GetBG2ScrPtr(){ + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG2CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return (void *)0x6000000; + default: + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG2ScrPtr(){ + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG2CNT; + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +ARM_FUNC void *G2_GetBG3ScrPtr(){ + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG3CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG3ScrPtr(){ + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG3CNT; + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +ARM_FUNC void *G2_GetBG0CharPtr(){ + u32 temp = (u32)(((reg_G2_BG0CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); +} + +ARM_FUNC void *G2S_GetBG0CharPtr(){ + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x3C) >> 0x2) << 0xE)); +} + +ARM_FUNC void *G2_GetBG1CharPtr(){ + u32 temp = (u32)(((reg_G2_BG1CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); +} + +ARM_FUNC void *G2S_GetBG1CharPtr(){ + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x3C) >> 0x2) << 0xE)); +} + +ARM_FUNC void *G2_GetBG2CharPtr(){ + s32 temp1 = (s32)(reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG2CNT; + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG2CharPtr(){ + s32 temp1 = (s32)(reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG2CNT; + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2_GetBG3CharPtr(){ + s32 temp1 = (s32)(reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG3CNT; + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG3CharPtr(){ + s32 temp1 = (s32)(reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG3CNT; + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} diff --git a/arm9/lib/NitroSDK/src/GX_g2.c b/arm9/lib/NitroSDK/src/GX_g2.c new file mode 100644 index 00000000..39b8bff4 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g2.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "gx.h" + +ARM_FUNC void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ + fx32 temp0, temp1, temp2, temp3; + *((vu32 *)ptr + 0) = (u32)((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); + *((vu32 *)ptr + 1) = (u32)((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); + temp0 = c - a; + temp1 = d - b; + temp2 = mtx->_[0] * temp0 + mtx->_[1] * temp1 + (a << 0xC); + temp3 = mtx->_[2] * temp0 + mtx->_[3] * temp1 + (b << 0xC); + *((vu32 *)ptr + 2) = (u32)(temp2 >> 4); + *((vu32 *)ptr + 3) = (u32)(temp3 >> 4); +} + +ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ + *ptr = (u32)(((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10)); +} + +ARM_FUNC void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ + if (brightness < 0) + { + ptr[0] = (u16)(a | 0xC0); + ptr[2] = (u16)(-brightness); + } + else + { + ptr[0] = (u16)(a | 0x80); + ptr[2] = (u16)brightness; + } +} + +ARM_FUNC void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ + ptr[1] = (u16)(c | (d << 0x8)); + if (brightness < 0) + { + ptr[0] = (u16)(0xC0 | a | (b << 0x8)); + ptr[2] = (u16)(-brightness); + } + else + { + ptr[0] = (u16)(0x80 | a | (b << 0x8)); + ptr[2] = (u16)brightness; + } +} + +ARM_FUNC void G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ + u32 temp = *ptr; + if (brightness < 0) + { + if ((temp & 0xC0) == 0x80) + { + ptr[0] = (u16)((temp & ~0xC0) | 0xC0); + } + ptr[2] = (u16)(-brightness); + } + else + { + if ((temp & 0xC0) == 0xC0) + { + ptr[0] = (u16)((temp & ~0xC0) | 0x80); + } + ptr[2] = (u16)brightness; + } +} diff --git a/arm9/lib/NitroSDK/src/GX_g3.c b/arm9/lib/NitroSDK/src/GX_g3.c new file mode 100644 index 00000000..45b6b11b --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g3.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "gx.h" + + +ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){ + displaylist->length = r2; + displaylist->bottom = r1; + displaylist->curr_cmd = r1; + displaylist->curr_param = (u32 *)r1 + 1; + displaylist->param0_cmd_flg = 0x0; +} + +ARM_FUNC s32 G3_EndMakeDL(struct GXDLInfo *displaylist){ + if (displaylist->bottom == (u32 *)displaylist->curr_cmd) + return 0; + //pads the buffer with 0 to 4byte alignment if needed + switch((u32)displaylist->curr_cmd & 0x3) + { + case 0: + return displaylist->curr_cmd - (u8 *)displaylist->bottom; + case 1: + *displaylist->curr_cmd++ = 0x0; + case 2: + *displaylist->curr_cmd++ = 0x0; + case 3: + *displaylist->curr_cmd++ = 0x0; + } + if (displaylist->param0_cmd_flg) + { + *displaylist->curr_param++ = 0x0; + displaylist->param0_cmd_flg = 0x0; + } + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + return displaylist->curr_cmd - (u8 *)displaylist->bottom; +} diff --git a/arm9/lib/NitroSDK/src/GX_g3_util.c b/arm9/lib/NitroSDK/src/GX_g3_util.c new file mode 100644 index 00000000..e647f1c7 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g3_util.c @@ -0,0 +1,259 @@ +#include "global.h" +#include "gx.h" + + +ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx32 fovcot, temp1, temp2; + fx64c temp0; + vu32 *reg_ptr; + + fovcot = FX_Div(fovcos, fovsin); + if (scale != 0x1000) //!= 1.0 + fovcot = (fovcot * scale) / 0x1000; + reg_CP_DIV_NUMER = (u64)((s64)fovcot << 0x20); + reg_CP_DIV_DENOM = (u32)ratio; + if (load) + { + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = -scale; + mtx->_[12] = 0x0; + mtx->_[13] = 0x0; + mtx->_[15] = 0x0; + } + temp1 = FX_GetDivResult(); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); + if (load) + { + *reg_ptr = (vu32)temp1; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = (vu32)fovcot; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp1; + mtx->_[5] = fovcot; + } + temp0 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp0 = (temp0 * scale) / 0x1000; + temp1 = (fx32)(((far + near) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + temp2 = (fx32)((((fx32)(((fx64)(near << 1) * far + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + if (load) + { + *reg_ptr = (vu32)temp1; + *reg_ptr = (vu32)(-scale); + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = (vu32)temp2; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp1; + mtx->_[14] = temp2; + } +} + +ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx64c temp1, temp2, temp3; + fx32 temp0, temp4, temp5; + vu32 *reg_ptr; + + FX_InvAsync(right - left); + if (load) + { + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = 0x0; + mtx->_[15] = scale; + } + temp1 = FX_GetDivResultFx64c(); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(top - bottom); + if (scale != 0x1000) + temp1 = (temp1 * scale) / 0x1000; + temp0 = (fx32)((0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + if (load) + { + *reg_ptr = (vu32)temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp0; + } + temp2 = FX_GetDivResultFx64c(); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); + if (scale != 0x1000) + temp2 = (temp2 * scale) / 0x1000; + temp0 = (fx32)((0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + if (load) + { + *reg_ptr = (vu32)temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[5] = temp0; + } + temp3 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp3 = (temp3 * scale) / 0x1000; + temp0 = (fx32)((0x2000 * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + if (load) + { + *reg_ptr = (vu32)temp0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp0; + } + temp0 = (fx32)(((-(right + left)) * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + temp4 = (fx32)(((-(top + bottom)) * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + temp5 = (fx32)(((far + near) * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); + if (load) + { + *reg_ptr = (vu32)temp0; + *reg_ptr = (vu32)temp4; + *reg_ptr = (vu32)temp5; + *reg_ptr = (vu32)scale; + } + if (mtx) + { + mtx->_[12] = temp0; + mtx->_[13] = temp4; + mtx->_[14] = temp5; + } +} + +ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ + struct Vecx32 temp, temp1, temp2; + fx32 c1, c2, c3; + vu32 *reg_ptr; + temp.x = a->x - c->x; + temp.y = a->y - c->y; + temp.z = a->z - c->z; + VEC_Normalize(&temp, &temp); + VEC_CrossProduct(b, &temp, &temp1); + VEC_Normalize(&temp1, &temp1); + VEC_CrossProduct(&temp, &temp1, &temp2); + if (load) + { + reg_G3_MTX_MODE = 0x2; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x3; + *reg_ptr = (vu32)temp1.x; + *reg_ptr = (vu32)temp2.x; + *reg_ptr = (vu32)temp.x; + *reg_ptr = (vu32)temp1.y; + *reg_ptr = (vu32)temp2.y; + *reg_ptr = (vu32)temp.y; + *reg_ptr = (vu32)temp1.z; + *reg_ptr = (vu32)temp2.z; + *reg_ptr = (vu32)temp.z; + } + c1 = -VEC_DotProduct(a, &temp1); + c2 = -VEC_DotProduct(a, &temp2); + c3 = -VEC_DotProduct(a, &temp); + if (load) + { + *reg_ptr = (vu32)c1; + *reg_ptr = (vu32)c2; + *reg_ptr = (vu32)c3; + } + if (mtx) + { + mtx->_[0] = temp1.x; + mtx->_[1] = temp2.x; + mtx->_[2] = temp.x; + mtx->_[3] = temp1.y; + mtx->_[4] = temp2.y; + mtx->_[5] = temp.y; + mtx->_[6] = temp1.z; + mtx->_[7] = temp2.z; + mtx->_[8] = temp.z; + mtx->_[9] = c1; + mtx->_[10] = c2; + mtx->_[11] = c3; + } +} + +ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = (vu32)cosphi; + *reg_ptr = (vu32)sinphi; + *reg_ptr = 0x0; + *reg_ptr = (vu32)(-sinphi); + *reg_ptr = (vu32)cosphi; +} + +ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; + *reg_ptr = (vu32)cosphi; + *reg_ptr = 0x0; + *reg_ptr = (vu32)(-sinphi); + *reg_ptr = 0x0; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = (vu32)sinphi; + *reg_ptr = 0x0; + *reg_ptr = (vu32)cosphi; +} + +ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; + *reg_ptr = (vu32)cosphi; + *reg_ptr = (vu32)sinphi; + *reg_ptr = 0x0; + *reg_ptr = (vu32)(-sinphi); + *reg_ptr = (vu32)cosphi; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x1000; +} diff --git a/arm9/lib/NitroSDK/src/GX_g3b.c b/arm9/lib/NitroSDK/src/GX_g3b.c new file mode 100644 index 00000000..a3b96a0b --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g3b.c @@ -0,0 +1,119 @@ +#include "global.h" +#include "gx.h" + + +ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ + *(u32 *)displaylist->curr_cmd = 0x16; + MI_Copy64B(mtx, displaylist->curr_param); +} + +ARM_FUNC void G3B_PushMtx(struct GXDLInfo *displaylist){ + *(u32 *)displaylist->curr_cmd = 0x11; + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx){ + *(u32 *)displaylist->curr_cmd = 0x12; + *displaylist->curr_param = (u32)mtx; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ + G3BS_LoadMtx44(displaylist, mtx); + displaylist->curr_cmd = (u8 *)displaylist->curr_param + sizeof(struct Mtx44); + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +//color format is RGB555, stored in the lower bits +ARM_FUNC void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col){ + *(u32 *)displaylist->curr_cmd = 0x20; + *displaylist->curr_param = vtx_col; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +/* +Only feed normalized Vectors +only the fractional part and the sign, which is in the first nonfraction bit +since the vector is assumed to be normalized, are used +*/ +ARM_FUNC void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->curr_cmd = 0x21; + *displaylist->curr_param = (u32)(((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14)); + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z){ + *(u32 *)displaylist->curr_cmd = 0x23; + displaylist->curr_param[0] = (u32)(u16)x | (u32)(u16)y << 0x10; + displaylist->curr_param[1] = (u32)(u16)z; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x8; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +//TODO: name arguments +ARM_FUNC void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ + *(u32 *)displaylist->curr_cmd = 0x29; + *displaylist->curr_param = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ + *(u32 *)displaylist->curr_cmd = 0x30; + u32 replace_vtx_color_with_diffuse; + if (replace) + replace_vtx_color_with_diffuse = TRUE; + else + replace_vtx_color_with_diffuse = FALSE; + *displaylist->curr_param = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ + *(u32 *)displaylist->curr_cmd = 0x31; + u32 enable_shininess_table; + if (shiny_table) + enable_shininess_table = TRUE; + else + enable_shininess_table = FALSE; + *displaylist->curr_param = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +/* +Only feed normalized Vectors +only the fractional part and the sign, which is in the first nonfraction bit +since the vector is assumed to be normalized, are used +*/ +ARM_FUNC void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->curr_cmd = 0x32; + *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col){ + *(u32 *)displaylist->curr_cmd = 0x33; + *displaylist->curr_param = col | light_num << 0x1E; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_Begin(struct GXDLInfo * displaylist, u32 type){ + *(u32 *)displaylist->curr_cmd = 0x40; + *displaylist->curr_param = type; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} + +ARM_FUNC void G3B_End(struct GXDLInfo * displaylist){ + *(u32 *)displaylist->curr_cmd = 0x41; + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; +} diff --git a/arm9/lib/NitroSDK/src/GX_g3imm.c b/arm9/lib/NitroSDK/src/GX_g3imm.c new file mode 100644 index 00000000..1798338e --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g3imm.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "gx.h" + +ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ + reg_G3X_GXFIFO = 0x17; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); +} + +ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ + reg_G3X_GXFIFO = 0x19; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); +} + +ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ + reg_G3X_GXFIFO = 0x1A; + MI_Copy36B(mtx, (void *)®_G3X_GXFIFO); +} diff --git a/arm9/lib/NitroSDK/src/GX_g3x.c b/arm9/lib/NitroSDK/src/GX_g3x.c new file mode 100644 index 00000000..9954c4cb --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_g3x.c @@ -0,0 +1,235 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 GXi_DmaId; + +ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + mov r12, #0x0 + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + bx lr +} + +ARM_FUNC void G3X_Init(){ + G3X_ClearFifo(); + reg_G3_END_VTXS = 0x0; + while (reg_G3X_GXSTAT & 0x8000000) {} //wait for geometry engine to not be busy + reg_G3X_DISP3DCNT = 0x0; + reg_G3X_GXSTAT = 0x0; + reg_G2_BG0OFS = 0x0; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; + reg_G3X_DISP3DCNT &= ~0x3002; + reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT & ~0x3000) | 0x10); + reg_G3X_DISP3DCNT = (u16)(reg_G3X_DISP3DCNT & (u16)~0x3004); + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_GXSTAT = (reg_G3X_GXSTAT & ~0xC0000000) | 0x80000000; + G3X_InitMtxStack(); + reg_G3X_CLEAR_COLOR = 0x0; + reg_G3X_CLEAR_DEPTH = 0x7FFF; + reg_G3X_CLRIMAGE_OFFSET = 0x0; + reg_G3X_FOG_COLOR = 0x0; + reg_G3X_FOG_OFFSET = 0x0; + reg_G2_BG0CNT &= ~0x3; + G3X_InitTable(); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; +} + +ARM_FUNC void G3X_ResetMtxStack(){ + while (reg_G3X_GXSTAT & 0x8000000) {} + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; + G3X_ResetMtxStack_2(); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; +} + +ARM_FUNC void G3X_ClearFifo(){ + GXi_NopClearFifo128_((void *)®_G3X_GXFIFO); + while (reg_G3X_GXSTAT & 0x8000000) {} +} + +ARM_FUNC void G3X_InitMtxStack(){ + u32 PV_level, PJ_level; + reg_G3X_GXSTAT |= 0x8000; + while (G3X_GetMtxStackLevelPV(&PV_level)) {} + while (G3X_GetMtxStackLevelPJ(&PJ_level)) {} + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; + if (PJ_level) + { + reg_G3_MTX_POP = PJ_level; + } + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; +} + +ARM_FUNC void G3X_ResetMtxStack_2(){ + u32 PV_level, PJ_level; + reg_G3X_GXSTAT |= 0x8000; + while (G3X_GetMtxStackLevelPV(&PV_level)) {} + while (G3X_GetMtxStackLevelPJ(&PJ_level)) {} + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; + if (PJ_level) + { + reg_G3_MTX_POP = PJ_level; + } + + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; + +} + +ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ + if (enable) + { + reg_G3X_FOG_OFFSET = (u16)offset; + reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); + + } + else + { + reg_G3X_DISP3DCNT = (u16)(reg_G3X_DISP3DCNT & (u16)~0x3080); + } +} + +ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ + if (reg_G3X_GXSTAT & 0x8000000) + { + return (u32)-1; + } + else + { + MI_Copy64B((void *)®_G3X_CLIPMTX_RESULT_0, dst); + return 0; + } +} + +ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ + if (reg_G3X_GXSTAT & 0x8000000) + { + return (u32)-1; + } + else + { + MI_Copy36B((void *)®_G3X_VECMTX_RESULT_0, dst); + return 0; + } +} + +ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ + MIi_CpuCopy16(tbl_ptr, (void *)®_G3X_EDGE_COLOR_0, 0x10); +} + +ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ + MI_Copy32B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); +} + +ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ + u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); + if (enable_fog) + temp |= 0x8000; + reg_G3X_CLEAR_COLOR = temp; + reg_G3X_CLEAR_DEPTH = (u16)depth; +} + +ARM_FUNC void G3X_InitTable(){ + if (GXi_DmaId != -1) + { + MI_DmaFill32Async(GXi_DmaId, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(GXi_DmaId, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); + } + else + { + MIi_CpuClear32(0x0, (void *)®_G3X_EDGE_COLOR_0, 0x10); + MIi_CpuClear32(0x0, (void *)®_G3X_FOG_TABLE_0, 0x60); + } + for (int i = 0; i < 0x20; i++) + { + reg_G3_SHININESS = 0x0; + } +} + +ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ + if (reg_G3X_GXSTAT & 0x4000) + { + return (u32)-1; + } + else + { + *level = (reg_G3X_GXSTAT & 0x1F00) >> 0x8; + return 0; + } +} + +ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ + if (reg_G3X_GXSTAT & 0x4000) + { + return (u32)-1; + } + else + { + *level = (reg_G3X_GXSTAT & 0x2000) >> 0xD; + return 0; + } +} + +ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ + if (reg_G3X_GXSTAT & 0x1) + { + return (u32)-1; + } + else + { + *result = (reg_G3X_GXSTAT & 0x2); + return 0; + } +} + +ARM_FUNC void G3X_SetHOffset(u32 offset){ + reg_G2_BG0OFS = offset; +} diff --git a/arm9/lib/NitroSDK/src/GX_load2d.c b/arm9/lib/NitroSDK/src/GX_load2d.c new file mode 100644 index 00000000..6bff54be --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_load2d.c @@ -0,0 +1,223 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 GXi_DmaId; + +static s32 sBGExtPltt = 0; +static u32 sBGExtPlttLCDCBlk = 0; +static u32 sBGExtPlttLCDCOffset = 0; +static s32 sOBJExtPltt = 0; +static u32 sOBJExtPlttLCDCBlk = 0; +static s32 sSubBGExtPltt = 0; +static s32 sSubOBJExtPltt = 0; + + +static inline void *_GX_OBJ_PTR(){ + return (void *)0x6400000; +} +static inline void *_GXS_OBJ_PTR(){ + return (void *)0x6600000; +} + +ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size); +} + +ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size); +} + +ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size); +} + +ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size); +} + +ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size); +} + +ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000400 + offset), size); +} + +ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GX_OBJ_PTR(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GXS_OBJ_PTR(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_BeginLoadBGExtPltt(){ + sBGExtPltt = (s32)GX_ResetBankForBGExtPltt(); + switch (sBGExtPltt) + { + case 0: //needed to match + break; + case 0x10: + sBGExtPlttLCDCBlk = 0x06880000; + sBGExtPlttLCDCOffset = 0x0; + break; + case 0x40: + sBGExtPlttLCDCBlk = 0x06894000; + sBGExtPlttLCDCOffset = 0x4000; + break; + case 0x20: + case 0x60: + sBGExtPlttLCDCBlk = 0x06890000; + sBGExtPlttLCDCOffset = 0x0; + break; + } +} + +ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForBGExtPltt(sBGExtPltt); + sBGExtPltt = 0x0; + sBGExtPlttLCDCBlk = 0x0; + sBGExtPlttLCDCOffset = 0x0; +} + +ARM_FUNC void GX_BeginLoadOBJExtPltt(){ + sOBJExtPltt = (s32)GX_ResetBankForOBJExtPltt(); + switch (sOBJExtPltt) + { + case 0: //needed to match + break; + case 0x40: + sOBJExtPlttLCDCBlk = 0x06894000; + break; + case 0x20: + sOBJExtPlttLCDCBlk = 0x06890000; + break; + } +} + +ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadOBJExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForOBJExtPltt(sOBJExtPltt); + sOBJExtPltt = 0x0; + sOBJExtPlttLCDCBlk = 0x0; +} + +ARM_FUNC void GXS_BeginLoadBGExtPltt(){ + sSubBGExtPltt = (s32)GX_ResetBankForSubBGExtPltt(); +} + +ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubBGExtPltt(sSubBGExtPltt); + sSubBGExtPltt = 0x0; +} + +ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ + sSubOBJExtPltt = (s32)GX_ResetBankForSubOBJExtPltt(); +} + +ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadOBJExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubOBJExtPltt(sSubOBJExtPltt); + sSubOBJExtPltt = 0x0; +} diff --git a/arm9/lib/NitroSDK/src/GX_load3d.c b/arm9/lib/NitroSDK/src/GX_load3d.c new file mode 100644 index 00000000..ae15f32e --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_load3d.c @@ -0,0 +1,150 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 GXi_DmaId; + +static u32 sTexLCDCBlk1 = 0; +static u32 sSzTexBlk1 = 0; +static u32 sTexLCDCBlk2 = 0; +static s32 sTex = 0; + +static const struct +{ + u16 blk1; // 12 bit shift + u16 blk2; // 12 bit shift + u16 szBlk1; // 12 bit shift +} sTexStartAddrTable[16] = { + {0, 0, 0}, + {0x06800000 >> 12, 0, 0}, + {0x06820000 >> 12, 0, 0}, + {0x06800000 >> 12, 0, 0}, + {0x06840000 >> 12, 0, 0}, + {0x06800000 >> 12, 0x06840000 >> 12, 0x00020000 >> 12}, + {0x06820000 >> 12, 0, 0}, + {0x06800000 >> 12, 0, 0}, + {0x06860000 >> 12, 0, 0}, + {0x06800000 >> 12, 0x06860000 >> 12, 0x00020000 >> 12}, + {0x06820000 >> 12, 0x06860000 >> 12, 0x00020000 >> 12}, + {0x06800000 >> 12, 0x06860000 >> 12, 0x00040000 >> 12}, + {0x06840000 >> 12, 0, 0}, + {0x06800000 >> 12, 0x06840000 >> 12, 0x00020000 >> 12}, + {0x06820000 >> 12, 0, 0}, + {0x06800000 >> 12, 0, 0}, +}; + +static s32 sTexPltt = 0; +static u32 sTexPlttLCDCBlk = 0; + +static const u16 sTexPlttStartAddrTable[8] = { + 0, + 0x06880000 >> 12, + 0x06890000 >> 12, + 0x06880000 >> 12, + 0x06894000 >> 12, + 0, + 0x06890000 >> 12, + 0x06880000 >> 12 +}; + +static s32 sClrImg = 0; +static u32 sClrImgLCDCBlk = 0; + +ARM_FUNC void GX_BeginLoadTex(){ + u32 temp = GX_ResetBankForTex(); + sTex = (s32)temp; + sTexLCDCBlk1 = (u32)(sTexStartAddrTable[temp].blk1 << 0xC); + sTexLCDCBlk2 = (u32)(sTexStartAddrTable[temp].blk2 << 0xC); + sSzTexBlk1 = (u32)(sTexStartAddrTable[temp].szBlk1 << 0xC); +} + +ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ + void *temp; + if (!sTexLCDCBlk2) + { + temp = (void *)(sTexLCDCBlk1 + offset); + } + else + { + if ((offset + size) < sSzTexBlk1) + { + temp = (void *)(sTexLCDCBlk1 + offset); + } + else if (offset >= sSzTexBlk1) + { + temp = (void *)(sTexLCDCBlk2 + offset - sSzTexBlk1); + } + else + { + void *temp2 = (void *)sTexLCDCBlk2; + u32 temp1 = sSzTexBlk1 - offset; + temp = (void *)(sTexLCDCBlk1 + offset); + GXi_DmaCopy32(GXi_DmaId, src, temp, temp1); + GXi_DmaCopy32Async(GXi_DmaId, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + return; + } + } + GXi_DmaCopy32Async(GXi_DmaId, src, temp, size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadTex(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTex(sTex); + sSzTexBlk1 = 0x0; + sTexLCDCBlk2 = 0x0; + sTexLCDCBlk1 = 0x0; + sTex = 0x0; +} + +ARM_FUNC void GX_BeginLoadTexPltt(){ + s32 temp = (s32)GX_ResetBankForTexPltt(); + sTexPltt = temp; + sTexPlttLCDCBlk = (u32)(sTexPlttStartAddrTable[temp >> 4] << 0xC); +} + +ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sTexPlttLCDCBlk + offset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadTexPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTexPltt(sTexPltt); + sTexPltt = 0x0; + sTexPlttLCDCBlk = 0x0; +} + +ARM_FUNC void GX_BeginLoadClearImage(){ + u32 temp = GX_ResetBankForClearImage(); + sClrImg = (s32)temp; + switch (temp) + { + case 2: + case 3: + sClrImgLCDCBlk = 0x6800000; + return; + case 8: + case 12: + sClrImgLCDCBlk = 0x6840000; + return; + case 1: + sClrImgLCDCBlk = 0x67E0000; + return; + case 4: + sClrImgLCDCBlk = 0x6820000; + } +} + +ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk), size, NULL, NULL); +} + +ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk + 0x20000), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadClearImage(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForClearImage(sClrImg); + sClrImg = 0x0; + sClrImgLCDCBlk = 0x0; +} diff --git a/arm9/lib/NitroSDK/src/GX_state.c b/arm9/lib/NitroSDK/src/GX_state.c new file mode 100644 index 00000000..003e42b5 --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_state.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "gx.h" + +struct GX_State gGXState; + +ARM_FUNC void GX_InitGXState(){ + gGXState.lcdc = 0x0; + gGXState.bg = 0x0; + gGXState.obj = 0x0; + gGXState.arm7 = 0x0; + gGXState.tex = 0x0; + gGXState.texPltt = 0x0; + gGXState.clrImg = 0x0; + gGXState.bgExtPltt = 0x0; + gGXState.objExtPltt = 0x0; + gGXState.sub_bg = 0x0; + gGXState.sub_obj = 0x0; + gGXState.sub_bgExtPltt = 0x0; + gGXState.sub_objExtPltt = 0x0; + reg_GX_VRAMCNT = 0x0; + reg_GX_VRAMCNT_E = 0x0; + reg_GX_VRAMCNT_F = 0x0; + reg_GX_VRAMCNT_G = 0x0; + reg_GX_VRAM_HI_CNT = 0x0; +} diff --git a/arm9/lib/NitroSDK/src/GX_vramcnt.c b/arm9/lib/NitroSDK/src/GX_vramcnt.c new file mode 100644 index 00000000..abfcd77e --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_vramcnt.c @@ -0,0 +1,578 @@ +#include "global.h" +#include "gx.h" + +extern u16 GXi_VRamLockId; +extern struct GX_State gGXState; + +ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ + if (mask & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x80; + if (mask & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x80; + if (mask & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x80; + if (mask & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x80; + if (mask & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x80; + if (mask & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x80; + if (mask & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x80; + if (mask & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x80; + if (mask & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x80; +} + +ARM_FUNC void GX_SetBankForBG(s32 bg){ + gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg)); + gGXState.bg = (u16)bg; + switch (bg) + { + case 8: + reg_GX_VRAMCNT_D = 0x81; + break; + case 12: + reg_GX_VRAMCNT_D = 0x89; + case 4: + reg_GX_VRAMCNT_C = 0x81; + break; + case 14: + reg_GX_VRAMCNT_D = 0x91; + case 6: + reg_GX_VRAMCNT_C = 0x89; + case 2: + reg_GX_VRAMCNT_B = 0x81; + break; + case 15: + reg_GX_VRAMCNT_D = 0x99; + case 7: + reg_GX_VRAMCNT_C = 0x91; + case 3: + reg_GX_VRAMCNT_B = 0x89; + case 1: + reg_GX_VRAMCNT_A = 0x81; + break; + case 11: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_B = 0x89; + reg_GX_VRAMCNT_D = 0x91; + break; + case 13: + reg_GX_VRAMCNT_D = 0x91; + case 5: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_C = 0x89; + break; + case 9: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 10: + reg_GX_VRAMCNT_B = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 112: + reg_GX_VRAMCNT_G = 0x99; + case 48: + reg_GX_VRAMCNT_F = 0x91; + case 16: + reg_GX_VRAMCNT_E = 0x81; + break; + case 80: + reg_GX_VRAMCNT_G = 0x91; + reg_GX_VRAMCNT_E = 0x81; + break; + case 96: + reg_GX_VRAMCNT_G = 0x89; + case 32: + reg_GX_VRAMCNT_F = 0x81; + break; + case 64: + reg_GX_VRAMCNT_G = 0x81; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJ(s32 obj){ + gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj)); + gGXState.obj = (u16)obj; + switch (obj) + { + case 3: + reg_GX_VRAMCNT_B = 0x8A; + case 1: + reg_GX_VRAMCNT_A = 0x82; + case 0: //needed to match + break; + case 2: + reg_GX_VRAMCNT_B = 0x82; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9A; + case 48: + reg_GX_VRAMCNT_F = 0x92; + case 16: + reg_GX_VRAMCNT_E = 0x82; + break; + case 80: + reg_GX_VRAMCNT_G = 0x92; + reg_GX_VRAMCNT_E = 0x82; + break; + case 96: + reg_GX_VRAMCNT_G = 0x8A; + case 32: + reg_GX_VRAMCNT_F = 0x82; + break; + case 64: + reg_GX_VRAMCNT_G = 0x82; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ + gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt)); + gGXState.bgExtPltt = (u16)bgextpltt; + switch (bgextpltt) + { + case 0x10: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_E = 0x84; + break; + case 0x40: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_G = 0x8C; + break; + case 0x60: + reg_GX_VRAMCNT_G = 0x8C; + case 0x20: + reg_GX_VRAMCNT_F = 0x84; + reg_GX_DISPCNT |= 0x40000000; + break; + case 0: + reg_GX_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ + gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt)); + gGXState.objExtPltt = (u16)objextpltt; + switch (objextpltt) + { + case 32: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_F = 0x85; + break; + case 64: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_G = 0x85; + break; + case 0: + reg_GX_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTex(s32 tex){ + gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex)); + gGXState.tex = (u16)tex; + if (tex == 0) + { + reg_G3X_DISP3DCNT &= 0x0000CFFE; + } + else + { + reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT & ~0x3000) | 0x1); + switch (tex) + { + case 5: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + break; + case 9: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 10: + reg_GX_VRAMCNT_B = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 11: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_B = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 13: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 8: + reg_GX_VRAMCNT_D = 0x83; + break; + case 12: + reg_GX_VRAMCNT_D = 0x8B; + case 4: + reg_GX_VRAMCNT_C = 0x83; + break; + case 14: + reg_GX_VRAMCNT_D = 0x93; + case 6: + reg_GX_VRAMCNT_C = 0x8B; + case 2: + reg_GX_VRAMCNT_B = 0x83; + break; + case 15: + reg_GX_VRAMCNT_D = 0x9B; + case 7: + reg_GX_VRAMCNT_C = 0x93; + case 3: + reg_GX_VRAMCNT_B = 0x8B; + case 1: + reg_GX_VRAMCNT_A = 0x83; + break; + } + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ + gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt)); + gGXState.texPltt = (u16)texpltt; + switch (texpltt) + { + case 0: //needed to match + break; + case 96: + reg_GX_VRAMCNT_G = 0x8B; + case 32: + reg_GX_VRAMCNT_F = 0x83; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9B; + case 48: + reg_GX_VRAMCNT_F = 0x93; + case 16: + reg_GX_VRAMCNT_E = 0x83; + break; + case 64: + reg_GX_VRAMCNT_G = 0x83; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ + gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg)); + gGXState.clrImg = (u16)clearimage; + switch (clearimage) + { + case 3: + reg_GX_VRAMCNT_A = 0x93; + case 2: + reg_GX_VRAMCNT_B = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 12: + reg_GX_VRAMCNT_C = 0x93; + case 8: + reg_GX_VRAMCNT_D = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 0: + reg_G3X_DISP3DCNT &= ~0x4000; + break; + case 1: + reg_GX_VRAMCNT_A = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 4: + reg_GX_VRAMCNT_C = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForARM7(s32 arm7){ + gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7)); + gGXState.arm7 = (u16)arm7; + switch (arm7) + { + case 0: //needed to match + break; + case 12: + reg_GX_VRAMCNT_D = 0x8A; + reg_GX_VRAMCNT_C = 0x82; + break; + case 4: + reg_GX_VRAMCNT_C = 0x82; + break; + case 8: + reg_GX_VRAMCNT_D = 0x82; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ + gGXState.lcdc |= lcdc; + GX_VRAMCNT_SetLCDC_((u32)lcdc); +} + +ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ + gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg)); + gGXState.sub_bg = (u16)subbg; + switch (subbg) + { + case 0: //needed to match + break; + case 4: + reg_GX_VRAMCNT_C = 0x84; + break; + case 384: + reg_GX_VRAMCNT_I = 0x81; + case 128: + reg_GX_VRAMCNT_H = 0x81; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + + +ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ + gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj)); + gGXState.sub_obj = (u16)subobj; + switch (subobj) + { + case 8: + reg_GX_VRAMCNT_D = 0x84; + break; + case 256: + reg_GX_VRAMCNT_I = 0x82; + break; + case 0: //needed to match + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ + gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt)); + gGXState.sub_bgExtPltt = (u16)subbgextpltt; + switch (subbgextpltt) + { + case 128: + reg_GXS_DB_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_H = 0x82; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ + gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt)); + gGXState.sub_objExtPltt = (u16)subobjextpltt; + switch (subobjextpltt) + { + case 256: + reg_GXS_DB_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_I = 0x83; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC u32 resetBankForX_(u16 *ptr){ + u16 temp = *ptr; + *ptr = 0; + gGXState.lcdc |= temp; + GX_VRAMCNT_SetLCDC_(temp); + return temp; +} + +ARM_FUNC u32 GX_ResetBankForBG(){ + return resetBankForX_(&gGXState.bg); +} + +ARM_FUNC u32 GX_ResetBankForOBJ(){ + return resetBankForX_(&gGXState.obj); +} + +ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~0x40000000; + return resetBankForX_(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~0x80000000; + return resetBankForX_(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForTex(){ + return resetBankForX_(&gGXState.tex); +} + +ARM_FUNC u32 GX_ResetBankForTexPltt(){ + return resetBankForX_(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_ResetBankForClearImage(){ + return resetBankForX_(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_ResetBankForSubBG(){ + return resetBankForX_(&gGXState.sub_bg); +} + +ARM_FUNC u32 GX_ResetBankForSubOBJ(){ + return resetBankForX_(&gGXState.sub_obj); +} + +ARM_FUNC u32 GX_ResetBankForSubBGExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_BG_MASK; + return resetBankForX_(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForSubOBJExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_O_MASK; + return resetBankForX_(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 disableBankForX_(u16 *ptr){ + u32 temp = *ptr; + *ptr = 0; + if (temp & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x0; + if (temp & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x0; + if (temp & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x0; + if (temp & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x0; + if (temp & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x0; + if (temp & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x0; + if (temp & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x0; + if (temp & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x0; + if (temp & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x0; + OSi_UnlockVram((u16)temp, GXi_VRamLockId); + return temp; +} + +ARM_FUNC u32 GX_DisableBankForBG(){ + return disableBankForX_(&gGXState.bg); +} + +ARM_FUNC u32 GX_DisableBankForOBJ(){ + return disableBankForX_(&gGXState.obj); +} + +ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; + return disableBankForX_(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; + return disableBankForX_(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForTex(){ + return disableBankForX_(&gGXState.tex); +} + +ARM_FUNC u32 GX_DisableBankForTexPltt(){ + return disableBankForX_(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_DisableBankForClearImage(){ + return disableBankForX_(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_DisableBankForARM7(){ + return disableBankForX_(&gGXState.arm7); +} + +ARM_FUNC u32 GX_DisableBankForLCDC(){ + return disableBankForX_(&gGXState.lcdc); +} + +ARM_FUNC u32 GX_DisableBankForSubBG(){ + return disableBankForX_(&gGXState.sub_bg); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJ(){ + return disableBankForX_(&gGXState.sub_obj); +} + +ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; + return disableBankForX_(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; + return disableBankForX_(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 GX_GetBankForBG(){ + return gGXState.bg; +} + +ARM_FUNC u32 GX_GetBankForOBJ(){ + return gGXState.obj; +} + +ARM_FUNC u32 GX_GetBankForBGExtPltt(){ + return gGXState.bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ + return gGXState.objExtPltt; +} + +ARM_FUNC u32 GX_GetBankForTex(){ + return gGXState.tex; +} + +ARM_FUNC u32 GX_GetBankForTexPltt(){ + return gGXState.texPltt; +} + +ARM_FUNC u32 GX_GetBankForLCDC(){ + return gGXState.lcdc; +} + +ARM_FUNC u32 GX_GetBankForSubBG(){ + return gGXState.sub_bg; +} + +ARM_FUNC u32 GX_GetBankForSubOBJ(){ + return gGXState.sub_obj; +} + +ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ + return gGXState.sub_bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ + return gGXState.sub_objExtPltt; +} diff --git a/arm9/lib/NitroSDK/src/MATH_crc.c b/arm9/lib/NitroSDK/src/MATH_crc.c new file mode 100644 index 00000000..cf8cc64c --- /dev/null +++ b/arm9/lib/NitroSDK/src/MATH_crc.c @@ -0,0 +1,150 @@ +#include "global.h" +#include "MATH_crc.h" + +ARM_FUNC void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly) { + u32 r, i, j; + u8 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 0x80) { + r = (r << 1) ^ poly; + } + else { + r <<= 1; + } + } + t[i] = (u8)r; + } +} + +ARM_FUNC void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length) { + u32 r, i; + const u8* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = t[(r ^ *data) & 0xff]; + data++; + } + *context = (MATHCRC8Context)r; +} + +ARM_FUNC void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly) { + u32 r, i, j; + u16 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i << 8; + for (j = 0; j < 8; j++) { + if (r & 0x8000) { + r = (r << 1) ^ poly; + } + else { + r <<= 1; + } + } + t[i] = (u16)r; + } +} + +ARM_FUNC void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly) { + u32 r, i, j; + u16 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 1) { + r = (r >> 1) ^ poly; + } + else { + r >>= 1; + } + } + t[i] = (u16)r; + } +} + +ARM_FUNC void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { + u32 r, i; + const u16* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r << 8) ^ t[((r >> 8) ^ *data) & 0xff]; + data++; + } + *context = (MATHCRC16Context)r; +} + +ARM_FUNC void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { + u32 r, i; + const u16* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r >> 8) ^ t[(r ^ *data) & 0xff]; + data++; + } + *context = (MATHCRC16Context)r; +} + +ARM_FUNC void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly) { + u32 r, i, j; + u32 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 1) { + r = (r >> 1) ^ poly; + } + else { + r >>= 1; + } + } + t[i] = r; + } +} + +ARM_FUNC void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length) { + u32 r, i; + const u32* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r >> 8) ^ t[(r ^ *data) & 0xff]; + data++; + } + *context = r; +} + +ARM_FUNC u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength) { + MATHCRC8Context ctx = 0; + MATHi_CRC8Update(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { + MATHCRC16Context ctx = 0; + MATHi_CRC16UpdateRev(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { + MATHCRC16Context ctx = 0xffff; + MATHi_CRC16Update(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength) { + MATHCRC32Context ctx = (MATHCRC32Context)(~0); + MATHi_CRC32UpdateRev(table, &ctx, data, dataLength); + return ~ctx; +} diff --git a/arm9/lib/NitroSDK/src/MATH_dgt.c b/arm9/lib/NitroSDK/src/MATH_dgt.c new file mode 100644 index 00000000..6bb90d99 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MATH_dgt.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "MATH_dgt.h" + +ARM_FUNC void MATH_CalcMD5(void *digest, const void *data, u32 dataLength) { + MATHMD5Context context; + MATH_MD5Init(&context); + MATH_MD5Update(&context, data, dataLength); + MATH_MD5GetHash(&context, digest); +} + +ARM_FUNC void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { + MATHSHA1Context context; + MATH_SHA1Init(&context); + MATH_SHA1Update(&context, data, dataLength); + MATH_SHA1GetHash(&context, digest); +} diff --git a/arm9/lib/NitroSDK/src/MATH_pop.c b/arm9/lib/NitroSDK/src/MATH_pop.c new file mode 100644 index 00000000..18582494 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MATH_pop.c @@ -0,0 +1,12 @@ +#include "global.h" +#include "MATH_pop.h" + +ARM_FUNC u8 MATH_CountPopulation(u32 x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x += x >> 4; + x &= 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return (u8)x; +} diff --git a/arm9/lib/NitroSDK/src/MI_dma.c b/arm9/lib/NitroSDK/src/MI_dma.c new file mode 100644 index 00000000..f322f87f --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_dma.c @@ -0,0 +1,307 @@ +#include "MI_dma.h" +#include "function_target.h" +#include "OS_interrupt.h" +#include "OS_terminate_proc.h" +#include "sections.h" + +#pragma section ITCM begin +ARM_FUNC void MIi_DmaSetParams(u32 dmaNo, u32 src, u32 dest, u32 ctrl) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)src; + *(p + 1) = (vu32)dest; + *(p + 2) = (vu32)ctrl; + (void)OS_RestoreInterrupts(lastIntrMode); +} + +ARM_FUNC void MIi_DmaSetParams_wait(u32 dmaNo, u32 src, u32 dest, u32 ctrl) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)src; + *(p + 1) = (vu32)dest; + *(p + 2) = (vu32)ctrl; + + //delay cycles + { + u32 delay = reg_MI_DMA0SAD; + } + { + u32 delay = reg_MI_DMA0SAD; + } + + if (!dmaNo) + { + *p = (vu32)0; + *(p + 1) = (vu32)0; + *(p + 2) = (vu32)0x81400001; + } + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void MIi_DmaSetParams_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl) +{ + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)src; + *(p + 1) = (vu32)dest; + *(p + 2) = (vu32)ctrl; +} + +ARM_FUNC void MIi_DmaSetParams_wait_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl) +{ + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)src; + *(p + 1) = (vu32)dest; + *(p + 2) = (vu32)ctrl; + + //delay cycles + { + u32 delay = reg_MI_DMA0SAD; + } + { + u32 delay = reg_MI_DMA0SAD; + } + + if (!dmaNo) + { + *p = (vu32)0; + *(p + 1) = (vu32)0; + *(p + 2) = (vu32)0x81400001; + } + + //delay cycles + { + u32 delay = reg_MI_DMA0SAD; + } + { + u32 delay = reg_MI_DMA0SAD; + } +} +#pragma section ITCM end + +ARM_FUNC void MI_DmaFill32(u32 dmaNo, void *dest, u32 data, u32 size) +{ + vu32 *dmaCntp; + if (!size) + { + return; + } + + do + { + dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + while (*dmaCntp & 0x80000000) {} + } while(0); + + MIi_DmaSetParams_wait_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32(size)); + + do + { + while (*dmaCntp & 0x80000000) {} + } while(0); +} + +ARM_FUNC void MI_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) +{ + vu32 *dmaCntp; + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); + + if (!size) + { + return; + } + + do + { + dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + while (*dmaCntp & 0x80000000) {} + } while(0); + + MIi_DmaSetParams_wait(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32(size)); + + do + { + while (*dmaCntp & 0x80000000) {} + } while(0); +} + +ARM_FUNC void MI_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) +{ + vu32 *dmaCntp; + + if (!size) + { + return; + } + + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); + + do + { + dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + while (*dmaCntp & 0x80000000) {} + } while(0); + + MIi_DmaSetParams_wait(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY16(size)); + + do + { + while (*dmaCntp & 0x80000000) {} + } while(0); +} + +ARM_FUNC void MI_DmaFill32Async(u32 dmaNo, void *dest, u32 data, u32 size, MIDmaCallback callback, void *arg) +{ + if (!size) + { + MIi_CallCallback(callback, arg); + } + else + { + MI_WaitDma(dmaNo); + + if (callback) + { + OSi_EnterDmaCallback(dmaNo, callback, arg); + MIi_DmaSetParams_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32_IF(size)); + } + else + { + MIi_DmaSetParams_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32(size)); + } + } +} + +ARM_FUNC void MI_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, MIDmaCallback callback, void *arg) +{ + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); + + if (!size) + { + MIi_CallCallback(callback, arg); + } + else + { + MI_WaitDma(dmaNo); + + if (callback) + { + OSi_EnterDmaCallback(dmaNo, callback, arg); + MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32_IF(size)); + } + else + { + MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32(size)); + } + } +} + +ARM_FUNC void MI_WaitDma(u32 dmaNo) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + vu32 *dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + + while (*dmaCntp & 0x80000000) {} + + if (!dmaNo) + { + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)0; + *(p + 1) = (vu32)0; + *(p + 2) = (vu32)0x81400001; + } + + (void)OS_RestoreInterrupts(lastIntrMode); +} + +ARM_FUNC void MI_StopDma(u32 dmaNo) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + vu16 *dmaCntp = &((vu16 *)REG_ADDR_DMA0SAD)[dmaNo * 6 + 5]; + + *dmaCntp &= ~0x3a00; + *dmaCntp &= ~0x8000; + + //delay cycles + { + s32 delay = dmaCntp[0]; + } + { + s32 delay = dmaCntp[0]; + } + + if (!dmaNo) + { + vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); + *p = (vu32)0; + *(p + 1) = (vu32)0; + *(p + 2) = (vu32)0x81400001; + } + + (void)OS_RestoreInterrupts(lastIntrMode); +} + +ARM_FUNC void MIi_CheckAnotherAutoDMA(u32 dmaNo, u32 dmaType) +{ + u32 dmaCnt; + u32 timing; + for (int i = 0; i < 3; i++) + { + if (i == dmaNo) continue; + + dmaCnt = *(REGType32v *)(REG_ADDR_DMA0CNT + i * 12); + + if (!(dmaCnt & 0x80000000)) continue; + + timing = dmaCnt & 0x38000000; + + if (timing == dmaType + || (timing == 0x8000000 && dmaType == MI_DMA_TIMING_H_BLANK) + || (timing == MI_DMA_TIMING_H_BLANK && dmaType == 0x8000000)) + { + continue; + } + + if (timing == 0x18000000 + || timing == 0x20000000 + || timing == 0x28000000 + || timing == 0x30000000 + || timing == 0x38000000 + || timing == 0x8000000 + || timing == 0x10000000) + { + OS_Terminate(); + } + } +} + +ARM_FUNC void MIi_CheckDma0SourceAddress(u32 dmaNo, u32 src, u32 size, u32 dir) +{ + if (!dmaNo) + { + u32 addStart = src & 0xff000000; + u32 addEnd; + + switch (dir) + { + case 0: //dma_src_inc + addEnd = src + size; + break; + case 0x800000: //dma_src_dec + addEnd = src - size; + break; + default: + addEnd = src; + break; + } + addEnd &= 0xff000000; + + if (addStart == 0x04000000 || addStart >= 0x08000000 || + addEnd == 0x04000000 || addEnd >= 0x08000000) + { + OS_Terminate(); + } + } +} diff --git a/arm9/lib/NitroSDK/src/MI_dma_card.c b/arm9/lib/NitroSDK/src/MI_dma_card.c new file mode 100644 index 00000000..c3b8b897 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_dma_card.c @@ -0,0 +1,24 @@ +#include "MI_dma_card.h" +#include "MI_dma.h" +#include "function_target.h" + +ARM_FUNC void MIi_CardDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) +{ + MIi_CheckAnotherAutoDMA(dmaNo, MIi_DMA_TIMING_ANY); + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_FIX); + + if (size == 0) + { + return; + } + + vu32 *dmaCntp; + + do + { + dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + while (*dmaCntp & 0x80000000) {} + } while(0); + + MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0xaf000001)); +} diff --git a/arm9/lib/NitroSDK/src/MI_dma_gxcommand.c b/arm9/lib/NitroSDK/src/MI_dma_gxcommand.c new file mode 100644 index 00000000..26231999 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_dma_gxcommand.c @@ -0,0 +1,155 @@ +#include "MI_dma_gxcommand.h" +#include "function_target.h" +#include "OS_interrupt.h" +#include "OS_reset.h" +#include "sections.h" + +static MIiGXDmaParams MIi_GXDmaParams = { FALSE }; + +static void MIi_FIFOCallback(void); +static void MIi_DMACallback(void *arg); +static void MIi_DMAFastCallback(void *arg); + +#pragma section ITCM begin +ARM_FUNC void MI_SendGXCommand(u32 dmaNo, const void *src, u32 commandLength) +{ + vu32 *dmaCntp; + u32 leftLength = commandLength; + u32 currentSrc = (u32)src; + if (!leftLength) + { + return; + } + + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); + + do + { + dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; + while (*dmaCntp & 0x80000000) {} + } while(0); + + while (leftLength > 0) + { + u32 length = (leftLength > MIi_GX_LENGTH_ONCE) ? MIi_GX_LENGTH_ONCE : leftLength; + MIi_DmaSetParams(dmaNo, currentSrc, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32(length)); + leftLength -= length; + currentSrc += length; + } + + do + { + while (*dmaCntp & 0x80000000) {} + } while(0); +} +#pragma section ITCM end + +ARM_FUNC void MI_SendGXCommandAsync(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg) +{ + if (!commandLength) + { + MIi_CallCallback(callback, arg); + return; + } + + while (MIi_GXDmaParams.isBusy) {} + + while (!(G3X_GetCommandFifoStatus() & GX_FIFOSTAT_UNDERHALF)) {} + + MIi_GXDmaParams.isBusy = TRUE; + MIi_GXDmaParams.dmaNo = dmaNo; + MIi_GXDmaParams.src = (u32)src; + MIi_GXDmaParams.length = commandLength; + MIi_GXDmaParams.callback = callback; + MIi_GXDmaParams.arg = arg; + + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); + + MI_WaitDma(dmaNo); + { + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + + MIi_GXDmaParams.fifoCond = (GXFifoIntrCond)((reg_G3X_GXSTAT & 0xc0000000) >> 30); + MIi_GXDmaParams.fifoFunc = OS_GetIrqFunction(OS_IE_GXFIFO); + + G3X_SetFifoIntrCond(GX_FIFOINTR_COND_UNDERHALF); + OS_SetIrqFunction(OS_IE_GXFIFO, MIi_FIFOCallback); + (void)OS_EnableIrqMask(OS_IE_GXFIFO); + + MIi_FIFOCallback(); + + (void)OS_RestoreInterrupts(lastIntrMode); + } +} + +ARM_FUNC static void MIi_FIFOCallback(void) +{ + if (!MIi_GXDmaParams.length) + { + return; + } + + u32 length = (MIi_GXDmaParams.length >= MIi_GX_LENGTH_ONCE) ? MIi_GX_LENGTH_ONCE : MIi_GXDmaParams.length; + u32 src = MIi_GXDmaParams.src; + + MIi_GXDmaParams.length -= length; + MIi_GXDmaParams.src += length; + + if (!MIi_GXDmaParams.length) + { + OSi_EnterDmaCallback(MIi_GXDmaParams.dmaNo, MIi_DMACallback, NULL); + MIi_DmaSetParams(MIi_GXDmaParams.dmaNo, src, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32_IF(length)); + (void)OS_ResetRequestIrqMask(OS_IE_GXFIFO); + } + else + { + MIi_DmaSetParams(MIi_GXDmaParams.dmaNo, src, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32(length)); + (void)OS_ResetRequestIrqMask(OS_IE_GXFIFO); + } +} + +ARM_FUNC static void MIi_DMACallback(void *arg) +{ +#pragma unused(arg) + (void)OS_DisableIrqMask(OS_IE_GXFIFO); + + G3X_SetFifoIntrCond(MIi_GXDmaParams.fifoCond); + OS_SetIrqFunction(OS_IE_GXFIFO, MIi_GXDmaParams.fifoFunc); + + MIi_GXDmaParams.isBusy = FALSE; + + MIi_CallCallback(MIi_GXDmaParams.callback, MIi_GXDmaParams.arg); +} + +ARM_FUNC void MI_SendGXCommandAsyncFast(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg) +{ + if (!commandLength) + { + MIi_CallCallback(callback, arg); + return; + } + + while (MIi_GXDmaParams.isBusy) {} + + MIi_GXDmaParams.isBusy = TRUE; + MIi_GXDmaParams.dmaNo = dmaNo; + MIi_GXDmaParams.callback = callback; + MIi_GXDmaParams.arg = arg; + + MIi_CheckAnotherAutoDMA(dmaNo, 0x38000000); + + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); + + MI_WaitDma(dmaNo); + + OSi_EnterDmaCallback(dmaNo, MIi_DMAFastCallback, NULL); + MIi_DmaSetParams(dmaNo, (u32)src, (u32)REG_GXFIFO_ADDR, MI_CNT_GXCOPY_IF(commandLength)); +} + +ARM_FUNC static void MIi_DMAFastCallback(void *arg) +{ +#pragma unused(arg) + MIi_GXDmaParams.isBusy = FALSE; + + MIi_CallCallback(MIi_GXDmaParams.callback, MIi_GXDmaParams.arg); +} diff --git a/arm9/lib/NitroSDK/src/MI_dma_hblank.c b/arm9/lib/NitroSDK/src/MI_dma_hblank.c new file mode 100644 index 00000000..67e579fe --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_dma_hblank.c @@ -0,0 +1,31 @@ +#include "MI_dma_hblank.h" +#include "MI_dma.h" +#include "function_target.h" + +ARM_FUNC void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) +{ + MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK); + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC); + + if (size == 0) + { + return; + } + + MI_WaitDma(dmaNo); + MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x96600000 | (size / 4))); +} + +ARM_FUNC void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) +{ + MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK); + MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC); + + if (size == 0) + { + return; + } + + MI_WaitDma(dmaNo); + MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x92600000 | (size / 2))); +} diff --git a/arm9/lib/NitroSDK/src/MI_init.c b/arm9/lib/NitroSDK/src/MI_init.c new file mode 100644 index 00000000..4c861286 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_init.c @@ -0,0 +1,11 @@ +#include "MI_init.h" +#include "nitro/types.h" +#include "function_target.h" +#include "MI_dma.h" +#include "MI_wram.h" + +ARM_FUNC void MI_Init(void) +{ + MI_SetWramBank(MI_WRAM_ARM7_ALL); + MI_StopDma(0); +} diff --git a/arm9/lib/NitroSDK/src/MI_memory.c b/arm9/lib/NitroSDK/src/MI_memory.c new file mode 100644 index 00000000..a97ff167 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_memory.c @@ -0,0 +1,339 @@ +#include "MI_memory.h" +#include "function_target.h" + +ARM_FUNC asm void MIi_CpuClear16(register u16 data, register void *destp, register u32 size) +{ + mov r3, #0 + +_020CE1CC: + cmp r3, r2 + strlth r0, [r1, r3] + addlt r3, r3, #2 + blt _020CE1CC + + bx lr +} + +ARM_FUNC asm void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size) +{ + mov r12, #0 + +_020CE1CC: + cmp r12, r2 + ldrlth r3, [r0, r12] + strlth r3, [r1, r12] + addlt r12, r12, #2 + blt _020CE1CC + + bx lr +} + +ARM_FUNC asm void MIi_CpuClear32(register u32 data, register void *destp, register u32 size) +{ + add r12, r1, r2 + +_020CE200: + cmp r1, r12 + stmltia r1!, {r0} + blt _020CE200 + bx lr +} + +ARM_FUNC asm void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size) +{ + add r12, r1, r2 + +_020CE214: + cmp r1, r12 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE214 + bx lr +} + +ARM_FUNC asm void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size) +{ + add r12, r0, r2 + +_020CE22C: + cmp r0, r12 + ldmltia r0!, {r2} + strlt r2, [r1] + blt _020CE22C + + bx lr +} + +ARM_FUNC asm void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size) +{ + stmfd sp!, {r4-r9} + + add r9, r1, r2 + mov r12, r2, lsr #5 + add r12, r1, r12, lsl #5 + + mov r2, r0 + mov r3, r2 + mov r4, r2 + mov r5, r2 + mov r6, r2 + mov r7, r2 + mov r8, r2 + +_020CE26C: + cmp r1, r12 + stmltia r1!, {r0, r2-r8} + blt _020CE26C +_020CE278: + cmp r1, r9 + stmltia r1!, {r0} + blt _020CE278 + + ldmfd sp!, {r4-r9} + bx lr +} + +ARM_FUNC asm void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size) +{ + stmfd sp!, {r4-r10} + + add r10, r1, r2 + mov r12, r2, lsr #5 + add r12, r1, r12, lsl #5 + +_020CE29C: + cmp r1, r12 + ldmltia r0!, {r2-r9} + stmltia r1!, {r2-r9} + blt _020CE29C +_020CE2AC: + cmp r1, r10 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE2AC + + ldmfd sp!, {r4-r10} + bx lr +} + +ARM_FUNC asm void MI_Copy32B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3} + stmia r1!, {r2, r3} + + bx lr +} + +ARM_FUNC asm void MI_Copy36B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_Copy48B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_Copy64B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0, {r0, r2, r3, r12} + stmia r1!, {r0, r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_CpuFill8(register void *dstp, register u8 data, register u32 size) +{ + cmp r2, #0 + bxeq lr + + tst r0, #1 + beq _020CE378 + ldrh r12, [r0, #-1] + and r12, r12, #0x00ff + orr r3, r12, r1, lsl #8 + strh r3, [r0, #-1] + add r0, r0, #1 + subs r2, r2, #1 + bxeq lr + +_020CE378: + cmp r2, #2 + bcc _020CE3C0 + orr r1, r1, r1, lsl #8 + tst r0, #2 + beq _020CE398 + strh r1, [r0], #2 + subs r2, r2, #2 + bxeq lr + +_020CE398: + orr r1, r1, r1, lsl #16 + bics r3, r2, #3 + beq _020CE3B8 + sub r2, r2, r3 + add r12, r3, r0 + +_020CE3AC: + str r1, [r0], #4 + cmp r0, r12 + bcc _020CE3AC + +_020CE3B8: + tst r2, #2 + strneh r1, [r0], #2 + +_020CE3C0: + tst r2, #1 + bxeq lr + ldrh r3, [r0] + and r3, r3, #0xff00 + and r1, r1, #0x00ff + orr r1, r1, r3 + strh r1, [r0] + bx lr +} + +ARM_FUNC asm void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size) +{ + cmp r2, #0 + bxeq lr + + tst r1, #1 + beq _020CE420 + ldrh r12, [r1, #-1] + and r12, r12, #0x00ff + tst r0, #1 + ldrneh r3, [r0, #-1] + movne r3, r3, lsr #8 + ldreqh r3, [r0] + orr r3, r12, r3, lsl #8 + strh r3, [r1, #-1] + add r0, r0, #1 + add r1, r1, #1 + subs r2, r2, #1 + bxeq lr + +_020CE420: + eor r12, r1, r0 + tst r12, #1 + beq _020CE474 + + bic r0, r0, #1 + ldrh r12, [r0], #2 + mov r3, r12, lsr #8 + subs r2, r2, #2 + bcc _020CE458 + +_020CE440: + ldrh r12, [r0], #2 + orr r12, r3, r12, lsl #8 + strh r12, [r1], #2 + mov r3, r12, lsr #16 + subs r2, r2, #2 + bcs _020CE440 + +_020CE458: + tst r2, #1 + bxeq lr + ldrh r12, [r1] + and r12, r12, #0xff00 + orr r12, r12, r3 + strh r12, [r1] + bx lr + +_020CE474: + tst r12, #2 + beq _020CE4A0 + + bics r3, r2, #1 + beq _020CE4EC + sub r2, r2, r3 + add r12, r3, r1 + +_020CE48C: + ldrh r3, [r0], #2 + strh r3, [r1], #2 + cmp r1, r12 + bcc _020CE48C + b _020CE4EC + +_020CE4A0: + cmp r2, #2 + bcc _020CE4EC + tst r1, #2 + beq _020CE4C0 + ldrh r3, [r0], #2 + strh r3, [r1], #2 + subs r2, r2, #2 + bxeq lr + +_020CE4C0: + bics r3, r2, #3 + beq _020CE4E0 + sub r2, r2, r3 + add r12, r3, r1 + +_020CE4D0: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r1, r12 + bcc _020CE4D0 + +_020CE4E0: + tst r2, #2 + ldrneh r3, [r0], #2 + strneh r3, [r1], #2 + +_020CE4EC: + tst r2, #1 + bxeq lr + ldrh r2, [r1] + ldrh r0, [r0] + and r2, r2, #0xff00 + and r0, r0, #0x00ff + orr r0, r2, r0 + strh r0, [r1] + + bx lr +} + +THUMB_FUNC asm void MI_Zero36B(register void *pDest) +{ + mov r1, #0 + mov r2, #0 + mov r3, #0 + stmia r0!, {r1, r2, r3} + stmia r0!, {r1, r2, r3} + stmia r0!, {r1, r2, r3} + + bx lr +} diff --git a/arm9/lib/NitroSDK/src/MI_swap.c b/arm9/lib/NitroSDK/src/MI_swap.c new file mode 100644 index 00000000..b72e1386 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_swap.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "MI_swap.h" + +/* + * Exchange 32 bits of data between register and memory. + * + * The SDK also defines an 8-bit version of this routine, + * but it is not linked in pokediamond. + */ + +asm +u32 MI_SwapWord(register u32 setData, register vu32 * destp) +{ + swp setData, setData, [destp] + bx lr +} diff --git a/arm9/lib/NitroSDK/src/MI_uncompress.c b/arm9/lib/NitroSDK/src/MI_uncompress.c new file mode 100644 index 00000000..c6ad7e4e --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_uncompress.c @@ -0,0 +1,59 @@ +#include "function_target.h" +#include "MI_uncompress.h" + +ARM_FUNC asm void MI_UncompressLZ8(register const void *srcp, register void *destp) +{ + stmfd sp!, {r4-r6, lr} + + ldr r5, [r0], #4 + mov r2, r5, lsr #8 + +_020CE534: + cmp r2, #0 + ble _020CE5B4 + + ldrb lr, [r0], #1 + mov r4, #8 + +_020CE544: + subs r4, r4, #1 + blt _020CE534 + + tst lr, #0x80 + bne _020CE568 + + ldrb r6, [r0], #1 + swpb r6, r6, [r1] + add r1, r1, #1 + sub r2, r2, #1 + b _020CE5A4 + +_020CE568: + ldrb r5, [r0, #0] + mov r6, #3 + add r3, r6, r5, asr #4 + ldrb r6, [r0], #1 + and r5, r6, #0xf + mov r12, r5, lsl #8 + ldrb r6, [r0], #1 + orr r5, r6, r12 + add r12, r5, #1 + sub r2, r2, r3 + +_020CE590: + ldrb r5, [r1, -r12] + swpb r5, r5, [r1] + add r1, r1, #1 + subs r3, r3, #1 + bgt _020CE590 + +_020CE5A4: + cmp r2, #0 + movgt lr, lr, lsl #1 + bgt _020CE544 + b _020CE534 + +_020CE5B4: + ldmfd sp!, {r4-r6, lr} + bx lr +} diff --git a/arm9/lib/NitroSDK/src/MI_wram.c b/arm9/lib/NitroSDK/src/MI_wram.c new file mode 100644 index 00000000..c1433f07 --- /dev/null +++ b/arm9/lib/NitroSDK/src/MI_wram.c @@ -0,0 +1,9 @@ +#include "MI_wram.h" + +#include "global.h" +#include "registers.h" + +ARM_FUNC void MI_SetWramBank(MIWram cnt) +{ + reg_GX_VRAMCNT_WRAM = (u8)cnt; +} diff --git a/arm9/lib/NitroSDK/src/OS_alarm.c b/arm9/lib/NitroSDK/src/OS_alarm.c new file mode 100644 index 00000000..a8c1fedd --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_alarm.c @@ -0,0 +1,254 @@ +#include "function_target.h" +#include "consts.h" +#include "OS_alarm.h" +#include "OS_interrupt.h" +#include "OS_irqTable.h" +#include "OS_terminate_proc.h" +#include "OS_system.h" + +static struct OSiAlarmQueue OSi_AlarmQueue; + +static u16 OSi_UseAlarm = FALSE; + +static void OSi_SetTimer(OSAlarm *alarm); +static void OSi_InsertAlarm(OSAlarm *alarm, OSTick fire); +static void OSi_ArrangeTimer(void); + +ARM_FUNC static void OSi_SetTimer(OSAlarm *alarm) +{ + OSTick tick = OS_GetTick(); + + OS_SetTimerControl(OS_TIMER_1, 0); + + s64 delta = (s64)(alarm->fire - tick); + + OSi_EnterTimerCallback(OS_TIMER_1, OSi_AlarmHandler, NULL); + + u16 timerCount; + if (delta < 0) + { + timerCount = (u16)~1; + } + else if (delta < 0x10000) + { + timerCount = (u16)(~delta); + } + else + { + timerCount = 0; + } + + OS_SetTimerCount((OSTimer)OS_TIMER_1, timerCount); + OS_SetTimerControl(OS_TIMER_1, (u16)OSi_TICK_TIMERCONTROL); + + (void)OS_EnableIrqMask(OS_IE_TIMER1); +} + +ARM_FUNC void OS_InitAlarm(void) +{ + if (!OSi_UseAlarm) + { + OSi_UseAlarm = TRUE; + + OSi_SetTimerReserved(OS_TIMER_1); + + OSi_AlarmQueue.head = NULL; + OSi_AlarmQueue.tail = NULL; + + (void)OS_DisableIrqMask(OS_IE_TIMER1); + } +} + +ARM_FUNC BOOL OS_IsAlarmAvailable(void) +{ + return OSi_UseAlarm; +} + +ARM_FUNC void OS_CreateAlarm(OSAlarm *alarm) +{ + alarm->handler = 0; + alarm->tag = 0; +} + +ARM_FUNC static void OSi_InsertAlarm(OSAlarm *alarm, OSTick fire) +{ + if (alarm->period > 0) + { + OSTick tick = OS_GetTick(); + + fire = alarm->start; + if (alarm->start < tick) + { + fire += alarm->period * ((tick - alarm->start) / alarm->period + 1); + } + } + + alarm->fire = fire; + + OSAlarm *prev; + OSAlarm *next; + + for (next = OSi_AlarmQueue.head; next; next = next->next) + { + if ((s64)(fire - next->fire) >= 0) + { + continue; + } + + alarm->prev = next->prev; + next->prev = alarm; + alarm->next = next; + prev = alarm->prev; + if (prev) + { + prev->next = alarm; + } + else + { + OSi_AlarmQueue.head = alarm; + OSi_SetTimer(alarm); + } + + return; + } + + alarm->next = 0; + prev = OSi_AlarmQueue.tail; + OSi_AlarmQueue.tail = alarm; + alarm->prev = prev; + if (prev) + { + prev->next = alarm; + } + else + { + OSi_AlarmQueue.head = OSi_AlarmQueue.tail = alarm; + OSi_SetTimer(alarm); + } +} + +ARM_FUNC void OS_SetAlarm(OSAlarm * alarm, OSTick tick, OSAlarmHandler handler, void *arg) +{ + if (!alarm || alarm->handler) + { + OS_Terminate(); + } + + OSIntrMode enabled = OS_DisableInterrupts(); + + alarm->period = 0; + + alarm->handler = handler; + alarm->arg = arg; + + OSi_InsertAlarm(alarm, OS_GetTick() + tick); + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void OS_CancelAlarm(OSAlarm *alarm) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + if (!alarm->handler) + { + (void)OS_RestoreInterrupts(enabled); + return; + } + + OSAlarm *next = alarm->next; + + if (!next) + { + OSi_AlarmQueue.tail = alarm->prev; + } + else + { + next->prev = alarm->prev; + } + + if (alarm->prev) + { + alarm->prev->next = next; + } + else + { + OSi_AlarmQueue.head = next; + if (next) + { + OSi_SetTimer(next); + } + } + + alarm->handler = NULL; + alarm->period = 0; + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC asm void OSi_AlarmHandler(void *arg) +{ + stmfd sp!, {r0, lr} + bl OSi_ArrangeTimer + ldmfd sp!, {r0, lr} + bx lr +} + +ARM_FUNC static void OSi_ArrangeTimer(void) +{ + OS_SetTimerControl(OS_TIMER_1, 0); + + (void)OS_DisableIrqMask(OS_IE_TIMER1); + + OS_SetIrqCheckFlag(OS_IE_TIMER1); + + OSTick tick = OS_GetTick(); + + OSAlarm *alarm = OSi_AlarmQueue.head; + + if (!alarm) + { + return; + } + + if (tick < alarm->fire) + { + OSi_SetTimer(alarm); + return; + } + + OSAlarm *next = alarm->next; + OSi_AlarmQueue.head = next; + + if (!next) + { + OSi_AlarmQueue.tail = NULL; + } + else + { + next->prev = NULL; + } + + OSAlarmHandler handler = alarm->handler; + + if (!alarm->period) + { + alarm->handler = NULL; + } + + if (handler) + { + (handler)(alarm->arg); + } + + if (alarm->period > 0) + { + alarm->handler = handler; + OSi_InsertAlarm(alarm, 0); + } + + if (OSi_AlarmQueue.head) + { + OSi_SetTimer(OSi_AlarmQueue.head); + } +} diff --git a/arm9/lib/NitroSDK/src/OS_alloc.c b/arm9/lib/NitroSDK/src/OS_alloc.c new file mode 100644 index 00000000..dc84151b --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_alloc.c @@ -0,0 +1,167 @@ +// +// Created by mart on 4/23/20. +// +#include "function_target.h" +#include "OS_alloc.h" +#include "consts.h" +#include "OS_system.h" + +void* OSiHeapInfo[OS_ARENA_MAX]; + +ARM_FUNC Cell* DLAddFront(Cell* list, Cell* cell) +{ + cell->next = list; + cell->prev = NULL; + + if (list != NULL) + list->prev = cell; + return cell; +} + +ARM_FUNC Cell* DLExtract(Cell* list, Cell* cell) +{ + if (cell->next) { + cell->next->prev = cell->prev; + } + if (cell->prev == NULL) { + list = cell->next; + } else { + cell->prev->next = cell->next; + } + return list; +} + +ARM_FUNC Cell *DLInsert(Cell *original, Cell *inserted) +{ + Cell *prevCell = NULL; + Cell *nextCell = original; + + + for (nextCell = original, prevCell = NULL; nextCell; prevCell = nextCell, nextCell = nextCell->next) + { + if (inserted <= nextCell) + break; + } + + inserted->next = nextCell; + inserted->prev = prevCell; + + if (nextCell != NULL) + { + nextCell->prev = inserted; + Cell * temp = (Cell *)((char *)inserted + inserted->size); + if (temp == nextCell) + { + inserted->size += nextCell->size; + nextCell = nextCell->next; + inserted->next = nextCell; + if (nextCell != NULL) + nextCell->prev = inserted; + } + } + + if (prevCell != NULL) + { + prevCell->next = inserted; + Cell * temp = (Cell *)((char *)prevCell + prevCell->size); + + if (temp != inserted) + return original; + + prevCell->size += inserted->size; + prevCell->next = nextCell; + if (nextCell != NULL) + nextCell->prev = prevCell; + + return original; + } + + return inserted; +} + +#define HEADERSIZE OSi_ROUND(sizeof(Cell), 32) +#define MINOBJSIZE (HEADERSIZE+32) + +ARM_FUNC void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size) { + OSHeapInfo* heapInfo; + HeapDesc* hd; + Cell* cell; + Cell* newCell; + long leftoverSize; + + OSIntrMode enabled = OS_DisableInterrupts(); + heapInfo = OSiHeapInfo[id]; + if (!heapInfo) { + (void)OS_RestoreInterrupts(enabled); + return NULL; + } + + if (heap < 0) { + heap = heapInfo->currentHeap; + } + + hd = &heapInfo->heapArray[heap]; + + size += HEADERSIZE; + size = OSi_ROUND(size, 32); + + for (cell = hd->free; cell != NULL; cell = cell->next) { + if ((long)size <= cell->size) { + break; + } + } + + if (cell == NULL) { + (void)OS_RestoreInterrupts(enabled); + return NULL; + } + + leftoverSize = cell->size - (long)size; + if (leftoverSize < MINOBJSIZE) { + hd->free = DLExtract(hd->free, cell); + } else { + cell->size = (long)size; + + newCell = (Cell *) ((char *)cell + size); + newCell->size = leftoverSize; + + newCell->prev = cell->prev; + newCell->next = cell->next; + + if (newCell->next != NULL) { + newCell->next->prev = newCell; + } + + if (newCell->prev != NULL) { + newCell->prev->next = newCell; + } else { + hd->free = newCell; + } + } + + hd->allocated = DLAddFront(hd->allocated, cell); + + (void)OS_RestoreInterrupts(enabled); + return (void *)((char *)cell + HEADERSIZE); +} + +ARM_FUNC void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void* ptr) { + OSHeapInfo *heapInfo; + HeapDesc *hd; + Cell *cell; + + OSIntrMode enabled = OS_DisableInterrupts(); + heapInfo = OSiHeapInfo[id]; + + if (heap < 0) { + heap = heapInfo->currentHeap; + } + + cell = (Cell *) ((char *)ptr - HEADERSIZE); + hd = &heapInfo->heapArray[heap]; + + hd->allocated = DLExtract(hd->allocated, cell); + hd->free = DLInsert(hd->free, cell); + + (void)OS_RestoreInterrupts(enabled); +} diff --git a/arm9/lib/NitroSDK/src/OS_arena.c b/arm9/lib/NitroSDK/src/OS_arena.c new file mode 100644 index 00000000..cc9694c2 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_arena.c @@ -0,0 +1,168 @@ +#include "OS_arena.h" + +#include "global.h" +#include "OS_protectionRegion.h" +#include "OS_emulator.h" +#include "mmap.h" + +static BOOL OSi_Initialized = FALSE; +static BOOL OSi_MainExArenaEnabled = FALSE; + +void SDK_MAIN_ARENA_LO(); // TODO: technically this should be defined in the lcf +extern void SDK_SECTION_ARENA_EX_START(); // TODO: technically this should be defined in the lcf +extern void SDK_SECTION_ARENA_ITCM_START(); // TODO: technically this should be defined in the lcf +extern void SDK_SECTION_ARENA_DTCM_START(); // TODO: technically this should be defined in the lcf +extern void SDK_IRQ_STACKSIZE(); // TODO: technically this should be defined in the lcf +extern void SDK_SYS_STACKSIZE(); // TODO: technically this should be defined in the lcf + +ARM_FUNC void OS_InitArena(void) { + if (OSi_Initialized) { + return; + } + OSi_Initialized = TRUE; + + OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); + OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); + + OS_SetArenaLo(OS_ARENA_MAINEX, (void *)0); + OS_SetArenaHi(OS_ARENA_MAINEX, (void *)0); + + OS_SetArenaHi(OS_ARENA_ITCM, OS_GetInitArenaHi(OS_ARENA_ITCM)); + OS_SetArenaLo(OS_ARENA_ITCM, OS_GetInitArenaLo(OS_ARENA_ITCM)); + + OS_SetArenaHi(OS_ARENA_DTCM, OS_GetInitArenaHi(OS_ARENA_DTCM)); + OS_SetArenaLo(OS_ARENA_DTCM, OS_GetInitArenaLo(OS_ARENA_DTCM)); + + OS_SetArenaHi(OS_ARENA_SHARED, OS_GetInitArenaHi(OS_ARENA_SHARED)); + OS_SetArenaLo(OS_ARENA_SHARED, OS_GetInitArenaLo(OS_ARENA_SHARED)); + + OS_SetArenaHi(OS_ARENA_WRAM_MAIN, OS_GetInitArenaHi(OS_ARENA_WRAM_MAIN)); + OS_SetArenaLo(OS_ARENA_WRAM_MAIN, OS_GetInitArenaLo(OS_ARENA_WRAM_MAIN)); +} + +ARM_FUNC void OS_InitArenaEx(void) { + OS_SetArenaHi(OS_ARENA_MAINEX, OS_GetInitArenaHi(OS_ARENA_MAINEX)); + OS_SetArenaLo(OS_ARENA_MAINEX, OS_GetInitArenaLo(OS_ARENA_MAINEX)); + + if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { + OS_SetProtectionRegion(1, HW_MAIN_MEM, 4MB); + OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 128KB); + } +} + +ARM_FUNC void* OS_GetArenaHi(OSArenaId id) { + return OSi_GetArenaInfo().hi[id]; +} + +ARM_FUNC void* OS_GetArenaLo(OSArenaId id) { + return OSi_GetArenaInfo().lo[id]; +} + +ARM_FUNC void* OS_GetInitArenaHi(OSArenaId id) { + switch (id) { + case OS_ARENA_MAIN: + return (void *)OSi_MAIN_ARENA_HI_DEFAULT; + case OS_ARENA_MAINEX: + if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { + return (void *)0; + } else { + return (void *)OSi_MAINEX_ARENA_HI_DEFAULT; + } + case OS_ARENA_ITCM: + return (void *)HW_ITCM_ARENA_HI_DEFAULT; + case OS_ARENA_DTCM: + { + u32 irqStackLo = (u32) HW_DTCM_IRQ_STACK_END - (s32) SDK_IRQ_STACKSIZE; + u32 sysStackLo; + + if (!(s32) SDK_SYS_STACKSIZE) { + sysStackLo = HW_DTCM; + if (sysStackLo < (u32) SDK_SECTION_ARENA_DTCM_START) { + sysStackLo = (u32) SDK_SECTION_ARENA_DTCM_START; + } + } else if ((s32) SDK_SYS_STACKSIZE < 0) { + sysStackLo = (u32) SDK_SECTION_ARENA_DTCM_START - (s32) SDK_SYS_STACKSIZE; + } else { + sysStackLo = irqStackLo - (s32) SDK_SYS_STACKSIZE; + } + return (void *) sysStackLo; + } + case OS_ARENA_SHARED: + return (void *)HW_SHARED_ARENA_HI_DEFAULT; + case OS_ARENA_WRAM_MAIN: + return (void *)OSi_WRAM_MAIN_ARENA_HI_DEFAULT; + default: + return NULL; + } +} + +ARM_FUNC void* OS_GetInitArenaLo(OSArenaId id) { + switch (id) { + case OS_ARENA_MAIN: + return (void *)SDK_MAIN_ARENA_LO; + case OS_ARENA_MAINEX: + if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { + return NULL; + } else { + return (void *)SDK_SECTION_ARENA_EX_START; + } + case OS_ARENA_ITCM: + return (void *)SDK_SECTION_ARENA_ITCM_START; + case OS_ARENA_DTCM: + return (void *)SDK_SECTION_ARENA_DTCM_START; + case OS_ARENA_SHARED: + return (void *)HW_SHARED_ARENA_LO_DEFAULT; + case OS_ARENA_WRAM_MAIN: + return (void *)OSi_WRAM_MAIN_ARENA_LO_DEFAULT; + default: + return NULL; + } +} + +ARM_FUNC void OS_SetArenaHi(OSArenaId id, void* newHi) { + OSi_GetArenaInfo().hi[id] = newHi; +} + +ARM_FUNC void OS_SetArenaLo(OSArenaId id, void* newLo) { + OSi_GetArenaInfo().lo[id] = newLo; +} + +ARM_FUNC void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align) { + void* ptr; + u8* arenaLo; + ptr = OS_GetArenaLo(id); + if (!ptr) { + return NULL; + } + arenaLo = ptr = (void *)OSi_ROUND(ptr, align); + arenaLo += size; + arenaLo = (u8 *)OSi_ROUND(arenaLo, align); + if (arenaLo > (u8*)OS_GetArenaHi(id)) { + return NULL; + } + OS_SetArenaLo(id, arenaLo); + + return ptr; +} + +ARM_FUNC void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align) { + void* ptr; + u8* arenaHi; + + arenaHi = OS_GetArenaHi(id); + if (!arenaHi) { + return NULL; + } + + arenaHi = (u8 *)OSi_TRUNC(arenaHi, align); + arenaHi -= size; + arenaHi = ptr = (void *)OSi_TRUNC(arenaHi, align); + + if (arenaHi < (u8*)OS_GetArenaLo(id)) { + return NULL; + } + + OS_SetArenaHi(id, arenaHi); + + return ptr; +} diff --git a/arm9/lib/NitroSDK/src/OS_cache.c b/arm9/lib/NitroSDK/src/OS_cache.c new file mode 100644 index 00000000..8b202fda --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_cache.c @@ -0,0 +1,126 @@ +#include "OS_cache.h" +#include "nitro/types.h" +#include "function_target.h" + +ARM_FUNC asm void DC_InvalidateAll(void) +{ + mov r0, #0 + mcr p15, 0, r0, c7, c6, 0 //Invalidate Entire Data Cache + bx lr +} + +ARM_FUNC asm void DC_StoreAll(void) +{ + mov r1, #0 + +_020CC0C8: + mov r0, #0 + +_020CC0CC: + orr r2, r1, r0 + mcr p15, 0, r2, c7, c10, 2 //Clean Data Cache Line Set/Index + add r0, r0, #32 + cmp r0, #0x400 + blt _020CC0CC + + add r1, r1, #0x40000000 + cmp r1, #0 + bne _020CC0C8 + + bx lr +} + +ARM_FUNC asm void DC_FlushAll(void) +{ + mov r12, #0 + mov r1, #0 + +_020CC0F8: + mov r0, #0 + +_020CC0FC: + orr r2, r1, r0 + mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer + mcr p15, 0, r2, c7, c14, 2 //Clean and Invalidate Data Cache Line Set/Index + add r0, r0, #32 + cmp r0, #0x400 + blt _020CC0FC + + add r1, r1, #0x40000000 + cmp r1, #0 + bne _020CC0F8 + + bx lr +} + +ARM_FUNC asm void DC_InvalidateRange(register void *startAddr, register u32 nBytes) +{ + add r1, r1, r0 + bic r0, r0, #31 + +_020CC12C: + mcr p15, 0, r0, c7, c6, 1 //Invalidated Data Cache Line Virtual Address + add r0, r0, #32 + cmp r0, r1 + blt _020CC12C + + bx lr +} + +ARM_FUNC asm void DC_StoreRange(register void *startAddr, register u32 nBytes) +{ + add r1, r1, r0 + bic r0, r0, #31 + +_020CC148: + mcr p15, 0, r0, c7, c10, 1 //Clean Data Cache Line Virtual Address + add r0, r0, #32 + cmp r0, r1 + blt _020CC148 + + bx lr +} + +ARM_FUNC asm void DC_FlushRange(register const void *startAddr, register u32 nBytes) +{ + mov r12, #0 + add r1, r1, r0 + bic r0, r0, #31 + +_020CC168: + mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer + mcr p15, 0, r0, c7, c14, 1 //Clean and Invalidate Data Cache Line Virtual Address + add r0, r0, #32 + cmp r0, r1 + blt _020CC168 + + bx lr +} + +ARM_FUNC asm void DC_WaitWriteBufferEmpty(void) +{ + mov r0, #0 + mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer + bx lr +} + +ARM_FUNC asm void IC_InvalidateAll(void) +{ + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 //Invalidate Entire Instruction Cache + bx lr +} + +ARM_FUNC asm void IC_InvalidateRange(register void *startAddr, register u32 nBytes) +{ + add r1, r1, r0 + bic r0, r0, #31 + +_020CC1A0: + mcr p15, 0, r0, c7, c5, 1 //Invalidate Instruction Cache Line Virtual Address + add r0, r0, #32 + cmp r0, r1 + blt _020CC1A0 + + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_context.c b/arm9/lib/NitroSDK/src/OS_context.c new file mode 100644 index 00000000..38b722ba --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_context.c @@ -0,0 +1,92 @@ +#include "OS_context.h" +#include "consts.h" +#include "function_target.h" + +ARM_FUNC asm void OS_InitContext(register OSContext *context, register u32 newpc, register u32 newsp) +{ + add newpc, newpc, #4 + str newpc, [context, #0x40] + + str newsp, [context, #0x44] + sub newsp, newsp, #HW_SVC_STACK_SIZE + + tst newsp, #4 + subne newsp, newsp, #4 + str newsp, [context, #0x38] + + ands r1, newpc, #1 + movne r1, #0x3f + moveq r1, #0x1f + str r1, [context] + + mov r1, #0 + str r1, [context, #0x4] + str r1, [context, #0x8] + str r1, [context, #0xc] + str r1, [context, #0x10] + str r1, [context, #0x14] + str r1, [context, #0x18] + str r1, [context, #0x1c] + str r1, [context, #0x20] + str r1, [context, #0x24] + str r1, [context, #0x28] + str r1, [context, #0x2c] + str r1, [context, #0x30] + str r1, [context, #0x34] + str r1, [context, #0x3c] + + bx lr +} + +ARM_FUNC asm BOOL OS_SaveContext(register OSContext* context) +{ + stmfd sp!, {lr, r0} + add r0, r0, #0x48 + ldr r1, =CP_SaveContext + blx r1 + ldmfd sp!, {lr, r0} + + add r1, r0, #0 + + mrs r2, cpsr + str r2, [r1], #0x4 + + mov r0, #0xd3 + msr cpsr_c, r0 + str sp, [r1, #0x40] + msr cpsr_c, r2 + + mov r0, #1 + stmia r1, {r0-r14} + add r0, pc, #8 + str r0, [r1, #0x3c] + + mov r0, #0 + bx lr +} + +ARM_FUNC asm void OS_LoadContext(register OSContext* context) +{ + stmfd sp!, {lr, r0} + add r0, r0, #0x48 + + ldr r1, =CPi_RestoreContext + blx r1 + ldmfd sp!, {lr, r0} + + mrs r1, cpsr + bic r1, r1, #HW_PSR_CPU_MODE_MASK + orr r1, r1, #0xd3 + msr cpsr_c, r1 + + ldr r1, [r0], #0x4 + msr spsr_fsxc, r1 + + ldr sp, [r0, #0x40] + + ldr lr, [r0, #0x3c] + ldmia r0, {r0-r14}^ + nop + + subs pc, lr, #4 +} diff --git a/arm9/lib/NitroSDK/src/OS_emulator.c b/arm9/lib/NitroSDK/src/OS_emulator.c new file mode 100644 index 00000000..e92a7d9d --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_emulator.c @@ -0,0 +1,18 @@ +// +// Created by red031000 on 2020-05-05. +// + +#include "OS_emulator.h" +#include "function_target.h" + +u32 OSi_ConsoleTypeCache = -1u; + +ARM_FUNC BOOL OS_IsRunOnEmulator(void) { + return FALSE; +} + +ARM_FUNC u32 OS_GetConsoleType(void) { + OSi_ConsoleTypeCache = OS_CONSOLE_NITRO | OS_CONSOLE_DEV_CARD | OS_CONSOLE_SIZE_4MB; + + return OSi_ConsoleTypeCache; +} diff --git a/arm9/lib/NitroSDK/src/OS_entropy.c b/arm9/lib/NitroSDK/src/OS_entropy.c new file mode 100644 index 00000000..5d466f82 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_entropy.c @@ -0,0 +1,25 @@ +// +// Created by red031000 on 2020-05-03. +// + +#include "OS_entropy.h" + +#include "global.h" +#include "registers.h" +#include "systemWork.h" +#include "userInfo.h" + +ARM_FUNC void OS_GetLowEntropyData(u32 * arr) +{ + const OSSystemWork* work = OS_GetSystemWork(); + const u8 * macAddress = (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~3)); + arr[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo()); + arr[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter); + arr[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount; + arr[2] ^= reg_G3X_GXSTAT; + arr[3] = *(u32 *)(&work->real_time_clock[0]); + arr[4] = *(u32 *)(&work->real_time_clock[4]); + arr[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address; + arr[6] = (u32) ((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2])); + arr[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF)); +} diff --git a/arm9/lib/NitroSDK/src/OS_exception.c b/arm9/lib/NitroSDK/src/OS_exception.c new file mode 100644 index 00000000..63cd6d58 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_exception.c @@ -0,0 +1,164 @@ +#include "OS_exception.h" + +#include "global.h" +#include "OS_protectionUnit.h" +#include "mmap.h" + +static OSiExContext OSi_ExContext; + +static OSExceptionHandler OSi_UserExceptionHandler; +static void *OSi_UserExceptionHandlerArg; + +static void *OSi_DebuggerHandler = NULL; + +#define HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER 0x027ffd9c + +static void OSi_GetAndDisplayContext(void); +static void OSi_SetExContext(void); +static void OSi_DisplayExContext(void); + +ARM_FUNC void OS_InitException(void) +{ + if (0x2600000 <= *(u32 *)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER + && *(u32 *)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER < 0x2800000) + { + OSi_DebuggerHandler = *(void **)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER; + } + else + { + OSi_DebuggerHandler = NULL; + } + + if (!OSi_DebuggerHandler) + { + *(u32 *)(HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER) = (u32)OSi_ExceptionHandler; + + *(u32 *)(HW_EXCP_VECTOR_BUF) = (u32)OSi_ExceptionHandler; + } + + OSi_UserExceptionHandler = NULL; +} + +ARM_FUNC asm void OSi_ExceptionHandler(void) +{ + ldr r12, =OSi_DebuggerHandler + ldr r12, [r12] + cmp r12, #0 + movne lr, pc + bxne r12 + + ldr r12, =HW_ITCM_END + stmfd r12!, {r0-r3, sp, lr} + + and r0, sp, #1 + mov sp, r12 + + mrs r1, cpsr + and r1, r1, #0x1f + + teq r1, #0x17 + bne _020CCA38 + bl OSi_GetAndDisplayContext + b _020CCA44 + +_020CCA38: + teq r1, #0x1b + bne _020CCA44 + bl OSi_GetAndDisplayContext + +_020CCA44: + ldr r12, =OSi_DebuggerHandler + ldr r12, [r12] + cmp r12, #0 + +_020CCA50: + beq _020CCA50 + +_020CCA54: + mov r0, r0 + b _020CCA54 + + ldmfd sp!, {r0-r3, r12, lr} + mov sp, r12 + bx lr +} + +ARM_FUNC static asm void OSi_GetAndDisplayContext(void) +{ + stmfd sp!, {r0, lr} + + bl OSi_SetExContext + bl OSi_DisplayExContext + + ldmfd sp!, {r0, lr} + bx lr +} + +ARM_FUNC static asm void OSi_SetExContext(void) +{ + ldr r1, =OSi_ExContext; + + mrs r2, cpsr + str r2, [r1, #OSiExContext.debug[1]] + + str r0, [r1, #OSiExContext.exinfo] + + ldr r0, [r12, #0] + str r0, [r1, #4] + ldr r0, [r12, #4] + str r0, [r1, #8] + ldr r0, [r12, #8] + str r0, [r1, #12] + ldr r0, [r12, #12] + str r0, [r1, #16] + ldr r2, [r12, #16] + bic r2, r2, #1 + + add r0, r1, #20 + stmia r0, {r4-r11} + + str r12, [r1, #OSiExContext.debug[0]] + + ldr r0, [r2, #0] + str r0, [r1, #OSiExContext.cp15] + ldr r3, [r2, #4] + str r3, [r1, #0] + ldr r0, [r2, #8] + str r0, [r1, #52] + ldr r0, [r2, #12] + str r0, [r1, #64] + + mrs r0, cpsr + orr r3, r3, #0x80 + bic r3, r3, #0x20 + msr cpsr_cxsf, r3 + + str sp, [r1, #56] + str lr, [r1, #60] + mrs r2, spsr + + str r2, [r1, #OSiExContext.debug[3]] + + msr cpsr_cxsf, r0 + bx lr +} + +ARM_FUNC static void OSi_DisplayExContext(void) +{ + if (OSi_UserExceptionHandler) + { + asm + { + mov r0, sp + ldr r1, =0x9f + msr CPSR_cxsf, r1 + mov sp, r0 + } + + OS_EnableProtectionUnit(); + + ((void (*)(u32, void *))OSi_UserExceptionHandler)((u32)&OSi_ExContext, OSi_UserExceptionHandlerArg); + + OS_DisableProtectionUnit(); + } +} diff --git a/arm9/lib/NitroSDK/src/OS_init.c b/arm9/lib/NitroSDK/src/OS_init.c new file mode 100644 index 00000000..d1465625 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_init.c @@ -0,0 +1,26 @@ +#include "function_target.h" +#include "OS_init.h" +#include "MI_init.h" +#include "PXI_init.h" +#include "CARD_rom.h" + +extern void CTRDG_Init(void); +extern void PM_Init(void); + +ARM_FUNC void OS_Init(void) { + OS_InitArena(); + PXI_Init(); + OS_InitLock(); + OS_InitArenaEx(); + OS_InitIrqTable(); + OS_SetIrqStackChecker(); + OS_InitException(); + MI_Init(); + OS_InitVAlarm(); + OSi_InitVramExclusive(); + OS_InitThread(); + OS_InitReset(); + CTRDG_Init(); + CARD_Init(); + PM_Init(); +} diff --git a/arm9/lib/NitroSDK/src/OS_interrupt.c b/arm9/lib/NitroSDK/src/OS_interrupt.c new file mode 100644 index 00000000..699c7929 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_interrupt.c @@ -0,0 +1,141 @@ +#include "OS_interrupt.h" + +#include "global.h" +#include "registers.h" +#include "mmap.h" +#include "OS_thread.h" + +#pragma optimize_for_size on + +extern OSThreadQueue OSi_IrqThreadQueue; + +ARM_FUNC void OS_InitIrqTable(void) { + OS_InitThreadQueue(&OSi_IrqThreadQueue); +} + +ARM_FUNC void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function) { + s32 i; + OSIrqCallbackInfo *info; + + for (i = 0; i < 0x16; i++) { + if (intrBit & 1) { + info = NULL; + + if (8 <= i && i <= 11) { + info = &OSi_IrqCallbackInfo[i - 8]; + } + else if (3 <= i && i <= 6) { + info = &OSi_IrqCallbackInfo[i - 3 + 4]; + } + else { + OS_IRQTable[i] = function; + } + + if (info) { + info->func = (void (*)(void *))function; + info->arg = 0; + info->enable = TRUE; + } + } + intrBit >>= 1; + } +} + +ARM_FUNC OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit) { + s32 i = 0; + OSIrqFunction *funcPtr = &OS_IRQTable[0]; + + do { + if (intrBit & 1) + { + if (8 <= i && i <= 11) { + i = i - 8; + return (void (*)(void))OSi_IrqCallbackInfo[i].func; + } + else if (3 <= i && i <= 6) { + i++; + return (void (*)(void))OSi_IrqCallbackInfo[i].func; + } + + return *funcPtr; + } + intrBit >>= 1; + funcPtr++; + i++; + } while (i < 0x16); + return 0; +} + +ARM_FUNC void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg) +{ + OSIrqMask mask = 1UL << (dmaNo + 8); + OSi_IrqCallbackInfo[dmaNo].func = callback; + OSi_IrqCallbackInfo[dmaNo].arg = arg; + + OSi_IrqCallbackInfo[dmaNo].enable = OS_EnableIrqMask(mask) & mask; +} + +ARM_FUNC void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg) +{ + OSIrqMask mask = 1UL << (timerNo + 3); + OSi_IrqCallbackInfo[timerNo + 4].func = callback; + OSi_IrqCallbackInfo[timerNo + 4].arg = arg; + + (void)OS_EnableIrqMask(mask); + OSi_IrqCallbackInfo[timerNo + 4].enable = TRUE; +} + +ARM_FUNC OSIrqMask OS_SetIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = mask; + u16 unused = reg_OS_IME; //needed because otherwise it doesn't match + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_EnableIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = regIe | mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_DisableIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = regIe & ~mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIf = reg_OS_IF; + reg_OS_IF = mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIf; +} + +extern void SDK_IRQ_STACKSIZE(void); + +#define OSi_IRQ_STACK_TOP (HW_DTCM_SVC_STACK - ((s32)SDK_IRQ_STACKSIZE)) +#define OSi_IRQ_STACK_BOTTOM HW_DTCM_SVC_STACK + +ARM_FUNC void OS_SetIrqStackChecker(void) +{ + *(u32 *)(OSi_IRQ_STACK_BOTTOM - sizeof(u32)) = 0xfddb597dUL; + *(u32 *)(OSi_IRQ_STACK_TOP) = 0x7bf9dd5bUL; +} diff --git a/arm9/lib/NitroSDK/src/OS_irqHandler.c b/arm9/lib/NitroSDK/src/OS_irqHandler.c new file mode 100644 index 00000000..b4e2d232 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_irqHandler.c @@ -0,0 +1,143 @@ +#include "function_target.h" +#include "OS_irqHandler.h" +#include "OS_system.h" +#include "OS_thread.h" +#include "sections.h" +#include "CP_context.h" + +OSThreadQueue OSi_IrqThreadQueue = { NULL, NULL }; + +#pragma section ITCM begin +ARM_FUNC asm void OS_IrqHandler(void) +{ + stmfd sp!, {lr} + mov ip, #0x04000000 + add ip, ip, #0x210 + ldr r1, [ip, #-8] + cmp r1, #0 + ldmeqfd sp!, {pc} + ldmia ip, {r1, r2} + ands r1, r1, r2 + ldmeqfd sp!, {pc} + mov r3, #0x80000000 +_01FF8028: + clz r0, r1 + bics r1, r1, r3, lsr r0 + bne _01FF8028 + mov r1, r3, lsr r0 + str r1, [ip, #0x4] + rsbs r0, r0, #0x1f + ldr r1, =OS_IRQTable + ldr r0, [r1, r0, lsl #2] + ldr lr, =OS_IrqHandler_ThreadSwitch + bx r0 +} + +ARM_FUNC asm void OS_IrqHandler_ThreadSwitch(void) +{ + ldr ip, =OSi_IrqThreadQueue + mov r3, #0x0 + ldr ip, [ip] + mov r2, #0x1 + cmp ip, #0x0 + beq _01FF80A8 +_01FF8070: + str r2, [ip, #0x64] + str r3, [ip, #0x78] + str r3, [ip, #0x7c] + ldr r0, [ip, #0x80] + str r3, [ip, #0x80] + mov ip, r0 + cmp ip, #0x0 + bne _01FF8070 + ldr ip, =OSi_IrqThreadQueue + str r3, [ip] + str r3, [ip, #0x4] + ldr ip, =OSi_ThreadInfo + mov r1, #0x1 + strh r1, [ip] +_01FF80A8: + ldr ip, =OSi_ThreadInfo + ldrh r1, [ip] + cmp r1, #0x0 + ldreq pc, [sp], #0x4 + mov r1, #0x0 + strh r1, [ip] + mov r3, #0xd2 + msr CPSR_c, r3 + add r2, ip, #0x8 + ldr r1, [r2] +_01FF80D0: + cmp r1, #0x0 + ldrneh r0, [r1, #0x64] + cmpne r0, #0x1 + ldrne r1, [r1, #0x68] + bne _01FF80D0 + cmp r1, #0x0 + bne _01FF80F8 +_01FF80EC: + mov r3, #0x92 + msr CPSR_c, r3 + ldr pc, [sp], #0x4 +_01FF80F8: + ldr r0, [ip, #0x4] + cmp r1, r0 + beq _01FF80EC + ldr r3, [ip, #0xC] + cmp r3, #0x0 + beq _01FF8120 + stmdb sp!, {r0, r1, ip} + mov lr, pc + bx r3 + ldmia sp!, {r0, r1, ip} +_01FF8120: + str r1, [ip, #0x4] + mrs r2, SPSR + str r2, [r0, #0x0]! + stmdb sp!, {r0, r1} + add r0, r0, #0x0 + add r0, r0, #0x48 + ldr r1, =CP_SaveContext + blx r1 + ldmia sp!, {r0, r1} + ldmib sp!, {r2, r3} + stmib r0!, {r2, r3} + ldmib sp!, {r2, r3, ip, lr} + stmib r0!, {r2-r14}^ + stmib r0!, {lr} + mov r3, #0xd3 + msr CPSR_c, r3 + stmib r0!, {sp} + stmfd sp!, {r1} + add r0, r1, #0x0 + add r0, r0, #0x48 + ldr r1, =CPi_RestoreContext + blx r1 + ldmfd sp!, {r1} + ldr sp, [r1, #0x44] + mov r3, #0xd2 + msr CPSR_c, r3 + ldr r2, [r1, #0x0]! + msr SPSR_fc, r2 + ldr lr, [r1, #0x40] + ldmib r1!, {r0-r14}^ + nop + stmda sp!, {r0, r1, r2, r3, ip, lr} + ldmfd sp!, {pc} +} +#pragma section ITCM end + +ARM_FUNC void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + if (clear) + { + OS_ClearIrqCheckFlag(irqFlags); + } + (void)OS_RestoreInterrupts(lastIntrMode); + + while (!(OS_GetIrqCheckFlag() & irqFlags)) + { + OS_SleepThread(&OSi_IrqThreadQueue); + } +} diff --git a/arm9/lib/NitroSDK/src/OS_irqTable.c b/arm9/lib/NitroSDK/src/OS_irqTable.c new file mode 100644 index 00000000..cc2a3a55 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_irqTable.c @@ -0,0 +1,110 @@ +#include "function_target.h" +#include "sections.h" +#include "OS_irqTable.h" + +#pragma section DTCM begin +OSIrqFunction OS_IRQTable[22] = { + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OSi_IrqTimer0, + OSi_IrqTimer1, + OSi_IrqTimer2, + OSi_IrqTimer3, + OS_IrqDummy, + OSi_IrqDma0, + OSi_IrqDma1, + OSi_IrqDma2, + OSi_IrqDma3, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy +}; +#pragma section DTCM end + +OSIrqCallbackInfo OSi_IrqCallbackInfo[8] = { + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, +}; + +static u16 OSi_IrqCallbackInfoIndex[8] = { + 8, 9, 10, 11, 3, 4, 5, 6 +}; + +ARM_FUNC void OS_IrqDummy(void) +{ + //noop +} + +ARM_FUNC void OSi_IrqCallback(s32 index) +{ + OSIrqMask mask = (1UL << OSi_IrqCallbackInfoIndex[index]); + void (*callback)(void *) = OSi_IrqCallbackInfo[index].func; + + OSi_IrqCallbackInfo[index].func = NULL; + + if (callback) + { + (callback)(OSi_IrqCallbackInfo[index].arg); + } + + OS_SetIrqCheckFlag(mask); + + if (!OSi_IrqCallbackInfo[index].enable) + { + (void)OS_DisableIrqMask(mask); + } +} + +ARM_FUNC void OSi_IrqDma0(void) +{ + OSi_IrqCallback(0); +} + +ARM_FUNC void OSi_IrqDma1(void) +{ + OSi_IrqCallback(1); +} + +ARM_FUNC void OSi_IrqDma2(void) +{ + OSi_IrqCallback(2); +} + +ARM_FUNC void OSi_IrqDma3(void) +{ + OSi_IrqCallback(3); +} + +ARM_FUNC void OSi_IrqTimer0(void) +{ + OSi_IrqCallback(4); +} + +ARM_FUNC void OSi_IrqTimer1(void) +{ + OSi_IrqCallback(5); +} + +ARM_FUNC void OSi_IrqTimer2(void) +{ + OSi_IrqCallback(6); +} + +ARM_FUNC void OSi_IrqTimer3(void) +{ + OSi_IrqCallback(7); +} diff --git a/arm9/lib/NitroSDK/src/OS_message.c b/arm9/lib/NitroSDK/src/OS_message.c new file mode 100644 index 00000000..3b5c33b0 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_message.c @@ -0,0 +1,124 @@ +#include "OS_message.h" +#include "function_target.h" +#include "OS_system.h" +#include "OS_thread.h" + +ARM_FUNC void OS_InitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount) +{ + OS_InitThreadQueue(&mq->queueSend); + OS_InitThreadQueue(&mq->queueReceive); + mq->msgArray = msgArray; + mq->msgCount = msgCount; + mq->firstIndex = 0; + mq->usedCount = 0; +} + +ARM_FUNC BOOL OS_SendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + while (mq->msgCount <= mq->usedCount) + { + if (!(flags & OS_MESSAGE_BLOCK)) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + else + { + OS_SleepThread(&mq->queueSend); + } + } + + s32 lastIndex = (mq->firstIndex + mq->usedCount) % mq->msgCount; + mq->msgArray[lastIndex] = msg; + mq->usedCount++; + + OS_WakeupThread(&mq->queueReceive); + + (void)OS_RestoreInterrupts(enabled); + return TRUE; +} + +ARM_FUNC BOOL OS_ReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + while (mq->usedCount == 0) + { + if (!(flags & OS_MESSAGE_BLOCK)) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + else + { + OS_SleepThread(&mq->queueReceive); + } + } + + if (msg != NULL) + { + *msg = mq->msgArray[mq->firstIndex]; + } + mq->firstIndex = (mq->firstIndex + 1) % mq->msgCount; + mq->usedCount--; + + OS_WakeupThread(&mq->queueSend); + + (void)OS_RestoreInterrupts(enabled); + return TRUE; +} + +ARM_FUNC BOOL OS_JamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + while (mq->msgCount <= mq->usedCount) + { + if (!(flags & OS_MESSAGE_BLOCK)) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + else + { + OS_SleepThread(&mq->queueSend); + } + } + + mq->firstIndex = (mq->firstIndex + mq->msgCount - 1) % mq->msgCount; + mq->msgArray[mq->firstIndex] = msg; + mq->usedCount++; + + OS_WakeupThread(&mq->queueReceive); + + (void)OS_RestoreInterrupts(enabled); + return TRUE; +} + +ARM_FUNC BOOL OS_ReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + while (mq->usedCount == 0) + { + if (!(flags & OS_MESSAGE_BLOCK)) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + else + { + OS_SleepThread(&mq->queueReceive); + } + } + + if (msg != NULL) + { + *msg = mq->msgArray[mq->firstIndex]; + } + + (void)OS_RestoreInterrupts(enabled); + return TRUE; +} diff --git a/arm9/lib/NitroSDK/src/OS_mutex.c b/arm9/lib/NitroSDK/src/OS_mutex.c new file mode 100644 index 00000000..5eb999a9 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_mutex.c @@ -0,0 +1,142 @@ +#include "nitro/types.h" +#include "function_target.h" +#include "OS_mutex.h" +#include "OS_system.h" + +ARM_FUNC void OS_InitMutex(OSMutex *mutex) +{ + OS_InitThreadQueue(&mutex->queue); + mutex->thread = NULL; + mutex->count = 0; +} + +ARM_FUNC void OS_LockMutex(OSMutex *mutex) +{ + OSIntrMode prevIntrMode = OS_DisableInterrupts(); + OSThread *currentThread = OS_GetCurrentThread(); + + OSThread *ownerThread; + for (;;) + { + ownerThread = ((volatile OSMutex *)mutex)->thread; + + if (ownerThread == NULL) + { + mutex->thread = currentThread; + mutex->count++; + OSi_EnqueueTail(currentThread, mutex); + break; + } + else if (ownerThread == currentThread) + { + mutex->count++; + break; + } + else + { + currentThread->mutex = mutex; + OS_SleepThread(&mutex->queue); + currentThread->mutex = NULL; + } + } + + (void)OS_RestoreInterrupts(prevIntrMode); +} + +ARM_FUNC void OS_UnlockMutex(OSMutex *mutex) +{ + OSIntrMode prevIntrMode = OS_DisableInterrupts(); + OSThread *currentThread = OS_GetCurrentThread(); + + if (mutex->thread == currentThread && --mutex->count == 0) + { + OSi_DequeueItem(currentThread, mutex); + mutex->thread = NULL; + + OS_WakeupThread(&mutex->queue); + } + + (void)OS_RestoreInterrupts(prevIntrMode); +} + +ARM_FUNC void OSi_UnlockAllMutex(OSThread *thread) +{ + OSMutex *mutex; + while (thread->mutexQueue.head) + { + mutex = OSi_RemoveMutexLinkFromQueue(&thread->mutexQueue); + + mutex->count = 0; + mutex->thread = NULL; + OS_WakeupThread(&mutex->queue); + } +} + +ARM_FUNC BOOL OS_TryLockMutex(OSMutex *mutex) +{ + OSIntrMode prevIntrMode = OS_DisableInterrupts(); + OSThread *currentThread = OS_GetCurrentThread(); + BOOL locked; + + if (mutex->thread == NULL) + { + mutex->thread = currentThread; + mutex->count++; + OSi_EnqueueTail(currentThread, mutex); + locked = TRUE; + } + else if (mutex->thread == currentThread) + { + mutex->count++; + locked = TRUE; + } + else + { + locked = FALSE; + } + + (void)OS_RestoreInterrupts(prevIntrMode); + return locked; +} + +ARM_FUNC void OSi_EnqueueTail(OSThread *thread, OSMutex *mutex) +{ + OSMutex *prev = thread->mutexQueue.tail; + + if (!prev) + { + thread->mutexQueue.head = mutex; + } + else + { + prev->link.next = mutex; + } + + mutex->link.prev = prev; + mutex->link.next = NULL; + thread->mutexQueue.tail = mutex; +} + +ARM_FUNC void OSi_DequeueItem(OSThread *thread, OSMutex *mutex) +{ + OSMutex *next = mutex->link.next; + OSMutex *prev = mutex->link.prev; + + if (!next) + { + thread->mutexQueue.tail = prev; + } + else + { + next->link.prev = prev; + } + + if(!prev) + { + thread->mutexQueue.head = next; + } + else + { + prev->link.next = next; + } +} diff --git a/arm9/lib/NitroSDK/src/OS_ownerInfo.c b/arm9/lib/NitroSDK/src/OS_ownerInfo.c new file mode 100644 index 00000000..6693f73f --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_ownerInfo.c @@ -0,0 +1,29 @@ +#include "OS_ownerInfo.h" + +#include "global.h" +#include "systemWork.h" +#include "MI_memory.h" + +ARM_FUNC void OS_GetMacAddress(u8 *macAddress) +{ + MI_CpuCopy8((void *)0x027FFCF4, macAddress, 0x6); +} + +ARM_FUNC void OS_GetOwnerInfo(OSOwnerInfo* info) +{ + NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo; + info->language = (u8)src->ncd.option.language; + info->favoriteColour = (u8)src->ncd.owner.favouriteColour; + info->birthday.month = (u8)src->ncd.owner.birthday.month; + info->birthday.day = (u8)src->ncd.owner.birthday.day; + info->nickNameLength = (u16)src->ncd.owner.nickname.length; + info->commentLength = (u16)src->ncd.owner.comment.length; + MIi_CpuCopy16(src->ncd.owner.nickname.str, info->nickName, 10 * sizeof(u16)); + MIi_CpuCopy16(src->ncd.owner.comment.str, info->comment, 26 * sizeof(u16)); +} + +ARM_FUNC s64 OS_GetOwnerRtcOffset(void) +{ + NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo; + return src->ncd.option.rtcOffset; +} diff --git a/arm9/lib/NitroSDK/src/OS_printf.c b/arm9/lib/NitroSDK/src/OS_printf.c new file mode 100644 index 00000000..414f0db9 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_printf.c @@ -0,0 +1,492 @@ +#include "global.h" +#include "OS_printf.h" + +typedef struct printfStr +{ + s32 spaceLeft; + s8 *stringEnd; + s8 *stringStart; +} printfStr; + +void string_put_char(struct printfStr *dest, s8 value); +void string_fill_char(struct printfStr *dest, s8 value, s32 count); +void string_put_string(struct printfStr *dest, const s8 *src, s32 count); + +ARM_FUNC void string_put_char(struct printfStr *dest, s8 value) +{ + if (dest->spaceLeft != 0) + { + dest->stringEnd[0] = value; + dest->spaceLeft--; + } + dest->stringEnd++; +} + +ARM_FUNC void string_fill_char(struct printfStr *dest, s8 value, s32 count) +{ + if (count <= 0) + return; + + u32 written = 0; + u32 spaceLeft = (u32)dest->spaceLeft; + u32 toWrite = spaceLeft > (u32)count ? count : spaceLeft; + + while (written < toWrite) + { + dest->stringEnd[written] = value; + written++; + } + + dest->spaceLeft -= toWrite; + dest->stringEnd += count; // this is wrong but matching... +} + +ARM_FUNC void string_put_string(struct printfStr *dest, const s8 *src, s32 count) +{ + if (count <= 0) + return; + + u32 written = 0; + u32 spaceLeft = (u32)dest->spaceLeft; + u32 toWrite = spaceLeft > (u32)count ? count : spaceLeft; + + while (written < toWrite) + { + dest->stringEnd[written] = src[written]; + written++; + } + + dest->spaceLeft -= toWrite; + dest->stringEnd += count; // this is wrong but matching... +} + +ARM_FUNC s32 OS_SPrintf(s8 *buffer, const s8 *format, ...) +{ + void *args = (void *)((u32 *)((u32)&format & ~0x3) + 1); // hack since mwccarm doesn't have apparently + return OS_VSPrintf(buffer, format, args); +} + +ARM_FUNC s32 OS_VSPrintf(s8 *buffer, const s8 *format, void *args) +{ + return OS_VSNPrintf(buffer, 0x7FFFFFFF, format, args); +} + +ARM_FUNC s32 OS_SNPrintf(s8 *buffer, s32 bufsz, const s8 *format, ...) +{ + void *args = (void *)((u32 *)((u32)&format & ~0x3) + 1); // hack since mwccarm doesn't have apparently + return OS_VSNPrintf(buffer, bufsz, format, args); +} + +#define va_arg(list, ty) *(ty *)((u32 *)(list = (void *)((u32 *)(list) + 1)) - 1) +#define va_arg_64(list, sgn) *((sgn##64 *)(list = (void *)((sgn##64 *)(list) + 1)) - 1) + +ARM_FUNC s32 OS_VSNPrintf(s8 *buffer, s32 bufsz, const s8 *format, void *args) +{ + s8 buf[24]; + s32 n_buf; + s8 prefix[2]; + s32 n_prefix; + + const s8 *s = format; + + printfStr str; + str.spaceLeft = bufsz; + str.stringStart = buffer; + str.stringEnd = buffer; + + while (*s) + { + // matches: + // binary range (hex range) [dec range] + // 1000 0001-1001 1111 (0x81-0x9F) [129-159] + // 1110 0000-1111 1100 (0xE0-0xFC) [224-252] + if ((u32)(((u8)*s ^ 0x20) - 0xa1) < 0x3c) + { + string_put_char(&str, *s++); + if (*s) + { + string_put_char(&str, *s++); + } + } + else if (*s != '%') + { + string_put_char(&str, *s++); + } + else + { + enum { + blank = 000001, + plus = 000002, + sharp = 000004, + minus = 000010, + zero = 000020, + l1 = 000040, + h1 = 000100, + l2 = 000200, + h2 = 000400, + usigned = 010000, + end + }; + s32 flag = 0, width = 0, precision = -1, radix = 10; + s8 hex = 'a' - 10; + const s8 *p_start = s; + for (;;) + { + switch (*++s) + { + case '+': + if (s[-1] != ' ') + break; + flag |= plus; + continue; + case ' ': + flag |= blank; + continue; + case '-': + flag |= minus; + continue; + case '0': + flag |= zero; + continue; + } + break; + } + if (*s == '*') + { + ++s, width = va_arg(args, s32); + if (width < 0) + { + width = -width, flag |= minus; + } + } + else + { + while ((*s >= '0') && (*s <= '9')) + { + width = (width * 10) + *s++ - '0'; + } + } + + if (*s == '.') + { + ++s, precision = 0; + if (*s == '*') + { + ++s, precision = va_arg(args, s32); + if (precision < 0) + { + precision = -1; + } + } + else + { + while ((*s >= '0') && (*s <= '9')) + { + precision = (precision * 10) + *s++ - '0'; + } + } + } + + switch (*s) + { + case 'h': + if (*++s != 'h') { + flag |= h1; + } + else { + ++s, flag |= h2; + } + break; + case 'l': + if (*++s != 'l') { + flag |= l1; + } + else { + ++s, flag |= l2; + } + break; + } + + switch (*s) + { + case 'd': + case 'i': + goto put_int; + case 'o': + radix = 8; + flag |= usigned; + goto put_int; + case 'u': + flag |= usigned; + goto put_int; + case 'X': + hex = 'A' - 10; + goto put_hex; + case 'x': + goto put_hex; + case 'p': + flag |= sharp; + precision = 8; + goto put_hex; + case 'c': + if (precision >= 0) + goto put_invalid; + { + s32 v = va_arg(args, s32); + width -= 1; + if (flag & minus) + { + string_put_char(&str, (s8)v); + string_fill_char(&str, ' ', width); + } + else + { + s8 pad = (s8)((flag & zero) ? '0' : ' '); + string_fill_char(&str, pad, width); + string_put_char(&str, (s8)v); + } + ++s; + } + break; + case 's': + { + s32 n_bufs = 0; + const s8 *p_bufs = va_arg(args, const s8 *); + if (precision < 0) + { + while (p_bufs[n_bufs]) + { + ++n_bufs; + } + } + else + { + while (n_bufs < precision && p_bufs[n_bufs]) + { + ++n_bufs; + } + } + width -= n_bufs; + if (flag & minus) + { + string_put_string(&str, p_bufs, n_bufs); + string_fill_char(&str, ' ', width); + } + else + { + s8 pad = (s8)((flag & zero) ? '0' : ' '); + string_fill_char(&str, pad, width); + string_put_string(&str, p_bufs, n_bufs); + } + ++s; + } + break; + case 'n': + { + s32 count = str.stringEnd - str.stringStart; + if (!(flag & h2)) + { + if (flag & h1) + { + *va_arg(args, s16 *) = (s16)count; + } + else if (flag & l2) + { + *va_arg(args, u64 *) = (u64)count; + } + else + { + *va_arg(args, s32 *) = count; + } + } + } + ++s; + break; + case '%': + if (p_start + 1 != s) + goto put_invalid; + string_put_char(&str, *s++); + break; + + default: + goto put_invalid; + + put_invalid: + string_put_string(&str, p_start, s - p_start); + break; + + put_hex: + radix = 16; + flag |= usigned; + put_int: + { + u64 value = 0; + n_prefix = 0; + if (flag & minus) + { + flag &= ~zero; + } + if (precision < 0) + { + precision = 1; + } + else + { + flag &= ~zero; + } + if (flag & usigned) + { + if (flag & h2) + { + value = va_arg(args, u8); + } + else if (flag & h1) + { + value = va_arg(args, u16); + } + else if (flag & l2) + { + value = va_arg_64(args, u); + } + else + { + value = va_arg(args, u32); + } + flag &= ~(plus | blank); + if (flag & sharp) + { + if (radix == 16) + { + if (value != 0) + { + prefix[0] = (s8)(hex + (10 + 'x' - 'a')); + prefix[1] = '0'; + n_prefix = 2; + } + } + else if (radix == 8) + { + prefix[0] = '0'; + n_prefix = 1; + } + } + } + else { + if (flag & h2) { + value = va_arg(args, s8); + } else if (flag & h1) { + value = va_arg(args, s16); + } else if (flag & l2) { + value = va_arg_64(args, u); + } else { + value = va_arg(args, s32); + } + + if ((value >> 32) & 0x80000000) { + value = ~value + 1; + prefix[0] = '-'; + n_prefix = 1; + } else { + if (value || precision) { + if (flag & plus) { + prefix[0] = '+'; + n_prefix = 1; + } else if (flag & blank) { + prefix[0] = ' '; + n_prefix = 1; + } + } + } + } + n_buf = 0; + switch (radix) { + case 8: + while (value != 0) { + s32 octDig = (s32) (value & 0x7); + value >>= 3; + buf[n_buf++] = (s8) (octDig + '0'); + } + break; + case 10: + if ((value >> 32) == 0) { + u32 v = (u32) value; + while (v) { + u32 div10 = v / 10; + s32 dig = (s32) (v - (div10 * 10)); + v = div10; + buf[n_buf++] = (s8) (dig + '0'); + } + } else { + while (value) { + u64 div10 = value / 10; + s32 dig = (s32) (value - (div10 * 10)); + value = div10; + buf[n_buf++] = (s8) (dig + '0'); + } + } + break; + case 16: + while (value != 0) { + s32 hexDig = (s32) (value & 0xf); + value >>= 4; + buf[n_buf++] = (s8) ((hexDig < 10) ? (hexDig + '0') : (hexDig + hex)); + } + break; + } + if (n_prefix > 0 && prefix[0] == '0') { + n_prefix = 0; + buf[n_buf++] = '0'; + } + } + goto put_to_stream; + + put_to_stream: + { + s32 n_pad = (s32)(precision - n_buf); + if (flag & zero) + { + if (n_pad < width - n_buf - n_prefix) + { + n_pad = (s32)(width - n_buf - n_prefix); + } + } + if (n_pad > 0) + { + width -= n_pad; + } + + width -= n_prefix + n_buf; + if (!(flag & minus)) + { + string_fill_char(&str, ' ', width); + } + while (n_prefix > 0) + { + string_put_char(&str, prefix[--n_prefix]); + } + string_fill_char(&str, '0', n_pad); + while (n_buf > 0) + { + string_put_char(&str, buf[--n_buf]); + } + if (flag & minus) + { + string_fill_char(&str, ' ', width); + } + ++s; + } + break; + } + } + } + + if (str.spaceLeft != 0) + { + *str.stringEnd = '\0'; + } + else if (bufsz != 0) + { + str.stringStart[bufsz - 1] = '\0'; + } + return str.stringEnd - str.stringStart; +} diff --git a/arm9/lib/NitroSDK/src/OS_protectionRegion.c b/arm9/lib/NitroSDK/src/OS_protectionRegion.c new file mode 100644 index 00000000..4b8d8297 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_protectionRegion.c @@ -0,0 +1,23 @@ +#include "function_target.h" +#include "OS_protectionRegion.h" + +ARM_FUNC asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags) +{ + mrc p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region + bic r2, r2, r0 + orr r2, r2, r1 + mcr p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region + bx lr +} + +ARM_FUNC asm void OS_SetProtectionRegion1(u32 param) +{ + mcr p15, 0x0, r0, c6, c1, 0x0 //Protection Unit Data Region 1 + bx lr +} + +ARM_FUNC asm void OS_SetProtectionRegion2(u32 param) +{ + mcr p15, 0x0, r0, c6, c2, 0x0 //Protection Unit Data Region 2 + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_protectionUnit.c b/arm9/lib/NitroSDK/src/OS_protectionUnit.c new file mode 100644 index 00000000..66811a1e --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_protectionUnit.c @@ -0,0 +1,18 @@ +#include "function_target.h" +#include "OS_protectionUnit.h" + +ARM_FUNC asm void OS_EnableProtectionUnit(void) +{ + mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register + orr r0, r0, #0x1 + mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register + bx lr +} + +ARM_FUNC asm void OS_DisableProtectionUnit(void) +{ + mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register + bic r0, r0, #0x1 + mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_reset.c b/arm9/lib/NitroSDK/src/OS_reset.c new file mode 100644 index 00000000..083f2321 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_reset.c @@ -0,0 +1,239 @@ +#include "OS_reset.h" + +#include "global.h" +#include "MB_mb.h" +#include "OS_terminate_proc.h" +#include "OS_interrupt.h" +#include "OS_system.h" +#include "OS_spinLock.h" +#include "OS_cache.h" +#include "sections.h" +#include "MI_dma.h" +#include "CARD_common.h" +#include "PXI_init.h" +#include "PXI_fifo.h" + +static u16 OSi_IsInitReset = 0; +vu16 OSi_IsResetOccurred = 0; + +static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); +static void OSi_SendToPxi(u16 data); +static void OSi_DoResetSystem(void); +static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size); +static void OSi_ReloadRomData(void); +static void OSi_ReadCardRom32(u32 src, void *dst, s32 len); + +ARM_FUNC void OS_InitReset(void) { + if (OSi_IsInitReset) { + return; + } + OSi_IsInitReset = TRUE; + PXI_Init(); + while (!PXI_IsCallbackReady(PXI_FIFO_TAG_OS, PXI_PROC_ARM7)) { } + + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_OS, OSi_CommonCallback); +} + +ARM_FUNC static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err) { +#pragma unused(tag, err) //needed because otherwise -W all errors + u16 command = (u16)((data & OS_PXI_COMMAND_MASK) >> OS_PXI_COMMAND_SHIFT); + if (command == OS_PXI_COMMAND_RESET) + { + OSi_IsResetOccurred = TRUE; + return; + } + OS_Terminate(); +} + +ARM_FUNC static void OSi_SendToPxi(u16 data) { + while (PXI_SendWordByFifo(PXI_FIFO_TAG_OS, (u32)data << 0x8, FALSE)) {} +} + +ARM_FUNC void OS_ResetSystem(u32 parameter) { + if (MB_IsMultiBootChild()) { + OS_Terminate(); + } + CARD_LockRom((u16)OS_GetLockID()); + MI_StopDma(0); + MI_StopDma(1); + MI_StopDma(2); + MI_StopDma(3); + (void)OS_SetIrqMask(0x40000); + (void)OS_ResetRequestIrqMask((u32)~0); + *(u32 *)HW_RESET_PARAMETER_BUF = parameter; + OSi_SendToPxi(OS_PXI_COMMAND_RESET); + OSi_DoResetSystem(); +} + +#pragma section ITCM begin +ARM_FUNC static void OSi_DoResetSystem(void) +{ + while (!OSi_IsResetOccurred) { } + + reg_OS_IME = 0; + OSi_ReloadRomData(); + OSi_DoBoot(); +} + +ARM_FUNC asm void OSi_DoBoot(void) +{ + mov ip, #0x04000000 + str ip, [ip, #0x208] + ldr r1, =SDK_AUTOLOAD_DTCM_START + add r1, r1, #0x3fc0 + add r1, r1, #0x3c + mov r0, #0x0 + str r0, [r1] + ldr r1, =REG_SUBPINTF_ADDR +_01FF81D4: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + bne _01FF81D4 + mov r0, #0x100 + strh r0, [r1] + mov r0, #0x0 + ldr r3, =HW_EXCP_VECTOR_MAIN + ldr r4, [r3] + ldr r1, =HW_BIOS_EXCP_STACK_MAIN + mov r2, #0x80 + bl OSi_CpuClear32 + str r4, [r3] + ldr r1, =HW_PXI_SIGNAL_PARAM_ARM9 + mov r2, #0x18 + bl OSi_CpuClear32 + ldr r1, =HW_WM_RSSI_POOL + strh r0, [r1] + ldr r1, =HW_COMPONENT_PARAM + mov r2, #0x64 + bl OSi_CpuClear32 + ldr r1, =REG_SUBPINTF_ADDR +_01FF822C: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + beq _01FF822C + mov r0, #0x0 + strh r0, [r1] + ldr r3, =HW_ROM_HEADER_BUF + ldr ip, [r3, #0x24] + mov lr, ip + ldr r11, =HW_PXI_SIGNAL_PARAM_ARM9 + ldmia r11, {r0-r10} + mov r11, #0x0 + bx ip +} + +ARM_FUNC static asm void OSi_CpuClear32(register u32 data, register void *destp, register u32 size) +{ + add ip, r1, r2 +_01FF8284: + cmp r1, ip + stmltia r1!, {r0} + blt _01FF8284 + bx lr +} + +ARM_FUNC static void OSi_ReloadRomData(void) +{ + u32 header = (u32)HW_ROM_HEADER_BUF; + const u32 rom_base = *(u32 *)HW_ROM_BASE_OFFSET_BUF; + + if (rom_base >= 0x8000) + { + OSi_ReadCardRom32(rom_base, (void *)header, 0x160); + } + + u32 src_arm9 = *(u32 *)(header + 0x20); + u32 dst_arm9 = *(u32 *)(header + 0x28); + u32 len_arm9 = *(u32 *)(header + 0x2c); + u32 src_arm7 = *(u32 *)(header + 0x30); + u32 dst_arm7 = *(u32 *)(header + 0x38); + u32 len_arm7 = *(u32 *)(header + 0x3c); + + OSIntrMode prevIntrMode = OS_DisableInterrupts(); + DC_StoreAll(); + DC_InvalidateAll(); + (void)OS_RestoreInterrupts(prevIntrMode); + + IC_InvalidateAll(); + DC_WaitWriteBufferEmpty(); + + src_arm9 += rom_base; + src_arm7 += rom_base; + + if (src_arm9 < 0x8000) + { + u32 diff = 0x8000 - src_arm9; + src_arm9 = 0x8000; + dst_arm9 += diff; + len_arm9 -= diff; + } + OSi_ReadCardRom32(src_arm9, (void *)dst_arm9, (s32)len_arm9); + + OSi_ReadCardRom32(src_arm7, (void *)dst_arm7, (s32)len_arm7); +} + +enum +{ + CARD_MASTER_SELECT_ROM = 0x0, + CARD_MASTER_ENABLE = 0x80, + CARD_CMD_READ_PAGE = 0xb7, + CARD_CTRL_CMD_MASK = 0x07000000, + CARD_CTRL_CMD_PAGE = 0x01000000, + CARD_CTRL_READ = 0x00000000, + CARD_CTRL_RESET_HI = 0x20000000, + CARD_CTRL_START = 0x80000000, + CARD_CTRL_READY = 0x00800000, + CARD_ENUM_END +}; + +ARM_FUNC static void OSi_ReadCardRom32(u32 src, void *dst, s32 len) +{ + vu32 *const hdr_GAME_BUF = (vu32 *)(HW_ROM_HEADER_BUF + 0x60); + + const u32 ctrl_start = (u32)((*hdr_GAME_BUF &~CARD_CTRL_CMD_MASK) + | (CARD_CTRL_CMD_PAGE | CARD_CTRL_READ + | CARD_CTRL_START | CARD_CTRL_RESET_HI)); + + s32 pos = -(s32)(src & 511); + + while (reg_CARD_CNT & CARD_CTRL_START) {} + reg_CARD_MASTERCNT = (u32)(CARD_MASTER_SELECT_ROM | CARD_MASTER_ENABLE); + + for (src = (u32)(src + pos); pos < len; src += 512) + { + (®_CARD_CMD)[0] = (u8)(CARD_CMD_READ_PAGE); + (®_CARD_CMD)[1] = (u8)(src >> 24); + (®_CARD_CMD)[2] = (u8)(src >> 16); + (®_CARD_CMD)[3] = (u8)(src >> 8); + (®_CARD_CMD)[4] = (u8)(src >> 0); + (®_CARD_CMD)[5] = 0; + (®_CARD_CMD)[6] = 0; + (®_CARD_CMD)[7] = 0; + + reg_CARD_CNT = ctrl_start; + for (;;) + { + u32 ctrl = reg_CARD_CNT; + + if ((ctrl & CARD_CTRL_READY)) + { + const u32 data = reg_CARD_DATA; + + if ((pos >= 0) && (pos < len)) + { + *(u32 *)((u32)dst + pos) = data; + } + + pos += sizeof(u32); + } + + if (!(ctrl & CARD_CTRL_START)) + { + break; + } + } + } +} +#pragma section ITCM end diff --git a/arm9/lib/NitroSDK/src/OS_spinLock.c b/arm9/lib/NitroSDK/src/OS_spinLock.c new file mode 100644 index 00000000..576e03ad --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_spinLock.c @@ -0,0 +1,218 @@ +// +// Created by red031000 on 2020-05-21. +// + +#include "OS_spinLock.h" + +#include "OS_system.h" +#include "function_target.h" +#include "mmap.h" +#include "MI_exMemory.h" + +extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names +extern u32 MI_SwapWord(u32 data, volatile u32* destp); + +ARM_FUNC void OS_InitLock(void) +{ + static BOOL isInitialized = FALSE; + + if (isInitialized) + { + return; + } + isInitialized = TRUE; + + OSLockWord* lockp = (OSLockWord *)HW_INIT_LOCK_BUF; + + lockp->lockFlag = 0; + + (void)OS_TryLockByWord(0x7e, lockp, NULL); + + while (lockp->extension) + { + OSi_WaitByLoop(); + } + + ((u32 *)HW_LOCK_ID_FLAG_MAIN)[0] = 0xffffffff; + ((u32 *)HW_LOCK_ID_FLAG_MAIN)[1] = 0xffff0000; + + MIi_CpuClear32(0x0, (void *)HW_SHARED_LOCK_BUF, 0x28); + + MIi_SetCardProcessor(MI_PROCESSOR_ARM7); + + MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7); + + (void)OS_UnlockByWord(0x7e, lockp, NULL); + (void)OS_TryLockByWord(0x7f, lockp, NULL); +} + +ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq) +{ + s32 lastLockFlag; + while ((lastLockFlag = OSi_DoTryLockByWord(lockId, lockp, ctrlFuncp, disableFiq)) > 0) { + OSi_WaitByLoop(); + } + + return lastLockFlag; +} + +ARM_FUNC s32 OS_TryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)) +{ + return OSi_DoLockByWord(lockId, lockp, ctrlFuncp, FALSE); +} + +ARM_FUNC s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFIQ) +{ + if (lockID != lockp->ownerID) + { + return -2; + } + + OSIntrMode lastIntrMode = (disableFIQ) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); + lockp->ownerID = 0; + if (ctrlFuncp) + { + ctrlFuncp(); + } + lockp->lockFlag = 0; + if (disableFIQ) + { + (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); + } + else + { + (void)OS_RestoreInterrupts(lastIntrMode); + } + return 0; +} + +ARM_FUNC s32 OS_UnlockByWord(u16 lockID, OSLockWord* lockp, void (*ctrlFuncp) (void)) +{ + return OSi_DoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE); +} + +ARM_FUNC s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq) +{ + OSIntrMode lastIntrMode = (disableFiq) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); + + s32 lastLockFlag = (s32)MI_SwapWord(lockID, &lockp->lockFlag); + + if (!lastLockFlag) + { + if (ctrlFuncp) + { + ctrlFuncp(); + } + lockp->ownerID = lockID; + } + + if (disableFiq) + { + (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); + } + else + { + (void)OS_RestoreInterrupts(lastIntrMode); + } + + return lastLockFlag; +} + +ARM_FUNC s32 OS_LockCartridge(u16 lockID) +{ + return OSi_DoLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); +} + +ARM_FUNC s32 OS_UnlockCartridge(u16 lockID) +{ + return OSi_DoUnlockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_FreeCartridgeBus, TRUE); +} + +ARM_FUNC s32 OS_TryLockCartridge(u16 lockID) +{ + return OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); +} + +ARM_FUNC void OSi_AllocateCartridgeBus(void) +{ + MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM9); +} + +ARM_FUNC void OSi_FreeCartridgeBus(void) +{ + MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7); +} + +ARM_FUNC s32 OS_TryLockCard(u16 lockID) +{ + return OS_TryLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_AllocateCardBus); +} + +ARM_FUNC s32 OS_UnlockCard(u16 lockID) +{ + return OS_UnlockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_FreeCardBus); +} + +ARM_FUNC void OSi_AllocateCardBus(void) +{ + MIi_SetCardProcessor(MI_PROCESSOR_ARM9); +} + +ARM_FUNC void OSi_FreeCardBus(void) +{ + MIi_SetCardProcessor(MI_PROCESSOR_ARM7); +} + +ARM_FUNC u16 OS_ReadOwnerOfLockWord(OSLockWord * lock) +{ + return lock->ownerID; +} + +ARM_FUNC asm s32 OS_UnLockCartridge(u16 lockID) +{ + ldr r1, =OS_UnlockCartridge + bx r1 +} + +ARM_FUNC asm s32 OS_GetLockID(void) +{ + ldr r3, =HW_LOCK_ID_FLAG_MAIN + ldr r1, [r3, #0x0] + clz r2, r1 + cmp r2, #0x20 + movne r0, #0x40 + bne _020CA0D4 + add r3, r3, #0x4 + ldr r1, [r3, #0x0] + clz r2, r1 + cmp r2, #0x20 + ldr r0, =0xFFFFFFFD + bxeq lr + mov r0, #0x60 +_020CA0D4: + add r0, r0, r2 + mov r1, #0x80000000 + mov r1, r1, lsr r2 + ldr r2, [r3, #0x0] + bic r2, r2, r1 + str r2, [r3, #0x0] + bx lr +} + +ARM_FUNC asm void OS_ReleaseLockID(register u16 lockID) +{ + ldr r3, =HW_LOCK_ID_FLAG_MAIN + cmp r0, #0x60 + addpl r3, r3, #0x4 + subpl r0, r0, #0x60 + submi r0, r0, #0x40 + mov r1, #0x80000000 + mov r1, r1, lsr r0 + ldr r2, [r3, #0x0] + orr r2, r2, r1 + str r2, [r3, #0x0] + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_system.c b/arm9/lib/NitroSDK/src/OS_system.c new file mode 100644 index 00000000..f5f5faba --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_system.c @@ -0,0 +1,77 @@ +#include "OS_system.h" +#include "OS_irqHandler.h" +#include "syscall.h" + +ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void) +{ + mrs r0, cpsr + bic r1, r0, #HW_PSR_DISABLE_IRQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_DisableInterrupts(void) +{ + mrs r0, cpsr + orr r1, r0, #HW_PSR_DISABLE_IRQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) +{ + mrs r1, cpsr + bic r2, r1, #HW_PSR_DISABLE_IRQ + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_DisableInterrupts_IrqAndFiq(void) +{ + mrs r0, cpsr + orr r1, r0, #HW_PSR_DISABLE_IRQ_FIQ + msr cpsr_c, r1 + and r0, r0, #HW_PSR_DISABLE_IRQ_FIQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state) +{ + mrs r1, cpsr + bic r2, r1, #HW_PSR_DISABLE_IRQ_FIQ + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_DISABLE_IRQ_FIQ + bx lr +} + +ARM_FUNC asm OSIntrMode OS_GetCpsrIrq(void) +{ + mrs r0, cpsr + and r0, r0, #HW_PSR_DISABLE_IRQ + bx lr +} + +ARM_FUNC asm OSProcMode OS_GetProcMode(void) +{ + mrs r0, cpsr + and r0, r0, #HW_PSR_CPU_MODE_MASK + bx lr +} + +ARM_FUNC asm void OS_SpinWait(u32 cycles) +{ + subs r0, r0, #0x4 + bhs OS_SpinWait + bx lr +} + +ARM_FUNC void OS_WaitVBlankIntr(void) +{ + SVC_WaitByLoop(0x1); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); +} diff --git a/arm9/lib/NitroSDK/src/OS_tcm.c b/arm9/lib/NitroSDK/src/OS_tcm.c new file mode 100644 index 00000000..5b6ab552 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_tcm.c @@ -0,0 +1,9 @@ +#include "OS_tcm.h" +#include "function_target.h" + +ARM_FUNC asm u32 OS_GetDTCMAddress(void) { + mrc p15, 0x0, r0, c9, c1, 0x0 //Data TCM Base + ldr r1, =OSi_TCM_REGION_BASE_MASK + and r0, r0, r1 + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_terminate_proc.c b/arm9/lib/NitroSDK/src/OS_terminate_proc.c new file mode 100644 index 00000000..fdc4dbff --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_terminate_proc.c @@ -0,0 +1,19 @@ +#include "OS_terminate_proc.h" +#include "function_target.h" +#include "OS_system.h" + +ARM_FUNC void OS_Terminate(void) +{ + while (TRUE) + { + (void)OS_DisableInterrupts(); + OS_Halt(); + } +} + +ARM_FUNC asm void OS_Halt(void) +{ + mov r0, #0x0 + mcr p15, 0x0, r0, c7, c0, 0x4 //Wait For Interrupt (Halt) + bx lr +} diff --git a/arm9/lib/NitroSDK/src/OS_thread.c b/arm9/lib/NitroSDK/src/OS_thread.c new file mode 100644 index 00000000..a52b1f6d --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_thread.c @@ -0,0 +1,734 @@ +#include "function_target.h" +#include "MI_memory.h" +#include "OS_thread.h" +#include "OS_mutex.h" +#include "OS_alarm.h" +#include "OS_system.h" +#include "OS_context.h" +#include "OS_terminate_proc.h" +#include "systemWork.h" +#include "mmap.h" + +extern void SDK_SYS_STACKSIZE(void); +extern void SDK_IRQ_STACKSIZE(void); + +extern void SDK_SECTION_ARENA_DTCM_START(void); + +static s32 OSi_ThreadIdCount = 0; + +u32 OSi_RescheduleCount = 0; + +void *OSi_StackForDestructor = NULL; + +BOOL OSi_IsThreadInitialized = FALSE; + +OSThreadInfo OSi_ThreadInfo; + +OSThread **OSi_CurrentThreadPtr = NULL; + +void *OSi_SystemCallbackInSwitchThread = NULL; + +OSThread OSi_LauncherThread; +OSThread OSi_IdleThread; + +u32 OSi_IdleThreadStack[50]; + +static s32 OSi_GetUnusedThreadId(void); +static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread); +static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue); +static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread); +static void OSi_InsertThreadToList(OSThread *thread); +static void OSi_RemoveThreadFromList(OSThread *thread); +static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg); +static void OSi_ExitThread(void *arg); +static void OSi_ExitThread_Destroy(void); +static void OSi_CancelThreadAlarmForSleep(OSThread *thread); +static void OSi_SleepAlarmCallback(void *arg); +static void OSi_IdleThreadProc(void *); + +ARM_FUNC static s32 OSi_GetUnusedThreadId(void) +{ + return ++OSi_ThreadIdCount; +} + +ARM_FUNC static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread) +{ + OSThread *next = queue->head; + + while (next && next->priority <= thread->priority) + { + if (next == thread) + return; + next = next->link.next; + } + + if (!next) + { + OSThread *prev = queue->tail; + + if (!prev) + { + queue->head = thread; + } + else + { + prev->link.next = thread; + } + + thread->link.prev = prev; + thread->link.next = NULL; + queue->tail = thread; + } + else + { + OSThread *prev = next->link.prev; + + if (!prev) + { + queue->head = thread; + } + else + { + prev->link.next = thread; + } + + thread->link.prev = prev; + thread->link.next = next; + next->link.prev = thread; + } +} + +ARM_FUNC static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue) +{ + OSThread *thread = queue->head; + + if (thread) + { + OSThread *next = thread->link.next; + + queue->head = next; + + if (next) + { + next->link.prev = NULL; + } + else + { + queue->tail = NULL; + thread->queue = NULL; + } + } + + return thread; +} + +ARM_FUNC static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread) +{ + OSThread *queueHead = queue->head; + + while (queueHead) + { + OSThread *next = queueHead->link.next; + + if (queueHead == thread) + { + OSThread *prev = queueHead->link.prev; + + if (queue->head == queueHead) + { + queue->head = next; + } + else + { + prev->link.next = next; + } + + if (queue->tail == queueHead) + { + queue->tail = prev; + } + else + { + next->link.prev = prev; + } + + break; + } + + queueHead = next; + } + + return queueHead; +} + +ARM_FUNC OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue) +{ + OSMutex *mutexHead = queue->head; + + if (mutexHead) + { + OSMutex *next = mutexHead->link.next; + + queue->head = next; + + if (next) + { + next->link.prev = NULL; + } + else + { + queue->tail = NULL; + } + } + + return mutexHead; +} + +ARM_FUNC static void OSi_InsertThreadToList(OSThread *thread) +{ + OSThread *t = OSi_ThreadInfo.list; + OSThread *pre = NULL; + + while(t && t->priority < thread->priority) + { + pre = t; + t = t->next; + } + + if (!pre) + { + thread->next = OSi_ThreadInfo.list; + OSi_ThreadInfo.list = thread; + } + else + { + thread->next = pre->next; + pre->next = thread; + } +} + +ARM_FUNC static void OSi_RemoveThreadFromList(OSThread *thread) +{ + OSThread *t = OSi_ThreadInfo.list; + OSThread *pre = NULL; + + while (t && t != thread) + { + pre = t; + t = t-> next; + } + + if (!pre) + { + OSi_ThreadInfo.list = thread->next; + } + else + { + pre->next = thread->next; + } +} + +ARM_FUNC static void OSi_RescheduleThread(void) +{ + if (OSi_RescheduleCount <= 0) + { + OSThreadInfo *info = &OSi_ThreadInfo; + if (info->irqDepth > 0 || OS_GetProcMode() == OS_PROCMODE_IRQ) + { + info->isNeedRescheduling = TRUE; + } + else + { + OSThread *currentThread = OSi_GetCurrentThread(); + OSThread *nextThread = OS_SelectThread(); + + if (currentThread == nextThread || !nextThread) + return; + + if (currentThread->state != OS_THREAD_STATE_TERMINATED + && OS_SaveContext(¤tThread->context)) + return; + + if (OSi_SystemCallbackInSwitchThread) + { + ((OSSwitchThreadCallback)OSi_SystemCallbackInSwitchThread) (currentThread, nextThread); + } + + if (info->switchCallback) + { + ((OSSwitchThreadCallback)info->switchCallback) (currentThread, nextThread); + } + + OS_SetCurrentThread(nextThread); + + OS_LoadContext(&nextThread->context); + } + } +} + +ARM_FUNC void OS_InitThread(void) +{ + if (OSi_IsThreadInitialized) + return; + OSi_IsThreadInitialized = TRUE; + + OSi_CurrentThreadPtr = &(OSi_ThreadInfo.current); + + OSi_LauncherThread.priority = OS_THREAD_LAUNCHER_PRIORITY; + OSi_LauncherThread.id = 0; + OSi_LauncherThread.state = OS_THREAD_STATE_READY; + OSi_LauncherThread.next = NULL; + + OSi_LauncherThread.profiler = NULL; + + OSi_ThreadInfo.list = &OSi_LauncherThread; + + OS_SetCurrentThread(&OSi_LauncherThread); + + void *stackLo = (((s32)SDK_SYS_STACKSIZE) <= 0) ? + (void *)((u32)SDK_SECTION_ARENA_DTCM_START - (s32)SDK_SYS_STACKSIZE) : + (void *)((u32)(HW_DTCM_SVC_STACK - (s32)SDK_IRQ_STACKSIZE) - (s32)SDK_SYS_STACKSIZE); + + OSi_LauncherThread.stackBottom = (u32)(HW_DTCM_SVC_STACK - (s32)SDK_IRQ_STACKSIZE); + OSi_LauncherThread.stackTop = (u32)stackLo; + OSi_LauncherThread.stackWarningOffset = 0; + + //checksums + *(u32 *)(OSi_LauncherThread.stackBottom - sizeof(u32)) = 0xfddb597dUL; + *(u32 *)OSi_LauncherThread.stackTop = 0x7bf9dd5bUL; + + OS_InitThreadQueue(&OSi_LauncherThread.joinQueue); + + OSi_ThreadInfo.isNeedRescheduling = FALSE; + OSi_ThreadInfo.irqDepth = 0; + + OS_GetSystemWork()->threadinfo_mainp = &OSi_ThreadInfo; + + (void)OS_SetSwitchThreadCallback(NULL); + + OS_CreateThread(&OSi_IdleThread, OSi_IdleThreadProc, NULL, + OSi_IdleThreadStack + 50, 200, OS_THREAD_PRIORITY_MAX); + + OSi_IdleThread.priority = OS_THREAD_PRIORITY_MAX + 1; + OSi_IdleThread.state = OS_THREAD_STATE_READY; +} + +ARM_FUNC asm BOOL OS_IsThreadAvailable(void) +{ + ldr r0, =OSi_IsThreadInitialized + ldr r0, [r0, #0] + bx lr +} + +ARM_FUNC void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio) +{ + OSIntrMode enable = OS_DisableInterrupts(); + + s32 index = OSi_GetUnusedThreadId(); + + thread->priority = prio; + thread->id = (u32)index; + thread->state = OS_THREAD_STATE_WAITING; + + thread->profiler = NULL; + + OSi_InsertThreadToList(thread); + + thread->stackBottom = (u32)stack; + thread->stackTop = (u32)stack - stackSize; + thread->stackWarningOffset = 0; + + *(u32 *)(thread->stackBottom - sizeof(u32)) = 0xfddb597dUL; + *(u32 *)thread->stackTop = 0x7bf9dd5bUL; + + OS_InitThreadQueue(&thread->joinQueue); + + OS_InitContext(&thread->context, (u32)func, (u32)stack - 4); + + thread->context.r[0] = (u32)arg; + thread->context.lr = (u32)OS_ExitThread; + + MI_CpuClear32((void *)((u32)stack - stackSize + 4), stackSize - 8); + + thread->mutex = NULL; + thread->mutexQueue.head = NULL; + thread->mutexQueue.tail = NULL; + + OS_SetThreadDestructor(thread, NULL); + + thread->queue = NULL; + thread->link.prev = thread->link.next = NULL; + + MI_CpuClear32(&thread->specific[0], sizeof(void *) * OS_THREAD_SPECIFIC_MAX); + + thread->alarmForSleep = NULL; + + (void)OS_RestoreInterrupts(enable); +} + +ARM_FUNC void OS_ExitThread(void) +{ + (void)OS_DisableInterrupts(); + OSi_ExitThread_ArgSpecified(OS_GetCurrentThread(), 0); +} + +ARM_FUNC static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg) +{ + if (OSi_StackForDestructor) + { + OS_InitContext(&thread->context, (u32)OSi_ExitThread, (u32)OSi_StackForDestructor); + thread->context.r[0] = (u32)arg; + thread->context.cpsr |= HW_PSR_DISABLE_IRQ; + thread->state = OS_THREAD_STATE_READY; + OS_LoadContext(&thread->context); + } + else + { + OSi_ExitThread(arg); + } +} + +ARM_FUNC static void OSi_ExitThread(void *arg) +{ + OSThread *currentThread = OSi_GetCurrentThread(); + OSThreadDestructor destructor = currentThread->destructor; + + if (destructor) + { + currentThread->destructor = NULL; + destructor(arg); + (void)OS_DisableInterrupts(); + } + + OSi_ExitThread_Destroy(); +} + +ARM_FUNC static void OSi_ExitThread_Destroy(void) +{ + OSThread *currentThread = OSi_GetCurrentThread(); + (void)OS_DisableScheduler(); + + OSi_UnlockAllMutex(currentThread); + + if (currentThread->queue) + { + (void)OSi_RemoveSpecifiedLinkFromQueue(currentThread->queue, currentThread); + } + + OSi_RemoveThreadFromList(currentThread); + + currentThread->state = OS_THREAD_STATE_TERMINATED; + + OS_WakeupThread(¤tThread->joinQueue); + + (void)OS_EnableScheduler(); + + OS_RescheduleThread(); + + OS_Terminate(); +} + +ARM_FUNC void OS_DestroyThread(OSThread *thread) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + if (OS_GetCurrentThread() == thread) + { + OSi_ExitThread_Destroy(); + } + + (void)OS_DisableScheduler(); + + OSi_UnlockAllMutex(thread); + + OSi_CancelThreadAlarmForSleep(thread); + + if (thread->queue) + { + (void)OSi_RemoveSpecifiedLinkFromQueue(thread->queue, thread); + } + + OSi_RemoveThreadFromList(thread); + + thread->state = OS_THREAD_STATE_TERMINATED; + + OS_WakeupThread(&thread->joinQueue); + + (void)OS_EnableScheduler(); + (void)OS_RestoreInterrupts(enabled); + + OS_RescheduleThread(); +} + +ARM_FUNC static void OSi_CancelThreadAlarmForSleep(OSThread *thread) +{ + OSAlarm *alarm = thread->alarmForSleep; + + if (alarm) + { + OS_CancelAlarm(alarm); + } +} + +ARM_FUNC void OS_JoinThread(OSThread *thread) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + if (thread->state != OS_THREAD_STATE_TERMINATED) + { + OS_SleepThread(&thread->joinQueue); + } + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC BOOL OS_IsThreadTerminated(const OSThread *thread) +{ + return (thread->state == OS_THREAD_STATE_TERMINATED) ? TRUE : FALSE; +} + +ARM_FUNC void OS_SleepThread(OSThreadQueue *queue) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + OSThread *currentThread = OSi_GetCurrentThread(); + + if (queue) + { + currentThread->queue = queue; + OSi_InsertLinkToQueue(queue, currentThread); + } + + currentThread->state = OS_THREAD_STATE_WAITING; + OSi_RescheduleThread(); + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void OS_WakeupThread(OSThreadQueue *queue) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + if (queue->head) + { + while (queue->head) + { + OSThread *thread = OSi_RemoveLinkFromQueue(queue); + + thread->state = OS_THREAD_STATE_READY; + thread->queue = NULL; + thread->link.prev = thread->link.next = NULL; + } + + OS_InitThreadQueue(queue); + OSi_RescheduleThread(); + } + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void OS_WakeupThreadDirect(OSThread *thread) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + + thread->state = OS_THREAD_STATE_READY; + OSi_RescheduleThread(); + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC OSThread *OS_SelectThread(void) +{ + OSThread *thread = OSi_ThreadInfo.list; + + while (thread && !OS_IsThreadRunnable(thread)) + { + thread = thread->next; + } + + return thread; +} + +ARM_FUNC void OS_RescheduleThread(void) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + OSi_RescheduleThread(); + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void OS_YieldThread(void) +{ + OSThread *current = OS_GetCurrentThread(); + OSThread *pre = NULL; + OSThread *lastThread = NULL; + s32 samePriorityThread = 0; + OSIntrMode enabled = OS_DisableInterrupts(); + + OSThread *t = OSi_ThreadInfo.list; + OSThread *tPre = NULL; + + while (t) + { + if (t == current) + { + pre = tPre; + } + + if (current->priority == t->priority) + { + lastThread = t; + samePriorityThread++; + } + + tPre = t; + t = t->next; + } + + if (samePriorityThread <= 1 || lastThread == current) + { + (void)OS_RestoreInterrupts(enabled); + return; + } + + if (!pre) + { + OSi_ThreadInfo.list = current->next; + } + else + { + pre->next = current->next; + } + + current->next = lastThread->next; + lastThread->next = current; + + OSi_RescheduleThread(); + + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC BOOL OS_SetThreadPriority(OSThread *thread, u32 prio) +{ + OSThread *t = OSi_ThreadInfo.list; + OSThread *pre = NULL; + OSIntrMode enabled = OS_DisableInterrupts(); + + while (t && t != thread) + { + pre = t; + t = t->next; + } + + if (!t || t == &OSi_IdleThread) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + + if (t->priority != prio) + { + if (!pre) + { + OSi_ThreadInfo.list = thread->next; + } + else + { + pre->next = thread->next; + } + + thread->priority = prio; + OSi_InsertThreadToList(thread); + + OSi_RescheduleThread(); + } + + (void)OS_RestoreInterrupts(enabled); + + return TRUE; +} + +ARM_FUNC u32 OS_GetThreadPriority(const OSThread *thread) +{ + return thread->priority; +} + +ARM_FUNC void OS_Sleep(u32 msec) +{ + OSAlarm alarm; + + OS_CreateAlarm(&alarm); + OSThread *volatile p_thread = OSi_GetCurrentThread(); + OSIntrMode enabled = OS_DisableInterrupts(); + + p_thread->alarmForSleep = &alarm; + + OS_SetAlarm(&alarm, OS_MilliSecondsToTicks(msec), &OSi_SleepAlarmCallback, + (void*)&p_thread); + while (p_thread != NULL) + { + OS_SleepThread(NULL); + } + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC static void OSi_SleepAlarmCallback(void *arg) +{ + OSThread **pp_thread = (OSThread **)arg; + OSThread *p_thread = *pp_thread; + *pp_thread = NULL; + + p_thread->alarmForSleep = NULL; + + OS_WakeupThreadDirect(p_thread); +} + +ARM_FUNC OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + OSSwitchThreadCallback prev = OSi_ThreadInfo.switchCallback; + OSi_ThreadInfo.switchCallback = callback; + + (void)OS_RestoreInterrupts(enabled); + return prev; +} + +ARM_FUNC static void OSi_IdleThreadProc(void *) +{ + (void)OS_EnableInterrupts(); + while (1) + { + OS_Halt(); + } +} + +ARM_FUNC u32 OS_DisableScheduler(void) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + u32 count; + + if (OSi_RescheduleCount < (u32)-1) + { + count = OSi_RescheduleCount++; + } + (void)OS_RestoreInterrupts(enabled); + + return count; +} + +ARM_FUNC u32 OS_EnableScheduler(void) +{ + OSIntrMode enabled = OS_DisableInterrupts(); + u32 count = 0; + + if (OSi_RescheduleCount > 0) + { + count = OSi_RescheduleCount--; + } + (void)OS_RestoreInterrupts(enabled); + + return count; +} + +ARM_FUNC void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor) +{ + thread->destructor = dtor; +} diff --git a/arm9/lib/NitroSDK/src/OS_tick.c b/arm9/lib/NitroSDK/src/OS_tick.c new file mode 100644 index 00000000..b0e81054 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_tick.c @@ -0,0 +1,70 @@ +#include "function_target.h" +#include "OS_tick.h" +#include "OS_interrupt.h" +#include "OS_timer.h" +#include "OS_system.h" + +static u16 OSi_UseTick = FALSE; +vu64 OSi_TickCounter; +BOOL OSi_NeedResetTimer = FALSE; + +static void OSi_CountUpTick(void); + +ARM_FUNC void OS_InitTick(void) +{ + if (OSi_UseTick) + { + return; + } + OSi_UseTick = 1; + OSi_SetTimerReserved(0); + OSi_TickCounter = 0; + reg_OS_TM0CNT_H = 0; + reg_OS_TM0CNT_L = 0; + reg_OS_TM0CNT_H = 0xc1; + OS_SetIrqFunction(8, OSi_CountUpTick); + (void)OS_EnableIrqMask(8); + OSi_NeedResetTimer = FALSE; +} + +ARM_FUNC BOOL OS_IsTickAvailable(void) +{ + return OSi_UseTick; +} + +ARM_FUNC static void OSi_CountUpTick(void) +{ + OSi_TickCounter++; + + if (OSi_NeedResetTimer) + { + OS_SetTimerControl(OS_TIMER_0, 0); + OS_SetTimerCount(OS_TIMER_0, 0); + OS_SetTimerControl(OS_TIMER_0, OSi_TICK_TIMERCONTROL); + + OSi_NeedResetTimer = FALSE; + } + + OSi_EnterTimerCallback(OS_TIMER_0, (void (*)(void *))OSi_CountUpTick, 0); +} + +ARM_FUNC OSTick OS_GetTick(void) +{ + OSIntrMode prev = OS_DisableInterrupts(); + vu16 countL = *(REGType16 *)((u32)®_OS_TM0CNT_L + OS_TIMER_0 * 4); + vu64 countH = OSi_TickCounter & 0xffffffffffffULL; + + if (reg_OS_IF & OS_IE_TIMER0 && !(countL & 0x8000)) + { + countH++; + } + + (void)OS_RestoreInterrupts(prev); + + return (countH << 16) | countL; +} + +ARM_FUNC u16 OS_GetTickLo(void) +{ + return reg_OS_TM0CNT_L; +} diff --git a/arm9/lib/NitroSDK/src/OS_timer.c b/arm9/lib/NitroSDK/src/OS_timer.c new file mode 100644 index 00000000..69a1a6cd --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_timer.c @@ -0,0 +1,9 @@ +#include "OS_timer.h" +#include "function_target.h" + +static u16 OSi_TimerReserved = 0; + +ARM_FUNC void OSi_SetTimerReserved(s32 timerNum) +{ + OSi_TimerReserved |= (1 << timerNum); +} diff --git a/arm9/lib/NitroSDK/src/OS_valarm.c b/arm9/lib/NitroSDK/src/OS_valarm.c new file mode 100644 index 00000000..37329147 --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_valarm.c @@ -0,0 +1,30 @@ +#include "OS_valarm.h" +#include "function_target.h" +#include "OS_interrupt.h" + +static struct OSiVAlarmQueue +{ + OSVAlarm *head; + OSVAlarm *tail; +} OSi_VAlarmQueue; + +static u16 OSi_UseVAlarm = FALSE; + +static s32 OSi_VFrameCount; +static s32 OSi_PreviousVCount; + +ARM_FUNC void OS_InitVAlarm(void) +{ + if (!OSi_UseVAlarm) + { + OSi_UseVAlarm = TRUE; + + OSi_VAlarmQueue.head = NULL; + OSi_VAlarmQueue.tail = NULL; + + (void)OS_DisableIrqMask(OS_IE_V_COUNT); + + OSi_VFrameCount = 0; + OSi_PreviousVCount = 0; + } +} diff --git a/arm9/lib/NitroSDK/src/OS_vramExclusive.c b/arm9/lib/NitroSDK/src/OS_vramExclusive.c new file mode 100644 index 00000000..5ce10f4a --- /dev/null +++ b/arm9/lib/NitroSDK/src/OS_vramExclusive.c @@ -0,0 +1,88 @@ +#include "OS_vramExclusive.h" +#include "function_target.h" +#include "OS_system.h" + +static u32 OSi_vramExclusive; +static u16 OSi_vramLockId[9]; + +static u32 OsCountZeroBits(register u32 bitmap); + +ARM_FUNC static asm u32 OsCountZeroBits(register u32 bitmap) +{ + clz r0, r0 + bx lr +} + +ARM_FUNC void OSi_InitVramExclusive(void) +{ + OSi_vramExclusive = 0x0000; + + for (s32 i = 0; i < 9; i++) + { + OSi_vramLockId[i] = 0; + } +} + +ARM_FUNC BOOL OSi_TryLockVram(u16 bank, u16 lockId) +{ + u32 workMap; + s32 zeroBits; + OSIntrMode enabled = OS_DisableInterrupts(); + + workMap = (u32)(bank & OSi_vramExclusive); + while (TRUE) + { + zeroBits = (s32)(31 - OsCountZeroBits(workMap)); + if (zeroBits < 0) + { + break; + } + workMap &= ~(0x00000001 << zeroBits); + if (OSi_vramLockId[zeroBits] != lockId) + { + (void)OS_RestoreInterrupts(enabled); + return FALSE; + } + } + + workMap = (u32)(bank & 0x01ff); + while (TRUE) + { + zeroBits = (s32)(31 - OsCountZeroBits(workMap)); + if (zeroBits < 0) + { + break; + } + workMap &= ~(0x00000001 << zeroBits); + OSi_vramLockId[zeroBits] = lockId; + OSi_vramExclusive |= (0x00000001 << zeroBits); + } + + (void)OS_RestoreInterrupts(enabled); + return TRUE; +} + +ARM_FUNC void OSi_UnlockVram(u16 bank, u16 lockId) +{ + u32 workMap; + s32 zeroBits; + OSIntrMode enabled = OS_DisableInterrupts(); + + workMap = (u32)(bank & OSi_vramExclusive & 0x01ff); + while (TRUE) + { + zeroBits = (s32)(31- OsCountZeroBits((u32)workMap)); + if (zeroBits < 0) + { + break; + } + workMap &= ~(0x00000001 << zeroBits); + if (OSi_vramLockId[zeroBits] == lockId) + { + OSi_vramLockId[zeroBits] = 0; + OSi_vramExclusive &= ~(0x00000001 << zeroBits); + } + } + + (void)OS_RestoreInterrupts(enabled); +} diff --git a/arm9/lib/NitroSDK/src/PXI_fifo.c b/arm9/lib/NitroSDK/src/PXI_fifo.c new file mode 100644 index 00000000..35db1c7f --- /dev/null +++ b/arm9/lib/NitroSDK/src/PXI_fifo.c @@ -0,0 +1,185 @@ +#include "function_target.h" +#include "consts.h" +#include "OS_interrupt.h" +#include "OS_system.h" +#include "PXI_fifo.h" +#include "systemWork.h" + +static u16 FifoCtrlInit = 0; +static PXIFifoCallback FifoRecvCallbackTable[PXI_MAX_FIFO_TAG]; + +static inline PXIFifoStatus PXIi_SetToFifo(u32 data); + +ARM_FUNC void PXI_InitFifo(void) +{ + OSSystemWork *p = OS_GetSystemWork(); + OSIntrMode enabled = OS_DisableInterrupts(); + s32 i; + + if (!FifoCtrlInit) + { + FifoCtrlInit = TRUE; + + p->pxiHandleChecker[PXI_PROC_ARM9] = 0UL; + + for (i = 0; i < PXI_MAX_FIFO_TAG; i++) + { + FifoRecvCallbackTable[i] = NULL; + } + + reg_PXI_SUBP_FIFO_CNT = (REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK + | REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK | REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + + (void)OS_ResetRequestIrqMask(OS_IE_SPFIFO_RECV); + (void)OS_SetIrqFunction(OS_IE_SPFIFO_RECV, PXIi_HandlerRecvFifoNotEmpty); + (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); + + { + s32 timeout; + s32 c; + + for (i = 0; ; i++) + { + c = reg_PXI_SUBPINTF & 15; + reg_PXI_SUBPINTF = (u16)(c << 8); + + if (c == 0 && i > 4) + { + break; + } + + for (timeout = 1000; (reg_PXI_SUBPINTF & 15) == c; timeout--) + { + if (timeout == 0) + { + i = 0; + break; + } + } + } + } + } + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback) +{ + OSSystemWork *p = OS_GetSystemWork(); + OSIntrMode enabled = OS_DisableInterrupts(); + + FifoRecvCallbackTable[fifotag] = callback; + if (callback) + { + p->pxiHandleChecker[PXI_PROC_ARM9] |= (1UL << fifotag); + } + else + { + p->pxiHandleChecker[PXI_PROC_ARM9] &= ~(1UL << fifotag); + } + (void)OS_RestoreInterrupts(enabled); +} + +ARM_FUNC BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc) +{ + OSSystemWork *p = OS_GetSystemWork(); + + return (p->pxiHandleChecker[proc] & (1UL << fifotag)) ? TRUE : FALSE; +} + +ARM_FUNC s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err) +{ + PXIFifoMessage fifomsg; + + fifomsg.e.tag = (PXIFifoTag)fifotag; + fifomsg.e.err = (u32)err; + fifomsg.e.data = data; + + return PXIi_SetToFifo(fifomsg.raw); +} + +static inline PXIFifoStatus PXIi_SetToFifo(u32 data) +{ + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) + { + reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + return PXI_FIFO_FAIL_SEND_ERR; + } + + OSIntrMode enabled = OS_DisableInterrupts(); + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK) + { + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_FAIL_SEND_FULL; + } + + reg_PXI_SEND_FIFO = data; + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_SUCCESS; +} + +static inline PXIFifoStatus PXIi_GetFromFifo(u32 *data_buf) +{ + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) + { + reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); + return PXI_FIFO_FAIL_RECV_ERR; + } + + OSIntrMode enabled = OS_DisableInterrupts(); + if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK) + { + (void)OS_RestoreInterrupts(enabled); + return PXI_FIFO_FAIL_RECV_EMPTY; + } + + + *data_buf = reg_PXI_RECV_FIFO; + (void)OS_RestoreInterrupts(enabled); + + return PXI_FIFO_SUCCESS; +} + +ARM_FUNC void PXIi_HandlerRecvFifoNotEmpty(void) +{ + PXIFifoMessage fifomsg; + PXIFifoStatus ret_code; + PXIFifoTag tag; + + while (TRUE) + { + ret_code = PXIi_GetFromFifo(&fifomsg.raw); + + if (ret_code == PXI_FIFO_FAIL_RECV_EMPTY) + { + break; + } + if (ret_code == PXI_FIFO_FAIL_RECV_ERR) + { + continue; + } + + tag = (PXIFifoTag)fifomsg.e.tag; + + if (tag) + { + if (FifoRecvCallbackTable[tag]) + { + (FifoRecvCallbackTable[tag])(tag, fifomsg.e.data, (BOOL)fifomsg.e.err); + } + else + { + if (fifomsg.e.err) + { + } + else + { + fifomsg.e.err = TRUE; + (void)PXIi_SetToFifo(fifomsg.raw); + } + } + } + else + { + } + } +} diff --git a/arm9/lib/NitroSDK/src/PXI_init.c b/arm9/lib/NitroSDK/src/PXI_init.c new file mode 100644 index 00000000..d70ca3b0 --- /dev/null +++ b/arm9/lib/NitroSDK/src/PXI_init.c @@ -0,0 +1,8 @@ +#include "PXI_init.h" +#include "PXI_fifo.h" +#include "function_target.h" + +ARM_FUNC void PXI_Init(void) +{ + PXI_InitFifo(); +} diff --git a/arm9/lib/NitroSDK/src/RTC_convert.c b/arm9/lib/NitroSDK/src/RTC_convert.c new file mode 100644 index 00000000..3d0bb2ce --- /dev/null +++ b/arm9/lib/NitroSDK/src/RTC_convert.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "RTC_api.h" +#include "RTC_convert.h" + +static s32 sDayOfYear[12] = { + 0, // Jan + 31, // Feb + 59, // Mar + 90, // Apr + 120, // May + 151, // Jun + 181, // Jul + 212, // Aug + 243, // Sep + 273, // Oct + 304, // Nov + 334, // Dec +}; + +static inline BOOL RTCi_IsLeapYear(u32 year) +{ + return !((year & 0x03)); +} + +s32 RTC_ConvertDateToDay(const RTCDate * date) +{ + if (date->year >= 100 + || date->month < 1 + || date->month > 12 + || date->day < 1 + || date->day > 31 + || date->week >= RTC_WEEK_MAX + || date->month < 1 // can't be + || date->month > 12 // too sure + ) + return -1; + s32 dayNum = (s32)(date->day - 1); + dayNum += sDayOfYear[date->month - 1]; + if (date->month >= 3 && RTCi_IsLeapYear(date->year)) + dayNum++; + dayNum += date->year * 365; + dayNum += (date->year + 3) / 4; + return dayNum; +} + +s32 RTCi_ConvertTimeToSecond(const RTCTime * time) +{ + return (s32)((time->hour * 60 + time->minute) * 60 + time->second); +} + +s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time) +{ + s32 day = RTC_ConvertDateToDay(date); + if (day == -1) + return -1; + s32 second = RTCi_ConvertTimeToSecond(time); + if (second == -1) + return -1; + return ((s64)day) * (60 * 60 * 24) + second; +} + +void RTC_ConvertDayToDate(RTCDate * date, s32 day) +{ + u32 year; + s32 month; + + if (day < 0) + { + day = 0; + } + if (day > 36524) // max number of days that can be recorded + { + day = 36524; + } + date->week = (RTCWeek)((day + 6) % 7); + for (year = 0; year < 99; year++) + { + s32 prev = day; + day -= (RTCi_IsLeapYear(year)) ? 366 : 365; + if (day < 0) + { + day = prev; + break; + } + } + if (day > 365) + { + day = 365; + } + date->year = year; + if (RTCi_IsLeapYear(year)) + { + if (day < 31 + 29) + { + if (day < 31) + { + month = 1; + } + else + { + month = 2; + day -= 31; + } + date->month = (u32)month; + date->day = (u32)(day + 1); + return; + } + else + { + day--; + } + } + for (month = 11; month >= 0; month--) + { + if (day >= sDayOfYear[month]) + { + date->month = (u32)(month + 1); + date->day = (u32)(day - sDayOfYear[month] + 1); + return; + } + } + // Internal Error. +} + +void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec) +{ + if (sec < 0) + sec = 0; + if (sec > 86399) + sec = 86399; + time->second = (u32)(sec % 60); + sec /= 60; + time->minute = (u32)(sec % 60); + sec /= 60; + time->hour = (u32)sec; +} + +void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec) +{ + if (sec < 0) + sec = 0; + else if (sec > 3155759999) + sec = 3155759999; + RTCi_ConvertSecondToTime(time, (s32)(sec % 86400)); + RTC_ConvertDayToDate(date, (s32)(sec / 86400)); +} + +RTCWeek RTC_GetDayOfWeek(RTCDate * date) +{ + int cent; + int year = (int)(2000 + date->year); + int month = (int)date->month; + int day = (int)date->day; + + month -= 2; + if (month < 1) + { + month += 12; + --year; + } + cent = year / 100; + year %= 100; + return (RTCWeek)(((26 * month - 2) / 10 + day + year + year / 4 + cent / 4 + 5 * cent) % 7); +} diff --git a/arm9/lib/NitroSDK/src/RTC_internal.c b/arm9/lib/NitroSDK/src/RTC_internal.c new file mode 100644 index 00000000..e3a132ab --- /dev/null +++ b/arm9/lib/NitroSDK/src/RTC_internal.c @@ -0,0 +1,31 @@ +#include "function_target.h" +#include "PXI_fifo.h" +#include "RTC_internal.h" + +static BOOL RtcSendPxiCommand(u8 command); + +ARM_FUNC BOOL RTCi_ReadRawDateTimeAsync(void) +{ + return RtcSendPxiCommand(16); +} + +ARM_FUNC BOOL RTCi_ReadRawDateAsync(void) +{ + return RtcSendPxiCommand(17); +} + +ARM_FUNC BOOL RTCi_ReadRawTimeAsync(void) +{ + return RtcSendPxiCommand(18); +} + +ARM_FUNC BOOL RTCi_WriteRawStatus2Async(void) +{ + return RtcSendPxiCommand(39); +} + +ARM_FUNC static BOOL RtcSendPxiCommand(u8 command) +{ + s32 data = command << 8 & 0x7f00; + return PXI_SendWordByFifo(PXI_FIFO_TAG_RTC, (u32)data, FALSE) >= 0; +} diff --git a/arm9/lib/NitroSDK/src/SND_alarm.c b/arm9/lib/NitroSDK/src/SND_alarm.c new file mode 100644 index 00000000..e216c02c --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_alarm.c @@ -0,0 +1,40 @@ +#include "SND_alarm.h" + +struct AlarmCallback { + SNDAlarmCallback cb; + void *data; + u8 id; + u8 padding[3]; +}; + +static struct AlarmCallback sCallbackTable[SND_ALARM_COUNT]; + +ARM_FUNC void SND_AlarmInit(void) { + for (s32 i = 0; i < SND_ALARM_COUNT; i++) { + sCallbackTable[i].cb = NULL; + sCallbackTable[i].data = NULL; + sCallbackTable[i].id = 0; + } +} + +ARM_FUNC void SNDi_IncAlarmId(u32 idx) { + struct AlarmCallback *ac = &sCallbackTable[idx]; + ac->id++; +} + +ARM_FUNC u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data) { + struct AlarmCallback *ac = &sCallbackTable[idx]; + ac->cb = cb; + ac->data = data; + ac->id++; + return ac->id; +} + +ARM_FUNC void SNDi_CallAlarmHandler(s32 idx) { + struct AlarmCallback *ac = &sCallbackTable[idx & 0xFF]; + if (((idx >> 8) & 0xFF) != ac->id) + return; + if (ac->cb == NULL) + return; + ac->cb(ac->data); +} diff --git a/arm9/lib/NitroSDK/src/SND_bank.c b/arm9/lib/NitroSDK/src/SND_bank.c new file mode 100644 index 00000000..44075454 --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_bank.c @@ -0,0 +1,174 @@ +#include "SND_bank.h" +#include "OS_mutex.h" + +void DC_StoreRange(const void *, u32); + +/* + * WaveArc linking seems to work like the following: + * + * Each SNDBankData can have up to 4 WaveArcs assigned. + * To avoid loading the same WaveArc by multiple banks, + * a linked list using WaveArcLinks is chained through all banks + * which use a WaveArc. + * + * That WaveArc has a head pointer, which points to the first + * WaveArcLink in that chain of banks. + */ + +/* + * Set bank's wavearc link at index to specified wavearc + */ +ARM_FUNC void SND_AssignWaveArc(struct SNDBankData *bankData, s32 index, struct SNDWaveArc *waveArc) { + SNDi_LockMutex(); + struct SNDWaveArc *selectedWaveArc = bankData->waveArcLinks[index].waveArc; + if (selectedWaveArc != NULL) { + if (waveArc == selectedWaveArc) { + SNDi_UnlockMutex(); + return; + } + + if (&bankData->waveArcLinks[index] == selectedWaveArc->waveArcLLHead) { + selectedWaveArc->waveArcLLHead = bankData->waveArcLinks[index].waveArcLLnext; + DC_StoreRange(bankData->waveArcLinks[index].waveArc, sizeof(struct SNDWaveArc)); + } else { + struct SNDWaveArcLink *cur; + for (cur = selectedWaveArc->waveArcLLHead; cur != NULL; cur = cur->waveArcLLnext) { + if (&bankData->waveArcLinks[index] == cur->waveArcLLnext) + break; + } + cur->waveArcLLnext = bankData->waveArcLinks[index].waveArcLLnext; + DC_StoreRange(cur, sizeof(*cur)); + } + } + struct SNDWaveArcLink *oldHead = waveArc->waveArcLLHead; + waveArc->waveArcLLHead = &bankData->waveArcLinks[index]; + bankData->waveArcLinks[index].waveArcLLnext = oldHead; + bankData->waveArcLinks[index].waveArc = waveArc; + // BUG: Shouldn't the mutex unlock be after writing to cache? + SNDi_UnlockMutex(); + DC_StoreRange(bankData, sizeof(*bankData)); + DC_StoreRange(waveArc, sizeof(*waveArc)); +} + +ARM_FUNC void SND_DestroyBank(struct SNDBankData *bankData) { + SNDi_LockMutex(); + + for (s32 i = 0; i < SND_BANK_MAX_WAVEARC; i++) { + struct SNDWaveArcLink *curWaveArcLink = &bankData->waveArcLinks[i]; + struct SNDWaveArc *curWaveArc = bankData->waveArcLinks[i].waveArc; + + if (curWaveArc == NULL) + continue; + + if (curWaveArcLink == curWaveArc->waveArcLLHead) { + curWaveArc->waveArcLLHead = bankData->waveArcLinks[i].waveArcLLnext; + DC_StoreRange(curWaveArc, sizeof(*curWaveArc)); + } else { + struct SNDWaveArcLink *cur; + for (cur = curWaveArc->waveArcLLHead; cur != NULL; cur = cur->waveArcLLnext) { + if (&bankData->waveArcLinks[i] == cur->waveArcLLnext) + break; + } + cur->waveArcLLnext = bankData->waveArcLinks[i].waveArcLLnext; + DC_StoreRange(cur, sizeof(*cur)); + } + } + + SNDi_UnlockMutex(); +} + +ARM_FUNC void SND_DestroyWaveArc(struct SNDWaveArc *waveArc) { + SNDi_LockMutex(); + struct SNDWaveArcLink *cur = waveArc->waveArcLLHead; + + while (cur != NULL) { + struct SNDWaveArcLink *newCur = cur->waveArcLLnext; + cur->waveArc = NULL; + cur->waveArcLLnext = NULL; + DC_StoreRange(cur, sizeof(*cur)); + cur = newCur; + } + + SNDi_UnlockMutex(); +} + +ARM_FUNC struct SNDInstPos SND_GetFirstInstDataPos(const struct SNDBankData *bankData) { +#pragma unused (bankData) + struct SNDInstPos retval; + retval.program = 0; + retval.index = 0; + return retval; +} + +ARM_FUNC static inline struct SNDDrumSet *test(const struct SNDBankData *bank, u32 off) { + return (struct SNDDrumSet *)((u8 *)bank + (off >> 8)); +} + +ARM_FUNC BOOL SND_GetNextInstData(const struct SNDBankData *bankData, struct SNDInstData *instData, struct SNDInstPos *instPos) { + while (instPos->program < bankData->instCount) { + struct SNDDrumSet *drums; + struct SNDKeySplit *keySplit; + + u32 instOffset = bankData->instOffsets[instPos->program]; + instData->type = SND_INST_OFFSET_TYPE(instOffset); + + switch (instData->type) { + case SND_INST_PCM: + case SND_INST_PSG: + case SND_INST_NOISE: + case SND_INST_DIRECTPCM: + case SND_INST_DUMMY: + instData->param = *SND_INST_OFFSET_NORMAL(bankData, instOffset); + instPos->program++; + return TRUE; + case SND_INST_DRUM_TABLE: + drums = SND_INST_OFFSET_DRUMS(bankData, instOffset); + // silly programming 101: put a loop in a place that never loops + for (; instPos->index < drums->maxKey - drums->minKey + 1;) { + *instData = drums->instruments[instPos->index]; + instPos->index++; + return TRUE; + } + break; + case SND_INST_KEY_SPLIT: + keySplit = SND_INST_OFFSET_KEYSPL(bankData, instOffset); + for (; instPos->index < SND_INST_MAX_KEYSPLIT;) { + if (keySplit->key[instPos->index] == 0) + break; + *instData = keySplit->instruments[instPos->index]; + instPos->index++; + return TRUE; + } + break; + } + + instPos->program++; + instPos->index = 0; + } + return FALSE; +} + +ARM_FUNC u32 SND_GetWaveDataCount(const struct SNDWaveArc *waveArc) { + return waveArc->waveCount; +} + +ARM_FUNC void SND_SetWaveDataAddress(struct SNDWaveArc *waveArc, s32 index, const struct SNDWaveData *waveData) { + SNDi_LockMutex(); + waveArc->waveOffsets[index] = (u32)waveData; + DC_StoreRange(&waveArc->waveOffsets[index], sizeof(u32)); + SNDi_UnlockMutex(); +} + +ARM_FUNC const struct SNDWaveData *SND_GetWaveDataAddress(const struct SNDWaveArc *waveArc, s32 index) { + SNDi_LockMutex(); + u32 retval = waveArc->waveOffsets[index]; + if (retval != 0) { + // < 0x2000000 aka, not a pointer to main RAM + if (retval < 0x2000000) + retval = (u32)&((u8 *)waveArc)[retval]; + } else { + retval = 0; + } + SNDi_UnlockMutex(); + return (struct SNDWaveData *)retval; +} diff --git a/arm9/lib/NitroSDK/src/SND_command.c b/arm9/lib/NitroSDK/src/SND_command.c new file mode 100644 index 00000000..044d960f --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_command.c @@ -0,0 +1,333 @@ +#include "SND_alarm.h" +#include "SND_command.h" +#include "SND_work.h" +#include "OS_emulator.h" +#include "OS_system.h" +#include "OS_cache.h" +#include "PXI_fifo.h" + +#define SND_CMD_WAIT_QUEUE_COUNT 8 + +static struct SNDCommand sCommandArray[SND_CMD_COUNT]; +static struct SNDSharedWork sSharedWork; +static struct SNDCommand *sWaitingCommandListQueue[SND_CMD_WAIT_QUEUE_COUNT + 1]; // not sure why this is one element to large +static struct SNDCommand *sReserveList; +static struct SNDCommand *sReserveListEnd; +static struct SNDCommand *sFreeListEnd; +static s32 sWaitingCommandListQueueRead; +static s32 sWaitingCommandListQueueWrite; +static s32 sWaitingCommandListCount; +static u32 sCurrentTag; +static u32 sFinishedTag; +static struct SNDCommand *sFreeList; + +static void InitPXI(void); +static void RequestCommandProc(void); +static struct SNDCommand *AllocCommand(void); +static BOOL IsCommandAvailable(void); + +ARM_FUNC void SND_CommandInit(void) { + InitPXI(); + sFreeList = sCommandArray; + for (int i = 0; i < SND_CMD_COUNT - 1; i++) { + sCommandArray[i].llNext = &sCommandArray[i+1]; + } + sCommandArray[SND_CMD_COUNT - 1].llNext = NULL; + sFreeListEnd = &sCommandArray[SND_CMD_COUNT - 1]; + sReserveList = NULL; + sReserveListEnd = NULL; + sWaitingCommandListCount = 0; + sWaitingCommandListQueueRead = 0; + sWaitingCommandListQueueWrite = 0; + sCurrentTag = 1; + sFinishedTag = 0; + SNDi_SharedWork = &sSharedWork; + SNDi_InitSharedWork(SNDi_SharedWork); + + struct SNDCommand *cmd = SND_AllocCommand(SND_CMD_FLAG_BLOCK); + if (cmd == NULL) + return; + + cmd->id = SND_CMD_SET_SHARED_WORK; + cmd->arg[0] = (u32)SNDi_SharedWork; + SND_PushCommand(cmd); + (void)SND_FlushCommand(SND_CMD_FLAG_BLOCK); +} + +ARM_FUNC const struct SNDCommand *SND_RecvCommandReply(u32 flags) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + if (flags & SND_CMD_FLAG_BLOCK) { + u32 tag = SNDi_GetFinishedCommandTag(); + while (sFinishedTag == tag) { + (void)OS_RestoreInterrupts(oldirq); + OS_SpinWait(100); + oldirq = OS_DisableInterrupts(); + tag = SNDi_GetFinishedCommandTag(); + } + } else { + u32 tag = SNDi_GetFinishedCommandTag(); + if (sFinishedTag == tag) { + (void)OS_RestoreInterrupts(oldirq); + return NULL; + } + } + + struct SNDCommand *queueRead = sWaitingCommandListQueue[sWaitingCommandListQueueRead]; + + if (++sWaitingCommandListQueueRead > SND_CMD_WAIT_QUEUE_COUNT) + sWaitingCommandListQueueRead = 0; + + struct SNDCommand *cur = queueRead; + while (cur->llNext != NULL) + cur = cur->llNext; + + if (sFreeListEnd != NULL) { + sFreeListEnd->llNext = queueRead; + } else { + sFreeList = queueRead; + } + + sFreeListEnd = cur; + sWaitingCommandListCount--; + sFinishedTag++; + + (void)OS_RestoreInterrupts(oldirq); + return queueRead; +} + +ARM_FUNC struct SNDCommand *SND_AllocCommand(u32 flags) { + struct SNDCommand *cmd; + if (!IsCommandAvailable()) + return NULL; + + cmd = AllocCommand(); + if (cmd != NULL) + return cmd; + + if ((flags & SND_CMD_FLAG_BLOCK) == 0) + return NULL; + + if (SND_CountWaitingCommand() > 0) { + while (SND_RecvCommandReply(SND_CMD_FLAG_NOBLOCK) != NULL) { } + + cmd = AllocCommand(); + if (cmd != NULL) + return cmd; + } else { + (void)SND_FlushCommand(SND_CMD_FLAG_BLOCK); + } + + RequestCommandProc(); + + do { + (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); + cmd = AllocCommand(); + } while (cmd == NULL); + return cmd; +} + +ARM_FUNC void SND_PushCommand(struct SNDCommand *cmd) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + struct SNDCommand *newend = cmd; + if (sReserveListEnd == NULL) { + sReserveList = cmd; + sReserveListEnd = cmd; + } else { + sReserveListEnd->llNext = cmd; + sReserveListEnd = cmd; + } + + cmd->llNext = NULL; + + (void)OS_RestoreInterrupts(oldirq); +} + +ARM_FUNC BOOL SND_FlushCommand(u32 flags) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + if (sReserveList == NULL) { + (void)OS_RestoreInterrupts(oldirq); + return TRUE; + } + + if (sWaitingCommandListCount >= SND_CMD_WAIT_QUEUE_COUNT) { + if ((flags & SND_CMD_FLAG_BLOCK) == 0) { + (void)OS_RestoreInterrupts(oldirq); + return FALSE; + } + + do { + (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); + } while (sWaitingCommandListCount >= SND_CMD_WAIT_QUEUE_COUNT); + } + + DC_FlushRange(sCommandArray, sizeof(sCommandArray)); + + s32 result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); + if (result < 0) { + if ((flags & SND_CMD_FLAG_BLOCK) == 0) { + (void)OS_RestoreInterrupts(oldirq); + return FALSE; + } + + result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); + while (result < 0) { + (void)OS_RestoreInterrupts(oldirq); + OS_SpinWait(100); + oldirq = OS_DisableInterrupts(); + result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); + } + } + + if ((flags & SND_CMD_FLAG_IMMEDIATE) != 0) { + RequestCommandProc(); + } + + sWaitingCommandListQueue[sWaitingCommandListQueueWrite] = sReserveList; + + if (++sWaitingCommandListQueueWrite > SND_CMD_WAIT_QUEUE_COUNT) { + sWaitingCommandListQueueWrite = 0; + } + + sReserveList = NULL; + sReserveListEnd = NULL; + sWaitingCommandListCount++; + sCurrentTag++; + + (void)OS_RestoreInterrupts(oldirq); + return TRUE; +} + +ARM_FUNC void SND_WaitForCommandProc(u32 tag) { + if (SND_IsFinishedCommandTag(tag)) + return; + + while (SND_RecvCommandReply(SND_CMD_FLAG_NOBLOCK) != NULL) { } + + if (SND_IsFinishedCommandTag(tag)) + return; + + RequestCommandProc(); + + if (SND_IsFinishedCommandTag(tag)) + return; + + do { + (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); + } while (SND_IsFinishedCommandTag(tag) == 0); +} + +ARM_FUNC u32 SND_GetCurrentCommandTag(void) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + u32 retval; + if (sReserveList == NULL) + retval = sFinishedTag; + else + retval = sCurrentTag; + + (void)OS_RestoreInterrupts(oldirq); + return retval; +} + +ARM_FUNC BOOL SND_IsFinishedCommandTag(u32 tag) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + BOOL result; + if (tag > sFinishedTag) { + if (tag - sFinishedTag < 0x80000000) + result = FALSE; + else + result = TRUE; + } else { + if (sFinishedTag - tag < 0x80000000) + result = TRUE; + else + result = FALSE; + } + + (void)OS_RestoreInterrupts(oldirq); + return result; +} + +ARM_FUNC s32 SND_CountFreeCommand(void) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + s32 count = 0; + for (struct SNDCommand *cmd = sFreeList; cmd != NULL; cmd = cmd->llNext) + count++; + + (void)OS_RestoreInterrupts(oldirq); + return count; +} + +ARM_FUNC s32 SND_CountReservedCommand(void) { + OSIntrMode oldirq = OS_DisableInterrupts(); + + s32 count = 0; + for (struct SNDCommand *cmd = sReserveList; cmd != NULL; cmd = cmd->llNext) + count++; + + (void)OS_RestoreInterrupts(oldirq); + return count; +} + +ARM_FUNC s32 SND_CountWaitingCommand(void) { + return SND_CMD_COUNT - SND_CountFreeCommand() - SND_CountReservedCommand(); +} + +ARM_FUNC static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL) { +#pragma unused (tag) + OSIntrMode oldirq = OS_DisableInterrupts(); + SNDi_CallAlarmHandler((s32)data); + (void)OS_RestoreInterrupts(oldirq); +} + +ARM_FUNC static void InitPXI(void) { + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback); + + if (!IsCommandAvailable()) + return; + + if (PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)) + return; + + do { + OS_SpinWait(100); + } while (!PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)); +} + +ARM_FUNC static void RequestCommandProc(void) { + while (PXI_SendWordByFifo(7, 0, 0) < 0) { } +} + +ARM_FUNC static struct SNDCommand *AllocCommand(void) { + OSIntrMode oldirq = OS_DisableInterrupts(); + if (sFreeList == NULL) { + (void)OS_RestoreInterrupts(oldirq); + return NULL; + } + + struct SNDCommand *retval = sFreeList; + + sFreeList = sFreeList->llNext; + if (sFreeList == NULL) + sFreeListEnd = NULL; + (void)OS_RestoreInterrupts(oldirq); + return retval; +} + +ARM_FUNC static BOOL IsCommandAvailable(void) { + if (!OS_IsRunOnEmulator()) + return TRUE; + + OSIntrMode oldirq = OS_DisableInterrupts(); + // TODO use proper register names here + // is this some kind of debug or ensata register? + *(vu32 *)0x4FFF200 = 0x10; + u32 resp = *(vu32 *)0x4FFF200; + (void)OS_RestoreInterrupts(oldirq); + return resp != 0; +} diff --git a/arm9/lib/NitroSDK/src/SND_interface.c b/arm9/lib/NitroSDK/src/SND_interface.c new file mode 100644 index 00000000..42b5ff42 --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_interface.c @@ -0,0 +1,172 @@ +#include "SND_interface.h" +#include "SND_command.h" + +static void PushCommand_impl(s32 id, u32 par1, u32 par2, u32 par3, u32 par4); +#define PushCmd1(id, a) PushCommand_impl(id, (u32)(a), 0, 0, 0) +#define PushCmd2(id, a, b) PushCommand_impl(id, (u32)(a), (u32)(b), 0, 0) +#define PushCmd3(id, a, b, c) PushCommand_impl(id, (u32)(a), (u32)(b), (u32)(c), 0) +#define PushCmd4(id, a, b, c, d) PushCommand_impl(id, (u32)(a), (u32)(b), (u32)(c), (u32)(d)) + +// TODO fill in "random" constants with macros + +// ARM_FUNC void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData) { } + +ARM_FUNC void SND_StopSeq(s32 player) { + PushCmd1(SND_CMD_STOP_SEQ, player); +} + +ARM_FUNC void SND_PrepareSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData) { + PushCmd4(SND_CMD_PREPARE_SEQ, player, seqBasePtr, seqOffset, bankData); +} + +ARM_FUNC void SND_StartPreparedSeq(s32 player) { + PushCmd1(SND_CMD_START_PREPARED_SEQ, player); +} + +ARM_FUNC void SND_PauseSeq(s32 player, BOOL flag) { + PushCmd2(SND_CMD_PAUSE_SEQ, player, flag); +} + +// ARM_FUNC void SND_SetPlayerTempoRatio(s32 player, s32 ratio) { } + +ARM_FUNC void SND_SetPlayerVolume(s32 player, s32 volume) { + SNDi_SetPlayerParam(player, 6, (u32)volume, 2); +} + +ARM_FUNC void SND_SetPlayerChannelPriority(s32 player, s32 prio) { + SNDi_SetPlayerParam(player, 4, (u32)prio, 1); +} + +// ARM_FUNC void SND_SetPlayerLocalVariable(s32 player, s32 varNo, s16 var) { } + +// ARM_FUNC void SND_SetPlayerGlobalVariable(s32 varNo, s16 var) { } + +// ARM_FUNC void SND_SetTrackVolume(s32 player, u32 trackBitMask, s32 volume) { } + +ARM_FUNC void SND_SetTrackPitch(s32 player, u32 trackBitMask, s32 pitch) { + SNDi_SetTrackParam(player, trackBitMask, 12, (u32)pitch, 2); +} + +ARM_FUNC void SND_SetTrackPan(s32 player, u32 trackBitMask, s32 pan) { + SNDi_SetTrackParam(player, trackBitMask, 9, (u32)pan, 1); +} + +ARM_FUNC void SND_SetTrackAllocatableChannel(s32 player, u32 trackBitMask, u32 chnBitMask) { + PushCmd3(SND_CMD_ALLOCATABLE_CHANNEL, player, trackBitMask, chnBitMask); +} + +ARM_FUNC void SND_StartTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags) { + PushCmd4(SND_CMD_START_TIMER, chnBitMask, capBitMask, alarmBitMask, flags); +} + +ARM_FUNC void SND_StopTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags) { + s32 i = 0; + u32 tmpMask = alarmBitMask; + + while (i < SND_ALARM_COUNT && tmpMask != 0) { + if (tmpMask & 1) + SNDi_IncAlarmId((u32)i); + i++; + tmpMask >>= 1; + } + + PushCmd4(SND_CMD_STOP_TIMER, chnBitMask, capBitMask, alarmBitMask, flags); +} + +ARM_FUNC void SND_SetupCapture(s32 capture, s32 format, void *bufferPtr, u32 length, BOOL loopFlag, s32 in, s32 out) { + PushCmd3(SND_CMD_SETUP_CAPTURE, bufferPtr, length, + (capture << 31) | (format << 30) | (loopFlag << 29) | (in << 28) | (out << 27)); +} + +ARM_FUNC void SND_SetupAlarm(s32 alarm, u32 tick, u32 period, SNDAlarmCallback cb, void *userData) { + PushCmd4(SND_CMD_SETUP_ALARM, alarm, tick, period, SNDi_SetAlarmHandler((u32)alarm, cb, userData)); +} + +// ARM_FUNC void SND_SetTrackMute(s32 player, u32 trackBitMask, BOOL flag) { } + +// ARM_FUNC void SND_StopUnlockedChannel(u32 chnBitMask, u32 flags) { } + +ARM_FUNC void SND_LockChannel(u32 chnBitMask, u32 flags) { + PushCmd2(SND_CMD_LOCK_CHANNEL, chnBitMask, flags); +} + +ARM_FUNC void SND_UnlockChannel(u32 chnBitMask, u32 flags) { + PushCmd2(SND_CMD_UNLOCK_CHANNEL, chnBitMask, flags); +} + +ARM_FUNC void SND_SetChannelTimer(u32 chnBitMask, s32 timer) { + PushCmd2(SND_CMD_CHANNEL_TIMER, chnBitMask, timer); +} + +ARM_FUNC void SND_SetChannelVolume(u32 chnBitMask, s32 volume, s32 chnDataShift) { + PushCmd3(SND_CMD_CHANNEL_VOLUME, chnBitMask, volume, chnDataShift); +} + +ARM_FUNC void SND_SetChannelPan(u32 chnBitMask, s32 pan) { + PushCmd2(SND_CMD_CHANNEL_PAN, chnBitMask, pan); +} + +ARM_FUNC void SND_SetupChannelPcm(s32 chn, s32 waveFormat, const void *dataAddr, s32 loopMode, s32 loopStart, s32 dataLen, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { + PushCmd4(SND_CMD_SETUP_CHANNEL_PCM, + chn | (timer << 16), + dataAddr, + (volume << 24) | (chnDataShift << 22) | dataLen, + (loopMode << 26) | (waveFormat << 24) | (pan << 16) | loopStart); +} + +// ARM_FUNC void SND_SetupChannelPsg(s32 chn, s32 sndDuty, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { } + +// ARM_FUNC void SND_SetupChannelNoise(s32 chn, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { } + +ARM_FUNC void SND_InvalidateSeqData(const void *start, const void *end) { + PushCmd2(SND_CMD_INVALIDATE_SEQ, start, end); +} + +ARM_FUNC void SND_InvalidateBankData(const void *start, const void *end) { + PushCmd2(SND_CMD_INVALIDATE_BANK, start, end); +} + +ARM_FUNC void SND_InvalidateWaveData(const void *start, const void *end) { + PushCmd2(SND_CMD_INVALIDATE_WAVE, start, end); +} + +// ARM_FUNC void SND_SetMasterVolume(s32 volume) { } + +ARM_FUNC void SND_SetOutputSelector(s32 left, s32 right, s32 channel1, s32 channel3) { + PushCmd4(SND_CMD_OUTPUT_SELECTOR, left, right, channel1, channel3); +} + +ARM_FUNC void SND_SetMasterPan(s32 pan) { + PushCmd1(SND_CMD_MASTER_PAN, pan); +} + +ARM_FUNC void SND_ResetMasterPan(void) { + PushCmd1(SND_CMD_MASTER_PAN, -1); +} + +// ARM_FUNC void SND_ReadDriverInfo(struct SNDDriverInfo *info) { } + +ARM_FUNC void SNDi_SetPlayerParam(s32 player, u32 offset, u32 data, s32 size) { + PushCmd4(SND_CMD_PLAYER_PARAM, player, offset, data, size); +} + +ARM_FUNC void SNDi_SetTrackParam(s32 player, u32 trackBitMask, u32 offset, u32 data, s32 size) { + PushCmd4(SND_CMD_TRACK_PARAM, player | (size << 24), trackBitMask, offset, data); +} + +// ARM_FUNC void SNDi_SetSurroundDecay(s32 decay) { } + +// ARM_FUNC void SNDi_SkipSeq(s32 player, u32 tick) { } + +ARM_FUNC static void PushCommand_impl(s32 id, u32 par1, u32 par2, u32 par3, u32 par4) { + struct SNDCommand *cmd = SND_AllocCommand(SND_CMD_FLAG_BLOCK); + if (cmd == NULL) + return; + + cmd->id = id; + cmd->arg[0] = par1; + cmd->arg[1] = par2; + cmd->arg[2] = par3; + cmd->arg[3] = par4; + SND_PushCommand(cmd); +} diff --git a/arm9/lib/NitroSDK/src/SND_main.c b/arm9/lib/NitroSDK/src/SND_main.c new file mode 100644 index 00000000..f97b0873 --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_main.c @@ -0,0 +1,26 @@ +#include "SND_main.h" +#include "SND_command.h" +#include "SND_alarm.h" + +#include "global.h" +#include "OS_mutex.h" + +static struct OSMutex sSndMutex; +static s32 sSndInitialized; + +ARM_FUNC void SND_Init(void) { + if (sSndInitialized) + return; + sSndInitialized = 1; + OS_InitMutex(&sSndMutex); + SND_CommandInit(); + SND_AlarmInit(); +} + +ARM_FUNC void SNDi_LockMutex(void) { + OS_LockMutex(&sSndMutex); +} + +ARM_FUNC void SNDi_UnlockMutex(void) { + OS_UnlockMutex(&sSndMutex); +} diff --git a/arm9/lib/NitroSDK/src/SND_util.c b/arm9/lib/NitroSDK/src/SND_util.c new file mode 100644 index 00000000..6ff8cb14 --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_util.c @@ -0,0 +1,238 @@ +#include "SND_util.h" + +// not used in pokediamond +//static const u16 sPitchTable[0x600] = { +// 0x0000, 0x003B, 0x0076, 0x00B2, 0x00ED, 0x0128, 0x0164, 0x019f, +// 0x01DB, 0x0217, 0x0252, 0x028E, 0x02CA, 0x0305, 0x0341, 0x037D, +// 0x03B9, 0x03F5, 0x0431, 0x046E, 0x04AA, 0x04E6, 0x0522, 0x055F, +// 0x059B, 0x05D8, 0x0614, 0x0651, 0x068D, 0x06CA, 0x0707, 0x0743, +// 0x0780, 0x07BD, 0x07FA, 0x0837, 0x0874, 0x08B1, 0x08EF, 0x092C, +// 0x0969, 0x09A7, 0x09E4, 0x0A21, 0x0A5F, 0x0A9C, 0x0ADA, 0x0B18, +// 0x0B56, 0x0B93, 0x0BD1, 0x0C0F, 0x0C4D, 0x0C8B, 0x0CC9, 0x0D07, +// 0x0D45, 0x0D84, 0x0DC2, 0x0E00, 0x0E3F, 0x0E7D, 0x0EBC, 0x0EFA, +// 0x0F39, 0x0F78, 0x0FB6, 0x0FF5, 0x1034, 0x1073, 0x10B2, 0x10F1, +// 0x1130, 0x116F, 0x11AE, 0x11EE, 0x122D, 0x126C, 0x12AC, 0x12EB, +// 0x132B, 0x136B, 0x13AA, 0x13EA, 0x142A, 0x146A, 0x14A9, 0x14E9, +// 0x1529, 0x1569, 0x15AA, 0x15EA, 0x162A, 0x166A, 0x16AB, 0x16EB, +// 0x172C, 0x176C, 0x17AD, 0x17ED, 0x182E, 0x186F, 0x18B0, 0x18F0, +// 0x1931, 0x1972, 0x19B3, 0x19F5, 0x1A36, 0x1A77, 0x1AB8, 0x1AFA, +// 0x1B3B, 0x1B7D, 0x1BBE, 0x1C00, 0x1C41, 0x1C83, 0x1CC5, 0x1D07, +// 0x1D48, 0x1D8A, 0x1DCC, 0x1E0E, 0x1E51, 0x1E93, 0x1ED5, 0x1F17, +// 0x1F5A, 0x1F9C, 0x1FDF, 0x2021, 0x2064, 0x20A6, 0x20E9, 0x212C, +// 0x216F, 0x21B2, 0x21F5, 0x2238, 0x227B, 0x22BE, 0x2301, 0x2344, +// 0x2388, 0x23CB, 0x240E, 0x2452, 0x2496, 0x24D9, 0x251D, 0x2561, +// 0x25A4, 0x25E8, 0x262C, 0x2670, 0x26B4, 0x26F8, 0x273D, 0x2781, +// 0x27C5, 0x280A, 0x284E, 0x2892, 0x28D7, 0x291C, 0x2960, 0x29A5, +// 0x29EA, 0x2A2F, 0x2A74, 0x2AB9, 0x2AFE, 0x2B43, 0x2B88, 0x2BCD, +// 0x2C13, 0x2C58, 0x2C9D, 0x2CE3, 0x2D28, 0x2D6E, 0x2DB4, 0x2DF9, +// 0x2E3F, 0x2E85, 0x2ECB, 0x2F11, 0x2F57, 0x2F9D, 0x2FE3, 0x302A, +// 0x3070, 0x30B6, 0x30FD, 0x3143, 0x318A, 0x31D0, 0x3217, 0x325E, +// 0x32A5, 0x32EC, 0x3332, 0x3379, 0x33C1, 0x3408, 0x344F, 0x3496, +// 0x34DD, 0x3525, 0x356C, 0x35B4, 0x35FB, 0x3643, 0x368B, 0x36D3, +// 0x371A, 0x3762, 0x37AA, 0x37F2, 0x383A, 0x3883, 0x38CB, 0x3913, +// 0x395C, 0x39A4, 0x39ED, 0x3A35, 0x3A7E, 0x3AC6, 0x3B0F, 0x3B58, +// 0x3BA1, 0x3BEA, 0x3C33, 0x3C7C, 0x3CC5, 0x3D0E, 0x3D58, 0x3DA1, +// 0x3DEA, 0x3E34, 0x3E7D, 0x3EC7, 0x3F11, 0x3F5A, 0x3FA4, 0x3FEE, +// 0x4038, 0x4082, 0x40CC, 0x4116, 0x4161, 0x41AB, 0x41F5, 0x4240, +// 0x428A, 0x42D5, 0x431F, 0x436A, 0x43B5, 0x4400, 0x444B, 0x4495, +// 0x44E1, 0x452C, 0x4577, 0x45C2, 0x460D, 0x4659, 0x46A4, 0x46F0, +// 0x473B, 0x4787, 0x47D3, 0x481E, 0x486A, 0x48B6, 0x4902, 0x494E, +// 0x499A, 0x49E6, 0x4A33, 0x4A7F, 0x4ACB, 0x4B18, 0x4B64, 0x4BB1, +// 0x4BFE, 0x4C4A, 0x4C97, 0x4CE4, 0x4D31, 0x4D7E, 0x4DCB, 0x4E18, +// 0x4E66, 0x4EB3, 0x4F00, 0x4F4E, 0x4F9B, 0x4FE9, 0x5036, 0x5084, +// 0x50D2, 0x5120, 0x516E, 0x51BC, 0x520A, 0x5258, 0x52A6, 0x52F4, +// 0x5343, 0x5391, 0x53E0, 0x542E, 0x547D, 0x54CC, 0x551A, 0x5569, +// 0x55B8, 0x5607, 0x5656, 0x56A5, 0x56F4, 0x5744, 0x5793, 0x57E2, +// 0x5832, 0x5882, 0x58D1, 0x5921, 0x5971, 0x59C1, 0x5A10, 0x5A60, +// 0x5AB0, 0x5B01, 0x5B51, 0x5BA1, 0x5BF1, 0x5C42, 0x5C92, 0x5CE3, +// 0x5D34, 0x5D84, 0x5DD5, 0x5E26, 0x5E77, 0x5EC8, 0x5F19, 0x5F6A, +// 0x5FBB, 0x600D, 0x605E, 0x60B0, 0x6101, 0x6153, 0x61A4, 0x61F6, +// 0x6248, 0x629A, 0x62EC, 0x633E, 0x6390, 0x63E2, 0x6434, 0x6487, +// 0x64D9, 0x652C, 0x657E, 0x65D1, 0x6624, 0x6676, 0x66C9, 0x671C, +// 0x676F, 0x67C2, 0x6815, 0x6869, 0x68BC, 0x690F, 0x6963, 0x69B6, +// 0x6A0A, 0x6A5E, 0x6AB1, 0x6B05, 0x6B59, 0x6BAD, 0x6C01, 0x6C55, +// 0x6CAA, 0x6CFE, 0x6D52, 0x6DA7, 0x6DFB, 0x6E50, 0x6EA4, 0x6EF9, +// 0x6F4E, 0x6FA3, 0x6FF8, 0x704D, 0x70A2, 0x70F7, 0x714D, 0x71A2, +// 0x71F7, 0x724D, 0x72A2, 0x72F8, 0x734E, 0x73A4, 0x73FA, 0x7450, +// 0x74A6, 0x74FC, 0x7552, 0x75A8, 0x75FF, 0x7655, 0x76AC, 0x7702, +// 0x7759, 0x77B0, 0x7807, 0x785E, 0x78B4, 0x790C, 0x7963, 0x79BA, +// 0x7A11, 0x7A69, 0x7AC0, 0x7B18, 0x7B6F, 0x7BC7, 0x7C1F, 0x7C77, +// 0x7CCF, 0x7D27, 0x7D7F, 0x7DD7, 0x7E2F, 0x7E88, 0x7EE0, 0x7F38, +// 0x7F91, 0x7FEA, 0x8042, 0x809B, 0x80F4, 0x814D, 0x81A6, 0x81FF, +// 0x8259, 0x82B2, 0x830B, 0x8365, 0x83BE, 0x8418, 0x8472, 0x84CB, +// 0x8525, 0x857F, 0x85D9, 0x8633, 0x868E, 0x86E8, 0x8742, 0x879D, +// 0x87F7, 0x8852, 0x88AC, 0x8907, 0x8962, 0x89BD, 0x8A18, 0x8A73, +// 0x8ACE, 0x8B2A, 0x8B85, 0x8BE0, 0x8C3C, 0x8C97, 0x8CF3, 0x8D4F, +// 0x8DAB, 0x8E07, 0x8E63, 0x8EBF, 0x8F1B, 0x8F77, 0x8FD4, 0x9030, +// 0x908C, 0x90E9, 0x9146, 0x91A2, 0x91FF, 0x925C, 0x92B9, 0x9316, +// 0x9373, 0x93D1, 0x942E, 0x948C, 0x94E9, 0x9547, 0x95A4, 0x9602, +// 0x9660, 0x96BE, 0x971C, 0x977A, 0x97D8, 0x9836, 0x9895, 0x98F3, +// 0x9952, 0x99B0, 0x9A0F, 0x9A6E, 0x9ACD, 0x9B2C, 0x9B8B, 0x9BEA, +// 0x9C49, 0x9CA8, 0x9D08, 0x9D67, 0x9DC7, 0x9E26, 0x9E86, 0x9EE6, +// 0x9F46, 0x9FA6, 0xA006, 0xA066, 0xA0C6, 0xA127, 0xA187, 0xA1E8, +// 0xA248, 0xA2A9, 0xA30A, 0xA36B, 0xA3CC, 0xA42D, 0xA48E, 0xA4EF, +// 0xA550, 0xA5B2, 0xA613, 0xA675, 0xA6D6, 0xA738, 0xA79A, 0xA7FC, +// 0xA85E, 0xA8C0, 0xA922, 0xA984, 0xA9E7, 0xAA49, 0xAAAC, 0xAB0E, +// 0xAB71, 0xABD4, 0xAC37, 0xAC9A, 0xACFD, 0xAD60, 0xADC3, 0xAE27, +// 0xAE8A, 0xAEED, 0xAF51, 0xAFB5, 0xB019, 0xB07C, 0xB0E0, 0xB145, +// 0xB1A9, 0xB20D, 0xB271, 0xB2D6, 0xB33A, 0xB39F, 0xB403, 0xB468, +// 0xB4CD, 0xB532, 0xB597, 0xB5FC, 0xB662, 0xB6C7, 0xB72C, 0xB792, +// 0xB7F7, 0xB85D, 0xB8C3, 0xB929, 0xB98F, 0xB9F5, 0xBA5B, 0xBAC1, +// 0xBB28, 0xBB8E, 0xBBF5, 0xBC5B, 0xBCC2, 0xBD29, 0xBD90, 0xBDF7, +// 0xBE5E, 0xBEC5, 0xBF2C, 0xBF94, 0xBFFB, 0xC063, 0xC0CA, 0xC132, +// 0xC19A, 0xC202, 0xC26A, 0xC2D2, 0xC33A, 0xC3A2, 0xC40B, 0xC473, +// 0xC4DC, 0xC544, 0xC5AD, 0xC616, 0xC67F, 0xC6E8, 0xC751, 0xC7BB, +// 0xC824, 0xC88D, 0xC8F7, 0xC960, 0xC9CA, 0xCA34, 0xCA9E, 0xCB08, +// 0xCB72, 0xCBDC, 0xCC47, 0xCCB1, 0xCD1B, 0xCD86, 0xCDF1, 0xCE5B, +// 0xCEC6, 0xCF31, 0xCF9C, 0xD008, 0xD073, 0xD0DE, 0xD14A, 0xD1B5, +// 0xD221, 0xD28D, 0xD2F8, 0xD364, 0xD3D0, 0xD43D, 0xD4A9, 0xD515, +// 0xD582, 0xD5EE, 0xD65B, 0xD6C7, 0xD734, 0xD7A1, 0xD80E, 0xD87B, +// 0xD8E9, 0xD956, 0xD9C3, 0xDA31, 0xDA9E, 0xDB0C, 0xDB7A, 0xDBE8, +// 0xDC56, 0xDCC4, 0xDD32, 0xDDA0, 0xDE0F, 0xDE7D, 0xDEEC, 0xDF5B, +// 0xDFC9, 0xE038, 0xE0A7, 0xE116, 0xE186, 0xE1F5, 0xE264, 0xE2D4, +// 0xE343, 0xE3B3, 0xE423, 0xE493, 0xE503, 0xE573, 0xE5E3, 0xE654, +// 0xE6C4, 0xE735, 0xE7A5, 0xE816, 0xE887, 0xE8F8, 0xE969, 0xE9DA, +// 0xEA4B, 0xEABC, 0xEB2E, 0xEB9F, 0xEC11, 0xEC83, 0xECF5, 0xED66, +// 0xEDD9, 0xEE4B, 0xEEBD, 0xEF2F, 0xEFA2, 0xF014, 0xF087, 0xF0FA, +// 0xF16D, 0xF1E0, 0xF253, 0xF2C6, 0xF339, 0xF3AD, 0xF420, 0xF494, +// 0xF507, 0xF57B, 0xF5EF, 0xF663, 0xF6D7, 0xF74C, 0xF7C0, 0xF834, +// 0xF8A9, 0xF91E, 0xF992, 0xFA07, 0xFA7C, 0xFAF1, 0xFB66, 0xFBDC, +// 0xFC51, 0xFCC7, 0xFD3C, 0xFDB2, 0xFE28, 0xFE9E, 0xFF14, 0xFF8A, +//}; + +static const u8 sVolumeTable[724] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xB, + 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0xC, 0xC, 0xC, 0xC, + 0xC, 0xC, 0xC, 0xC, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xE, + 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xF, 0xF, 0xF, 0xF, 0xF, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, + 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, + 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, + 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x1A, + 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1D, + 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, + 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, + 0x24, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, + 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, + 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, + 0x31, 0x31, 0x32, 0x32, 0x33, 0x33, 0x34, 0x35, 0x35, + 0x36, 0x36, 0x37, 0x38, 0x38, 0x39, 0x3A, 0x3A, 0x3B, + 0x3C, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F, 0x40, 0x41, 0x42, + 0x42, 0x43, 0x44, 0x45, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4A, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, + 0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5A, 0x5B, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, + 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, + 0x7B, 0x7D, 0x7E, 0x7F, 0x20, 0x21, 0x21, 0x21, 0x22, + 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, 0x26, + 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, + 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, + 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x32, 0x33, 0x33, + 0x34, 0x34, 0x35, 0x36, 0x36, 0x37, 0x37, 0x38, 0x39, + 0x39, 0x3A, 0x3B, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E, 0x3F, + 0x40, 0x40, 0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4D, + 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x69, 0x6A, + 0x6B, 0x6C, 0x6D, 0x6F, 0x70, 0x71, 0x73, 0x74, 0x75, + 0x77, 0x78, 0x79, 0x7B, 0x7C, 0x7E, 0x7E, 0x40, 0x41, + 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x48, + 0x49, 0x4A, 0x4B, 0x4C, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D, + 0x6E, 0x70, 0x71, 0x72, 0x74, 0x75, 0x76, 0x78, 0x79, + 0x7B, 0x7C, 0x7D, 0x7E, 0x40, 0x41, 0x42, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, + 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x6F, 0x71, + 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, 0x7C, 0x7D, + 0x7E, 0x7F, +}; + +const s16 SNDi_DecibelTable[0x80] = { + -32768,-421,-361, -325, -300, -281, -265, -252, + -240, -230, -221, -212, -205, -198, -192, -186, + -180, -175, -170, -165, -161, -156, -152, -148, + -145, -141, -138, -134, -131, -128, -125, -122, + -120, -117, -114, -112, -110, -107, -105, -103, + -100, -98, -96, -94, -92, -90, -88, -86, + -85, -83, -81, -79, -78, -76, -74, -73, + -71, -70, -68, -67, -65, -64, -62, -61, + -60, -58, -57, -56, -54, -53, -52, -51, + -49, -48, -47, -46, -45, -43, -42, -41, + -40, -39, -38, -37, -36, -35, -34, -33, + -32, -31, -30, -29, -28, -27, -26, -25, + -24, -23, -23, -22, -21, -20, -19, -18, + -17, -17, -16, -15, -14, -13, -12, -12, + -11, -10, -9, -9, -8, -7, -6, -6, + -5, -4, -3, -3, -2, -1, -1, 0, +}; + +// not used in pokediamond +//const s16 SNDi_DecibelSquareTable[0x80] = { +// -32768,-722,-721, -651, -601, -562, -530, -503, +// -480, -460, -442, -425, -410, -396, -383, -371, +// -360, -349, -339, -330, -321, -313, -305, -297, +// -289, -282, -276, -269, -263, -257, -251, -245, +// -239, -234, -229, -224, -219, -214, -210, -205, +// -201, -196, -192, -188, -184, -180, -176, -173, +// -169, -165, -162, -158, -155, -152, -149, -145, +// -142, -139, -136, -133, -130, -127, -125, -122, +// -119, -116, -114, -111, -109, -106, -103, -101, +// -99, -96, -94, -91, -89, -87, -85, -82, +// -80, -78, -76, -74, -72, -70, -68, -66, +// -64, -62, -60, -58, -56, -54, -52, -50, +// -49, -47, -45, -43, -42, -40, -38, -36, +// -35, -33, -31, -30, -28, -27, -25, -23, +// -22, -20, -19, -17, -16, -14, -13, -11, +// -10, -8, -7, -6, -4, -3, -1, 0, +//}; + +ARM_FUNC u16 SND_CalcChannelVolume(s32 x) { + // directly using s32 doesn't match + int decibels = (int)x; + if (decibels < -723) + decibels = -723; + else if (decibels > 0) + decibels = 0; + + u32 resultLo = sVolumeTable[decibels + 723]; + u32 resultHi; + + if (decibels < -240) { + resultHi = 3; + } else { + if (decibels < -120) { + resultHi = 2; + } else { + if (decibels < -60) { + resultHi = 1; + } else { + resultHi = 0; + } + } + } + + return (u16)((resultHi << 8u) | resultLo); +} diff --git a/arm9/lib/NitroSDK/src/SND_work.c b/arm9/lib/NitroSDK/src/SND_work.c new file mode 100644 index 00000000..ca9208d6 --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_work.c @@ -0,0 +1,113 @@ +#include "SND_work.h" +#include "SND_alarm.h" +#include "SND_main.h" +#include "OS_cache.h" + +struct SNDSharedWork *SNDi_SharedWork; + +u32 SND_GetPlayerStatus(void) { + DC_InvalidateRange(&SNDi_SharedWork->playerStatus, 4); + return SNDi_SharedWork->playerStatus; +} + +u16 SND_GetChannelStatus(void) { + DC_InvalidateRange(&SNDi_SharedWork->channelStatus, 2); + return SNDi_SharedWork->channelStatus; +} + +//u16 SND_GetCaptureStatus(void) { +// DC_InvalidateRange(&SNDi_SharedWork->captureStatus, 2); +// return SNDi_SharedWork->captureStatus; +//} + +u32 SND_GetPlayerTickCounter(u32 playerId) { + DC_InvalidateRange(&SNDi_SharedWork->players[playerId].tickCounter, 4); + return SNDi_SharedWork->players[playerId].tickCounter; +} + +//s16 SND_GetPlayerLocalVariable(u32 playerId, u32 var) { +// DC_InvalidateRange(&SNDi_SharedWork->players[playerId].localVars[var], 2); +// return SNDi_SharedWork->players[playerId].localVars[var]; +//} +// +//s16 SND_GetPlayerLocalVariable(u32 var) { +// DC_InvalidateRange(&SNDi_SharedWork->globalVars[var], 2); +// return SNDi_SharedWork->globalVars[var]; +//} +// +//BOOL SND_ReadChannelInfo(const SNDDriverInfo *driverInfo, s32 chnId, SNDChannelInfo *chnInfo) { +// // T O D O, implement if it's actually used +//} +// +//BOOL SND_ReadPlayerInfo(const SNDDriverInfo *driverInfo, s32 playerId, SNDPlayerInfo *playerInfo) { +// if (playerId < 0 || playerId >= SND_PLAYER_COUNT) +// return FALSE; +// SNDPlayer *player = &driverInfo->work.players[playerId]; +// playerInfo->trackBitMask = 0; +// for (s32 i = 0; i < SND_TRACK_COUNT; i++) { +// if (player->tracks[i] != SND_INVALID_TRACK_INDEX) { +// playerInfo->trackBitMask |= (1 << i); +// } +// } +// playerInfo->flags.active = player->flags.active; +// playerInfo->flags.paused = player->flags.paused; +// playerInfo->tempo = player->tempo; +// playerInfo->volume = player->volume; +// return TRUE; +//} +// +// +//BOOL SND_ReadTrackInfo(const SNDDriverInfo *driverInfo s32 playerId, s32 trackId, SNDTrackInfo *trackInfo) { +// if (playerId < 0 || playerId >= SND_PLAYER_COUNT) +// return FALSE; +// if (trackId < 0 || trackId >= SND_TRACK_COUNT) +// return FALSE; +// SNDPlayer *player = &driverInfo->work.players[playerId]; +// if (player->tracks[trackId] == SND_INVALID_TRACK_INDEX) +// return FALSE; +// SNDTrack *track = &driverInfo->work.tracks[trackId]; +// trackInfo->program = track->program; +// trackInfo->volume = track->volume; +// trackInfo->expression = track->expression; +// trackInfo->pitchBend = track->pitchBend; +// trackInfo->bendRange = track->bendRange; +// trackInfo->pan = track->pan + 0x40; // 0x40 == MIDI center pan +// trackInfo->transpose = track->transpose; +// trackInfo->chnCount = 0; +// +// //#define LL_READ_PTR(ptr, basePtr, base) (ptr ? ((typeof(ptr))(s32)(ptr) - (s32)(basePtr) + (s32)&(base)) : NULL) +// //for (SNDExChannel *exChn = LL_READ_PTR(track->channelLLHead, driverInfo->workPtr, driverInfo->work); +// // exChn != NULL; exChn = LL_READ_PTR(exChn->channelLLNext, driverInfo->workPtr, driverInfo->work)) +// //{ +// // trackInfo->channel[trackInfo->chnCount] = exChn->id; +// // trackInfo->chnCount++; +// //} +// //#undef LL_READ_PTR +// +// return TRUE; +//} + +ARM_FUNC u32 SNDi_GetFinishedCommandTag(void) { + DC_InvalidateRange(&SNDi_SharedWork->finishedCommandTag, 4); + return SNDi_SharedWork->finishedCommandTag; +} + +ARM_FUNC void SNDi_InitSharedWork(struct SNDSharedWork *sw) { + sw->playerStatus = 0; + sw->channelStatus = 0; + sw->captureStatus = 0; + sw->finishedCommandTag = 0; + + for (s32 i = 0; i < SND_PLAYER_COUNT; i++) { + sw->players[i].tickCounter = 0; + for (s32 j = 0; j < 16; j++) { + sw->players[i].localVars[j] = -1; + } + } + + for (s32 i = 0; i < 16; i++) { + sw->globalVars[i] = -1; + } + + DC_FlushRange(sw, sizeof(*sw)); +} diff --git a/arm9/lib/NitroSDK/src/WM_ks.c b/arm9/lib/NitroSDK/src/WM_ks.c new file mode 100644 index 00000000..93e96f89 --- /dev/null +++ b/arm9/lib/NitroSDK/src/WM_ks.c @@ -0,0 +1,15 @@ +#include "WM_ks.h" +#include "function_target.h" + +extern WMErrCode WM_StartDataSharing(WMKeySetBuf *buf, u16 port, u16 aidBitmap, u16 dataLength, BOOL doubleMode); +extern WMErrCode WM_EndDataSharing(WMKeySetBuf *buf); + +ARM_FUNC WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port) +{ + return WM_StartDataSharing(buf, port, 0xffff, 2, TRUE); +} + +ARM_FUNC WMErrCode WM_EndKeySharing(WMKeySetBuf *buf) +{ + return WM_EndDataSharing(buf); +} diff --git a/arm9/lib/NitroSDK/src/crt0.c b/arm9/lib/NitroSDK/src/crt0.c new file mode 100644 index 00000000..4e46cb63 --- /dev/null +++ b/arm9/lib/NitroSDK/src/crt0.c @@ -0,0 +1,378 @@ +#include "nitro.h" +#include "MI_uncompress.h" + +extern void NitroMain(void); +extern void SDK_IRQ_STACKSIZE(void); +extern void SDK_AUTOLOAD_START(void); +extern void SDK_AUTOLOAD_LIST(void); +extern void SDK_AUTOLOAD_LIST_END(void); +extern void SDK_STATIC_BSS_START(void); +extern void SDK_STATIC_BSS_END(void); +extern void OS_IrqHandler(void); + +extern void *const _start_ModuleParams[]; + +static void init_cp15(void); +static void do_autoload(void); +static void INITi_CpuClear32(register u32 data, register void *destp, register u32 size); +void _start_AutoloadDoneCallback(void *argv[]); + +extern void __call_static_initializers(void); +extern void _fp_init(void); +void NitroStartUp(void); +void _start(void); + +#define SDK_VERSION_ID ((3 << 24) | (2 << 16) | 30001) +#define SDK_NITROCODE_LE 0x2106c0de +#define SDK_NITROCODE_BE 0xdec00621 + +ARM_FUNC asm void _start(void) +{ + //set IME to 0 + mov r12, #0x4000000 + str r12, [r12, #0x208] + + //adjust VCOUNT +_02000808: + ldrh r0, [r12, #6] + cmp r0, #0 + bne _02000808 + + //init cp15 + bl init_cp15 + + //init stack pointer + //SVC mode + mov r0, #OS_PROCMODE_SVC + msr CPSR_c, r0 + ldr r0, =SDK_AUTOLOAD_DTCM_START + add r0, r0, #0x3fc0 + mov sp, r0 + + //IRQ mode + mov r0, #OS_PROCMODE_IRQ + msr CPSR_c, r0 + ldr r0, =SDK_AUTOLOAD_DTCM_START + add r0, r0, #0x3fc0 + sub r0, r0, #HW_SVC_STACK_SIZE + sub sp, r0, #4 + tst sp, #4 + subeq sp, sp, #4 + + //system mode + ldr r1, =SDK_IRQ_STACKSIZE + sub r1, r0, r1 + mov r0, #OS_PROCMODE_SYS + msr CPSR_csfx, r0 + sub sp, r1, #4 + + //clear memory + //DTCM + mov r0, #0 + ldr r1, =SDK_AUTOLOAD_DTCM_START + mov r2, #HW_DTCM_SIZE + bl INITi_CpuClear32 + + //BG/OBJ palette + mov r0, #0 + ldr r1, =HW_PLTT + mov r2, #HW_PLTT_SIZE + bl INITi_CpuClear32 + + //OAM + mov r0, #0x0200 + ldr r1, =HW_OAM + mov r2, #HW_OAM_SIZE + bl INITi_CpuClear32 + + //load autoload block and init bss + ldr r1, =_start_ModuleParams + ldr r0, [r1, #20] + bl MIi_UncompressBackward + bl do_autoload + + //fill static bss with 0 + ldr r0, =_start_ModuleParams + ldr r1, [r0, #12] + ldr r2, [r0, #16] + mov r3, r1 + mov r0, #0 +_020008B4: + cmp r1, r2 + strcc r0, [r1], #4 + bcc _020008B4 + + //flush static bss region + bic r1, r3, #HW_CACHE_LINE_SIZE - 1 +_020008C4: + mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer + mcr p15, 0, r1, c7, c5, 1 //Invalidate Instruction Cache Line VA + mcr p15, 0, r1, c7, c14, 1 //Clean and Invalidate Data Cache Line VA + add r1, r1, #HW_CACHE_LINE_SIZE + cmp r1, r2 + blt _020008C4 + + //print buffer + ldr r1, =HW_COMPONENT_PARAM + str r0, [r1, #0] + + //set interrput vector + ldr r1, =SDK_AUTOLOAD_DTCM_START + add r1, r1, #0x3fc0 + add r1, r1, #HW_DTCM_SYSRV_OFS_INTR_VECTOR + ldr r0, =OS_IrqHandler + str r0, [r1, #0] + + bl _fp_init + bl NitroStartUp + bl __call_static_initializers + + //start + ldr r1, =NitroMain + ldr lr, =HW_RESET_VECTOR + + tst sp, #4 + subne sp, sp, #4 + bx r1 +} + +ARM_FUNC static asm void INITi_CpuClear32(register u32 data, register void *destp, register u32 size) +{ + add r12, r1, r2 +_02000940: + cmp r1, r12 + stmltia r1!, {r0} + blt _02000940 + bx lr +} + +void *const _start_ModuleParams[] = { + (void *)SDK_AUTOLOAD_LIST, + (void *)SDK_AUTOLOAD_LIST_END, + (void *)SDK_AUTOLOAD_START, + (void *)SDK_STATIC_BSS_START, + (void *)SDK_STATIC_BSS_END, + (void *)0, // CompressedStaticEnd + (void *)SDK_VERSION_ID, // SDK version info + (void *)SDK_NITROCODE_BE, // Checker 1 + (void *)SDK_NITROCODE_LE, // Checker 2 +}; + +ARM_FUNC asm void MIi_UncompressBackward(register void *bottom) +{ + cmp r0, #0 + beq _020009F8 + stmfd sp!, {r4-r7} + ldmdb r0, {r1-r2} + add r2, r0, r2 + sub r3, r0, r1, lsr #24 + bic r1, r1, #0xff000000 + sub r1, r0, r1 + mov r4, r2 +_02000974: + cmp r3, r1 + ble _020009D4 + ldrb r5, [r3, #-1]! + mov r6, #8 +_02000984: + subs r6, r6, #1 + blt _02000974 + tst r5, #0x80 + bne _020009A0 + + ldrb r0, [r3, #-1]! + strb r0, [r2, #-1]! + b _020009C8 +_020009A0: + ldrb r12, [r3, #-1]! + ldrb r7, [r3, #-1]! + orr r7, r7, r12, lsl #8 + bic r7, r7, #0xf000 + add r7, r7, #0x0002 + add r12, r12, #0x0020 +_020009B8: + ldrb r0, [r2, r7] + strb r0, [r2, #-1]! + subs r12, r12, #0x0010 + bge _020009B8 +_020009C8: + cmp r3, r1 + mov r5, r5, lsl #1 + bgt _02000984 +_020009D4: + mov r0, #0 + bic r3, r1, #HW_CACHE_LINE_SIZE - 1 +_020009DC: + mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer + mcr p15, 0, r3, c7, c5, 1 //Invalidate Instruction Cache Line VA + mcr p15, 0, r3, c7, c14, 1 //Clean and Invalidate Data Cache Line VA + add r3, r3, #HW_CACHE_LINE_SIZE + cmp r3, r4 + blt _020009DC + + ldmfd sp!, {r4-r7} +_020009F8: + bx lr +} + +ARM_FUNC static asm void do_autoload(void) +{ + ldr r0, =_start_ModuleParams + ldr r1, [r0, #0] + ldr r2, [r0, #4] + ldr r3, [r0, #8] + +_02000A0C: + cmp r1, r2 + beq _02000A6C + + ldr r5, [r1], #4 + ldr r7, [r1], #4 + add r6, r5, r7 + mov r4, r5 +_02000A24: + cmp r4, r6 + ldrmi r7, [r3], #4 + strmi r7, [r4], #4 + bmi _02000A24 + + //fill bss with 0 + ldr r7, [r1], #4 + add r6, r4, r7 + mov r7, #0 +_02000A40: + cmp r4, r6 + strcc r7, [r4], #4 + bcc _02000A40 + + bic r4, r5, #HW_CACHE_LINE_SIZE - 1 +_02000A50: + mcr p15, 0, r7, c7, c10, 4 //Drain Write Buffer + mcr p15, 0, r4, c7, c5, 1 //Invalidate Instruction Cache Line VA + mcr p15, 0, r4, c7, c14, 1 //Clean and Invalidate Data Cache Line VA + add r4, r4, #HW_CACHE_LINE_SIZE + cmp r4, r6 + blt _02000A50 + + b _02000A0C + +_02000A6C: + b _start_AutoloadDoneCallback +} + +ARM_FUNC asm void _start_AutoloadDoneCallback(void *argv[]) +{ + bx lr +} + +#define SET_PROTECTION_A(id, addr, size) ldr r0, =(addr|HW_C6_PR_##size|HW_C6_PR_ENABLE) +#define SET_PROTECTION_B(id, addr, size) mcr p15, 0, r0, c6, id, 0 +#define REGION_BIT(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<1)|((c)<<2)|((d)<<3)|((e)<<4)|((f)<<5)|((g)<<6)|((h)<<7)) +#define REGION_ACC(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<4)|((c)<<8)|((d)<<12)|((e)<<16)|((f)<<20)|((g)<<24)|((h)<<28)) +ARM_FUNC static asm void init_cp15(void) +{ + //Disable TCM/Cache/Protection Unit + mrc p15, 0, r0, c1, c0, 0 //Save Control Register + + /* + * The following bits are disabled + * * Instruction Cache + * * Data/Unified Cache + * * ITCM + * * DTCM + * * ITCM Load Mode + * * DTCM Load Mode + * * LD Interwork Disable + * * Protection Unit Enable + */ + ldr r1, =0x000f9005 + bic r0, r0, r1 + mcr p15, 0, r0, c1, c0, 0 //Set Control Register + + //Disable Cache + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 //Invalidate Entire Instruction Cache + mcr p15, 0, r0, c7, c6, 0 //Invalidate Entire Data Cache + + mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer + + SET_PROTECTION_A(c0, HW_IOREG, 64MB) //Protection Unit Unified Region + SET_PROTECTION_B(c0, HW_IOREG, 64MB) + + SET_PROTECTION_A(c1, HW_MAIN_MEM, 8MB) + SET_PROTECTION_B(c1, HW_MAIN_MEM, 8MB) + + SET_PROTECTION_A(c2, HW_MAIN_MEM_SUB, 128KB) + SET_PROTECTION_B(c2, HW_MAIN_MEM_SUB, 128KB) + + SET_PROTECTION_A(c3, HW_CTRDG_ROM, 128MB) + SET_PROTECTION_B(c3, HW_CTRDG_ROM, 128MB) + + ldr r0, =SDK_AUTOLOAD_DTCM_START + orr r0, r0, #0x1a + orr r0, r0, #1 + SET_PROTECTION_B(c4, HW_DTCM, 16KB) + + SET_PROTECTION_A(c5, HW_ITCM_IMAGE, 16MB) + SET_PROTECTION_B(c5, HW_ITCM_IMAGE, 16MB) + + SET_PROTECTION_A(c6, HW_BIOS, 32KB) + SET_PROTECTION_B(c6, HW_BIOS, 32KB) + + SET_PROTECTION_A(c7, HW_MAIN_MEM_SHARED, 4KB) + SET_PROTECTION_B(c7, HW_MAIN_MEM_SHARED, 4KB) + + mov r0, #HW_C9_TCMR_32MB + mcr p15, 0, r0, c9, c1, 1 //ITCM Size/Base + + ldr r0, =SDK_AUTOLOAD_DTCM_START + orr r0, r0, #HW_C9_TCMR_16KB + mcr p15, 0, r0, c9, c1, 0 //DTCM Size/Base + + mov r0, #REGION_BIT(0,1,0,0,0,0,1,0) + mcr p15, 0, r0, c2, c0, 1 //Cache Bits for Instruction Protection Region + + mov r0, #REGION_BIT(0,1,0,0,0,0,1,0) + mcr p15, 0, r0, c2, c0, 0 //Cache Bits for Data Protection Region + + mov r0, #REGION_BIT(0,1,0,0,0,0,0,0) + mcr p15, 0, r0, c3, c0, 0 //Cache Write Buffer Bits for Data Protection Region + + ldr r0, =REGION_ACC(1,1,0,0,0,1,5,0) + mcr p15, 0, r0, c5, c0, 3 //Extended Access Permission Instruction Protection Region + + ldr r0, =REGION_ACC(1,1,0,1,1,1,5,1) + mcr p15, 0, r0, c5, c0, 2 //Extended Access Permission Data Protection Region + + mrc p15, 0, r0, c1, c0, 0 //Save Control Register + + /* + * The following bits are enabled + * * Instruction Cache + * * Data Cache + * * Cache Replacement - Round Robin + * * ITCM + * * DTCM + * * SB1 Bit Set + * * Exception Vectors + * * Protection Unit + */ + ldr r1, =0x0005707D + orr r0, r0, r1 + mcr p15, 0, r0, c1, c0, 0 //Set Control Register + + bx lr +} +#undef SET_PROTECTION_A +#undef SET_PROTECTION_B +#undef REGION_BIT +#undef REGION_ACC + +ARM_FUNC void NitroStartUp(void) +{ +} + +ARM_FUNC void OSi_ReferSymbol(void *symbol) +{ +#pragma unused(symbol) +} diff --git a/arm9/lib/NitroSDK/src/custom_allocator.c b/arm9/lib/NitroSDK/src/custom_allocator.c new file mode 100644 index 00000000..283c3500 --- /dev/null +++ b/arm9/lib/NitroSDK/src/custom_allocator.c @@ -0,0 +1,32 @@ +#include "custom_allocator.h" + +#include "global.h" +#include "OS_alloc.h" + +static FreeFunc sDestructor; +static AllocFunc sAllocator; + +// Custom allocator +ARM_FUNC void* CallCustomAllocator(u32 size) +{ + if (sAllocator != NULL) + return sAllocator(size); + else + return OS_AllocFromHeap(OS_ARENA_MAIN, -1, size); +} + +// Custom destructor +ARM_FUNC void CallCustomDestructor(void * ptr) +{ + if (sDestructor != NULL) + sDestructor(ptr); + else + OS_FreeToHeap(OS_ARENA_MAIN, -1, ptr); +} + +// Custom alloc/free setter +ARM_FUNC void SetCustomAllocatorAndDestructor(AllocFunc allocator, FreeFunc destructor) +{ + sAllocator = allocator; + sDestructor = destructor; +} diff --git a/arm9/lib/NitroSDK/src/version_1_dwc.c b/arm9/lib/NitroSDK/src/version_1_dwc.c new file mode 100644 index 00000000..713aed0d --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_1_dwc.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_NintendoDWC[] = "[SDK+NINTENDO:DWC1.2.30006.061019.2254_DWC_1_2_PLUS6]"; +#pragma section VERSION end diff --git a/arm9/lib/NitroSDK/src/version_2_wifi.c b/arm9/lib/NitroSDK/src/version_2_wifi.c new file mode 100644 index 00000000..e5db89e4 --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_2_wifi.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_NintendoWiFi[] = "[SDK+NINTENDO:WiFi1.2.30000.0609050341]"; +#pragma section VERSION end diff --git a/arm9/lib/NitroSDK/src/version_3_cps.c b/arm9/lib/NitroSDK/src/version_3_cps.c new file mode 100644 index 00000000..5918341e --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_3_cps.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_UbiquitousCPS[] = "[SDK+UBIQUITOUS:CPS]"; +#pragma section VERSION end diff --git a/arm9/lib/NitroSDK/src/version_4_ssl.c b/arm9/lib/NitroSDK/src/version_4_ssl.c new file mode 100644 index 00000000..f1bf08ce --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_4_ssl.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_UbiquitousSSL[] = "[SDK+UBIQUITOUS:SSL]"; +#pragma section VERSION end diff --git a/arm9/lib/NitroSDK/src/version_5_vct.c b/arm9/lib/NitroSDK/src/version_5_vct.c new file mode 100644 index 00000000..a13caf88 --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_5_vct.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_AbiossolibVCT[] = "[SDK+Abiosso:libVCT 1.0.1_ec]"; +#pragma section VERSION end diff --git a/arm9/lib/NitroSDK/src/version_6_backup.c b/arm9/lib/NitroSDK/src/version_6_backup.c new file mode 100644 index 00000000..3cbe3e37 --- /dev/null +++ b/arm9/lib/NitroSDK/src/version_6_backup.c @@ -0,0 +1,5 @@ +#include "sections.h" + +#pragma section VERSION begin +char _SDK_NintendoBackup[] = "[SDK+NINTENDO:BACKUP]"; +#pragma section VERSION end diff --git a/arm9/lib/include/CARD_backup.h b/arm9/lib/include/CARD_backup.h deleted file mode 100644 index e5c0c0cd..00000000 --- a/arm9/lib/include/CARD_backup.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef POKEDIAMOND_CARD_BACKUP_H -#define POKEDIAMOND_CARD_BACKUP_H - -#include "nitro/types.h" -#include "MI_dma.h" -#include "CARD_common.h" - -BOOL CARDi_RequestStreamCommand(u32 src, u32 dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async, - CARDRequest req_type, int req_retry, CARDRequestMode req_mode); -u32 CARD_GetBackupSectorSize(void); -BOOL CARD_IdentifyBackup(CARDBackupType type); -BOOL CARD_WaitBackupAsync(void); -BOOL CARD_TryWaitBackupAsync(void); -void CARD_CancelBackupAsync(void); - -static inline BOOL CARDi_ReadBackup(u32 src, void * dst, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) -{ - return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_READ_BACKUP, 1, CARD_REQUEST_MODE_RECV); -} - -static inline BOOL CARDi_WriteBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) -{ - return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND); -} - -static inline BOOL CARDi_WriteAndVerifyBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async) -{ - return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND_VERIFY); -} - -#endif //POKEDIAMOND_CARD_BACKUP_H diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h deleted file mode 100644 index 1ae31b7a..00000000 --- a/arm9/lib/include/CARD_common.h +++ /dev/null @@ -1,233 +0,0 @@ -#ifndef POKEDIAMOND_CARD_COMMON_H -#define POKEDIAMOND_CARD_COMMON_H - -#include "nitro/types.h" -#include "OS_thread.h" -#include "OS_system.h" -#include "MI_dma.h" -#include "PXI_fifo.h" - -#define CARD_PXI_COMMAND_MASK 0x3f -#define CARD_PXI_COMMAND_PULLED_OUT 0x0011 -#define CARD_PXI_COMMAND_TERMINATE 0x0001 - -#define CARD_THREAD_PRIORITY_DEFAULT 4 - -#define CARD_BACKUP_TYPE_DEVICE_SHIFT 0 -#define CARD_BACKUP_TYPE_DEVICE_MASK 0xFF -#define CARD_BACKUP_TYPE_DEVICE_EEPROM 1 -#define CARD_BACKUP_TYPE_DEVICE_FLASH 2 -#define CARD_BACKUP_TYPE_DEVICE_FRAM 3 -#define CARD_BACKUP_TYPE_SIZEBIT_SHIFT 8 -#define CARD_BACKUP_TYPE_SIZEBIT_MASK 0xFF -#define CARD_BACKUP_TYPE_VENDER_SHIFT 16 -#define CARD_BACKUP_TYPE_DEFINE(type, size, vender) \ - (((CARD_BACKUP_TYPE_DEVICE_ ## type) << CARD_BACKUP_TYPE_DEVICE_SHIFT) | \ - ((size) << CARD_BACKUP_TYPE_SIZEBIT_SHIFT) | \ - ((vender) << CARD_BACKUP_TYPE_VENDER_SHIFT)) - -#define ALIGN_MASK(a) ((a) - 1) -#define CARD_ALIGN_HI_BIT(n) (((u32)(n)) & ~ALIGN_MASK(CARD_ROM_PAGE_SIZE)) -#define CARD_ALIGN_LO_BIT(n) (((u32)(n)) & ALIGN_MASK(CARD_ROM_PAGE_SIZE)) - -#define CARD_BACKUP_CAPS_AVAILABLE (u32)(CARD_BACKUP_CAPS_READ - 1) -#define CARD_BACKUP_CAPS_READ (u32)(1 << CARD_REQ_READ_BACKUP) -#define CARD_BACKUP_CAPS_WRITE (u32)(1 << CARD_REQ_WRITE_BACKUP) -#define CARD_BACKUP_CAPS_PROGRAM (u32)(1 << CARD_REQ_PROGRAM_BACKUP) -#define CARD_BACKUP_CAPS_VERIFY (u32)(1 << CARD_REQ_VERIFY_BACKUP) -#define CARD_BACKUP_CAPS_ERASE_PAGE (u32)(1 << CARD_REQ_ERASE_PAGE_BACKUP) -#define CARD_BACKUP_CAPS_ERASE_SECTOR (u32)(1 << CARD_REQ_ERASE_SECTOR_BACKUP) -#define CARD_BACKUP_CAPS_ERASE_CHIP (u32)(1 << CARD_REQ_ERASE_CHIP_BACKUP) - -typedef enum -{ - CARD_BACKUP_TYPE_EEPROM_4KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 9, 0), - CARD_BACKUP_TYPE_EEPROM_64KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 13, 0), - CARD_BACKUP_TYPE_EEPROM_512KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 16, 0), - CARD_BACKUP_TYPE_FLASH_2MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 18, 0), - CARD_BACKUP_TYPE_FLASH_4MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 19, 0), - CARD_BACKUP_TYPE_FLASH_8MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 20, 0), - CARD_BACKUP_TYPE_FRAM_256KBITS = CARD_BACKUP_TYPE_DEFINE(FRAM, 15, 0), - CARD_BACKUP_TYPE_NOT_USE = 0 -} CARDBackupType; - -typedef enum -{ - CARD_RESULT_SUCCESS = 0, - CARD_RESULT_FAILURE, - CARD_RESULT_INVALID_PARAM, - CARD_RESULT_UNSUPPORTED, - CARD_RESULT_TIMEOUT, - CARD_RESULT_ERROR, - CARD_RESULT_NO_RESPONSE, - CARD_RESULT_CANCELED -} CARDResult; - -typedef enum -{ - CARD_TARGET_NONE, - CARD_TARGET_ROM, - CARD_TARGET_BACKUP -} CARDTargetMode; - -typedef enum -{ - CARD_REQ_INIT = 0, - CARD_REQ_ACK, - CARD_REQ_IDENTIFY, - CARD_REQ_READ_ID, - CARD_REQ_READ_ROM, - CARD_REQ_WRITE_ROM, - CARD_REQ_READ_BACKUP, - CARD_REQ_WRITE_BACKUP, - CARD_REQ_PROGRAM_BACKUP, - CARD_REQ_VERIFY_BACKUP, - CARD_REQ_ERASE_PAGE_BACKUP, - CARD_REQ_ERASE_SECTOR_BACKUP, - CARD_REQ_ERASE_CHIP_BACKUP, - CARD_REQ_MAX -} CARDRequest; - -typedef enum -{ - CARD_REQUEST_MODE_RECV, - CARD_REQUEST_MODE_SEND, - CARD_REQUEST_MODE_SEND_VERIFY, - CARD_REQUEST_MODE_SPECIAL -} CARDRequestMode; - -enum -{ - CARD_STAT_INIT = (1 << 0), - CARD_STAT_INIT_CMD = (1 << 1), - CARD_STAT_BUSY = (1 << 2), - CARD_STAT_TASK = (1 << 3), - CARD_STAT_RECV = (1 << 4), - CARD_STAT_REQ = (1 << 5), - CARD_STAT_CANCEL = (1 << 6) -}; - -typedef s32 CARDiOwner; - -typedef struct CARDiCommandArg -{ - CARDResult result; - CARDBackupType type; - u32 id; - u32 src; - u32 dest; - u32 len; - - struct - { - u32 total_size; - u32 sect_size; - u32 page_size; - u32 addr_width; - u32 program_page; - u32 write_page; - u32 write_page_total; - u32 erase_chip; - u32 erase_chip_total; - u32 erase_sector; - u32 erase_sector_total; - u32 erase_page; - u8 initial_status; - u8 padding1[3]; - u32 caps; - u8 padding2[16]; - } spec; -} CARDiCommandArg; - -typedef struct CARDiCommon -{ - CARDiCommandArg *cmd; - s32 command; - - volatile CARDiOwner lock_owner; - volatile s32 lock_ref; - OSThreadQueue lock_queue[1]; - CARDTargetMode lock_target; - - u32 src; - u32 dst; - u32 len; - u32 dma; - CARDRequest req_type; - s32 req_retry; - CARDRequestMode req_mode; - MIDmaCallback callback; - void *callback_arg; - void (*task_func) (struct CARDiCommon *); - - OSThread thread[1]; - OSThread *cur_th; - - u32 priority; - OSThreadQueue busy_q[1]; - - volatile u32 flag; - - u8 dummy[8]; - - u8 backup_cache_page_buf[256] ALIGN(32); -} CARDiCommon; - -static inline void CARDi_EndTask(CARDiCommon *p, BOOL is_own_task) -{ - const MIDmaCallback func = p->callback; - void *const arg = p->callback_arg; - - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - - p->flag &= ~(CARD_STAT_BUSY | CARD_STAT_TASK | CARD_STAT_CANCEL); - OS_WakeupThread(p->busy_q); - if ((p->flag & CARD_STAT_RECV) != 0) - { - OS_WakeupThreadDirect(p->thread); - } - (void)OS_RestoreInterrupts(bak_psr); - } - - if (is_own_task && func) - { - (*func)(arg); - } -} - -static inline void CARDi_WaitTask(CARDiCommon *p, MIDmaCallback callback, void *callback_arg) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - while ((p->flag & CARD_STAT_BUSY) != 0) - { - OS_SleepThread(p->busy_q); - } - p->flag |= CARD_STAT_BUSY; - p->callback = callback; - p->callback_arg = callback_arg; - (void)OS_RestoreInterrupts(bak_psr); -} - -void CARDi_SetTask(void (*task) (CARDiCommon *)); -void CARDi_InitCommon(void); -BOOL CARD_IsEnabled(void); -void CARD_CheckEnabled(void); -void CARD_Enable(BOOL enable); -BOOL CARDi_WaitAsync(void); -BOOL CARDi_TryWaitAsync(void); -CARDResult CARD_GetResultCode(void); -void CARD_LockRom(u16 lock_id); -void CARD_UnlockRom(u16 lock_id); -void CARD_LockBackup(u16 lock_id); -void CARD_UnlockBackup(u16 lock_id); - -#define CARD_RETRY_COUNT_MAX 10 - -static inline void CARDi_SendPxi(u32 data) -{ - while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0) - ; -} - -#endif //POKEDIAMOND_CARD_COMMON_H diff --git a/arm9/lib/include/CARD_pullOut.h b/arm9/lib/include/CARD_pullOut.h deleted file mode 100644 index bfc0e6d2..00000000 --- a/arm9/lib/include/CARD_pullOut.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POKEDIAMOND_CARD_PULLOUT_H -#define POKEDIAMOND_CARD_PULLOUT_H - -#include "nitro/types.h" - -typedef BOOL (*CARDPulledOutCallback) (void); - -void CARD_InitPulledOutCallback(void); -BOOL CARD_IsPulledOut(void); -void CARD_TerminateForPulledOut(void); -void CARDi_CheckPulledOutCore(u32 id); - -#endif //POKEDIAMOND_CARD_PULLOUT_H diff --git a/arm9/lib/include/CARD_request.h b/arm9/lib/include/CARD_request.h deleted file mode 100644 index 1bae75d0..00000000 --- a/arm9/lib/include/CARD_request.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POKEDIAMOND_CARD_REQUEST_H -#define POKEDIAMOND_CARD_REQUEST_H - -#include "nitro/types.h" -#include "PXI_fifo.h" -#include "CARD_common.h" - -void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err); -void CARDi_TaskThread(void *arg); -BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count); - -#endif //POKEDIAMOND_CARD_REQUEST_H diff --git a/arm9/lib/include/CARD_rom.h b/arm9/lib/include/CARD_rom.h deleted file mode 100644 index b6fca60b..00000000 --- a/arm9/lib/include/CARD_rom.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef POKEDIAMOND_CARD_ROM_H -#define POKEDIAMOND_CARD_ROM_H - -#include "nitro/types.h" -#include "MI_exMemory.h" -#include "MI_dma.h" -#include "CARD_common.h" -#include "OS_tcm.h" -#include "mmap.h" - -#define CARD_ROM_PAGE_SIZE 512 - -#define CARDMST_SEL_ROM 0x00 -#define CARDMST_IF_ENABLE 0x40 -#define CARDMST_ENABLE 0x80 - -#define CARD_DATA_READY 0x00800000 -#define CARD_COMMAND_PAGE 0x01000000 -#define CARD_COMMAND_ID 0x07000000 -#define CARD_COMMAND_MASK 0x07000000 -#define CARD_RESET_HI 0x20000000 -#define CARD_READ_MODE 0x00000000 -#define CARD_START 0x80000000 -#define CARD_LATENCY1_MASK 0x00001FFF - -#define MROMOP_G_READ_PAGE 0xB7000000 -#define MROMOP_G_READ_ID 0xB8000000 - -extern CARDiCommon cardi_common; - -typedef struct -{ - u32 offset; - u32 length; -} -CARDRomRegion; - -typedef struct CARDRomStat -{ - void (*read_func) (struct CARDRomStat *); - u32 ctrl; - u8 *cache_page; - u32 dummy[5]; - u8 cache_buf[CARD_ROM_PAGE_SIZE]; -} CARDRomStat; - -static inline const CARDRomRegion * CARD_GetRomRegionOVT(MIProcessor target) -{ - return (target == MI_PROCESSOR_ARM9) - ? (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x50) - : (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x58); -} - -BOOL CARDi_TryReadCardDma(CARDRomStat *p); -void CARDi_ReadCard(CARDRomStat *p); -u32 CARDi_ReadRomIDCore(void); -void CARDi_CheckPulledOutCore(u32 id); -void CARDi_ReadRom(u32 dma, const void *src, void *dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async); -void CARD_Init(void); -void CARD_WaitRomAsync(void); -void (*CARDi_GetRomAccessor(void)) (CARDRomStat *); - -static inline void CARD_ReadRomAsync(u32 dma, const void * src, void * dst, u32 len, MIDmaCallback callback, void * arg) -{ - CARDi_ReadRom(dma, src, dst, len, callback, arg, TRUE); -} - -static inline const CARDRomRegion * CARD_GetRomRegionFNT() { - return (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x40); -} - -static inline const CARDRomRegion * CARD_GetRomRegionFAT() { - return (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x48); -} - -static inline void CARDi_ReadEnd(void) -{ - CARDiCommon *const p = &cardi_common; - CARDi_CheckPulledOutCore(CARDi_ReadRomIDCore()); - p->cmd->result = CARD_RESULT_SUCCESS; - CARDi_EndTask(p, TRUE); -} - -static inline BOOL CARDi_IsInTcm(u32 buf, u32 len) -{ - const u32 i = (u32)HW_ITCM; - const u32 d = OS_GetDTCMAddress(); - return ((i < buf + len) && (i + HW_ITCM_SIZE > buf)) || - ((d < buf + len) && (d + HW_DTCM_SIZE > buf)); -} - -extern u32 cardi_rom_header_addr; - -static inline u32 CARDi_GetRomFlag(u32 flag) -{ - const u32 rom_ctrl = *(vu32 *)(cardi_rom_header_addr + 0x60); - return (u32)((rom_ctrl & ~CARD_COMMAND_MASK) | flag | - CARD_READ_MODE | CARD_START | CARD_RESET_HI); -} - -#endif //POKEDIAMOND_CARD_ROM_H diff --git a/arm9/lib/include/CARD_spi.h b/arm9/lib/include/CARD_spi.h deleted file mode 100644 index 0181e39f..00000000 --- a/arm9/lib/include/CARD_spi.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEDIAMOND_CARD_SPI_H -#define POKEDIAMOND_CARD_SPI_H - -#include "CARD_common.h" - -void CARDi_IdentifyBackupCore(CARDBackupType type); - -#endif //POKEDIAMOND_CARD_SPI_H diff --git a/arm9/lib/include/CP_context.h b/arm9/lib/include/CP_context.h deleted file mode 100644 index 9d392352..00000000 --- a/arm9/lib/include/CP_context.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef POKEDIAMOND_CP_CONTEXT_H -#define POKEDIAMOND_CP_CONTEXT_H - -#include "nitro/types.h" - -typedef struct CPContext { - u64 div_numer; - u64 div_denom; - u64 sqrt; - u16 div_mode; - u16 sqrt_mode; -} CPContext; - -void CP_SaveContext(register CPContext *context); -void CPi_RestoreContext(const CPContext* context); - -#endif //POKEDIAMOND_CP_CONTEXT_H diff --git a/arm9/lib/include/CTRDG_backup.h b/arm9/lib/include/CTRDG_backup.h deleted file mode 100644 index 8b95a7aa..00000000 --- a/arm9/lib/include/CTRDG_backup.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef POKEDIAMOND_CTRDG_BACKUP_H -#define POKEDIAMOND_CTRDG_BACKUP_H - -#include "nitro/types.h" -#include "CTRDG_flash.h" -#include "CTRDG_task.h" - -#define CTRDG_BACKUP_PHASE_PROGRAM 0x0001 -#define CTRDG_BACKUP_PHASE_SECTOR_ERASE 0x0002 -#define CTRDG_BACKUP_PHASE_CHIP_ERASE 0x0003 -#define CTRDG_BACKUP_PHASE_PARAMETER_CHECK 0x00ff - -#define CTRDG_BACKUP_RESULT_ERROR 0x8000 - -extern u16 ctrdg_flash_remainder; - -typedef struct CTRDGiFlashTypePlusTag -{ - u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); - u16 (*CTRDGi_EraseAgbFlashChip)(void); - u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); - void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); - void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); - void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); - u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); - const u16 (*maxtime); - CTRDGFlashType type; -} CTRDGiFlashTypePlus; - -typedef enum -{ - CTRDG_BACKUP_TYPE_FLASH_512K, - CTRDG_BACKUP_TYPE_FLASH_1M, - CTRDG_BACKUP_TYPE_SRAM -} CTRDGBackupType; - -extern const u16 (*ctrdgi_fl_maxtime); - -extern u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData); -extern const CTRDGFlashType *AgbFlash; -extern u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src); -extern u16 (*CTRDGi_EraseAgbFlashChip)(void); -extern u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo); -extern void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback); -extern void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback); -extern void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback); - -u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type); - -#endif //POKEDIAMOND_CTRDG_BACKUP_H diff --git a/arm9/lib/include/CTRDG_common.h b/arm9/lib/include/CTRDG_common.h deleted file mode 100644 index 2d37c6f8..00000000 --- a/arm9/lib/include/CTRDG_common.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef POKEDIAMOND_CTRDG_COMMON_H -#define POKEDIAMOND_CTRDG_COMMON_H - -#include "consts.h" -#include "OS_spinLock.h" -#include "OS_system.h" -#include "MI_exMemory.h" - -typedef struct CTRDGWork -{ - vu16 subpInitialized; - u16 lockID; - -} CTRDGWork; - -typedef struct CTRDGModuleID -{ - union - { - struct - { - u8 bitID; - u8 numberID:5; - u8 :2; - u8 disableExLsiID:1; - }; - u16 raw; - }; -} CTRDGModuleID; - -typedef struct CTRDGModuleInfo -{ - CTRDGModuleID moduleID; - u8 exLsiID[3]; - u8 isAgbCartridge:1; - u8 detectPullOut:1; - u8 :0; //?? - u16 makerCode; - u32 gameCode; -} CTRDGModuleInfo; - -typedef struct CTRDGLockByProc -{ - BOOL locked; - OSIntrMode irq; -} CTRDGLockByProc; - -typedef struct CTRDGHeader -{ - u32 startAddress; - u8 nintendoLogo[0x9c]; - - u8 titleName[12]; - u32 gameCode; - u16 makerCode; - - u8 isRomCode; - - u8 machineCode; - u8 deviceType; - - u8 exLsiID[3]; - - u8 reserved[4]; - u8 softVersion; - u8 complement; - - u16 moduleID; -} CTRDGHeader; - -typedef struct CTRDGRomCycle -{ - MICartridgeRomCycle1st c1; - MICartridgeRomCycle2nd c2; -} CTRDGRomCycle; - -#define CTRDGi_GetModuleInfoAddr() ((CTRDGModuleInfo *)HW_CTRDG_MODULE_INFO_BUF) -#define CTRDGi_GetHeaderAddr() ((CTRDGHeader *)HW_CTRDG_ROM) -#define CTRDGi_GetModuleIDImageAddr() ((u16 *)(HW_CTRDG_ROM + 0x0001fffe)) - -#define CTRDG_IS_ROM_CODE 0x96 -#define CTRDG_LOCKED_BY_MYPROC_FLAG OS_MAINP_LOCKED_FLAG - -#define CTRDGi_FORWARD_TYPE_DMA 0x00000000 -#define CTRDGi_FORWARD_TYPE_CPU 0x00000001 -#define CTRDGi_FORWARD_TYPE_MASK 0x00000001 - -#define CTRDGi_FORWARD_WIDTH_8 0x00000000 -#define CTRDGi_FORWARD_WIDTH_16 0x00000010 -#define CTRDGi_FORWARD_WIDTH_32 0x00000020 - -#define CTRDGi_FORWARD_DMA16 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_16) -#define CTRDGi_FORWARD_DMA32 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_32) -#define CTRDGi_FORWARD_CPU8 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_8) -#define CTRDGi_FORWARD_CPU16 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_16) -#define CTRDGi_FORWARD_CPU32 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_32) - -#define CTRDGi_ACCESS_DIR_WRITE 0x00000000 -#define CTRDGi_ACCESS_DIR_READ 0x00000001 - -#define CTRDGi_ACCESS_WIDTH_8 0x00000010 -#define CTRDGi_ACCESS_WIDTH_16 0x00000020 -#define CTRDGi_ACCESS_WIDTH_32 0x00000040 - -#define CTRDGi_ACCESS_WRITE8 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_8) -#define CTRDGi_ACCESS_WRITE16 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_16) -#define CTRDGi_ACCESS_WRITE32 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_32) -#define CTRDGi_ACCESS_READ8 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_8) -#define CTRDGi_ACCESS_READ16 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_16) -#define CTRDGi_ACCESS_READ32 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_32) - -void CTRDGi_InitCommon(void); -BOOL CTRDG_IsAgbCartridge(void); -BOOL CTRDG_IsOptionCartridge(void); -BOOL CTRDGi_IsAgbCartridgeAtInit(void); -u32 CTRDG_GetAgbGameCode(void); -u32 CTRDGi_GetAgbGameCodeAtInit(void); -u16 CTRDG_GetAgbMakerCode(void); -u16 CTRDGi_GetAgbMakerCodeAtInit(void); -BOOL CTRDG_IsPulledOut(void); -BOOL CTRDG_IsExisting(void); -void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r); -void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r); -void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info); -void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info); -void CTRDGi_SendtoPxi(u32 data); -BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size); -BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size); -BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size); -BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType); -BOOL CTRDG_Read32(const u32 *address, u32 *rdata); -BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType); -BOOL CTRDG_IsEnabled(void); -void CTRDG_Enable(BOOL enable); -void CTRDG_CheckEnabled(void); - -#endif //POKEDIAMOND_CTRDG_COMMON_H diff --git a/arm9/lib/include/CTRDG_flash.h b/arm9/lib/include/CTRDG_flash.h deleted file mode 100644 index aa02d951..00000000 --- a/arm9/lib/include/CTRDG_flash.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef POKEDIAMOND_CTRDG_FLASH_H -#define POKEDIAMOND_CTRDG_FLASH_H - -#include "nitro/types.h" -#include "MI_exMemory.h" - -#define CTRDG_AGB_FLASH_ADR 0x0A000000 - -typedef struct CTRDGiFlashSectorTag -{ - u32 size; - u16 shift; - u16 count; - u16 top; - u8 reserved[2]; -} CTRDGiFlashSector; - -typedef struct CTRDGFlashTypeTag -{ - u32 romSize; - CTRDGiFlashSector sector; - MICartridgeRamCycle agbWait[2]; - u16 makerID; - u16 deviceID; -} CTRDGFlashType; - -#endif //POKEDIAMOND_CTRDG_FLASH_H diff --git a/arm9/lib/include/CTRDG_flash_AT29LV512.h b/arm9/lib/include/CTRDG_flash_AT29LV512.h deleted file mode 100644 index 64f3efdb..00000000 --- a/arm9/lib/include/CTRDG_flash_AT29LV512.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef POKEDIAMOND_CTRDG_FLASH_AT29LV512_H -#define POKEDIAMOND_CTRDG_FLASH_AT29LV512_H - -#include "nitro/types.h" -#include "CTRDG_task.h" - -u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg); -u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg); -u32 CTRDGi_EraseFlash4KBCoreAT(CTRDGTaskInfo *arg); -u32 CTRDGi_WriteFlashSectorCoreAT(CTRDGTaskInfo *arg); -u32 CTRDGi_WriteFlash4KBCoreAT(CTRDGTaskInfo *arg); -u16 CTRDGi_EraseFlashChipAT(void); -u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo); -u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src); -void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback); -void CTRDGi_EraseFlash4KBAsyncAT(u16 l_secNo, CTRDG_TASK_FUNC callback); -void CTRDGi_WriteFlash4KBAsyncAT(u16 l_secNo, u8 *src, CTRDG_TASK_FUNC callback); -u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo); -u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src); -void CTRDGi_EraseFlashSectorAsyncAT(u16 p_secNo, CTRDG_TASK_FUNC callback); -void CTRDGi_WriteFlashSectorAsyncAT(u16 p_secNo, u8 *src, CTRDG_TASK_FUNC callback); - -#endif //POKEDIAMOND_CTRDG_FLASH_AT29LV512_H diff --git a/arm9/lib/include/CTRDG_task.h b/arm9/lib/include/CTRDG_task.h deleted file mode 100644 index 2cf7a233..00000000 --- a/arm9/lib/include/CTRDG_task.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef POKEDIAMOND_CTRDG_TASK_H -#define POKEDIAMOND_CTRDG_TASK_H - -#include "nitro/types.h" - -struct CTRDGTaskInfo_tag; - -typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGTaskInfo_tag *); - -typedef struct CTRDGTaskInfo_tag -{ - CTRDG_TASK_FUNC task; - CTRDG_TASK_FUNC callback; - u32 result; - u8 *data; - u8 *adr; - u32 offset; - u32 size; - u8 *dst; - u16 sec_num; - u8 busy; - u8 param[1]; -} CTRDGTaskInfo; - -#endif //POKEDIAMOND_CTRDG_TASK_H diff --git a/arm9/lib/include/DGT_common.h b/arm9/lib/include/DGT_common.h deleted file mode 100644 index c74ae7cd..00000000 --- a/arm9/lib/include/DGT_common.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef NITRO_DGT_COMMON_H_ -#define NITRO_DGT_COMMON_H_ - -#define DGT_HASH2_DIGEST_SIZE (160/8) - -#endif //NITRO_DGT_COMMON_H_ diff --git a/arm9/lib/include/DGT_dgt.h b/arm9/lib/include/DGT_dgt.h deleted file mode 100644 index 95c7c4e2..00000000 --- a/arm9/lib/include/DGT_dgt.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef NITRO_DGT_DGT_H_ -#define NITRO_DGT_DGT_H_ - -#include "nitro/types.h" - -void DGT_Hash2CalcHmac(void* digest, void* bin_ptr, u32 bin_len, void* key_ptr, u32 keylen); - -#endif //NITRO_DGT_DGT_H_ diff --git a/arm9/lib/include/FS_archive.h b/arm9/lib/include/FS_archive.h deleted file mode 100644 index 3987341c..00000000 --- a/arm9/lib/include/FS_archive.h +++ /dev/null @@ -1,220 +0,0 @@ -#ifndef NITRO_FS_ARCHIVE_H_ -#define NITRO_FS_ARCHIVE_H_ - -#include "nitro.h" - -#include "OS_thread.h" - -struct FSFile; -struct FSArchive; - -#define FS_ARCHIVE_NAME_LEN_MAX 3 - -#define FS_ARCHIVE_FLAG_REGISTER 0x00000001 -#define FS_ARCHIVE_FLAG_LOADED 0x00000002 -#define FS_ARCHIVE_FLAG_TABLE_LOAD 0x00000004 -#define FS_ARCHIVE_FLAG_SUSPEND 0x00000008 -#define FS_ARCHIVE_FLAG_RUNNING 0x00000010 -#define FS_ARCHIVE_FLAG_CANCELING 0x00000020 -#define FS_ARCHIVE_FLAG_SUSPENDING 0x00000040 -#define FS_ARCHIVE_FLAG_UNLOADING 0x00000080 -#define FS_ARCHIVE_FLAG_IS_ASYNC 0x00000100 -#define FS_ARCHIVE_FLAG_IS_SYNC 0x00000200 - -typedef enum { - FS_COMMAND_ASYNC_BEGIN = 0, - FS_COMMAND_READFILE = FS_COMMAND_ASYNC_BEGIN, - FS_COMMAND_WRITEFILE, - FS_COMMAND_ASYNC_END, - - FS_COMMAND_SYNC_BEGIN = FS_COMMAND_ASYNC_END, - FS_COMMAND_SEEKDIR = FS_COMMAND_SYNC_BEGIN, - FS_COMMAND_READDIR, - FS_COMMAND_FINDPATH, - FS_COMMAND_GETPATH, - FS_COMMAND_OPENFILEFAST, - FS_COMMAND_OPENFILEDIRECT, - FS_COMMAND_CLOSEFILE, - FS_COMMAND_SYNC_END, - - FS_COMMAND_STATUS_BEGIN = FS_COMMAND_SYNC_END, - FS_COMMAND_ACTIVATE = FS_COMMAND_STATUS_BEGIN, - FS_COMMAND_IDLE, - FS_COMMAND_SUSPEND, - FS_COMMAND_RESUME, - FS_COMMAND_STATUS_END, - - FS_COMMAND_INVALID -} FSCommandType; - -/* Asynchronous commands*/ -#define FS_ARCHIVE_PROC_READFILE (1 << FS_COMMAND_READFILE) -#define FS_ARCHIVE_PROC_WRITEFILE (1 << FS_COMMAND_WRITEFILE) -/* All asynchronous commands*/ -#define FS_ARCHIVE_PROC_ASYNC \ - (FS_ARCHIVE_PROC_READFILE | FS_ARCHIVE_PROC_WRITEFILE) - -/* Synchronous commands*/ -#define FS_ARCHIVE_PROC_SEEKDIR (1 << FS_COMMAND_SEEKDIR) -#define FS_ARCHIVE_PROC_READDIR (1 << FS_COMMAND_READDIR) -#define FS_ARCHIVE_PROC_FINDPATH (1 << FS_COMMAND_FINDPATH) -#define FS_ARCHIVE_PROC_GETPATH (1 << FS_COMMAND_GETPATH) -#define FS_ARCHIVE_PROC_OPENFILEFAST (1 << FS_COMMAND_OPENFILEFAST) -#define FS_ARCHIVE_PROC_OPENFILEDIRECT (1 << FS_COMMAND_OPENFILEDIRECT) -#define FS_ARCHIVE_PROC_CLOSEFILE (1 << FS_COMMAND_CLOSEFILE) -/* All synchronous commands*/ -#define FS_ARCHIVE_PROC_SYNC \ - (FS_ARCHIVE_PROC_SEEKDIR | FS_ARCHIVE_PROC_READDIR | \ - FS_ARCHIVE_PROC_FINDPATH | FS_ARCHIVE_PROC_GETPATH | \ - FS_ARCHIVE_PROC_OPENFILEFAST | FS_ARCHIVE_PROC_OPENFILEDIRECT | FS_ARCHIVE_PROC_CLOSEFILE) - -/* Messages when status changes*/ -#define FS_ARCHIVE_PROC_ACTIVATE (1 << FS_COMMAND_ACTIVATE) -#define FS_ARCHIVE_PROC_IDLE (1 << FS_COMMAND_IDLE) -#define FS_ARCHIVE_PROC_SUSPENDING (1 << FS_COMMAND_SUSPEND) -#define FS_ARCHIVE_PROC_RESUME (1 << FS_COMMAND_RESUME) -/* All messages when status changes*/ -#define FS_ARCHIVE_PROC_STATUS \ - (FS_ARCHIVE_PROC_ACTIVATE | FS_ARCHIVE_PROC_IDLE | \ - FS_ARCHIVE_PROC_SUSPENDING | FS_ARCHIVE_PROC_RESUME) - -#define FS_ARCHIVE_PROC_ALL (~0) - -typedef enum { - FS_RESULT_SUCCESS = 0, - FS_RESULT_FAILURE, - FS_RESULT_BUSY, - FS_RESULT_CANCELED, - FS_RESULT_CANCELLED = FS_RESULT_CANCELED, // SDK alias - FS_RESULT_UNSUPPORTED, - FS_RESULT_ERROR, - FS_RESULT_PROC_ASYNC, - FS_RESULT_PROC_DEFAULT, - FS_RESULT_PROC_UNKNOWN -} -FSResult; - -typedef FSResult (*FS_ARCHIVE_READ_FUNC) (struct FSArchive *p, void *dst, u32 pos, u32 size); -typedef FSResult (*FS_ARCHIVE_WRITE_FUNC) (struct FSArchive *p, const void *src, u32 pos, u32 size); -typedef FSResult (*FS_ARCHIVE_PROC_FUNC) (struct FSFile *, FSCommandType); - -typedef struct -{ - struct FSFile * prev; - struct FSFile * next; -} -FSFileLink; - -typedef struct -{ - u32 start; - u16 index; - u16 parent; -} FSArchiveFNT; - -typedef struct -{ - u32 top; - u32 bottom; -} FSArchiveFAT; - -typedef struct FSArchive -{ - union - { - char ptr[4]; - u32 pack; - } name; - struct FSArchive * next; - struct FSArchive * prev; - OSThreadQueue sync_q; - OSThreadQueue stat_q; - u32 flag; - FSFileLink list; - u32 base; - u32 fat; - u32 fat_size; - u32 fnt; - u32 fnt_size; - u32 fat_bak; - u32 fnt_bak; - void * load_mem; - FS_ARCHIVE_READ_FUNC read_func; - FS_ARCHIVE_WRITE_FUNC write_func; - FS_ARCHIVE_READ_FUNC table_func; - FS_ARCHIVE_PROC_FUNC proc; - u32 proc_flag; -} FSArchive; - -static inline BOOL FS_IsArchiveLoaded(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_LOADED) ? TRUE : FALSE; -} - -static inline u32 FS_GetArchiveOffset(const FSArchive * p_arc, u32 pos) -{ - return p_arc->base + pos; -} - -static inline BOOL FSi_IsArchiveCanceling(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_CANCELING) != 0; -} - -static inline BOOL FS_IsArchiveSuspended(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_SUSPEND) ? TRUE : FALSE; -} - -static inline BOOL FSi_IsArchiveSuspending(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_SUSPENDING) != 0; -} - -static inline BOOL FSi_IsArchiveRunning(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_RUNNING) != 0; -} - -static inline BOOL FSi_IsArchiveUnloading(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_UNLOADING) != 0; -} - -static inline BOOL FSi_IsArchiveAsync(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_IS_ASYNC) != 0; -} - -static inline BOOL FSi_IsArchiveSync(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_IS_SYNC) != 0; -} - -static inline BOOL FS_IsArchiveTableLoaded(volatile const FSArchive * p_arc) -{ - return (p_arc->flag & FS_ARCHIVE_FLAG_TABLE_LOAD) ? TRUE : FALSE; -} - -u32 FSi_GetPackedName(const char * name, int name_len); -FSResult FSi_ReadMemCallback(struct FSArchive * p_arc, void * dest, u32 pos, u32 size); -FSResult FSi_WriteMemCallback(struct FSArchive * p_arc, const void * src, u32 pos, u32 size); -FSResult FSi_ReadMemoryCore(struct FSArchive * p_arc, void * dest, u32 pos, u32 size); -struct FSFile * FSi_NextCommand(struct FSArchive * p_arc); -void FSi_ExecuteAsyncCommand(struct FSFile * p_file); -BOOL FSi_ExecuteSyncCommand(struct FSFile * file); -BOOL FSi_SendCommand(struct FSFile * file, FSCommandType command); -void FS_InitArchive(struct FSArchive * p_arc); -struct FSArchive * const FS_FindArchive(const char * path, int offset); -BOOL FS_RegisterArchiveName(struct FSArchive * p_arc, const char * name, int name_len); -void FS_ReleaseArchiveName(struct FSArchive * p_arc); -BOOL FS_LoadArchive(struct FSArchive * p_arc, u32 base, u32 fat, u32 fat_size, u32 fnt, u32 fnt_size, FS_ARCHIVE_READ_FUNC read_func, FS_ARCHIVE_WRITE_FUNC write_func); -BOOL FS_UnloadArchive(struct FSArchive * p_arc); -u32 FS_LoadArchiveTables(struct FSArchive *p_arc, void *p_mem, u32 max_size); -void * FS_UnloadArchiveTables(struct FSArchive * p_arc); -BOOL FS_SuspendArchive(struct FSArchive * p_arc); -BOOL FS_ResumeArchive(struct FSArchive * p_arc); -void FS_SetArchiveProc(struct FSArchive * p_arc, FS_ARCHIVE_PROC_FUNC proc, u32 flags); -void FS_NotifyArchiveAsyncEnd(struct FSArchive *p_arc, FSResult ret); - -#endif //NITRO_FS_ARCHIVE_H_ diff --git a/arm9/lib/include/FS_command.h b/arm9/lib/include/FS_command.h deleted file mode 100644 index b5e73bcf..00000000 --- a/arm9/lib/include/FS_command.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef NITRO_FS_COMMAND_H_ -#define NITRO_FS_COMMAND_H_ - -#include "FS_file.h" - -extern FSResult (*const fsi_default_command[])(FSFile *); - -void FSi_ReleaseCommand(FSFile * file, FSResult signal); -FSResult FSi_TranslateCommand(FSFile * file, FSCommandType command); - -#endif //NITRO_FS_COMMAND_H_ diff --git a/arm9/lib/include/FS_command_default.h b/arm9/lib/include/FS_command_default.h deleted file mode 100644 index 20e20f8f..00000000 --- a/arm9/lib/include/FS_command_default.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef POKEDIAMOND_FS_COMMAND_DEFAULT_H -#define POKEDIAMOND_FS_COMMAND_DEFAULT_H - -#include "nitro/types.h" -#include "FS_archive.h" - -typedef struct -{ - FSArchive *arc; - u32 pos; -} FSiSyncReadParam; - - -u32 FSi_StrNICmp(const char * str1, const char * str2, u32 len); -FSResult FSi_ReadTable(FSiSyncReadParam * p, void * dst, u32 len); -FSResult FSi_SeekDirDirect(FSFile * p_dir, u32 id); -FSResult FSi_ReadFileCommand(FSFile * p_file); -FSResult FSi_WriteFileCommand(FSFile * p_file); -FSResult FSi_SeekDirCommand(FSFile * p_dir); -FSResult FSi_ReadDirCommand(FSFile *p_dir); -FSResult FSi_FindPathCommand(FSFile *p_dir); -FSResult FSi_GetPathCommand(FSFile *p_file); -FSResult FSi_OpenFileFastCommand(FSFile * p_file); -FSResult FSi_OpenFileDirectCommand(FSFile * p_file); -FSResult FSi_CloseFileCommand(FSFile * p_file); - -#endif //POKEDIAMOND_FS_COMMAND_DEFAULT_H diff --git a/arm9/lib/include/FS_file.h b/arm9/lib/include/FS_file.h deleted file mode 100644 index f870ad2a..00000000 --- a/arm9/lib/include/FS_file.h +++ /dev/null @@ -1,226 +0,0 @@ -#ifndef NITRO_FS_FILE_H_ -#define NITRO_FS_FILE_H_ - -#include "nitro.h" - -#include "FS_archive.h" - -#define FS_FILE_STATUS_BUSY 0x00000001 -#define FS_FILE_STATUS_CANCEL 0x00000002 -#define FS_FILE_STATUS_SYNC 0x00000004 -#define FS_FILE_STATUS_ASYNC 0x00000008 -#define FS_FILE_STATUS_IS_FILE 0x00000010 -#define FS_FILE_STATUS_IS_DIR 0x00000020 -#define FS_FILE_STATUS_OPERATING 0x00000040 - -#define FS_FILE_NAME_MAX 127 - -typedef enum FSSeekFileMode -{ - FS_SEEK_SET = 0, - FS_SEEK_CUR, - FS_SEEK_END -} FSSeekFileMode; - -struct FSFile; - -#define FS_DMA_NOT_USE ((u32)~0) - -typedef struct FSDirPos -{ - struct FSArchive *arc; - u16 own_id; - u16 index; - u32 pos; -} -FSDirPos; // size = 0xC - -typedef struct FSFileID -{ - struct FSArchive *arc; - u32 file_id; -} -FSFileID; - -typedef struct -{ - union - { - FSFileID file_id; - FSDirPos dir_id; - }; - u32 is_directory; - u32 name_len; - char name[128]; -} -FSDirEntry; - - -typedef struct -{ - FSDirPos pos; -} -FSSeekDirInfo; - - -typedef struct -{ - FSDirEntry *p_entry; - BOOL skip_string; -} -FSReadDirInfo; - - -typedef struct -{ - FSDirPos pos; - const char *path; - BOOL find_directory; - union - { - FSFileID *file; - FSDirPos *dir; - } - result; -} -FSFindPathInfo; - - -typedef struct -{ - u8 *buf; - u32 buf_len; - u16 total_len; - u16 dir_id; -} -FSGetPathInfo; - - -typedef struct -{ - FSFileID id; -} -FSOpenFileFastInfo; - - -typedef struct -{ - u32 top; - u32 bottom; - u32 index; -} -FSOpenFileDirectInfo; - - -typedef struct -{ - u32 reserved; -} -FSCloseFileInfo; - - -typedef struct -{ - void *dst; - u32 len_org; - u32 len; -} -FSReadFileInfo; - - -typedef struct -{ - const void *src; - u32 len_org; - u32 len; -} -FSWriteFileInfo; - -typedef struct FSFile -{ - FSFileLink link; // 0x00 - struct FSArchive *arc; // 0x08 - u32 stat; // 0xC - FSCommandType command; // 0x10 - FSResult error; // 0x14 - OSThreadQueue queue[1]; // 0x18 - union { - struct - { - u32 own_id; // 0x20 - u32 top; // 0x24 - u32 bottom; // 0x28 - u32 pos; // 0x2C - } file; - struct - { - FSDirPos pos; // 0x20 - u32 parent; // 0x2C - } dir; - } prop; // 0x20 - - union { - FSReadFileInfo readfile; // 0x30 - FSWriteFileInfo writefile; // 0x30 - - FSSeekDirInfo seekdir; // 0x30 - FSReadDirInfo readdir; // 0x30 - FSFindPathInfo findpath; // 0x30 - FSGetPathInfo getpath; // 0x30 - FSOpenFileFastInfo openfilefast; // 0x30 - FSOpenFileDirectInfo openfiledirect; // 0x30 - FSCloseFileInfo closefile; // 0x30 - } arg; // 0x30 -} -FSFile; // size = 0x50 - -void FS_Init(u32 default_dma_no); -BOOL FS_IsAvailable(void); -void FS_InitFile(FSFile * p_file); -int FSi_ReadFileCore(FSFile * p_file, void * dst, s32 len, BOOL async); -BOOL FS_ConvertPathToFileID(FSFileID * p_file_id, const char * path); -BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index); -BOOL FS_OpenFileFast(FSFile * p_file, FSFileID file_id); -BOOL FS_OpenFile(FSFile * p_file, const char * path); -BOOL FS_CloseFile(FSFile * p_file); -BOOL FS_WaitAsync(FSFile * p_file); -int FS_ReadFileAsync(FSFile * p_file, void * dst, s32 len); -int FS_ReadFile(FSFile * p_file, void * dst, s32 len); -BOOL FS_SeekFile(FSFile * p_file, s32 offset, FSSeekFileMode origin); -BOOL FS_ChangeDir(const char * path); - -static inline u32 const FS_GetFileImageTop(volatile const FSFile * p_file) { - return p_file->prop.file.top; -} - -static inline u32 const FS_GetLength(volatile const FSFile * p_file) -{ - return p_file->prop.file.bottom - p_file->prop.file.top; -} - -static inline BOOL FS_IsCanceling(volatile const FSFile * p_file) -{ - return (p_file->stat & FS_FILE_STATUS_CANCEL) ? TRUE : FALSE; -} - -static inline BOOL FS_IsFileSyncMode(volatile const FSFile * p_file) -{ - return (p_file->stat & FS_FILE_STATUS_SYNC) ? TRUE : FALSE; -} - -static inline BOOL FS_IsBusy(volatile const FSFile * p_file) -{ - return p_file->stat & FS_FILE_STATUS_BUSY ? TRUE : FALSE; -} - -static inline BOOL FS_IsSucceeded(volatile const FSFile * p_file) -{ - return (p_file->error == FS_RESULT_SUCCESS) ? TRUE : FALSE; -} - -static inline BOOL FS_IsDir(volatile const FSFile * p_file) -{ - return (p_file->stat & FS_FILE_STATUS_IS_DIR) ? TRUE : FALSE; -} - -#endif //NITRO_FS_FILE_H_ diff --git a/arm9/lib/include/FS_mw_dtor.h b/arm9/lib/include/FS_mw_dtor.h deleted file mode 100644 index a746ed19..00000000 --- a/arm9/lib/include/FS_mw_dtor.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef NITRO_FS_MW_DTOR_H_ -#define NITRO_FS_MW_DTOR_H_ - -typedef void (*MWI_DESTRUCTOR_FUNC) (void *); - -typedef struct MWiDestructorChain -{ - struct MWiDestructorChain *next; - MWI_DESTRUCTOR_FUNC dtor; - void *obj; -} -MWiDestructorChain; - -extern MWiDestructorChain *__global_destructor_chain; - -#endif //NITRO_FS_MW_DTOR_H_ diff --git a/arm9/lib/include/FS_overlay.h b/arm9/lib/include/FS_overlay.h deleted file mode 100644 index 7853e4ae..00000000 --- a/arm9/lib/include/FS_overlay.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef NITRO_FS_OVERLAY_H_ -#define NITRO_FS_OVERLAY_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include "nitro.h" -#include "MI_exMemory.h" -#include "FS_file.h" -#include "CARD_rom.h" - -typedef u32 FSOverlayID; - -#define FS_EXTERN_OVERLAY(name) extern u32 SDK_OVERLAY_ ## name ## _ID[1] -#define FS_OVERLAY_ID(name) ((u32)&(SDK_OVERLAY_ ## name ## _ID)) - -typedef void (*FSOverlayInitFunc)(void); - -typedef struct FSOverlayInfoHeader -{ - u32 id; - u8 *ram_address; - u32 ram_size; - u32 bss_size; - FSOverlayInitFunc *sinit_init; - FSOverlayInitFunc *sinit_init_end; - u32 file_id; - u32 compressed: 24; - u32 flag: 8; -} FSOverlayInfoHeader; - -typedef struct FSOverlayInfo -{ - FSOverlayInfoHeader header; - MIProcessor target; - CARDRomRegion file_pos; -} FSOverlayInfo; - -static inline u8 *const FS_GetOverlayAddress(FSOverlayInfo *p_ovi) -{ - return p_ovi->header.ram_address; -} - -static inline u32 const FS_GetOverlayImageSize(FSOverlayInfo *p_ovi) -{ - return p_ovi->header.ram_size; -} - -static inline u32 const FS_GetOverlayTotalSize(FSOverlayInfo *p_ovi) -{ - return p_ovi->header.ram_size + p_ovi->header.bss_size; -} - -u32 FSi_GetOverlayBinarySize(FSOverlayInfo * p_ovi); -void FS_ClearOverlayImage(FSOverlayInfo * p_ovi); -FSFileID FS_GetOverlayFileID(FSOverlayInfo * p_ovi); -BOOL FSi_LoadOverlayInfoCore(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id, FSArchive * arc, u32 offset_arm9, u32 len_arm9, u32 offset_arm7, u32 len_arm7); -BOOL FS_LoadOverlayInfo(FSOverlayInfo *p_ovi, MIProcessor target, FSOverlayID id); -BOOL FS_LoadOverlayImageAsync(FSOverlayInfo *p_ovi, FSFile *p_file); -BOOL FS_LoadOverlayImage(FSOverlayInfo *p_ovi); -BOOL FSi_CompareDigest(const u8 *spec_digest, void *src, u32 len); -void FS_StartOverlay(FSOverlayInfo *p_ovi); -void FS_EndOverlay(FSOverlayInfo *p_ovi); -BOOL FS_UnloadOverlayImage(FSOverlayInfo * p_ovi); -BOOL FS_LoadOverlay(MIProcessor target, FSOverlayID id); -BOOL FS_UnloadOverlay(MIProcessor target, FSOverlayID id); - -#if defined(__cplusplus) -} -#endif - -#endif //NITRO_FS_OVERLAY_H_ diff --git a/arm9/lib/include/FS_rom.h b/arm9/lib/include/FS_rom.h deleted file mode 100644 index bd0cd73b..00000000 --- a/arm9/lib/include/FS_rom.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef NITRO_FS_ROM_H_ -#define NITRO_FS_ROM_H_ - -#include "FS_archive.h" -#include "FS_file.h" -#include "CARD_rom.h" -#include "nitro/types.h" - -extern FSArchive fsi_arc_rom; -extern s32 fsi_card_lock_id; -extern CARDRomRegion fsi_ovt7; -extern CARDRomRegion fsi_ovt9; - -void FSi_OnRomReadDone(void * p_arc); -FSResult FSi_ReadRomCallback(FSArchive * p_arc, void * dst, u32 src, u32 len); -FSResult FSi_WriteDummyCallback(FSArchive * p_arc, const void *src, u32 dst, u32 len); -FSResult FSi_RomArchiveProc(FSFile * p_arc, FSCommandType cmd); -FSResult FSi_ReadDummyCallback(FSArchive *p_arc, void *dst, u32 src, u32 len); -FSResult FSi_EmptyArchiveProc(FSFile *p_file, FSCommandType cmd); -void FSi_InitRom(u32 default_dma_no); -u32 FS_SetDefaultDMA(u32 dma_no); -u32 FS_TryLoadTable(void * p_mem, u32 size); - -#endif //NITRO_FS_ROM_H_ diff --git a/arm9/lib/include/FSi_util.h b/arm9/lib/include/FSi_util.h deleted file mode 100644 index 2357b446..00000000 --- a/arm9/lib/include/FSi_util.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef NITRO_FSI_UTIL_H_ -#define NITRO_FSI_UTIL_H_ - -#include "CARD_common.h" - -#define ALIGN_BYTE(n, a) (((u32)(n) + ALIGN_MASK(a)) & ~ALIGN_MASK(a)) - -#define BIT_MASK(a) ((u32)((1 << (a)) - 1)) - -static inline BOOL FSi_IsSlash(u32 c) -{ - return (c == '/') || (c == '\\'); -} - -static inline void FSi_CutFromListCore(FSFileLink *trg) -{ - FSFile *const pr = trg->prev; - FSFile *const nx = trg->next; - if (pr) - pr->link.next = nx; - if (nx) - nx->link.prev = pr; -} - -static inline void FSi_CutFromList(FSFile *elem) -{ - FSFileLink *const trg = &elem->link; - FSi_CutFromListCore(trg); - trg->next = trg->prev = NULL; -} - -static inline void FSi_AppendToList(FSFile *elem, FSFile *list) -{ - FSFileLink *const trg = &elem->link; - FSi_CutFromListCore(trg); - { - while (list->link.next) - list = list->link.next; - list->link.next = elem; - trg->prev = list; - trg->next = NULL; - } -} - - -#endif //NITRO_FSI_UTIL_H_ diff --git a/arm9/lib/include/GX_asm.h b/arm9/lib/include/GX_asm.h deleted file mode 100644 index d2622508..00000000 --- a/arm9/lib/include/GX_asm.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef GUARD_GX_ASM_H -#define GUARD_GX_ASM_H - -void GX_SendFifo48B(register void *pSrc, register void *pDest); - -#endif //GUARD_GX_ASM_H diff --git a/arm9/lib/include/GX_bgcnt.h b/arm9/lib/include/GX_bgcnt.h deleted file mode 100644 index b64d4432..00000000 --- a/arm9/lib/include/GX_bgcnt.h +++ /dev/null @@ -1,761 +0,0 @@ -#ifndef GUARD_GX_BGCNT_H -#define GUARD_GX_BGCNT_H - -void *G2_GetBG0ScrPtr(); -void *G2S_GetBG0ScrPtr(); -void *G2_GetBG1ScrPtr(); -void *G2S_GetBG1ScrPtr(); -void *G2_GetBG2ScrPtr(); -void *G2S_GetBG2ScrPtr(); -void *G2_GetBG3ScrPtr(); -void *G2S_GetBG3ScrPtr(); -void *G2_GetBG0CharPtr(); -void *G2S_GetBG0CharPtr(); -void *G2_GetBG1CharPtr(); -void *G2S_GetBG1CharPtr(); -void *G2_GetBG2CharPtr(); -void *G2S_GetBG2CharPtr(); -void *G2_GetBG3CharPtr(); -void *G2S_GetBG3CharPtr(); - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 charBase:4; - u16 mosaic:1; - u16 colorMode:1; - u16 screenBase:5; - u16 bgExtPltt:1; - u16 screenSize:2; - }; -} -GXBg01Control; - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 charBase:4; - u16 mosaic:1; - u16 colorMode:1; - u16 screenBase:5; - u16 _reserve:1; - u16 screenSize:2; - }; -} -GXBg23ControlText; - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 charBase:4; - u16 mosaic:1; - u16 _reserve:1; - u16 screenBase:5; - u16 areaOver:1; - u16 screenSize:2; - }; -} -GXBg23ControlAffine; - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 _reserve1:1; - u16 charBase:3; - u16 mosaic:1; - u16 _reserve2:1; - u16 screenBase:5; - u16 areaOver:1; - u16 screenSize:2; - }; -} -GXBg23Control256x16Pltt; - - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 _reserve1:4; - u16 mosaic:1; - u16 _reserve2:1; - u16 screenBase:5; - u16 areaOver:1; - u16 screenSize:2; - }; -} -GXBg23Control256Bmp, GXBg23ControlDCBmp; - -typedef union -{ - u16 raw; - struct - { - u16 priority:2; - u16 _reserve1:4; - u16 mosaic:1; - u16 _reserve2:6; - u16 areaOver:1; - u16 screenSize:2; - }; -} -GXBg2ControlLargeBmp; - - - -typedef enum -{ - GX_BG_SCRSIZE_TEXT_256x256 = 0, - GX_BG_SCRSIZE_TEXT_512x256 = 1, - GX_BG_SCRSIZE_TEXT_256x512 = 2, - GX_BG_SCRSIZE_TEXT_512x512 = 3 -} -GXBGScrSizeText; - -typedef enum -{ - GX_BG_SCRSIZE_AFFINE_128x128 = 0, - GX_BG_SCRSIZE_AFFINE_256x256 = 1, - GX_BG_SCRSIZE_AFFINE_512x512 = 2, - GX_BG_SCRSIZE_AFFINE_1024x1024 = 3 -} -GXBGScrSizeAffine; - -typedef enum -{ - GX_BG_SCRSIZE_256x16PLTT_128x128 = 0, - GX_BG_SCRSIZE_256x16PLTT_256x256 = 1, - GX_BG_SCRSIZE_256x16PLTT_512x512 = 2, - GX_BG_SCRSIZE_256x16PLTT_1024x1024 = 3 -} -GXBGScrSize256x16Pltt; - -typedef enum -{ - GX_BG_SCRSIZE_256BMP_128x128 = 0, - GX_BG_SCRSIZE_256BMP_256x256 = 1, - GX_BG_SCRSIZE_256BMP_512x256 = 2, - GX_BG_SCRSIZE_256BMP_512x512 = 3 -} -GXBGScrSize256Bmp; - -typedef enum -{ - GX_BG_SCRSIZE_DCBMP_128x128 = 0, - GX_BG_SCRSIZE_DCBMP_256x256 = 1, - GX_BG_SCRSIZE_DCBMP_512x256 = 2, - GX_BG_SCRSIZE_DCBMP_512x512 = 3 -} -GXBGScrSizeDcBmp; - -typedef enum -{ - GX_BG_SCRSIZE_LARGEBMP_512x1024 = 0, - GX_BG_SCRSIZE_LARGEBMP_1024x512 = 1 -} -GXBGScrSizeLargeBmp; - -typedef enum -{ - GX_BG_COLORMODE_16 = 0, - GX_BG_COLORMODE_256 = 1 -} -GXBGColorMode; - -typedef enum -{ - GX_BG_AREAOVER_XLU = 0, - GX_BG_AREAOVER_REPEAT = 1 -} -GXBGAreaOver; - -typedef enum -{ - GX_BG_CHARBASE_0x00000 = 0, - GX_BG_CHARBASE_0x04000 = 1, - GX_BG_CHARBASE_0x08000 = 2, - GX_BG_CHARBASE_0x0c000 = 3, - GX_BG_CHARBASE_0x10000 = 4, - GX_BG_CHARBASE_0x14000 = 5, - GX_BG_CHARBASE_0x18000 = 6, - GX_BG_CHARBASE_0x1c000 = 7, - GX_BG_CHARBASE_0x20000 = 8, - GX_BG_CHARBASE_0x24000 = 9, - GX_BG_CHARBASE_0x28000 = 10, - GX_BG_CHARBASE_0x2c000 = 11, - GX_BG_CHARBASE_0x30000 = 12, - GX_BG_CHARBASE_0x34000 = 13, - GX_BG_CHARBASE_0x38000 = 14, - GX_BG_CHARBASE_0x3c000 = 15 -} -GXBGCharBase; - -typedef enum -{ - GX_BG_SCRBASE_0x0000 = 0, - GX_BG_SCRBASE_0x0800 = 1, - GX_BG_SCRBASE_0x1000 = 2, - GX_BG_SCRBASE_0x1800 = 3, - GX_BG_SCRBASE_0x2000 = 4, - GX_BG_SCRBASE_0x2800 = 5, - GX_BG_SCRBASE_0x3000 = 6, - GX_BG_SCRBASE_0x3800 = 7, - GX_BG_SCRBASE_0x4000 = 8, - GX_BG_SCRBASE_0x4800 = 9, - GX_BG_SCRBASE_0x5000 = 10, - GX_BG_SCRBASE_0x5800 = 11, - GX_BG_SCRBASE_0x6000 = 12, - GX_BG_SCRBASE_0x6800 = 13, - GX_BG_SCRBASE_0x7000 = 14, - GX_BG_SCRBASE_0x7800 = 15, - GX_BG_SCRBASE_0x8000 = 16, - GX_BG_SCRBASE_0x8800 = 17, - GX_BG_SCRBASE_0x9000 = 18, - GX_BG_SCRBASE_0x9800 = 19, - GX_BG_SCRBASE_0xa000 = 20, - GX_BG_SCRBASE_0xa800 = 21, - GX_BG_SCRBASE_0xb000 = 22, - GX_BG_SCRBASE_0xb800 = 23, - GX_BG_SCRBASE_0xc000 = 24, - GX_BG_SCRBASE_0xc800 = 25, - GX_BG_SCRBASE_0xd000 = 26, - GX_BG_SCRBASE_0xd800 = 27, - GX_BG_SCRBASE_0xe000 = 28, - GX_BG_SCRBASE_0xe800 = 29, - GX_BG_SCRBASE_0xf000 = 30, - GX_BG_SCRBASE_0xf800 = 31 -} -GXBGScrBase; - -typedef enum -{ - GX_BG_BMPSCRBASE_0x00000 = 0, - GX_BG_BMPSCRBASE_0x04000 = 1, - GX_BG_BMPSCRBASE_0x08000 = 2, - GX_BG_BMPSCRBASE_0x0c000 = 3, - GX_BG_BMPSCRBASE_0x10000 = 4, - GX_BG_BMPSCRBASE_0x14000 = 5, - GX_BG_BMPSCRBASE_0x18000 = 6, - GX_BG_BMPSCRBASE_0x1c000 = 7, - GX_BG_BMPSCRBASE_0x20000 = 8, - GX_BG_BMPSCRBASE_0x24000 = 9, - GX_BG_BMPSCRBASE_0x28000 = 10, - GX_BG_BMPSCRBASE_0x2c000 = 11, - GX_BG_BMPSCRBASE_0x30000 = 12, - GX_BG_BMPSCRBASE_0x34000 = 13, - GX_BG_BMPSCRBASE_0x38000 = 14, - GX_BG_BMPSCRBASE_0x3c000 = 15, - GX_BG_BMPSCRBASE_0x40000 = 16, - GX_BG_BMPSCRBASE_0x44000 = 17, - GX_BG_BMPSCRBASE_0x48000 = 18, - GX_BG_BMPSCRBASE_0x4c000 = 19, - GX_BG_BMPSCRBASE_0x50000 = 20, - GX_BG_BMPSCRBASE_0x54000 = 21, - GX_BG_BMPSCRBASE_0x58000 = 22, - GX_BG_BMPSCRBASE_0x5c000 = 23, - GX_BG_BMPSCRBASE_0x60000 = 24, - GX_BG_BMPSCRBASE_0x64000 = 25, - GX_BG_BMPSCRBASE_0x68000 = 26, - GX_BG_BMPSCRBASE_0x6c000 = 27, - GX_BG_BMPSCRBASE_0x70000 = 28, - GX_BG_BMPSCRBASE_0x74000 = 29, - GX_BG_BMPSCRBASE_0x78000 = 30, - GX_BG_BMPSCRBASE_0x7c000 = 31 -} -GXBGBmpScrBase; - -typedef enum -{ - GX_BG_EXTPLTT_01 = 0, - GX_BG_EXTPLTT_23 = 1 -} -GXBGExtPltt; - -typedef enum -{ - GX_BG_EXTMODE_256x16PLTT = (0 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (0 << REG_G2_BG2CNT_COLORMODE_SHIFT), - GX_BG_EXTMODE_256BITMAP = (0 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (1 << REG_G2_BG2CNT_COLORMODE_SHIFT), - GX_BG_EXTMODE_DCBITMAP = (1 << REG_G2_BG2CNT_CHARBASE_SHIFT) | (1 << REG_G2_BG2CNT_COLORMODE_SHIFT) -} -GXBGExtMode; - -//GX_capture -typedef enum -{ - GX_CAPTURE_DEST_VRAM_A_0x00000 = 0, - GX_CAPTURE_DEST_VRAM_B_0x00000 = 1, - GX_CAPTURE_DEST_VRAM_C_0x00000 = 2, - GX_CAPTURE_DEST_VRAM_D_0x00000 = 3, - - GX_CAPTURE_DEST_VRAM_A_0x08000 = 4, - GX_CAPTURE_DEST_VRAM_B_0x08000 = 5, - GX_CAPTURE_DEST_VRAM_C_0x08000 = 6, - GX_CAPTURE_DEST_VRAM_D_0x08000 = 7, - - GX_CAPTURE_DEST_VRAM_A_0x10000 = 8, - GX_CAPTURE_DEST_VRAM_B_0x10000 = 9, - GX_CAPTURE_DEST_VRAM_C_0x10000 = 10, - GX_CAPTURE_DEST_VRAM_D_0x10000 = 11, - - GX_CAPTURE_DEST_VRAM_A_0x18000 = 12, - GX_CAPTURE_DEST_VRAM_B_0x18000 = 13, - GX_CAPTURE_DEST_VRAM_C_0x18000 = 14, - GX_CAPTURE_DEST_VRAM_D_0x18000 = 15 -} -GXCaptureDest; - -typedef enum -{ - GX_CAPTURE_SIZE_128x128 = 0, - GX_CAPTURE_SIZE_256x64 = 1, - GX_CAPTURE_SIZE_256x128 = 2, - GX_CAPTURE_SIZE_256x192 = 3 -} -GXCaptureSize; - -typedef enum -{ - GX_CAPTURE_SRCA_2D3D = 0, - GX_CAPTURE_SRCA_3D = 1 -} -GXCaptureSrcA; - -typedef enum -{ - GX_CAPTURE_SRCB_VRAM_0x00000 = 0, - GX_CAPTURE_SRCB_MRAM = 1, - GX_CAPTURE_SRCB_VRAM_0x08000 = 2, - GX_CAPTURE_SRCB_VRAM_0x10000 = 4, - GX_CAPTURE_SRCB_VRAM_0x18000 = 6 -} -GXCaptureSrcB; - -typedef enum -{ - GX_CAPTURE_MODE_A = 0, - GX_CAPTURE_MODE_B = 1, - GX_CAPTURE_MODE_AB = 2 -} -GXCaptureMode; - -static inline void G2_SetBG0Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) -{ - reg_G2_BG0CNT = (u16)((reg_G2_BG0CNT & (REG_G2_BG0CNT_PRIORITY_MASK | REG_G2_BG0CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG0CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG0CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG0CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG0CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2_BG0CNT_BGPLTTSLOT_SHIFT)); -} - -static inline void G2S_SetBG0Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) -{ - reg_G2S_DB_BG0CNT = (u16)((reg_G2S_DB_BG0CNT & (REG_G2S_DB_BG0CNT_PRIORITY_MASK | REG_G2S_DB_BG0CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG0CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG0CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG0CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG0CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2S_DB_BG0CNT_BGPLTTSLOT_SHIFT)); -} - -static inline void G2_SetBG1Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) -{ - reg_G2_BG1CNT = (u16)((reg_G2_BG1CNT & (REG_G2_BG1CNT_PRIORITY_MASK | REG_G2_BG1CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG1CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG1CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG1CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG1CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2_BG1CNT_BGPLTTSLOT_SHIFT)); -} - -static inline void G2S_SetBG1Control(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase, GXBGExtPltt bgExtPltt) -{ - reg_G2S_DB_BG1CNT = (u16)((reg_G2S_DB_BG1CNT & (REG_G2S_DB_BG1CNT_PRIORITY_MASK | REG_G2S_DB_BG1CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG1CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG1CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG1CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG1CNT_CHARBASE_SHIFT) | (bgExtPltt << REG_G2S_DB_BG1CNT_BGPLTTSLOT_SHIFT)); -} - -static inline void G2_SetBG2ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ((REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG2CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT)); -} - -static inline void G2S_SetBG2ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ((REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG2CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT)); -} - -static inline void G2_SetBG2ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ((REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG2ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ((REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG2Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2_BG2CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG2Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2S_DB_BG2CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG2Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG2Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG2ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG2ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG2ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & (REG_G2_BG2CNT_PRIORITY_MASK | REG_G2_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG2CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG2ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & (REG_G2S_DB_BG2CNT_PRIORITY_MASK | REG_G2S_DB_BG2CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2S_DB_BG2CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG3ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ((REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2_BG3CNT_COLORMODE_SHIFT) | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT)); -} - -static inline void G2S_SetBG3ControlText(GXBGScrSizeText screenSize, GXBGColorMode colorMode, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ((REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (colorMode << REG_G2S_DB_BG3CNT_COLORMODE_SHIFT) | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT)); -} - -static inline void G2_SetBG3ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ((REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG3ControlAffine(GXBGScrSizeAffine screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ((REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK))) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG3Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2_BG3CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG3Control256x16Pltt(GXBGScrSize256x16Pltt screenSize, GXBGAreaOver areaOver, GXBGScrBase screenBase, GXBGCharBase charBase) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (charBase << REG_G2S_DB_BG3CNT_CHARBASE_SHIFT) | GX_BG_EXTMODE_256x16PLTT | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG3Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG3Control256Bmp(GXBGScrSize256Bmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_256BITMAP | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG3ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG3ControlDCBmp(GXBGScrSizeDcBmp screenSize, GXBGAreaOver areaOver, GXBGBmpScrBase screenBase) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | GX_BG_EXTMODE_DCBITMAP | (screenBase << REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2_SetBG3ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & (REG_G2_BG3CNT_PRIORITY_MASK | REG_G2_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2_BG3CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2S_SetBG3ControlLargeBmp(GXBGScrSizeLargeBmp screenSize, GXBGAreaOver areaOver) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & (REG_G2S_DB_BG3CNT_PRIORITY_MASK | REG_G2S_DB_BG3CNT_MOSAIC_MASK)) | (screenSize << REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT) | (areaOver << REG_G2S_DB_BG3CNT_AREAOVER_SHIFT)); -} - -static inline void G2_BG0Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2_BG0CNT |= REG_G2_BG0CNT_MOSAIC_MASK; - } - else - { - reg_G2_BG0CNT &= ~REG_G2_BG0CNT_MOSAIC_MASK; - } -} - -static inline void G2S_BG0Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2S_DB_BG0CNT |= REG_G2S_DB_BG0CNT_MOSAIC_MASK; - } - else - { - reg_G2S_DB_BG0CNT &= ~REG_G2S_DB_BG0CNT_MOSAIC_MASK; - } -} - -static inline void G2_BG1Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2_BG1CNT |= REG_G2_BG1CNT_MOSAIC_MASK; - } - else - { - reg_G2_BG1CNT &= ~REG_G2_BG1CNT_MOSAIC_MASK; - } -} - -static inline void G2S_BG1Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2S_DB_BG1CNT |= REG_G2S_DB_BG1CNT_MOSAIC_MASK; - } - else - { - reg_G2S_DB_BG1CNT &= ~REG_G2S_DB_BG1CNT_MOSAIC_MASK; - } -} - -static inline void G2_BG2Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2_BG2CNT |= REG_G2_BG2CNT_MOSAIC_MASK; - } - else - { - reg_G2_BG2CNT &= ~REG_G2_BG2CNT_MOSAIC_MASK; - } -} - -static inline void G2S_BG2Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2S_DB_BG2CNT |= REG_G2S_DB_BG2CNT_MOSAIC_MASK; - } - else - { - reg_G2S_DB_BG2CNT &= ~REG_G2S_DB_BG2CNT_MOSAIC_MASK; - } -} - -static inline void G2_BG3Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2_BG3CNT |= REG_G2_BG3CNT_MOSAIC_MASK; - } - else - { - reg_G2_BG3CNT &= ~REG_G2_BG3CNT_MOSAIC_MASK; - } -} - -static inline void G2S_BG3Mosaic(BOOL enable) -{ - if (enable) - { - reg_G2S_DB_BG3CNT |= REG_G2S_DB_BG3CNT_MOSAIC_MASK; - } - else - { - reg_G2S_DB_BG3CNT &= ~REG_G2S_DB_BG3CNT_MOSAIC_MASK; - } -} - -static inline void G2_SetBG0Priority(int priority) -{ - reg_G2_BG0CNT = (u16)((reg_G2_BG0CNT & ~REG_G2_BG0CNT_PRIORITY_MASK) | (priority << REG_G2_BG0CNT_PRIORITY_SHIFT)); -} - -static inline void G2S_SetBG0Priority(int priority) -{ - reg_G2S_DB_BG0CNT = (u16)((reg_G2S_DB_BG0CNT & ~REG_G2S_DB_BG0CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG0CNT_PRIORITY_SHIFT)); -} - -static inline void G2_SetBG1Priority(int priority) -{ - reg_G2_BG1CNT = (u16)((reg_G2_BG1CNT & ~REG_G2_BG1CNT_PRIORITY_MASK) | (priority << REG_G2_BG1CNT_PRIORITY_SHIFT)); -} - -static inline void G2S_SetBG1Priority(int priority) -{ - reg_G2S_DB_BG1CNT = (u16)((reg_G2S_DB_BG1CNT & ~REG_G2S_DB_BG1CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG1CNT_PRIORITY_SHIFT)); -} - -static inline void G2_SetBG2Priority(int priority) -{ - reg_G2_BG2CNT = (u16)((reg_G2_BG2CNT & ~REG_G2_BG2CNT_PRIORITY_MASK) | (priority << REG_G2_BG2CNT_PRIORITY_SHIFT)); -} - -static inline void G2S_SetBG2Priority(int priority) -{ - reg_G2S_DB_BG2CNT = (u16)((reg_G2S_DB_BG2CNT & ~REG_G2S_DB_BG2CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG2CNT_PRIORITY_SHIFT)); -} - -static inline void G2_SetBG3Priority(int priority) -{ - reg_G2_BG3CNT = (u16)((reg_G2_BG3CNT & ~REG_G2_BG3CNT_PRIORITY_MASK) | (priority << REG_G2_BG3CNT_PRIORITY_SHIFT)); -} - -static inline void G2S_SetBG3Priority(int priority) -{ - reg_G2S_DB_BG3CNT = (u16)((reg_G2S_DB_BG3CNT & ~REG_G2S_DB_BG3CNT_PRIORITY_MASK) | (priority << REG_G2S_DB_BG3CNT_PRIORITY_SHIFT)); -} - -static inline GXBg01Control G2_GetBG0Control(void) -{ - return *(volatile GXBg01Control *)®_G2_BG0CNT; -} - -static inline GXBg01Control G2S_GetBG0Control(void) -{ - return *(volatile GXBg01Control *)®_G2S_DB_BG0CNT; -} - -static inline GXBg01Control G2_GetBG1Control(void) -{ - return *(volatile GXBg01Control *)®_G2_BG1CNT; -} - -static inline GXBg01Control G2S_GetBG1Control(void) -{ - return *(volatile GXBg01Control *)®_G2S_DB_BG1CNT; -} - -static inline GXBg23ControlText G2_GetBG2ControlText(void) -{ - return *(volatile GXBg23ControlText *)®_G2_BG2CNT; -} - -static inline GXBg23ControlText G2S_GetBG2ControlText(void) -{ - return *(volatile GXBg23ControlText *)®_G2S_DB_BG2CNT; -} - -static inline GXBg23ControlAffine G2_GetBG2ControlAffine(void) -{ - return *(volatile GXBg23ControlAffine *)®_G2_BG2CNT; -} - -static inline GXBg23ControlAffine G2S_GetBG2ControlAffine(void) -{ - return *(volatile GXBg23ControlAffine *)®_G2S_DB_BG2CNT; -} - -static inline GXBg23Control256x16Pltt G2_GetBG2Control256x16Pltt(void) -{ - return *(volatile GXBg23Control256x16Pltt *)®_G2_BG2CNT; -} - -static inline GXBg23Control256x16Pltt G2S_GetBG2Control256x16Pltt(void) -{ - return *(volatile GXBg23Control256x16Pltt *)®_G2S_DB_BG2CNT; -} - -static inline GXBg23Control256Bmp G2_GetBG2Control256Bmp(void) -{ - return *(volatile GXBg23Control256Bmp *)®_G2_BG2CNT; -} - -static inline GXBg23Control256Bmp G2S_GetBG2Control256Bmp(void) -{ - return *(volatile GXBg23Control256Bmp *)®_G2S_DB_BG2CNT; -} - -static inline GXBg23ControlDCBmp G2_GetBG2ControlDCBmp(void) -{ - return *(volatile GXBg23ControlDCBmp *)®_G2_BG2CNT; -} - -static inline GXBg23ControlDCBmp G2S_GetBG2ControlDCBmp(void) -{ - return *(volatile GXBg23ControlDCBmp *)®_G2S_DB_BG2CNT; -} - -static inline GXBg2ControlLargeBmp G2_GetBG2ControlLargeBmp(void) -{ - return *(volatile GXBg2ControlLargeBmp *)®_G2_BG2CNT; -} - -static inline GXBg2ControlLargeBmp G2S_GetBG2ControlLargeBmp(void) -{ - return *(volatile GXBg2ControlLargeBmp *)®_G2S_DB_BG2CNT; -} - -static inline GXBg23ControlText G2_GetBG3ControlText(void) -{ - return *(volatile GXBg23ControlText *)®_G2_BG3CNT; -} - -static inline GXBg23ControlText G2S_GetBG3ControlText(void) -{ - return *(volatile GXBg23ControlText *)®_G2S_DB_BG3CNT; -} - -static inline GXBg23ControlAffine G2_GetBG3ControlAffine(void) -{ - return *(volatile GXBg23ControlAffine *)®_G2_BG3CNT; -} - -static inline GXBg23ControlAffine G2S_GetBG3ControlAffine(void) -{ - return *(volatile GXBg23ControlAffine *)®_G2S_DB_BG3CNT; -} - -static inline GXBg23Control256x16Pltt G2_GetBG3Control256x16Pltt(void) -{ - return *(volatile GXBg23Control256x16Pltt *)®_G2_BG3CNT; -} - -static inline GXBg23Control256x16Pltt G2S_GetBG3Control256x16Pltt(void) -{ - return *(volatile GXBg23Control256x16Pltt *)®_G2S_DB_BG3CNT; -} - -static inline GXBg23Control256Bmp G2_GetBG3Control256Bmp(void) -{ - return *(volatile GXBg23Control256Bmp *)®_G2_BG3CNT; -} - -static inline GXBg23Control256Bmp G2S_GetBG3Control256Bmp(void) -{ - return *(volatile GXBg23Control256Bmp *)®_G2S_DB_BG3CNT; -} - -static inline GXBg23ControlDCBmp G2_GetBG3ControlDCBmp(void) -{ - return *(volatile GXBg23ControlDCBmp *)®_G2_BG3CNT; -} - -static inline GXBg23ControlDCBmp G2S_GetBG3ControlDCBmp(void) -{ - return *(volatile GXBg23ControlDCBmp *)®_G2S_DB_BG3CNT; -} - -#endif //GUARD_GX_BGCNT_H diff --git a/arm9/lib/include/GX_dma.h b/arm9/lib/include/GX_dma.h deleted file mode 100644 index 98f6a4a2..00000000 --- a/arm9/lib/include/GX_dma.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef GUARD_GX_DMA_H -#define GUARD_GX_DMA_H - -#define GX_DMA_NOT_USE -1 -#define GX_CPU_FASTER32_SIZE 0x30 -#define GX_CPU_FASTER16_SIZE 0x1C - -static inline void GXi_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) -{ - if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER32_SIZE) - { - MI_DmaCopy32(dmaNo, src, dest, size); - } - else - { - MIi_CpuCopy32(src, dest, size); - } -} - -static inline void GXi_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) -{ - if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER16_SIZE) - { - MI_DmaCopy16(dmaNo, src, dest, size); - } - else - { - MIi_CpuCopy16(src, dest, size); - } -} - -static inline void GXi_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, - MIDmaCallback callback, void *arg) -{ - if (dmaNo != GX_DMA_NOT_USE) - { - MI_DmaCopy32Async(dmaNo, src, dest, size, callback, arg); - } - else - { - MIi_CpuCopy32(src, dest, size); - } -} - -static inline void GXi_WaitDma(u32 dmaNo) -{ - if (dmaNo != GX_DMA_NOT_USE) - { - MI_WaitDma(dmaNo); - } -} - -#endif //GUARD_GX_DMA_H diff --git a/arm9/lib/include/GX_g2.h b/arm9/lib/include/GX_g2.h deleted file mode 100644 index 97fa0e10..00000000 --- a/arm9/lib/include/GX_g2.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef GUARD_GX_G2_H -#define GUARD_GX_G2_H - -#include "fx.h" -#include "registers.h" - -void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); -void G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); - -typedef struct -{ - u8 planeMask:5; - u8 effect:1; - u8 _reserve:2; -} - GXWndPlane; - -typedef enum -{ - GX_WND_PLANEMASK_NONE = 0x0000, - GX_WND_PLANEMASK_BG0 = 0x0001, - GX_WND_PLANEMASK_BG1 = 0x0002, - GX_WND_PLANEMASK_BG2 = 0x0004, - GX_WND_PLANEMASK_BG3 = 0x0008, - GX_WND_PLANEMASK_OBJ = 0x0010 -} - GXWndPlaneMask; - -static inline void G2_SetWndOutsidePlane(int wnd, BOOL effect) -{ - u32 tmp; - - tmp = ((reg_G2_WINOUT & ~REG_G2_WINOUT_WINOUT_MASK) | ((u32)wnd << REG_G2_WINOUT_WINOUT_SHIFT)); - - if (effect) - { - tmp |= (0x20 << REG_G2_WINOUT_WINOUT_SHIFT); // EFCT - } - - reg_G2_WINOUT = (u16)tmp; -} - -static inline void G2_SetBG0Offset(int hOffset, int vOffset) -{ - reg_G2_BG0OFS = (u32)(((hOffset << REG_G2_BG0OFS_HOFFSET_SHIFT) & REG_G2_BG0OFS_HOFFSET_MASK) | - ((vOffset << REG_G2_BG0OFS_VOFFSET_SHIFT) & REG_G2_BG0OFS_VOFFSET_MASK)); -} - -static inline void G2_SetBG1Offset(int hOffset, int vOffset) -{ - reg_G2_BG1OFS = (u32)(((hOffset << REG_G2_BG1OFS_HOFFSET_SHIFT) & REG_G2_BG1OFS_HOFFSET_MASK) | - ((vOffset << REG_G2_BG1OFS_VOFFSET_SHIFT) & REG_G2_BG1OFS_VOFFSET_MASK)); -} - -static inline void G2_SetBG2Offset(int hOffset, int vOffset) -{ - reg_G2_BG2OFS = (u32)(((hOffset << REG_G2_BG2OFS_HOFFSET_SHIFT) & REG_G2_BG2OFS_HOFFSET_MASK) | - ((vOffset << REG_G2_BG2OFS_VOFFSET_SHIFT) & REG_G2_BG2OFS_VOFFSET_MASK)); -} - -static inline void G2_SetBG3Offset(int hOffset, int vOffset) -{ - reg_G2_BG3OFS = (u32)(((hOffset << REG_G2_BG3OFS_HOFFSET_SHIFT) & REG_G2_BG3OFS_HOFFSET_MASK) | - ((vOffset << REG_G2_BG3OFS_VOFFSET_SHIFT) & REG_G2_BG3OFS_VOFFSET_MASK)); -} - -static inline void G2S_SetBG0Offset(int hOffset, int vOffset) -{ - reg_G2S_DB_BG0OFS = (u32)(((hOffset << REG_G2S_DB_BG0OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG0OFS_HOFFSET_MASK) | - ((vOffset << REG_G2S_DB_BG0OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG0OFS_VOFFSET_MASK)); -} - -static inline void G2S_SetBG1Offset(int hOffset, int vOffset) -{ - reg_G2S_DB_BG1OFS = (u32)(((hOffset << REG_G2S_DB_BG1OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG1OFS_HOFFSET_MASK) | - ((vOffset << REG_G2S_DB_BG1OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG1OFS_VOFFSET_MASK)); -} - -static inline void G2S_SetBG2Offset(int hOffset, int vOffset) -{ - reg_G2S_DB_BG2OFS = (u32)(((hOffset << REG_G2S_DB_BG2OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG2OFS_HOFFSET_MASK) | - ((vOffset << REG_G2S_DB_BG2OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG2OFS_VOFFSET_MASK)); -} - -static inline void G2S_SetBG3Offset(int hOffset, int vOffset) -{ - reg_G2S_DB_BG3OFS = (u32)(((hOffset << REG_G2S_DB_BG3OFS_HOFFSET_SHIFT) & REG_G2S_DB_BG3OFS_HOFFSET_MASK) | - ((vOffset << REG_G2S_DB_BG3OFS_VOFFSET_SHIFT) & REG_G2S_DB_BG3OFS_VOFFSET_MASK)); -} - -static inline void G2_SetBG2Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) -{ - G2x_SetBGyAffine_((u32)®_G2_BG2PA, mtx, centerX, centerY, x1, y1); -} - -static inline void G2_SetBG3Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) -{ - G2x_SetBGyAffine_((u32)®_G2_BG3PA, mtx, centerX, centerY, x1, y1); -} - -static inline void G2S_SetBG2Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) -{ - G2x_SetBGyAffine_((u32)®_G2S_DB_BG2PA, mtx, centerX, centerY, x1, y1); -} - -static inline void G2S_SetBG3Affine(const struct Mtx22 *mtx, int centerX, int centerY, int x1, int y1) -{ - G2x_SetBGyAffine_((u32)®_G2S_DB_BG3PA, mtx, centerX, centerY, x1, y1); -} - -static inline void G2_BlendNone(void) -{ - reg_G2_BLDCNT = 0; -} - -static inline void G2S_BlendNone(void) -{ - reg_G2S_DB_BLDCNT = 0; -} - -//The g2 and g2_oam headers contain a lot of inline functions and enums that may want to be ported over at some point - -#endif //GUARD_GX_G2_H diff --git a/arm9/lib/include/GX_g3.h b/arm9/lib/include/GX_g3.h deleted file mode 100644 index 765ecc64..00000000 --- a/arm9/lib/include/GX_g3.h +++ /dev/null @@ -1,184 +0,0 @@ -#ifndef GUARD_GX_G3_H -#define GUARD_GX_G3_H - -struct GXDLInfo -{ - u8 *curr_cmd; - u32 *curr_param; - u32 *bottom; - u32 length; - BOOL param0_cmd_flg; -}; - -void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct GXDLInfo *displaylist); - -typedef enum -{ - GX_MTXMODE_PROJECTION = 0, - GX_MTXMODE_POSITION = 1, - GX_MTXMODE_POSITION_VECTOR = 2, - GX_MTXMODE_TEXTURE = 3 -} -GXMtxMode; - -typedef enum -{ - GX_BEGIN_TRIANGLES = 0, - GX_BEGIN_QUADS = 1, - GX_BEGIN_TRIANGLE_STRIP = 2, - GX_BEGIN_QUAD_STRIP = 3 -} -GXBegin; - -typedef enum -{ - GX_SORTMODE_AUTO = 0, - GX_SORTMODE_MANUAL = 1 -} -GXSortMode; - -typedef enum -{ - GX_BUFFERMODE_Z = 0, - GX_BUFFERMODE_W = 1 -} -GXBufferMode; - -typedef enum -{ - GX_LIGHTMASK_NONE = 0, - GX_LIGHTMASK_0 = 1, - GX_LIGHTMASK_1 = 2, - GX_LIGHTMASK_01 = 3, - GX_LIGHTMASK_2 = 4, - GX_LIGHTMASK_02 = 5, - GX_LIGHTMASK_12 = 6, - GX_LIGHTMASK_012 = 7, - GX_LIGHTMASK_3 = 8, - GX_LIGHTMASK_03 = 9, - GX_LIGHTMASK_13 = 10, - GX_LIGHTMASK_013 = 11, - GX_LIGHTMASK_23 = 12, - GX_LIGHTMASK_023 = 13, - GX_LIGHTMASK_123 = 14, - GX_LIGHTMASK_0123 = 15 -} -GXLightMask; - -typedef enum -{ - GX_POLYGONMODE_MODULATE = 0, - GX_POLYGONMODE_DECAL = 1, - GX_POLYGONMODE_TOON = 2, - GX_POLYGONMODE_SHADOW = 3 -} -GXPolygonMode; - -typedef enum -{ - GX_CULL_ALL = 0, - GX_CULL_FRONT = 1, - GX_CULL_BACK = 2, - GX_CULL_NONE = 3 -} -GXCull; - -typedef enum -{ - GX_TEXREPEAT_NONE = 0, - GX_TEXREPEAT_S = 1, - GX_TEXREPEAT_T = 2, - GX_TEXREPEAT_ST = 3 -} -GXTexRepeat; - -typedef enum -{ - GX_TEXFLIP_NONE = 0, - GX_TEXFLIP_S = 1, - GX_TEXFLIP_T = 2, - GX_TEXFLIP_ST = 3 -} -GXTexFlip; - -typedef enum -{ - GX_TEXSIZE_S8 = 0, - GX_TEXSIZE_S16 = 1, - GX_TEXSIZE_S32 = 2, - GX_TEXSIZE_S64 = 3, - GX_TEXSIZE_S128 = 4, - GX_TEXSIZE_S256 = 5, - GX_TEXSIZE_S512 = 6, - GX_TEXSIZE_S1024 = 7 -} -GXTexSizeS; - -typedef enum -{ - GX_TEXSIZE_T8 = 0, - GX_TEXSIZE_T16 = 1, - GX_TEXSIZE_T32 = 2, - GX_TEXSIZE_T64 = 3, - GX_TEXSIZE_T128 = 4, - GX_TEXSIZE_T256 = 5, - GX_TEXSIZE_T512 = 6, - GX_TEXSIZE_T1024 = 7 -} -GXTexSizeT; - -typedef enum -{ - GX_TEXFMT_NONE = 0, - GX_TEXFMT_A3I5 = 1, - GX_TEXFMT_PLTT4 = 2, - GX_TEXFMT_PLTT16 = 3, - GX_TEXFMT_PLTT256 = 4, - GX_TEXFMT_COMP4x4 = 5, - GX_TEXFMT_A5I3 = 6, - GX_TEXFMT_DIRECT = 7 -} -GXTexFmt; - -typedef enum -{ - GX_TEXPLTTCOLOR0_USE = 0, - GX_TEXPLTTCOLOR0_TRNS = 1 -} -GXTexPlttColor0; - -typedef enum -{ - GX_TEXGEN_NONE = 0, - GX_TEXGEN_TEXCOORD = 1, - GX_TEXGEN_NORMAL = 2, - GX_TEXGEN_VERTEX = 3 -} -GXTexGen; - -typedef enum -{ - GX_LIGHTID_0 = 0, - GX_LIGHTID_1 = 1, - GX_LIGHTID_2 = 2, - GX_LIGHTID_3 = 3 -} -GXLightId; - -typedef union -{ - u32 val[3]; - struct - { - fx16 x; - fx16 y; - fx16 z; - fx16 width; - fx16 height; - fx16 depth; - }; -} -GXBoxTestParam; - -#endif //GUARD_GX_G3_H diff --git a/arm9/lib/include/GX_g3_util.h b/arm9/lib/include/GX_g3_util.h deleted file mode 100644 index a9bc4c17..00000000 --- a/arm9/lib/include/GX_g3_util.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_GX_G3_UTIL_H -#define GUARD_GX_G3_UTIL_H - -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); -void G3_RotX(fx32 sinphi, fx32 cosphi); -void G3_RotY(fx32 sinphi, fx32 cosphi); -void G3_RotZ(fx32 sinphi, fx32 cosphi); - -#endif //GUARD_GX_G3_UTIL_H diff --git a/arm9/lib/include/GX_g3b.h b/arm9/lib/include/GX_g3b.h deleted file mode 100644 index d299ea34..00000000 --- a/arm9/lib/include/GX_g3b.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef GUARD_GX_G3B_H -#define GUARD_GX_G3B_H - -#include "GX_g3.h" - -void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct GXDLInfo *displaylist); -void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); -void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); -void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct GXDLInfo * displaylist, u32 type); -void G3B_End(struct GXDLInfo * displaylist); - -#endif //GUARD_GX_G3B_H diff --git a/arm9/lib/include/GX_g3imm.h b/arm9/lib/include/GX_g3imm.h deleted file mode 100644 index f811dc68..00000000 --- a/arm9/lib/include/GX_g3imm.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_GX_G3IMM_H -#define GUARD_GX_G3IMM_H - -#include "fx.h" - -void G3_LoadMtx43(struct Mtx43 *mtx); -void G3_MultMtx43(struct Mtx43 *mtx); -void G3_MultMtx33(struct Mtx33 *mtx); - -#endif //GUARD_GX_G3IMM_H diff --git a/arm9/lib/include/GX_g3x.h b/arm9/lib/include/GX_g3x.h deleted file mode 100644 index aa65a190..00000000 --- a/arm9/lib/include/GX_g3x.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef GUARD_GX_G3X_H -#define GUARD_GX_G3X_H - -#include "fx.h" - -#include "registers.h" - -void GXi_NopClearFifo128_(void *reg); -void G3X_Init(); -void G3X_ResetMtxStack(); -void G3X_ClearFifo(); -void G3X_InitMtxStack(); -void G3X_ResetMtxStack_2(); -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); -u32 G3X_GetClipMtx(struct Mtx44 *dst); -u32 G3X_GetVectorMtx(struct Mtx33 *dst); -void G3X_SetEdgeColorTable(void *tbl_ptr); -void G3X_SetFogTable(void *tbl_ptr); -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); -void G3X_InitTable(); -u32 G3X_GetMtxStackLevelPV(u32 *level); -u32 G3X_GetMtxStackLevelPJ(u32 *level); -u32 G3X_GetBoxTestResult(u32 *result); -void G3X_SetHOffset(u32 offset); - -typedef enum -{ - GX_SHADING_TOON = 0, - GX_SHADING_HIGHLIGHT = 1 -} -GXShading; - -typedef enum -{ - GX_FOGBLEND_COLOR_ALPHA = 0, - GX_FOGBLEND_ALPHA = 1 -} -GXFogBlend; - -typedef enum -{ - GX_FOGSLOPE_0x8000 = 0, - GX_FOGSLOPE_0x4000 = 1, - GX_FOGSLOPE_0x2000 = 2, - GX_FOGSLOPE_0x1000 = 3, - GX_FOGSLOPE_0x0800 = 4, - GX_FOGSLOPE_0x0400 = 5, - GX_FOGSLOPE_0x0200 = 6, - GX_FOGSLOPE_0x0100 = 7, - GX_FOGSLOPE_0x0080 = 8, - GX_FOGSLOPE_0x0040 = 9, - GX_FOGSLOPE_0x0020 = 10 -} -GXFogSlope; - -typedef enum -{ - GX_FIFOINTR_COND_DISABLE = 0, - GX_FIFOINTR_COND_UNDERHALF = 1, - GX_FIFOINTR_COND_EMPTY = 2 -} -GXFifoIntrCond; - -typedef enum -{ - GX_FIFOSTAT_EMPTY = 6, - GX_FIFOSTAT_UNDERHALF = 2, - GX_FIFOSTAT_OVERHALF = 0, - GX_FIFOSTAT_FULL = 1 -} -GXFifoStat; - -static inline void G3X_SetFifoIntrCond(GXFifoIntrCond cond) -{ - reg_G3X_GXSTAT = ((reg_G3X_GXSTAT & ~0xc0000000) | - (cond << 30)); -} - -static inline GXFifoStat G3X_GetCommandFifoStatus(void) -{ - return (GXFifoStat)((reg_G3X_GXSTAT & (0x01000000 | - 0x02000000 | - 0x04000000)) >> 24); -} - -#endif //GUARD_GX_G3X_H diff --git a/arm9/lib/include/GX_load2d.h b/arm9/lib/include/GX_load2d.h deleted file mode 100644 index 3c9fb5cb..00000000 --- a/arm9/lib/include/GX_load2d.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef GUARD_GX_LOAD2D_H -#define GUARD_GX_LOAD2D_H - -void GX_LoadBGPltt(void *src, u32 offset, u32 size); -void GXS_LoadBGPltt(void *src, u32 offset, u32 size); -void GX_LoadOBJPltt(void *src, u32 offset, u32 size); -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); -void GX_LoadOAM(void *src, u32 offset, u32 size); -void GXS_LoadOAM(void *src, u32 offset, u32 size); -void GX_LoadOBJ(void *src, u32 offset, u32 size); -void GXS_LoadOBJ(void *src, u32 offset, u32 size); -void GX_LoadBG0Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); -void GX_LoadBG1Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); -void GX_LoadBG2Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); -void GX_LoadBG3Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); -void GX_LoadBG0Char(void *src, u32 offset, u32 size); -void GXS_LoadBG0Char(void *src, u32 offset, u32 size); -void GX_LoadBG1Char(void *src, u32 offset, u32 size); -void GXS_LoadBG1Char(void *src, u32 offset, u32 size); -void GX_LoadBG2Char(void *src, u32 offset, u32 size); -void GXS_LoadBG2Char(void *src, u32 offset, u32 size); -void GX_LoadBG3Char(void *src, u32 offset, u32 size); -void GXS_LoadBG3Char(void *src, u32 offset, u32 size); -void GX_BeginLoadBGExtPltt(); -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadBGExtPltt(); -void GX_BeginLoadOBJExtPltt(); -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadOBJExtPltt(); -void GXS_BeginLoadBGExtPltt(); -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadBGExtPltt(); -void GXS_BeginLoadOBJExtPltt(); -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadOBJExtPltt(); - -#endif //GUARD_GX_LOAD2D_H diff --git a/arm9/lib/include/GX_load3d.h b/arm9/lib/include/GX_load3d.h deleted file mode 100644 index 09fd296a..00000000 --- a/arm9/lib/include/GX_load3d.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef GUARD_GX_LOAD3D_H -#define GUARD_GX_LOAD3D_H - -void GX_BeginLoadTex(); -void GX_LoadTex(void *src, u32 offset, u32 size); -void GX_EndLoadTex(); -void GX_BeginLoadTexPltt(); -void GX_LoadTexPltt(void *src, u32 offset, u32 size); -void GX_EndLoadTexPltt(); -void GX_BeginLoadClearImage(); -void GX_LoadClearImageColor(void *src, u32 size); -void GX_LoadClearImageDepth(void *src, u32 size); -void GX_EndLoadClearImage(); - -#endif //GUARD_GX_LOAD3D_H diff --git a/arm9/lib/include/GX_state.h b/arm9/lib/include/GX_state.h deleted file mode 100644 index c94b6c07..00000000 --- a/arm9/lib/include/GX_state.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef GUARD_GX_STATE_H -#define GUARD_GX_STATE_H - -struct GX_State -{ - u16 lcdc; - u16 bg; - u16 obj; - u16 arm7; - u16 tex; - u16 texPltt; - u16 clrImg; - u16 bgExtPltt; - u16 objExtPltt; - - u16 sub_bg; - u16 sub_obj; - u16 sub_bgExtPltt; - u16 sub_objExtPltt; -}; - -void GX_InitGXState(); - -#endif //GUARD_GX_STATE_H diff --git a/arm9/lib/include/GX_struct_2d.h b/arm9/lib/include/GX_struct_2d.h deleted file mode 100644 index 3b544927..00000000 --- a/arm9/lib/include/GX_struct_2d.h +++ /dev/null @@ -1,243 +0,0 @@ -#ifndef GUARD_GX_STRUCT_2D_H -#define GUARD_GX_STRUCT_2D_H - -typedef u16 GXScrFmtText; -#define GX_SCRFMT_TEXT_CHARNAME_SHIFT (0) -#define GX_SCRFMT_TEXT_CHARNAME_MASK (0x03ff) -#define GX_SCRFMT_TEXT_HF_SHIFT (10) -#define GX_SCRFMT_TEXT_HF_MASK (0x0400) -#define GX_SCRFMT_TEXT_VF_SHIFT (11) -#define GX_SCRFMT_TEXT_VF_MASK (0x0800) -#define GX_SCRFMT_TEXT_COLORPLTT_SHIFT (12) -#define GX_SCRFMT_TEXT_COLORPLTT_MASK (0xf000) -#define GX_SCRFMT_TEXT(pltt, vf, hf, name) \ - ((u16)(((name) << GX_SCRFMT_TEXT_CHARNAME_SHIFT) | \ - ((hf) << GX_SCRFMT_TEXT_HF_SHIFT) | \ - ((vf) << GX_SCRFMT_TEXT_VF_SHIFT) | \ - ((pltt) << GX_SCRFMT_TEXT_COLORPLTT_SHIFT))) - -typedef u8 GXScrFmtAffine; -#define GX_SCRFMT_AFFINE_CHARNAME_SHIFT (0) -#define GX_SCRFMT_AFFINE_CHARNAME_MASK (0xff) - -typedef u8 GXScrFmt256Bmp; -#define GX_SCRFMT_256BMP_COLORNO_SHIFT (0) -#define GX_SCRFMT_256BMP_COLORNO_MASK (0xff) - -typedef union -{ - u32 data32[8]; - u16 data16[16]; - u8 data8[32]; -} -GXCharFmt16; - -typedef union -{ - u32 data32[16]; - u16 data16[32]; - u8 data8[64]; -} -GXCharFmt256; - -typedef union -{ - u16 data16[16]; - u32 data32[8]; - GXRgb rgb[16]; -} -GXBGPltt16; - -typedef GXBGPltt16 GXOBJPltt16; - -typedef union -{ - u16 data16[256]; - u32 data32[128]; - GXRgb rgb[256]; -} -GXBGPltt256; - -typedef GXBGPltt256 GXOBJPltt256; - -typedef union -{ - u16 data16[32 * 32]; - u32 data32[32 * 32 / 2]; - GXScrFmtText scr[32][32]; -} -GXScrText32x32; - -typedef union -{ - u16 data16[64 * 32]; - u32 data32[64 * 32 / 2]; - GXScrFmtText scr[64][32]; -} -GXScrText64x32; - -typedef union -{ - // 4K bytes - u16 data16[32 * 64]; - u32 data32[32 * 64 / 2]; - GXScrFmtText scr[32][64]; -} -GXScrText32x64; - -typedef union -{ - u16 data16[64 * 64]; - u32 data32[64 * 64 / 2]; - GXScrFmtText scr[64][64]; -} -GXScrText64x64; - -typedef union -{ - u8 data8[16 * 16]; - u32 data32[16 * 16 / 4]; - GXScrFmtAffine scr[16][16]; -} -GXScrAffine16x16; - -typedef union -{ - u8 data8[32 * 32]; - u32 data32[32 * 32 / 4]; - GXScrFmtAffine scr[32][32]; -} -GXScrAffine32x32; - -typedef union -{ - u8 data8[64 * 64]; - u32 data32[64 * 64 / 4]; - GXScrFmtAffine scr[64][64]; -} -GXScrAffine64x64; - -typedef union -{ - u8 data8[128 * 128]; - u32 data32[128 * 128 / 4]; - GXScrFmtAffine scr[128][128]; -} -GXScrAffine128x128; - -typedef union -{ - u8 data8[128 * 128]; - u32 data32[128 * 128 / 4]; - GXScrFmt256Bmp scr[128][128]; -} -GXScr256Bmp128x128; - -typedef union -{ - u8 data8[256 * 256]; - u32 data32[256 * 256 / 4]; - GXScrFmt256Bmp scr[256][256]; -} -GXScr256Bmp256x256; - -typedef union -{ - u8 data8[512 * 256]; - u32 data32[512 * 256 / 4]; - GXScrFmt256Bmp scr[512][256]; -} -GXScr256Bmp512x256; - -typedef union -{ - u8 data8[512 * 512]; - u32 data32[512 * 512 / 4]; - GXScrFmt256Bmp scr[512][512]; -} -GXScr256Bmp512x512; - -typedef union -{ - u16 data16[128 * 128]; - u32 data32[128 * 128 / 2]; - GXRgba scr[128][128]; -} -GXScrDCBmp128x128; - -typedef union -{ - u16 data16[256 * 256]; - u32 data32[256 * 256 / 2]; - GXRgba scr[256][256]; -} -GXScrDCBmp256x256; - -typedef union -{ - u16 data16[512 * 256]; - u32 data32[512 * 256 / 2]; - GXRgba scr[512][256]; -} -GXScrDCBmp512x256; - -typedef union -{ - u16 data16[512 * 512]; - u32 data32[512 * 512 / 2]; - GXRgba scr[512][512]; -} -GXScrDCBmp512x512; - -typedef struct -{ - GXCharFmt16 ch[1024]; -} -GXCharBGText16; - -typedef struct -{ - GXCharFmt256 ch[1024]; -} -GXCharBGText256; - -typedef struct -{ - GXCharFmt256 ch[256]; -} -GXCharBGAffine256; - -typedef union -{ - GXBGPltt256 pltt256; - GXBGPltt16 pltt16[16]; -} -GXBGStdPlttData; - -typedef union -{ - GXOBJPltt256 pltt256; - GXOBJPltt16 pltt16[16]; -} -GXOBJStdPlttData; - -typedef struct -{ - GXBGStdPlttData bgPltt; - GXOBJStdPlttData objPltt; -} -GXStdPlttData; - -typedef struct -{ - GXBGPltt256 pltt256[16]; -} -GXBGExtPlttData; - -typedef struct -{ - GXOBJPltt256 pltt256[16]; -} -GXOBJExtPlttData; - -#endif //GUARD_GX_STRUCT_2D_H diff --git a/arm9/lib/include/GX_vramcnt.h b/arm9/lib/include/GX_vramcnt.h deleted file mode 100644 index 3b82d28c..00000000 --- a/arm9/lib/include/GX_vramcnt.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef GUARD_GX_VRAMCNT_H -#define GUARD_GX_VRAMCNT_H - -//some of the symbols don't match what the function does -void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(s32 bg); -void GX_SetBankForOBJ(s32 obj); -void GX_SetBankForBGExtPltt(s32 bgextpltt); -void GX_SetBankForOBJExtPltt(s32 objextpltt); -void GX_SetBankForTex(s32 tex); -void GX_SetBankForTexPltt(s32 texpltt); -void GX_SetBankForClearImage(s32 clearimage); -void GX_SetBankForARM7(s32 arm7); -void GX_SetBankForLCDC(s32 lcdc); -void GX_SetBankForSubBG(s32 subbg); -void GX_SetBankForSubOBJ(s32 subobj); -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); -u32 resetBankForX_(u16 *ptr); -u32 GX_ResetBankForBG(); -u32 GX_ResetBankForOBJ(); -u32 GX_ResetBankForBGExtPltt(); -u32 GX_ResetBankForOBJExtPltt(); -u32 GX_ResetBankForTex(); -u32 GX_ResetBankForTexPltt(); -u32 GX_ResetBankForClearImage(); -u32 GX_ResetBankForSubBG(); -u32 GX_ResetBankForSubOBJ(); -u32 GX_ResetBankForSubBGExtPltt(); -u32 GX_ResetBankForSubOBJExtPltt(); -u32 disableBankForX_(u16 *ptr); -u32 GX_DisableBankForBG(); -u32 GX_DisableBankForOBJ(); -u32 GX_DisableBankForBGExtPltt(); -u32 GX_DisableBankForOBJExtPltt(); -u32 GX_DisableBankForTex(); -u32 GX_DisableBankForTexPltt(); -u32 GX_DisableBankForClearImage(); -u32 GX_DisableBankForARM7(); -u32 GX_DisableBankForLCDC(); -u32 GX_DisableBankForSubBG(); -u32 GX_DisableBankForSubOBJ(); -u32 GX_DisableBankForSubBGExtPltt(); -u32 GX_DisableBankForSubOBJExtPltt(); -u32 GX_GetBankForBG(); -u32 GX_GetBankForOBJ(); -u32 GX_GetBankForBGExtPltt(); -u32 GX_GetBankForOBJExtPltt(); -u32 GX_GetBankForTex(); -u32 GX_GetBankForTexPltt(); -u32 GX_GetBankForLCDC(); -u32 GX_GetBankForSubBG(); -u32 GX_GetBankForSubOBJ(); -u32 GX_GetBankForSubBGExtPltt(); -u32 GX_GetBankForSubOBJExtPltt(); - -#endif //GUARD_GX_VRAMCNT_H diff --git a/arm9/lib/include/GXcommon.h b/arm9/lib/include/GXcommon.h deleted file mode 100644 index a83f4384..00000000 --- a/arm9/lib/include/GXcommon.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GUARD_GXCOMMON_H -#define GUARD_GXCOMMON_H - -typedef u16 GXRgb; -#define GXRGB_ASSERT(gxrgb) SDK_ASSERT(((gxrgb) & 0x8000) == 0) -#define GX_RGB_R_SHIFT (0) -#define GX_RGB_R_MASK (0x001f) -#define GX_RGB_G_SHIFT (5) -#define GX_RGB_G_MASK (0x03e0) -#define GX_RGB_B_SHIFT (10) -#define GX_RGB_B_MASK (0x7c00) -#define GX_RGB(r, g, b) ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \ - ((g) << GX_RGB_G_SHIFT) | \ - ((b) << GX_RGB_B_SHIFT))) - -typedef u16 GXRgba; -#define GX_RGBA_R_SHIFT (0) -#define GX_RGBA_R_MASK (0x001f) -#define GX_RGBA_G_SHIFT (5) -#define GX_RGBA_G_MASK (0x03e0) -#define GX_RGBA_B_SHIFT (10) -#define GX_RGBA_B_MASK (0x7c00) -#define GX_RGBA_A_SHIFT (15) -#define GX_RGBA_A_MASK (0x8000) -#define GX_RGBA(r, g, b, a) ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \ - ((g) << GX_RGBA_G_SHIFT) | \ - ((b) << GX_RGBA_B_SHIFT) | \ - ((a) << GX_RGBA_A_SHIFT))) -#endif //GUARD_GXCOMMON_H diff --git a/arm9/lib/include/MATH_crc.h b/arm9/lib/include/MATH_crc.h deleted file mode 100644 index 4f06fa75..00000000 --- a/arm9/lib/include/MATH_crc.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef GUARD_MATH_CRC_H -#define GUARD_MATH_CRC_H - -#include "nitro/types.h" - -typedef u8 MATHCRC8Context; -typedef u16 MATHCRC16Context; -typedef u32 MATHCRC32Context; - -#define MATH_CRC16_CCITT_POLY 0x1021 - -struct MATHCRC8Table { - u8 table[256]; -}; - -struct MATHCRC16Table { - u16 table[256]; -}; - -struct MATHCRC32Table { - u32 table[256]; -}; - -u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength); -void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length); -u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength); -void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); -u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength); -void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); -u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength); -void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); -void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly); -void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); -void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); -void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly); -void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly); -void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); -void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly); - -static inline void MATH_CRC16InitTable(struct MATHCRC16Table * table) -{ - MATHi_CRC16InitTable(table, MATH_CRC16_CCITT_POLY); -} - -#endif diff --git a/arm9/lib/include/MATH_dgt.h b/arm9/lib/include/MATH_dgt.h deleted file mode 100644 index 140b4f98..00000000 --- a/arm9/lib/include/MATH_dgt.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef GUARD_MATH_DGT_H -#define GUARD_MATH_DGT_H - -#include "dgt.h" -#include "nitro/types.h" - -typedef struct DGTHash1Context MATHMD5Context; -typedef struct DGTHash2Context MATHSHA1Context; - -static inline void MATH_MD5Init(MATHMD5Context *context) { - DGT_Hash1Reset(context); -} - -static inline void MATH_MD5Update(MATHMD5Context *context, const void *input, u32 length) { - DGT_Hash1SetSource(context, (u8*)input, length); -} - -static inline void MATH_MD5GetHash(MATHMD5Context *context, void *digest) { - DGT_Hash1GetDigest_R((u8*)digest, context); -} - -static inline void MATH_MD5GetDigest(MATHMD5Context *context, void *digest) { - MATH_MD5GetHash(context, digest); -} - -static inline void MATH_SHA1Init(MATHSHA1Context *context) { - DGT_Hash2Reset(context); -} - -static inline void MATH_SHA1Update(MATHSHA1Context *context, const void *input, u32 length) { - DGT_Hash2SetSource(context, (u8*)input, length); -} - -static inline void MATH_SHA1GetHash(MATHSHA1Context *context, void *digest) { - DGT_Hash2GetDigest(context, (u8*)digest); -} - -static inline void MATH_SHA1GetDigest(MATHSHA1Context *context, void *digest) { - MATH_SHA1GetHash(context, digest); -} - -void MATH_CalcMD5(void *digest, const void *data, u32 dataLength); -void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength); - -#endif diff --git a/arm9/lib/include/MATH_pop.h b/arm9/lib/include/MATH_pop.h deleted file mode 100644 index 29a42b22..00000000 --- a/arm9/lib/include/MATH_pop.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GUARD_MATH_POP_H -#define GUARD_MATH_POP_H - -#include "nitro/types.h" - -u8 MATH_CountPopulation(u32); - -#endif diff --git a/arm9/lib/include/MB_mb.h b/arm9/lib/include/MB_mb.h deleted file mode 100644 index 5bccaf8b..00000000 --- a/arm9/lib/include/MB_mb.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef POKEDIAMOND_MB_MB_H -#define POKEDIAMOND_MB_MB_H - -#include "consts.h" - -#define MB_TYPE_ILLEGAL 0 -#define MB_TYPE_NORMAL 1 -#define MB_TYPE_MULTIBOOT 2 - -typedef struct { - u16 length; - u16 rssi; - u16 bssid[3]; - u16 ssidLength; - u8 ssid[32]; - u16 capaInfo; - struct { - u16 basic; - u16 support; - } rateSet; - u16 beaconperiod; - u16 dtimPeriod; - u16 channel; - u16 cfpPeriod; - u16 cfpMaxDuration; -} MBParentBssDesc; - -typedef struct { - u16 boot_type; - MBParentBssDesc parent_bss_desc; -} MBParam; - -static inline const MBParam *MB_GetMultiBootParam() { - return (const MBParam *)HW_WM_BOOT_BUF; -} - -static inline BOOL MB_IsMultiBootChild() { - return MB_GetMultiBootParam()->boot_type == MB_TYPE_MULTIBOOT; -} - -#endif //POKEDIAMOND_MB_MB_H diff --git a/arm9/lib/include/MI_byteAccess.h b/arm9/lib/include/MI_byteAccess.h deleted file mode 100644 index cad4d518..00000000 --- a/arm9/lib/include/MI_byteAccess.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef NITRO_MI_BYTEACCESS_H_ -#define NITRO_MI_BYTEACCESS_H_ - -static inline u8 MI_ReadByte(const void *address) -{ - return *(u8 *)address; -} - -static inline void MI_WriteByte(void *address, u8 value) -{ - *(u8 *)address = value; -} - -#endif //NITRO_MI_BYTEACCESS_H_ diff --git a/arm9/lib/include/MI_dma.h b/arm9/lib/include/MI_dma.h deleted file mode 100644 index 99d1cb84..00000000 --- a/arm9/lib/include/MI_dma.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_MI_DMA_H -#define POKEDIAMOND_ARM9_MI_DMA_H - -#include "nitro/MI_dma_shared.h" -#include "consts.h" -#include "OS_system.h" - -typedef void (*MIDmaCallback)(void *); - -#define MI_DMA_MAX_NUM 3 - -#define REG_ADDR_DMA0CNT 0x40000b8 -#define REG_ADDR_DMA0_CLR_DATA 0x40000e0 - -#define MI_CNT_CLEAR32(size) (0x85000000 | ((size)/4)) -#define MI_CNT_CLEAR32_IF(size) (0xc5000000 | ((size)/4)) -#define MI_CNT_COPY32(size) (0x84000000 | ((size)/4)) -#define MI_CNT_COPY32_IF(size) (0xc4000000 | ((size)/4)) -#define MI_CNT_COPY16(size) (0x80000000 | ((size)/2)) - -#define MI_DMA_SRC_FIX (2UL << 23) -#define MI_DMA_SRC_INC (0UL << 23) - -#define MI_DMA_16BIT_BUS (0UL << 26) -#define MI_DMA_32BIT_BUS (1UL << 26) - -#define MIi_DMA_TIMING_ANY (u32)(~0) -#define MI_DMA_TIMING_H_BLANK (2UL << 27) - -typedef union -{ - u32 b32; - u16 b16; -} MIiDmaClearSrc; - -void MI_DmaFill32(u32 dmaNo, void *dest, u32 data, u32 size); -void MI_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); -void MI_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size); -void MI_DmaFill32Async(u32 dmaNo, void *dest, u32 data, u32 size, MIDmaCallback callback, void *arg); -void MI_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, MIDmaCallback callback, void *arg); -void MI_WaitDma(u32 dmaNo); -void MI_StopDma(u32 dmaNo); -void MIi_CheckAnotherAutoDMA(u32 dmaNo, u32 dmaType); -void MIi_CheckDma0SourceAddress(u32 dmaNo, u32 src, u32 size, u32 dir); -void MIi_DmaSetParams(u32 dmaNo, u32 src, u32 dest, u32 ctrl); -void MIi_DmaSetParams_wait(u32 dmaNo, u32 src, u32 dest, u32 ctrl); -void MIi_DmaSetParams_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl); -void MIi_DmaSetParams_wait_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl); - -static inline void MIi_DmaSetParams_wait_src32(u32 dmaNo, u32 data, u32 dest, u32 ctrl) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - - MIiDmaClearSrc *scrp = (MIiDmaClearSrc *) ((u32)REG_ADDR_DMA0_CLR_DATA + dmaNo * 4); - scrp->b32 = data; - MIi_DmaSetParams_wait_noInt(dmaNo, (u32)scrp, dest, ctrl); - - (void)OS_RestoreInterrupts(lastIntrMode); -} - -static inline void MIi_DmaSetParams_src32(u32 dmaNo, u32 data, u32 dest, u32 ctrl) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - - MIiDmaClearSrc *srcp = (MIiDmaClearSrc *) ((u32)REG_ADDR_DMA0_CLR_DATA + dmaNo * 4); - srcp->b32 = data; - MIi_DmaSetParams_noInt(dmaNo, (u32)srcp, dest, ctrl); - - (void)OS_RestoreInterrupts(lastIntrMode); -} - -static inline void MIi_CallCallback(MIDmaCallback callback, void *arg) -{ - if (callback) - { - (callback) (arg); - } -} - -#endif //POKEDIAMOND_ARM9_MI_DMA_H diff --git a/arm9/lib/include/MI_dma_card.h b/arm9/lib/include/MI_dma_card.h deleted file mode 100644 index efd70ba6..00000000 --- a/arm9/lib/include/MI_dma_card.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEDIAMOND_MI_DMA_CARD_H -#define POKEDIAMOND_MI_DMA_CARD_H - -#include "nitro/types.h" - -void MIi_CardDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); - -#endif //POKEDIAMOND_MI_DMA_CARD_H diff --git a/arm9/lib/include/MI_dma_gxcommand.h b/arm9/lib/include/MI_dma_gxcommand.h deleted file mode 100644 index 7cc32ba2..00000000 --- a/arm9/lib/include/MI_dma_gxcommand.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef POKEDIAMOND_MI_DMA_GXCOMMAND_H -#define POKEDIAMOND_MI_DMA_GXCOMMAND_H - -#include "consts.h" -#include "MI_dma.h" -#include "GX_g3x.h" - -#define MIi_GX_LENGTH_ONCE (118 * sizeof(u32)) -#define REG_GXFIFO_ADDR 0x4000400 -#define MI_CNT_SEND32(size) (0x84400000 | (size/4)) -#define MI_CNT_SEND32_IF(size) (0xc4400000 | (size/4)) -#define MI_CNT_GXCOPY_IF(size) (0xfc400000 | (size/4)) - -#define OS_IE_GXFIFO 0x200000 - -typedef struct -{ - volatile BOOL isBusy; - - u32 dmaNo; - u32 src; - u32 length; - MIDmaCallback callback; - void *arg; - - GXFifoIntrCond fifoCond; - void (*fifoFunc) (void); -} MIiGXDmaParams; - -void MI_SendGXCommand(u32 dmaNo, const void *src, u32 commandLength); -void MI_SendGXCommandAsync(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg); -void MI_SendGXCommandAsyncFast(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg); - -#endif //POKEDIAMOND_MI_DMA_GXCOMMAND_H diff --git a/arm9/lib/include/MI_dma_hblank.h b/arm9/lib/include/MI_dma_hblank.h deleted file mode 100644 index 1c83ef3e..00000000 --- a/arm9/lib/include/MI_dma_hblank.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEDIAMOND_MI_DMA_HBLANK_H -#define POKEDIAMOND_MI_DMA_HBLANK_H - -#include "nitro/types.h" - -void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size); -void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size); - -#endif //POKEDIAMOND_MI_DMA_HBLANK_H diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h deleted file mode 100644 index 5e21d7e6..00000000 --- a/arm9/lib/include/MI_exMemory.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef POKEDIAMOND_MI_EXMEMORY_H -#define POKEDIAMOND_MI_EXMEMORY_H - -#include "registers.h" - -typedef enum { - MI_PROCESSOR_ARM9 = 0, - MI_PROCESSOR_ARM7 = 1 -} MIProcessor; - -typedef enum -{ - MI_CTRDG_ROMCYCLE1_10 = 0, - MI_CTRDG_ROMCYCLE1_8 = 1, - MI_CTRDG_ROMCYCLE1_6 = 2, - MI_CTRDG_ROMCYCLE1_18 = 3 -} MICartridgeRomCycle1st; - -typedef enum -{ - MI_CTRDG_ROMCYCLE2_6 = 0, - MI_CTRDG_ROMCYCLE2_4 = 1 -} MICartridgeRomCycle2nd; - -typedef enum -{ - MI_CTRDG_RAMCYCLE_10 = 0, - MI_CTRDG_RAMCYCLE_8 = 1, - MI_CTRDG_RAMCYCLE_6 = 2, - MI_CTRDG_RAMCYCLE_18 = 3 -} MICartridgeRamCycle; - -static inline void MIi_SetCardProcessor(MIProcessor proc) -{ - reg_MI_EXMEMCNT = - (u16)((reg_MI_EXMEMCNT & ~0x0800) | (proc << 11)); -} - -static inline void MIi_SetCartridgeProcessor(MIProcessor proc) -{ - reg_MI_EXMEMCNT = - (u16)((reg_MI_EXMEMCNT & ~0x0080) | (proc << 7)); -} - -static inline MICartridgeRomCycle1st MI_GetCartridgeRomCycle1st(void) -{ - return (MICartridgeRomCycle1st)((reg_MI_EXMEMCNT & 0xc) >> 2); -} - -static inline MICartridgeRomCycle2nd MI_GetCartridgeRomCycle2nd(void) -{ - return (MICartridgeRomCycle2nd)((reg_MI_EXMEMCNT & 0x10) >> 4); -} - -static inline void MI_SetCartridgeRomCycle1st(MICartridgeRomCycle1st c1) -{ - reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0xc) | (c1 << 2)); -} - -static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2) -{ - reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4)); -} - -static inline void MI_SetCartridgeRamCycle(MICartridgeRamCycle c) -{ - reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~3) | (c << 0)); -} - -static inline MICartridgeRamCycle MI_GetCartridgeRamCycle(void) -{ - return (MICartridgeRamCycle)((reg_MI_EXMEMCNT & 3) >> 0); -} - -#endif //POKEDIAMOND_MI_EXMEMORY_H diff --git a/arm9/lib/include/MI_init.h b/arm9/lib/include/MI_init.h deleted file mode 100644 index a338ab6b..00000000 --- a/arm9/lib/include/MI_init.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEDIAMOND_MI_INIT_H -#define POKEDIAMOND_MI_INIT_H - -void MI_Init(void); - -#endif //POKEDIAMOND_MI_INIT_H diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h deleted file mode 100644 index 4e5722bb..00000000 --- a/arm9/lib/include/MI_memory.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_MI_MEMORY_H -#define POKEDIAMOND_ARM9_MI_MEMORY_H - -#include "nitro/types.h" - -void MIi_CpuClear16(register u16 data, register void *destp, register u32 size); -void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size); -void MIi_CpuClear32(register u32 data, register void *destp, register u32 size); -void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size); -void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size); -void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size); -void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size); -void MI_Copy32B(register const void *pSrc, register void *pDest); -void MI_Copy36B(register const void *pSrc, register void *pDest); -void MI_Copy48B(register const void *pSrc, register void *pDest); -void MI_Copy64B(register const void *pSrc, register void *pDest); -void MI_CpuFill8(register void *dstp, register u8 data, register u32 size); -void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size); -void MI_Zero36B(register void *pDest); - -static inline void MI_CpuClearFast(void *destp, u32 size) { - MIi_CpuClearFast(0, destp, size); -} -static inline void MI_CpuClear8(void *dest, u32 size) { - MI_CpuFill8(dest, 0, size); -} - -static inline void MI_CpuFill16(void *dest, u16 data, u32 size) -{ - MIi_CpuClear16(data, dest, size); -} - -static inline void MI_CpuClear16(void * destp, u32 size) -{ - MIi_CpuClear16(0, destp, size); -} - -static inline void MI_CpuFill32(void *dest, u32 data, u32 size) -{ - MIi_CpuClear32(data, dest, size); -} - -static inline void MI_CpuClear32(void *dest, u32 size) -{ - MI_CpuFill32(dest, 0, size); -} - -static inline void MI_CpuCopy16(const void *src, void *dest, u32 size) -{ - MIi_CpuCopy16(src, dest, size); -} - -static inline void MI_CpuCopy32(const void *src, void *dest, u32 size) -{ - MIi_CpuCopy32(src, dest, size); -} - -static inline void MI_CpuFillFast(void *dest, u32 data, u32 size) -{ - MIi_CpuClearFast(data, dest, size); -} - -static inline void MI_CpuCopyFast(const void *src, void *dest, u32 size) -{ - MIi_CpuCopyFast(src, dest, size); -} - -#endif //POKEDIAMOND_ARM9_MI_MEMORY_H diff --git a/arm9/lib/include/MI_swap.h b/arm9/lib/include/MI_swap.h deleted file mode 100644 index 433b5804..00000000 --- a/arm9/lib/include/MI_swap.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef NITRO_MI_SWAP_H_ -#define NITRO_MI_SWAP_H_ - -u32 MI_SwapWord(u32 setData, volatile u32 * destp); - -#endif //NITRO_MI_SWAP_H_ diff --git a/arm9/lib/include/MI_uncompress.h b/arm9/lib/include/MI_uncompress.h deleted file mode 100644 index defafa8c..00000000 --- a/arm9/lib/include/MI_uncompress.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef POKEDIAMOND_MI_UNCOMPRESS_H -#define POKEDIAMOND_MI_UNCOMPRESS_H - -void MIi_UncompressBackward(void * bottom); -void MI_UncompressLZ8(register const void *srcp, register void *destp); - -#endif //POKEDIAMOND_MI_UNCOMPRESS_H diff --git a/arm9/lib/include/MI_wram.h b/arm9/lib/include/MI_wram.h deleted file mode 100644 index fa445a8a..00000000 --- a/arm9/lib/include/MI_wram.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef POKEDIAMOND_MI_WRAM_H -#define POKEDIAMOND_MI_WRAM_H - -typedef enum -{ - MI_WRAM_ARM9_ALL = 0, - MI_WRAM_1616_1 = 1, - MI_WRAM_1616_2 = 2, - MI_WRAM_ARM7_ALL = 3 -} MIWram; - -void MI_SetWramBank(MIWram cnt); - -#endif //POKEDIAMOND_MI_WRAM_H diff --git a/arm9/lib/include/MSL.h b/arm9/lib/include/MSL.h deleted file mode 100644 index a1709bc4..00000000 --- a/arm9/lib/include/MSL.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef MSL_H -#define MSL_H - -//include all msl files here - -#include "MSL_Common_arith.h" - -#endif //MSL_H diff --git a/arm9/lib/include/MSL_Common_arith.h b/arm9/lib/include/MSL_Common_arith.h deleted file mode 100644 index 3ec6bdbc..00000000 --- a/arm9/lib/include/MSL_Common_arith.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef MSL_COMMON_ARITH_H -#define MSL_COMMON_ARITH_H - -#include "nitro/types.h" - -s32 abs(s32 val); - -#endif //MSL_COMMON_ARITH_H diff --git a/arm9/lib/include/NNS_FND_allocator.h b/arm9/lib/include/NNS_FND_allocator.h deleted file mode 100644 index 48df282a..00000000 --- a/arm9/lib/include/NNS_FND_allocator.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef GUARD_NNS_FND_ALLOCATOR_H -#define GUARD_NNS_FND_ALLOCATOR_H - -#include "NNS_FND_heapcommon.h" - -typedef struct NNSFndAllocator NNSFndAllocator; - -typedef void* (*NNSFndFuncAllocatorAlloc)( - NNSFndAllocator* pAllocator, - u32 size); - -typedef void (*NNSFndFuncAllocatorFree)( - NNSFndAllocator* pAllocator, - void* memBlock); - -typedef struct NNSFndAllocatorFunc NNSFndAllocatorFunc; - -struct NNSFndAllocatorFunc -{ - NNSFndFuncAllocatorAlloc pfAlloc; - NNSFndFuncAllocatorFree pfFree; -}; - -struct NNSFndAllocator -{ - NNSFndAllocatorFunc const * pFunc; - void* pHeap; - u32 heapParam1; - u32 heapParam2; -}; - -void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle heap, int alignment); - -#endif //GUARD_NNS_FND_ALLOCATOR_H diff --git a/arm9/lib/include/NNS_FND_expheap.h b/arm9/lib/include/NNS_FND_expheap.h deleted file mode 100644 index c0008f28..00000000 --- a/arm9/lib/include/NNS_FND_expheap.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef GUARD_NNS_FND_EXPHEAP_H -#define GUARD_NNS_FND_EXPHEAP_H - -#include "NNS_FND_heapcommon.h" - -typedef struct NNSiFndExpHeapMBlockHead NNSiFndExpHeapMBlockHead; - -struct NNSiFndExpHeapMBlockHead -{ - u16 signature; // Signature - u16 attribute; // Attribute - // [8:groupID] - // [7:alignment] - // [1:temporary flag] - - u32 blockSize; // Block size (data area only) - - NNSiFndExpHeapMBlockHead* pMBHeadPrev; // Previous block - NNSiFndExpHeapMBlockHead* pMBHeadNext; // Next block -}; - -typedef struct NNSiFndExpMBlockList NNSiFndExpMBlockList; - -struct NNSiFndExpMBlockList -{ - NNSiFndExpHeapMBlockHead* head; // Pointer for memory block linked to header - NNSiFndExpHeapMBlockHead* tail; // Pointer to the memory block linked to the tail of the expanded heap -}; - -typedef struct NNSiFndExpHeapHead NNSiFndExpHeapHead; - -struct NNSiFndExpHeapHead -{ - NNSiFndExpMBlockList mbFreeList; // Free list - NNSiFndExpMBlockList mbUsedList; // Used list - - u16 groupID; // Current group ID (lower 8 bits only) - u16 feature; // Attribute -}; - -NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u32 optFlag); -void *NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle heap, u32 size, int alignment); -void NNS_FndDestroyExpHeap(NNSFndHeapHandle heap); -void NNS_FndFreeToExpHeap(NNSFndHeapHandle heap, void *memBlock); -u32 NNS_FndGetTotalFreeSizeForExpHeap(NNSFndHeapHandle heap); -u32 NNS_FndGetSizeForMBlockExpHeap(const void *memBlock); -void NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size); - -#define NNS_FndCreateExpHeap(startAddress, size) \ - NNS_FndCreateExpHeapEx(startAddress, size, 0) -#define NNS_FndAllocFromExpHeap(heap, size) \ - NNS_FndAllocFromExpHeapEx(heap, size, NNS_FND_HEAP_DEFAULT_ALIGNMENT) - - -#endif //GUARD_NNS_FND_EXPHEAP_H diff --git a/arm9/lib/include/NNS_FND_heapcommon.h b/arm9/lib/include/NNS_FND_heapcommon.h deleted file mode 100644 index eb6f1bdb..00000000 --- a/arm9/lib/include/NNS_FND_heapcommon.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GUARD_NNS_FND_HEAPCOMMON_H -#define GUARD_NNS_FND_HEAPCOMMON_H - -#include "NNS_FND_list.h" - -#define NNS_FND_HEAP_DEFAULT_ALIGNMENT 4 - -typedef struct NNSiFndHeapHead NNSiFndHeapHead; - -struct NNSiFndHeapHead -{ - u32 signature; - - NNSFndLink link; - NNSFndList childList; - - void* heapStart; // Heap start address - void* heapEnd; // Heap end (+1) address - - u32 attribute; // Attribute - // [8:Option flag] -}; - -typedef NNSiFndHeapHead* NNSFndHeapHandle; // Type to represent heap handle - -#endif //GUARD_NNS_FND_HEAPCOMMON_H diff --git a/arm9/lib/include/NNS_FND_list.h b/arm9/lib/include/NNS_FND_list.h deleted file mode 100644 index 5df01e5f..00000000 --- a/arm9/lib/include/NNS_FND_list.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef GUARD_NNS_FND_LIST_H -#define GUARD_NNS_FND_LIST_H - -typedef struct -{ - void* prevObject; // Pointer to the previous linked object. - void* nextObject; // Pointer to the next linked object. - -} NNSFndLink; - -typedef struct -{ - void* headObject; // Pointer for the object linked to the top of the list. - void* tailObject; // Pointer for the object linked to the end of the list. - u16 numObjects; // Number of objects linked in the list. - u16 offset; // Offset for NNSFndLink type structure member. - -} NNSFndList; - -#endif //GUARD_NNS_FND_LIST_H diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h deleted file mode 100644 index 5298d805..00000000 --- a/arm9/lib/include/NNS_SND_arc.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef GUARD_NNS_SND_ARC_H -#define GUARD_NNS_SND_ARC_H - -#include "SND_main.h" -#include "FS_file.h" - -typedef struct NNSSndArcHeader -{ - struct SNDBinaryFileHeader fileHeader; - u32 symbolDataOffset; - u32 symbolDataSize; - u32 infoOffset; - u32 infoSize; - u32 fatOffset; - u32 fatSize; - u32 fileImageOffset; - u32 fileImageSize; -} NNSSndArcHeader; - -typedef struct NNSSndArc -{ - NNSSndArcHeader header; - BOOL file_open; - FSFile file; - FSFileID fileId; - struct NNSSndArcFat* fat; - struct NNSSndArcSymbol* symbol; - struct NNSSndArcInfo* info; -} NNSSndArc; - -void NNS_SndInit(void); -void NNS_SndArcInit(NNSSndArc *, const char *, void *, u32); -void NNS_SndArcPlayerSetup(void *); -void NNS_SndMain(void); -void NNS_SndHandleInit(u32 *); -void NNS_SndPlayerStopSeqByPlayerNo(int playerNo, int fadeFrame); -void NNS_SndHandleReleaseSeq(u32 *); - -#endif //GUARD_NNS_SND_ARC_H diff --git a/arm9/lib/include/NNS_SND_arc_loader.h b/arm9/lib/include/NNS_SND_arc_loader.h deleted file mode 100644 index 851c08ab..00000000 --- a/arm9/lib/include/NNS_SND_arc_loader.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GUARD_NNS_SND_ARC_LOADER_H -#define GUARD_NNS_SND_ARC_LOADER_H - -#include "NNS_SND_heap.h" - -BOOL NNS_SndArcLoadGroup(int groupNo, NNSSndHeapHandle * heap); -BOOL NNS_SndArcLoadSeq(int seqNo, NNSSndHeapHandle * heap); -BOOL NNS_SndArcLoadSeqEx(int seqNo, u32 loadFlag, NNSSndHeapHandle * heap); -BOOL NNS_SndArcLoadWaveArc(int waveArcNo, NNSSndHeapHandle * heap); -BOOL NNS_SndArcLoadBank(int bankNo, NNSSndHeapHandle * heap); - -#endif //GUARD_NNS_SND_ARC_LOADER_H diff --git a/arm9/lib/include/NNS_SND_heap.h b/arm9/lib/include/NNS_SND_heap.h deleted file mode 100644 index 2929d1bb..00000000 --- a/arm9/lib/include/NNS_SND_heap.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_NNS_SND_HEAP_H -#define GUARD_NNS_SND_HEAP_H - -struct NNSSndHeap; -typedef struct NNSSndHeap* NNSSndHeapHandle; - -NNSSndHeapHandle * NNS_SndHeapCreate(void * start, u32 size); -int NNS_SndHeapSaveState(NNSSndHeapHandle * heap); -void NNS_SndHeapLoadState(NNSSndHeapHandle * heap, int level); - -#endif //GUARD_NNS_SND_HEAP_H diff --git a/arm9/lib/include/NNS_g2d.h b/arm9/lib/include/NNS_g2d.h deleted file mode 100644 index 483f254a..00000000 --- a/arm9/lib/include/NNS_g2d.h +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef NNSYS_NNS_G2D_H -#define NNSYS_NNS_G2D_H - -#include "gx.h" - -typedef struct NNSG2dCharacterData -{ - u16 H; - u16 W; - GXTexFmt pixelFmt; - GXOBJVRamModeChar mapingType; - u32 characterFmt; - u32 szByte; - void * pRawData; -} NNSG2dCharacterData; - -typedef struct NNSG2dScreenData -{ - u16 screenWidth; - u16 screenHeight; - u16 colorMode; - u16 screenFormat; - u32 szByte; - u32 rawData[1]; -} NNSG2dScreenData; - -typedef struct NNSG2dPaletteData -{ - GXTexFmt fmt; - BOOL bExtendedPlt; - u32 szByte; - void * pRawData; - -} NNSG2dPaletteData; - -typedef enum NNS_G2D_VRAM_TYPE -{ - NNS_G2D_VRAM_TYPE_3DMAIN = 0, - NNS_G2D_VRAM_TYPE_2DMAIN = 1, - NNS_G2D_VRAM_TYPE_2DSUB = 2, - NNS_G2D_VRAM_TYPE_MAX = 3 -} NNS_G2D_VRAM_TYPE; - -typedef enum NNSG2dCharacterDataMapingType -{ - NNS_G2D_CHARACTERMAPING_1D_32, - NNS_G2D_CHARACTERMAPING_1D_64, - NNS_G2D_CHARACTERMAPING_1D_128, - NNS_G2D_CHARACTERMAPING_1D_256, - NNS_G2D_CHARACTERMAPING_2D, - NNS_G2D_CHARACTERMAPING_MAX - -} NNSG2dCharacterDataMapingType; - -typedef struct NNSG2dImageAttr -{ - GXTexSizeS sizeS; - GXTexSizeT sizeT; - GXTexFmt fmt; - BOOL bExtendedPlt; - GXTexPlttColor0 plttUse; - GXOBJVRamModeChar mappingType; -} NNSG2dImageAttr; - -typedef struct NNSG2dVRamLocation -{ - u32 baseAddrOfVram[ NNS_G2D_VRAM_TYPE_MAX ]; -} NNSG2dVRamLocation; - -typedef struct NNSG2dImageProxy -{ - NNSG2dVRamLocation vramLocation; - NNSG2dImageAttr attr; -} NNSG2dImageProxy; - -typedef struct NNSG2dPaletteCompressInfo -{ - u16 numPalette; - u16 pad16; - void * pPlttIdxTbl; - -} NNSG2dPaletteCompressInfo; - -void NNS_G2dLoadImage1DMapping -( - const NNSG2dCharacterData * pSrcData, - u32 baseAddr, - NNS_G2D_VRAM_TYPE type, - NNSG2dImageProxy * pImgProxy -); - -void NNS_G2dLoadImage2DMapping -( - const NNSG2dCharacterData * pSrcData, - u32 baseAddr, - NNS_G2D_VRAM_TYPE type, - NNSG2dImageProxy * pImgProxy -); - -typedef struct NNSG2dImagePaletteProxy -{ - GXTexFmt fmt; - BOOL bExtendedPlt; - NNSG2dVRamLocation vramLocation; -} NNSG2dImagePaletteProxy; - -void NNS_G2dLoadPalette -( - const NNSG2dPaletteData * pSrcData, - u32 addr, - NNS_G2D_VRAM_TYPE type, - NNSG2dImagePaletteProxy * pPltProxy -); - -void NNS_G2dLoadPaletteEx -( - const NNSG2dPaletteData * pSrcData, - const NNSG2dPaletteCompressInfo * pCmpInfo, - u32 addr, - NNS_G2D_VRAM_TYPE type, - NNSG2dImagePaletteProxy * pPltProxy -); - -typedef struct NNSG2dCellVramTransferData -{ - u32 srcDataOffset; - u32 szByte; -} NNSG2dCellVramTransferData; - -typedef struct NNSG2dVramTransferData -{ - u32 szByteMax; - NNSG2dCellVramTransferData * pCellTransferDataArray; -} NNSG2dVramTransferData; - -typedef struct NNSG2dCellOAMAttrData -{ - u16 attr0; - u16 attr1; - u16 attr2; -} NNSG2dCellOAMAttrData; - -typedef struct NNSG2dCellData -{ - u16 numOAMAttrs; - u16 cellAttr; - NNSG2dCellOAMAttrData * pOamAttrArray; - -} NNSG2dCellData; - -typedef struct NNSG2dCellDataBank -{ - u16 numCells; - u16 cellBankAttr; - NNSG2dCellData * pCellDataArrayHead; - NNSG2dCharacterDataMapingType mappingMode; - NNSG2dVramTransferData * pVramTransferData; - void * pStringBank; - void * pExtendedData; - -} NNSG2dCellDataBank; - -typedef enum NNSG2dAnimationPlayMode -{ - NNS_G2D_ANIMATIONPLAYMODE_INVALID = 0x0, - NNS_G2D_ANIMATIONPLAYMODE_FORWARD, - NNS_G2D_ANIMATIONPLAYMODE_FORWARD_LOOP, - NNS_G2D_ANIMATIONPLAYMODE_REVERSE, - NNS_G2D_ANIMATIONPLAYMODE_REVERSE_LOOP, - NNS_G2D_ANIMATIONPLAYMODE_MAX -} NNSG2dAnimationPlayMode; - -typedef struct NNSG2dAnimFrameData -{ - void * pContent; - u16 frames; - u16 pad16; -} NNSG2dAnimFrameData; - -typedef struct NNSG2dAnimSequenceData -{ - u16 numFrames; - u16 loopStartFrameIdx; - u32 animType; - NNSG2dAnimationPlayMode playMode; - NNSG2dAnimFrameData * pAnmFrameArray; - -} NNSG2dAnimSequenceData; - -typedef struct NNSG2dAnimBankData -{ - - u16 numSequences; - u16 numTotalFrames; - NNSG2dAnimSequenceData * pSequenceArrayHead; - NNSG2dAnimFrameData * pFrameArrayHead; - void * pAnimContents; - void * pStringBank; - void * pExtendedData; - -} NNSG2dAnimBankData; - -BOOL NNS_G2dGetUnpackedBGCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); -BOOL NNS_G2dGetUnpackedCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); -BOOL NNS_G2dGetUnpackedScreenData(void * pNscrFile, NNSG2dScreenData ** ppScrData); -BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData); -BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData); -BOOL NNS_G2dGetUnpackedPaletteCompressInfo(void * pNclrFile, NNSG2dPaletteCompressInfo ** ppPltCmpInfo); -BOOL NNS_G2dGetUnpackedCellBank(void * pNcerFile, NNSG2dCellDataBank ** ppCellBank); -BOOL NNS_G2dGetUnpackedAnimBank(void * pNanrFile, NNSG2dAnimBankData ** ppAnimBank); - -#endif //NNSYS_NNS_G2D_H diff --git a/arm9/lib/include/OS_alarm.h b/arm9/lib/include/OS_alarm.h deleted file mode 100644 index 00a3c3d3..00000000 --- a/arm9/lib/include/OS_alarm.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_ALARM_H -#define POKEDIAMOND_ARM9_OS_ALARM_H - -#include "nitro/types.h" -#include "OS_thread.h" -#include "OS_tick.h" -#include "nitro/OS_alarm_shared.h" - -struct OSiAlarmQueue -{ - OSAlarm *head; - OSAlarm *tail; -}; - -void OS_InitAlarm(void); -BOOL OS_IsAlarmAvailable(void); -void OS_CreateAlarm(OSAlarm *alarm); -void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg); -void OS_CancelAlarm(OSAlarm *alarm); -void OSi_AlarmHandler(void *arg); - -#endif //POKEDIAMOND_ARM9_OS_ALARM_H diff --git a/arm9/lib/include/OS_alloc.h b/arm9/lib/include/OS_alloc.h deleted file mode 100644 index e73c2971..00000000 --- a/arm9/lib/include/OS_alloc.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_ALLOC_H -#define POKEDIAMOND_ARM9_OS_ALLOC_H - -#include "nitro/types.h" -#include "OS_arena.h" -#include "nitro/OS_alloc_shared.h" - -Cell* DLAddFront(Cell* list, Cell* cell); -Cell* DLExtract(Cell* list, Cell* cell); -Cell *DLInsert(Cell *original, Cell *inserted); -void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size); -void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void *ptr); - -#endif //POKEDIAMOND_ARM9_OS_ALLOC_H diff --git a/arm9/lib/include/OS_arena.h b/arm9/lib/include/OS_arena.h deleted file mode 100644 index a26cf3bd..00000000 --- a/arm9/lib/include/OS_arena.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_ARENA_H -#define POKEDIAMOND_ARM9_OS_ARENA_H - -#include "nitro/types.h" -#include "nitro/OS_arena_shared.h" - -void OS_InitArena(void); -void OS_InitArenaEx(void); -void* OS_GetArenaHi(OSArenaId id); -void* OS_GetArenaLo(OSArenaId id); -void* OS_GetInitArenaHi(OSArenaId id); -void* OS_GetInitArenaLo(OSArenaId id); -void OS_SetArenaHi(OSArenaId id, void *newHi); -void OS_SetArenaLo(OSArenaId id, void *newLo); -void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align); -void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align); - -#endif //POKEDIAMOND_ARM9_OS_ARENA_H diff --git a/arm9/lib/include/OS_cache.h b/arm9/lib/include/OS_cache.h deleted file mode 100644 index 425eab3f..00000000 --- a/arm9/lib/include/OS_cache.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef POKEDIAMOND_OS_CACHE_H -#define POKEDIAMOND_OS_CACHE_H - -#include "nitro/types.h" - -void DC_InvalidateAll(void); -void DC_StoreAll(void); -void DC_FlushAll(void); -void DC_InvalidateRange(register void *startAddr, register u32 nBytes); -void DC_StoreRange(register void *startAddr, register u32 nBytes); -void DC_FlushRange(register const void *startAddr, register u32 nBytes); -void DC_WaitWriteBufferEmpty(void); -void IC_InvalidateAll(void); -void IC_InvalidateRange(register void *startAddr, register u32 nBytes); - -#endif //POKEDIAMOND_OS_CACHE_H diff --git a/arm9/lib/include/OS_context.h b/arm9/lib/include/OS_context.h deleted file mode 100644 index d3e24673..00000000 --- a/arm9/lib/include/OS_context.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_CONTEXT_H -#define POKEDIAMOND_ARM9_OS_CONTEXT_H - -#include "nitro/types.h" -#include "CP_context.h" - -typedef struct OSContext -{ - u32 cpsr; - u32 r[13]; - u32 sp; - u32 lr; - u32 pc_plus4; - u32 sp_svc; - CPContext cp_context; -} OSContext; - -void OS_InitContext(register OSContext *context, register u32 newpc, register u32 newsp); -BOOL OS_SaveContext(register OSContext *context); -void OS_LoadContext(register OSContext *context); - -#endif //POKEDIAMOND_ARM9_OS_CONTEXT_H diff --git a/arm9/lib/include/OS_emulator.h b/arm9/lib/include/OS_emulator.h deleted file mode 100644 index 30acec16..00000000 --- a/arm9/lib/include/OS_emulator.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by red031000 on 2020-05-05. -// - -#ifndef POKEDIAMOND_OS_EMULATOR_H -#define POKEDIAMOND_OS_EMULATOR_H - -#include "consts.h" - -BOOL OS_IsRunOnEmulator(void); -u32 OS_GetConsoleType(void); - -#endif //POKEDIAMOND_OS_EMULATOR_H diff --git a/arm9/lib/include/OS_entropy.h b/arm9/lib/include/OS_entropy.h deleted file mode 100644 index 7c39aadd..00000000 --- a/arm9/lib/include/OS_entropy.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// Created by red031000 on 2020-05-03. -// - -#ifndef POKEDIAMOND_OS_ENTROPY_H -#define POKEDIAMOND_OS_ENTROPY_H - -#include "registers.h" - -void OS_GetLowEntropyData(u32 * arr); - -extern vu64 OSi_TickCounter; - -extern u16 OS_GetTickLo(void); - -static inline s32 GX_GetVCount(void) -{ - return reg_GX_VCOUNT; -} - -#endif //POKEDIAMOND_OS_ENTROPY_H diff --git a/arm9/lib/include/OS_exception.h b/arm9/lib/include/OS_exception.h deleted file mode 100644 index 26fc3525..00000000 --- a/arm9/lib/include/OS_exception.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef POKEDIAMOND_OS_EXCEPTION_H -#define POKEDIAMOND_OS_EXCEPTION_H - -#include "consts.h" -#include "OS_context.h" - -typedef struct -{ - OSContext context; - u32 cp15; - u32 spsr; - u32 exinfo; - u32 debug[4]; -} OSiExContext; - -typedef void (*OSExceptionHandler) (u32, void *); - -void OS_InitException(void); -void OSi_ExceptionHandler(void); - -#endif //POKEDIAMOND_OS_EXCEPTION_H diff --git a/arm9/lib/include/OS_init.h b/arm9/lib/include/OS_init.h deleted file mode 100644 index f0b80220..00000000 --- a/arm9/lib/include/OS_init.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_INIT_H -#define POKEDIAMOND_ARM9_OS_INIT_H - -#include "nitro/types.h" -#include "consts.h" -#include "OS_tcm.h" -#include "OS_spinLock.h" -#include "OS_context.h" -#include "OS_timer.h" -#include "OS_tick.h" -#include "OS_alarm.h" -#include "OS_mutex.h" -#include "OS_thread.h" -#include "OS_protectionRegion.h" -#include "OS_protectionUnit.h" -#include "OS_entropy.h" -#include "OS_emulator.h" -#include "OS_arena.h" -#include "OS_alloc.h" -#include "OS_system.h" -#include "OS_terminate_proc.h" -#include "OS_irqHandler.h" -#include "OS_irqTable.h" -#include "OS_interrupt.h" -#include "OS_reset.h" -#include "OS_exception.h" -#include "OS_message.h" -#include "OS_valarm.h" -#include "OS_vramExclusive.h" - -void OS_Init(void); - -#endif //POKEDIAMOND_ARM9_OS_INIT_H diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h deleted file mode 100644 index 19dd0da2..00000000 --- a/arm9/lib/include/OS_interrupt.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_INTERRUPT_H -#define POKEDIAMOND_ARM9_OS_INTERRUPT_H - -#include "registers.h" -#include "nitro/OS_interrupt_shared.h" - -#define REG_OS_IME_IME_SHIFT 0 - -#define OS_IME_DISABLE (0UL << REG_OS_IME_IME_SHIFT) -#define OS_IME_ENABLE (1UL << REG_OS_IME_IME_SHIFT) - -#define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT) -#define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT) -#define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT) -#define OS_IE_TIMER2 (1UL << REG_OS_IE_T2_SHIFT) -#define OS_IE_TIMER3 (1UL << REG_OS_IE_T3_SHIFT) -#define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT) -#define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT) - -extern OSIrqFunction OS_IRQTable[]; -extern OSIrqCallbackInfo OSi_IrqCallbackInfo[8]; - -void OS_InitIrqTable(void); -void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function); -OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit); -void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg); -void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg); -OSIrqMask OS_SetIrqMask(OSIrqMask mask); -OSIrqMask OS_EnableIrqMask(OSIrqMask mask); -OSIrqMask OS_DisableIrqMask(OSIrqMask mask); -OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); -void OS_SetIrqStackChecker(void); - -static inline BOOL OS_DisableIrq(void) -{ - u16 prep = reg_OS_IME; - reg_OS_IME = OS_IME_DISABLE; - return (BOOL)prep; -} - -static inline BOOL OS_EnableIrq(void) -{ - u16 prep = reg_OS_IME; - reg_OS_IME = OS_IME_ENABLE; - return (BOOL)prep; -} - -static inline BOOL OS_RestoreIrq(BOOL enable) -{ - u16 prep = reg_OS_IME; - reg_OS_IME = (u16)enable; - return (BOOL)prep; -} - -static inline OSIrqMask OS_GetIrqMask(void) -{ - return reg_OS_IE; -} - -#endif //POKEDIAMOND_ARM9_OS_INTERRUPT_H diff --git a/arm9/lib/include/OS_irqHandler.h b/arm9/lib/include/OS_irqHandler.h deleted file mode 100644 index e845298b..00000000 --- a/arm9/lib/include/OS_irqHandler.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef POKEDIAMOND_OS_IRQHANDLER_H -#define POKEDIAMOND_OS_IRQHANDLER_H - -#include "OS_interrupt.h" -#include "mmap.h" - -static inline void OS_ClearIrqCheckFlag(OSIrqMask intr) -{ - *(vu32 *)HW_INTR_CHECK_BUF &= (u32)~intr; -} - -static inline OSIrqMask OS_GetIrqCheckFlag(void) -{ - return *(OSIrqMask *)HW_INTR_CHECK_BUF; -} - -void OS_IrqHandler(void); -void OS_IrqHandler_ThreadSwitch(void); -void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags); - -#endif //POKEDIAMOND_OS_IRQHANDLER_H diff --git a/arm9/lib/include/OS_irqTable.h b/arm9/lib/include/OS_irqTable.h deleted file mode 100644 index ba8b45a8..00000000 --- a/arm9/lib/include/OS_irqTable.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_IRQTABLE_H -#define POKEDIAMOND_ARM9_OS_IRQTABLE_H - -#include "mmap.h" -#include "OS_interrupt.h" - -void OS_IrqDummy(void); -void OSi_IrqCallback(s32 index); -void OSi_IrqDma0(void); -void OSi_IrqDma1(void); -void OSi_IrqDma2(void); -void OSi_IrqDma3(void); -void OSi_IrqTimer0(void); -void OSi_IrqTimer1(void); -void OSi_IrqTimer2(void); -void OSi_IrqTimer3(void); - -static inline void OS_SetIrqCheckFlag(OSIrqMask intr) -{ - *(vu32 *)HW_INTR_CHECK_BUF |= (u32)intr; -} - -#endif //POKEDIAMOND_ARM9_OS_IRQTABLE_H diff --git a/arm9/lib/include/OS_message.h b/arm9/lib/include/OS_message.h deleted file mode 100644 index b9c570db..00000000 --- a/arm9/lib/include/OS_message.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_MESSAGE_H -#define POKEDIAMOND_ARM9_OS_MESSAGE_H - -#include "OS_thread.h" -#include "OS_context.h" -#include "nitro/types.h" -#include "nitro/OS_message_shared.h" - -void OS_InitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount); -BOOL OS_SendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); -BOOL OS_ReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); -BOOL OS_JamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); -BOOL OS_ReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); - -#endif //POKEDIAMOND_ARM9_OS_MESSAGE_H diff --git a/arm9/lib/include/OS_mutex.h b/arm9/lib/include/OS_mutex.h deleted file mode 100644 index 23e4337e..00000000 --- a/arm9/lib/include/OS_mutex.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_MUTEX_H -#define POKEDIAMOND_ARM9_OS_MUTEX_H - -#include "OS_thread.h" -#include "OS_context.h" -#include "nitro/OS_mutex_shared.h" -#include "nitro/types.h" - -void OS_InitMutex(OSMutex *mutex); -void OS_LockMutex(OSMutex *mutex); -void OS_UnlockMutex(OSMutex *mutex); -void OSi_UnlockAllMutex(OSThread * thread); -BOOL OS_TryLockMutex(OSMutex *mutex); -void OSi_EnqueueTail(OSThread *thread, OSMutex *mutex); -void OSi_DequeueItem(OSThread *thread, OSMutex *mutex); - -#endif //POKEDIAMOND_ARM9_OS_MUTEX_H diff --git a/arm9/lib/include/OS_ownerInfo.h b/arm9/lib/include/OS_ownerInfo.h deleted file mode 100644 index 13bae06e..00000000 --- a/arm9/lib/include/OS_ownerInfo.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef POKEDIAMOND_OS_OWNERINFO_H -#define POKEDIAMOND_OS_OWNERINFO_H - -#include "consts.h" -#include "userInfo.h" - -typedef struct OSBirthday -{ - u8 month; - u8 day; -} OSBirthday; - -typedef struct OSOwnerInfo -{ - u8 language; - u8 favoriteColour; - OSBirthday birthday; - u16 nickName[10]; //either 10 or 8 - u16 nickNameLength; - u16 comment[26]; - u16 commentLength; -} OSOwnerInfo; - -void OS_GetMacAddress(u8 *macAddress); -void OS_GetOwnerInfo(OSOwnerInfo* info); -s64 OS_GetOwnerRtcOffset(void); - -#endif //POKEDIAMOND_OS_OWNERINFO_H diff --git a/arm9/lib/include/OS_printf.h b/arm9/lib/include/OS_printf.h deleted file mode 100644 index acb7f8c7..00000000 --- a/arm9/lib/include/OS_printf.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef NITRO_OS_PRINTF_H_ -#define NITRO_OS_PRINTF_H_ - -#define OS_Warning( ... ) ((void)0) -#define OS_TPanic(...) OS_Terminate() -#define OS_TWarning(...) ((void)0) - -#include "nitro/types.h" - -s32 OS_SPrintf(s8 *buffer, const s8 *format, ...); -s32 OS_VSPrintf(s8 *buffer, const s8 *format, void *args); -s32 OS_SNPrintf(s8 *buffer, s32 bufsz, const s8 *format, ...); -s32 OS_VSNPrintf(s8 *buffer, s32 bufsz, const s8 *format, void *args); - -#endif //NITRO_OS_PRINTF_H_ diff --git a/arm9/lib/include/OS_protectionRegion.h b/arm9/lib/include/OS_protectionRegion.h deleted file mode 100644 index 00b7ae63..00000000 --- a/arm9/lib/include/OS_protectionRegion.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef POKEDIAMOND_OS_PROTECTIONREGION_H -#define POKEDIAMOND_OS_PROTECTIONREGION_H - -#include "nitro/types.h" -#include "consts.h" - -void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags); -void OS_SetProtectionRegion1(u32 param); -void OS_SetProtectionRegion2(u32 param); - -typedef enum -{ - OSi_PR_BASE_MASK_4KB = 0xfffff000, - OSi_PR_BASE_MASK_8KB = 0xffffe000, - OSi_PR_BASE_MASK_16KB = 0xffffc000, - OSi_PR_BASE_MASK_32KB = 0xffff8000, - OSi_PR_BASE_MASK_64KB = 0xffff0000, - OSi_PR_BASE_MASK_128KB = 0xfffe0000, - OSi_PR_BASE_MASK_256KB = 0xfffc0000, - OSi_PR_BASE_MASK_512KB = 0xfff80000, - OSi_PR_BASE_MASK_1MB = 0xfff00000, - OSi_PR_BASE_MASK_2MB = 0xffe00000, - OSi_PR_BASE_MASK_4MB = 0xffc00000, - OSi_PR_BASE_MASK_8MB = 0xff800000, - OSi_PR_BASE_MASK_16MB = 0xff000000, - OSi_PR_BASE_MASK_32MB = 0xfe000000, - OSi_PR_BASE_MASK_64MB = 0xfc000000, - OSi_PR_BASE_MASK_128MB = 0xf8000000, - OSi_PR_BASE_MASK_256MB = 0xf0000000, - OSi_PR_BASE_MASK_512MB = 0xe0000000, - OSi_PR_BASE_MASK_1GB = 0xc0000000, - OSi_PR_BASE_MASK_2GB = 0x80000000, - OSi_PR_BASE_MASK_4GB = 0x00000000 -} OSiProtectionRegionBaseMask; - -static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBaseMask mask) { - return ((address & mask) | size); -} - -#define OS_SetProtectionRegion(regionNo, address, sizeStr) \ - OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \ - | 1) - -#define OS_PR3_ACCESS_MASK (HW_C5_PERMIT_MASK << HW_C5_PR3_SFT) -#define OS_PR3_ACCESS_RW (HW_C5_PERMIT_RW << HW_C5_PR3_SFT) -#define OS_PR3_ACCESS_RO (HW_C5_PERMIT_RO << HW_C5_PR3_SFT) - -#endif //POKEDIAMOND_OS_PROTECTIONREGION_H diff --git a/arm9/lib/include/OS_protectionUnit.h b/arm9/lib/include/OS_protectionUnit.h deleted file mode 100644 index e7dc32d8..00000000 --- a/arm9/lib/include/OS_protectionUnit.h +++ /dev/null @@ -1,11 +0,0 @@ -// -// Created by red031000 on 2020-05-24. -// - -#ifndef POKEDIAMOND_OS_PROTECTIONUNIT_H -#define POKEDIAMOND_OS_PROTECTIONUNIT_H - -void OS_EnableProtectionUnit(void); -void OS_DisableProtectionUnit(void); - -#endif //POKEDIAMOND_OS_PROTECTIONUNIT_H diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h deleted file mode 100644 index 756de9fb..00000000 --- a/arm9/lib/include/OS_reset.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_RESET_H -#define POKEDIAMOND_ARM9_OS_RESET_H - -#include "nitro/OS_reset_shared.h" -#include "mmap.h" - -void OS_InitReset(void); -void OS_ResetSystem(u32 parameter); -void OSi_DoBoot(void); - -static inline u32 OS_GetResetParameter(void) -{ - return (u32)*(u32 *)HW_RESET_PARAMETER_BUF; -} - -#endif //POKEDIAMOND_ARM9_OS_RESET_H diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h deleted file mode 100644 index 09c2cf2c..00000000 --- a/arm9/lib/include/OS_spinLock.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_SPINLOCK_H -#define POKEDIAMOND_ARM9_OS_SPINLOCK_H - -#include "nitro/types.h" -#include "nitro/OS_spinLock_shared.h" -#include "syscall.h" - -#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord( (OSLockWord *)HW_CTRDG_LOCK_BUF ) -#define OS_MAINP_LOCKED_FLAG 0x40 -#define OS_LOCK_SUCCESS 0 - -#define OS_LOCK_ID_ERROR (-3) - -static inline void OSi_WaitByLoop(void) -{ - SVC_WaitByLoop(0x1000 / 4); -} - -void OS_InitLock(void); -s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFiq); -s32 OS_TryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)); -s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFIQ); -s32 OS_UnlockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)); -s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFiq); -s32 OS_LockCartridge(u16 lockID); -s32 OS_UnlockCartridge(u16 lockID); -s32 OS_TryLockCartridge(u16 lockID); -void OSi_AllocateCartridgeBus(void); -void OSi_FreeCartridgeBus(void); -s32 OS_TryLockCard(u16 lockID); -s32 OS_UnlockCard(u16 lockID); -void OSi_AllocateCardBus(void); -void OSi_FreeCardBus(void); -u16 OS_ReadOwnerOfLockWord(OSLockWord * lock); -s32 OS_UnLockCartridge(u16 lockID); -s32 OS_GetLockID(void); -void OS_ReleaseLockID(register u16 lockID); - -#endif //POKEDIAMOND_ARM9_OS_SPINLOCK_H diff --git a/arm9/lib/include/OS_system.h b/arm9/lib/include/OS_system.h deleted file mode 100644 index 37dbbd76..00000000 --- a/arm9/lib/include/OS_system.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_SYSTEM_H -#define POKEDIAMOND_ARM9_OS_SYSTEM_H - -#include "function_target.h" -#include "consts.h" -#include "nitro/OS_system_shared.h" - -OSIntrMode OS_EnableInterrupts(void); -OSIntrMode OS_DisableInterrupts(void); -OSIntrMode OS_RestoreInterrupts(OSIntrMode state); -OSIntrMode OS_DisableInterrupts_IrqAndFiq(void); -OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state); -OSIntrMode OS_GetCpsrIrq(void); -OSProcMode OS_GetProcMode(void); -void OS_SpinWait(u32 cycles); -void OS_WaitVBlankIntr(void); - -#endif //POKEDIAMOND_ARM9_OS_SYSTEM_H diff --git a/arm9/lib/include/OS_tcm.h b/arm9/lib/include/OS_tcm.h deleted file mode 100644 index 66f8ec59..00000000 --- a/arm9/lib/include/OS_tcm.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// Created by red031000 on 2020-05-05. -// - -#ifndef POKEDIAMOND_OS_TCM_H -#define POKEDIAMOND_OS_TCM_H - -#include "consts.h" - -u32 OS_GetDTCMAddress(void); - -#endif //POKEDIAMOND_OS_TCM_H diff --git a/arm9/lib/include/OS_terminate_proc.h b/arm9/lib/include/OS_terminate_proc.h deleted file mode 100644 index b4553fb4..00000000 --- a/arm9/lib/include/OS_terminate_proc.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H -#define POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H - -#include "nitro/types.h" - -void OS_Terminate(void); -void OS_Halt(void); - -#endif //POKEDIAMOND_ARM9_OS_TERMINATE_PROC_H diff --git a/arm9/lib/include/OS_thread.h b/arm9/lib/include/OS_thread.h deleted file mode 100644 index e330e219..00000000 --- a/arm9/lib/include/OS_thread.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_THREAD_H -#define POKEDIAMOND_ARM9_OS_THREAD_H - -#include "nitro/types.h" -#include "OS_context.h" -#include "nitro/OS_thread_shared.h" - -OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue); -void OS_InitThread(void); -BOOL OS_IsThreadAvailable(void); -void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio); -void OS_ExitThread(void); -void OS_DestroyThread(OSThread *thread); -void OS_JoinThread(OSThread *thread); -BOOL OS_IsThreadTerminated(const OSThread *thread); -void OS_SleepThread(OSThreadQueue *queue); -void OS_WakeupThread(OSThreadQueue *queue); -void OS_WakeupThreadDirect(OSThread *thread); -OSThread *OS_SelectThread(void); -void OS_RescheduleThread(void); -void OS_YieldThread(void); -BOOL OS_SetThreadPriority(OSThread *thread, u32 prio); -u32 OS_GetThreadPriority(const OSThread *thread); -void OS_Sleep(u32 msec); -OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback); -u32 OS_DisableScheduler(void); -u32 OS_EnableScheduler(void); -void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor); - -#endif //POKEDIAMOND_ARM9_OS_THREAD_H diff --git a/arm9/lib/include/OS_tick.h b/arm9/lib/include/OS_tick.h deleted file mode 100644 index e0b6ea39..00000000 --- a/arm9/lib/include/OS_tick.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_TICK_H -#define POKEDIAMOND_ARM9_OS_TICK_H - -#include "consts.h" -#include "OS_timer.h" -#include "nitro/OS_tick_shared.h" - -#define OSi_TICK_TIMERCONTROL (REG_OS_TM0CNT_H_E_MASK | REG_OS_TM0CNT_H_I_MASK | OS_TIMER_PRESCALER_64) - -void OS_InitTick(void); -BOOL OS_IsTickAvailable(void); -OSTick OS_GetTick(void); -u16 OS_GetTickLo(void); - -#endif //POKEDIAMOND_ARM9_OS_TICK_H diff --git a/arm9/lib/include/OS_timer.h b/arm9/lib/include/OS_timer.h deleted file mode 100644 index 4a10041b..00000000 --- a/arm9/lib/include/OS_timer.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_OS_TIMER_H -#define POKEDIAMOND_ARM9_OS_TIMER_H - -#include "nitro/OS_timer_shared.h" -#include "nitro/types.h" - -void OSi_SetTimerReserved(s32 timerNum); - -#endif //POKEDIAMOND_ARM9_OS_TIMER_H diff --git a/arm9/lib/include/OS_valarm.h b/arm9/lib/include/OS_valarm.h deleted file mode 100644 index b4850f9d..00000000 --- a/arm9/lib/include/OS_valarm.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef POKEDIAMOND_OS_VALARM_H -#define POKEDIAMOND_OS_VALARM_H - -#include "nitro/types.h" -#include "OS_alarm.h" - -typedef struct OSiVAlarm OSVAlarm; -struct OSiVAlarm -{ - OSAlarmHandler handler; - void *arg; - u32 tag; - u32 frame; - s16 fire; - s16 delay; - OSVAlarm *prev; - OSVAlarm *next; - BOOL period; - BOOL finish; - BOOL canceled; -}; - -void OS_InitVAlarm(void); - -#endif //POKEDIAMOND_OS_VALARM_H diff --git a/arm9/lib/include/OS_vramExclusive.h b/arm9/lib/include/OS_vramExclusive.h deleted file mode 100644 index d7c3ef92..00000000 --- a/arm9/lib/include/OS_vramExclusive.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef POKEDIAMOND_OS_VRAMEXCLUSIVE_H -#define POKEDIAMOND_OS_VRAMEXCLUSIVE_H - -#include "nitro/types.h" - -void OSi_InitVramExclusive(void); -BOOL OSi_TryLockVram(u16 bank, u16 lockId); -void OSi_UnlockVram(u16 bank, u16 lockId); - -#endif //POKEDIAMOND_OS_VRAMEXCLUSIVE_H diff --git a/arm9/lib/include/PAD_pad.h b/arm9/lib/include/PAD_pad.h deleted file mode 100644 index f3de4198..00000000 --- a/arm9/lib/include/PAD_pad.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef NITRO_PAD_PAD_H_ -#define NITRO_PAD_PAD_H_ - -#include "registers.h" - -//================================================================================ -// BUTTONS - -//---- masked value -#define PAD_PLUS_KEY_MASK 0x00f0 // mask : cross keys -#define PAD_BUTTON_MASK 0x2f0f // mask : buttons -#define PAD_DEBUG_BUTTON_MASK 0x2000 // mask : debug button -#define PAD_ALL_MASK 0x2fff // mask : all buttons -#define PAD_RCNTPORT_MASK 0x2c00 // mask : factors ARM7 can read from RCNT register -#define PAD_KEYPORT_MASK 0x03ff // mask : factors ARM7/9 can read from KEY register - -#define PAD_DETECT_FOLD_MASK 0x8000 // mask : folding - -//---- button and key -#define PAD_BUTTON_A 0x0001 // A -#define PAD_BUTTON_B 0x0002 // B -#define PAD_BUTTON_SELECT 0x0004 // SELECT -#define PAD_BUTTON_START 0x0008 // START -#define PAD_KEY_RIGHT 0x0010 // RIGHT of cross key -#define PAD_KEY_LEFT 0x0020 // LEFT of cross key -#define PAD_KEY_UP 0x0040 // UP of cross key -#define PAD_KEY_DOWN 0x0080 // DOWN of cross key -#define PAD_BUTTON_R 0x0100 // R -#define PAD_BUTTON_L 0x0200 // L -#define PAD_BUTTON_X 0x0400 // X -#define PAD_BUTTON_Y 0x0800 // Y -#define PAD_BUTTON_DEBUG 0x2000 // Debug button - -static inline u16 PAD_Read(void) -{ - return (u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ - (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)) & (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)); -} - -static inline BOOL PAD_DetectFold(void) -{ - return (BOOL)((*(vu16 *)HW_BUTTON_XY_BUF & PAD_DETECT_FOLD_MASK) >> 15); -} - -#endif //NITRO_PAD_PAD_H_ diff --git a/arm9/lib/include/PXI_fifo.h b/arm9/lib/include/PXI_fifo.h deleted file mode 100644 index b1ca33f3..00000000 --- a/arm9/lib/include/PXI_fifo.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_PXI_FIFO_H -#define POKEDIAMOND_ARM9_PXI_FIFO_H - -#include "nitro/PXI_fifo_shared.h" -#include "nitro/types.h" - -typedef enum -{ - PXI_FIFO_SUCCESS = 0, - PXI_FIFO_FAIL_SEND_ERR = -1, - PXI_FIFO_FAIL_SEND_FULL = -2, - PXI_FIFO_FAIL_RECV_ERR = -3, - PXI_FIFO_FAIL_RECV_EMPTY = -4, - PXI_FIFO_NO_CALLBACK_ENTRY = -5 -} PXIFifoStatus; - -typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err); - -typedef union -{ - struct - { - u32 tag:5; - u32 err:1; - u32 data:26; - } e; - u32 raw; -} PXIFifoMessage; - -void PXI_InitFifo(void); -void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback); -BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc); -s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err); -void PXIi_HandlerRecvFifoNotEmpty(void); - -#endif //POKEDIAMOND_ARM9_PXI_FIFO_H diff --git a/arm9/lib/include/PXI_init.h b/arm9/lib/include/PXI_init.h deleted file mode 100644 index 5c330c9c..00000000 --- a/arm9/lib/include/PXI_init.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEDIAMOND_PXI_INIT_H -#define POKEDIAMOND_PXI_INIT_H - -void PXI_Init(void); - -#endif //POKEDIAMOND_PXI_INIT_H diff --git a/arm9/lib/include/RTC_api.h b/arm9/lib/include/RTC_api.h deleted file mode 100644 index 09efde7e..00000000 --- a/arm9/lib/include/RTC_api.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef NITRO_RTC_API_H_ -#define NITRO_RTC_API_H_ - -typedef enum RTCAlarmChan -{ - RTC_ALARM_CHAN_1 = 0, - RTC_ALARM_CHAN_2, - RTC_ALARM_CHAN_MAX -} -RTCAlarmChan; - -// Alarm status definitions -typedef enum RTCAlarmStatus -{ - RTC_ALARM_STATUS_OFF = 0, - RTC_ALARM_STATUS_ON, - RTC_ALARM_STATUS_MAX -} -RTCAlarmStatus; - -#define RTC_ALARM_ENABLE_NONE 0x0000 -#define RTC_ALARM_ENABLE_WEEK 0x0001 -#define RTC_ALARM_ENABLE_HOUR 0x0002 -#define RTC_ALARM_ENABLE_MINUTE 0x0004 -#define RTC_ALARM_ENABLE_ALL ( RTC_ALARM_ENABLE_WEEK | RTC_ALARM_ENABLE_HOUR | RTC_ALARM_ENABLE_MINUTE ) - -typedef enum RTCWeek -{ - RTC_WEEK_SUNDAY = 0, - RTC_WEEK_MONDAY, - RTC_WEEK_TUESDAY, - RTC_WEEK_WEDNESDAY, - RTC_WEEK_THURSDAY, - RTC_WEEK_FRIDAY, - RTC_WEEK_SATURDAY, - RTC_WEEK_MAX -} -RTCWeek; - -typedef struct RTCDate -{ - u32 year; - u32 month; - u32 day; - RTCWeek week; -} -RTCDate; - -typedef struct RTCTime -{ - u32 hour; - u32 minute; - u32 second; -} -RTCTime; - -typedef struct RTCAlarmParam -{ - RTCWeek week; // Day of the week - u32 hour; // Hour ( 0 ~ 23 ) - u32 minute; // Minute ( 0 ~ 59 ) - u32 enable; // Alarm enable flag ( RTC_ALARM_ENABLE_* ) - -} -RTCAlarmParam; - -typedef enum RTCResult -{ - RTC_RESULT_SUCCESS = 0, - RTC_RESULT_BUSY, - RTC_RESULT_ILLEGAL_PARAMETER, - RTC_RESULT_SEND_ERROR, - RTC_RESULT_INVALID_COMMAND, - RTC_RESULT_ILLEGAL_STATUS, - RTC_RESULT_FATAL_ERROR, - RTC_RESULT_MAX -} -RTCResult; - -typedef void (*RTCCallback) (RTCResult result, void *arg); -typedef void (*RTCInterrupt) (void); - -void RTC_Init(void); -RTCResult RTC_GetDate(RTCDate *date); -RTCResult RTC_GetTime(RTCTime *time); -RTCResult RTC_GetDateTime(RTCDate *date, RTCTime *time); -RTCResult RTC_SetDate(const RTCDate *date); -RTCResult RTC_SetTime(const RTCTime *time); -RTCResult RTC_SetDateTime(const RTCDate *date, const RTCTime *time); -RTCResult RTC_GetAlarmStatus(RTCAlarmChan chan, RTCAlarmStatus *status); -RTCResult RTC_GetAlarmParam(RTCAlarmChan chan, RTCAlarmParam *param); -RTCResult RTC_SetAlarmStatus(RTCAlarmChan chan, const RTCAlarmStatus *status); -RTCResult RTC_SetAlarmParam(RTCAlarmChan chan, const RTCAlarmParam *param); -RTCResult RTC_GetDateAsync(RTCDate *date, RTCCallback callback, void *arg); -RTCResult RTC_GetTimeAsync(RTCTime *time, RTCCallback callback, void *arg); -RTCResult RTC_GetDateTimeAsync(RTCDate *date, RTCTime *time, RTCCallback callback, void *arg); -RTCResult RTC_SetDateAsync(const RTCDate *date, RTCCallback callback, void *arg); -RTCResult RTC_SetTimeAsync(const RTCTime *time, RTCCallback callback, void *arg); -RTCResult RTC_SetDateTimeAsync(const RTCDate *date, const RTCTime *time, RTCCallback callback, - void *arg); -RTCResult RTC_GetAlarmStatusAsync(RTCAlarmChan chan, RTCAlarmStatus *status, RTCCallback callback, - void *arg); -RTCResult RTC_GetAlarmParamAsync(RTCAlarmChan chan, RTCAlarmParam *param, RTCCallback callback, - void *arg); -void RTC_SetAlarmInterrupt(RTCInterrupt interrupt); -RTCResult RTC_SetAlarmStatusAsync(RTCAlarmChan chan, const RTCAlarmStatus *status, - RTCCallback callback, void *arg); -RTCResult RTC_SetAlarmParamAsync(RTCAlarmChan chan, const RTCAlarmParam *param, - RTCCallback callback, void *arg); - -#endif //NITRO_RTC_API_H_ diff --git a/arm9/lib/include/RTC_convert.h b/arm9/lib/include/RTC_convert.h deleted file mode 100644 index a75928b9..00000000 --- a/arm9/lib/include/RTC_convert.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef NITRO_RTC_CONVERT_H_ -#define NITRO_RTC_CONVERT_H_ - -s32 RTC_ConvertDateToDay(const RTCDate * date); -s32 RTCi_ConvertTimeToSecond(const RTCTime * time); -s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time); -void RTC_ConvertDayToDate(RTCDate * date, s32 day); -void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec); -void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec); -RTCWeek RTC_GetDayOfWeek(RTCDate * date); - -#endif //NITRO_RTC_CONVERT_H_ diff --git a/arm9/lib/include/RTC_internal.h b/arm9/lib/include/RTC_internal.h deleted file mode 100644 index 440d8b95..00000000 --- a/arm9/lib/include/RTC_internal.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef NITRO_RTC_INTERNAL_H_ -#define NITRO_RTC_INTERNAL_H_ - -#include "nitro/types.h" - -BOOL RTCi_WriteRawStatus2Async(void); -BOOL RTCi_ReadRawTimeAsync(void); -BOOL RTCi_ReadRawDateAsync(void); -BOOL RTCi_ReadRawDateTimeAsync(void); - -#endif //NITRO_RTC_INTERNAL_H_ diff --git a/arm9/lib/include/SND_alarm.h b/arm9/lib/include/SND_alarm.h deleted file mode 100644 index 07b77f45..00000000 --- a/arm9/lib/include/SND_alarm.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GUARD_SND_ALARM_H -#define GUARD_SND_ALARM_H - -#include "global.h" -#include "nitro/SND_alarm_shared.h" - -typedef void (*SNDAlarmCallback)(void *); - -void SND_AlarmInit(void); -void SNDi_IncAlarmId(u32 idx); -u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data); -void SNDi_CallAlarmHandler(s32 idx); - -#endif diff --git a/arm9/lib/include/SND_bank.h b/arm9/lib/include/SND_bank.h deleted file mode 100644 index b9000d57..00000000 --- a/arm9/lib/include/SND_bank.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef GUARD_SND_BANK_H -#define GUARD_SND_BANK_H - -#include "global.h" - -#include "SND_main.h" - -#define SND_INST_ILLEGAL 0 -#define SND_INST_PCM 1 -#define SND_INST_PSG 2 -#define SND_INST_NOISE 3 -#define SND_INST_DIRECTPCM 4 -#define SND_INST_DUMMY 5 -#define SND_INST_DRUM_TABLE 16 -#define SND_INST_KEY_SPLIT 17 - -#define SND_BANK_MAX_WAVEARC 4 -#define SND_INST_MAX_KEYSPLIT 8 - -#define SND_INST_OFFSET_TYPE(off) ((u8)off) -#define SND_INST_OFFSET_NORMAL(bank, off) ((struct SNDInstParam *)((u8 *)bank + (u32)(off >> 8))) -#define SND_INST_OFFSET_DRUMS(bank, off) ((struct SNDDrumSet *)((u8 *)bank + (u32)(off >> 8))) -#define SND_INST_OFFSET_KEYSPL(bank, off) ((struct SNDKeySplit *)((u8 *)bank + (u32)(off >> 8))) - -struct SNDWaveArc; - -struct SNDWaveArcLink { - struct SNDWaveArc *waveArc; // 0x0 - struct SNDWaveArcLink *waveArcLLnext; // 0x4 -}; // size = 0x8 - -struct SNDBankData { - struct SNDBinaryFileHeader fileHeader; // 0x00 - struct SNDBinaryBlockHeader blockHeader; // 0x10 - struct SNDWaveArcLink waveArcLinks[SND_BANK_MAX_WAVEARC]; // 0x18 - u32 instCount; // 0x38 - u32 instOffsets[]; // 0x3C -}; // size = 0x40 - -struct SNDWaveArc { - struct SNDBinaryFileHeader fileHeader; // 0x00 - struct SNDBinaryBlockHeader blockHeader; // 0x10 - struct SNDWaveArcLink *waveArcLLHead; // 0x18 - u8 unk_1C[28]; // 0x1C - u32 waveCount; // 0x38 - u32 waveOffsets[]; // 0x3C -}; // size = 0x3C - -struct SNDInstParam { - u16 wave[2]; // 0x0 - u8 rootKey; // 0x4 - u8 envAttack; // 0x5 - u8 envDecay; // 0x6 - u8 envSustain; // 0x7 - u8 envRelease; // 0x8 - u8 pan; // 0x9 -}; // size = 0xA - -struct SNDInstData { - u8 type; // 0x0 - u8 unk_1; // 0x1 - struct SNDInstParam param; // 0x2 -}; // size = 0xC - -struct SNDKeySplit { - u8 key[SND_INST_MAX_KEYSPLIT]; // 0x0 - struct SNDInstData instruments[]; // 0x8 -}; // size = 0x8 - -struct SNDDrumSet { - u8 minKey; - u8 maxKey; - struct SNDInstData instruments[]; -}; // size = 0x2 - -struct SNDInstPos { - u32 program; // 0x0 - u32 index; // 0x4 -}; // size = 0x8 - -struct SNDWaveData { - struct SNDWaveParam param; // 0x0 - u8 sampleData[]; // 0xC -}; // size = 0xC - -void SND_AssignWaveArc(struct SNDBankData *bankData, s32 index, struct SNDWaveArc *waveArc); -void SND_DestroyBank(struct SNDBankData *bankData); -void SND_DestroyWaveArc(struct SNDWaveArc *waveArc); -struct SNDInstPos SND_GetFirstInstDataPos(const struct SNDBankData *bankData); -BOOL SND_GetNextInstData(const struct SNDBankData *bankData, struct SNDInstData *instData, struct SNDInstPos *instPos); -u32 SND_GetWaveDataCount(const struct SNDWaveArc *waveArc); -void SND_SetWaveDataAddress(struct SNDWaveArc *waveArc, s32 index, const struct SNDWaveData *waveData); -const struct SNDWaveData *SND_GetWaveDataAddress(const struct SNDWaveArc *waveArc, s32 index); - -#endif // GUARD_SND_BANK_H diff --git a/arm9/lib/include/SND_command.h b/arm9/lib/include/SND_command.h deleted file mode 100644 index ff392833..00000000 --- a/arm9/lib/include/SND_command.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef GUARD_SND_COMMAND_H -#define GUARD_SND_COMMAND_H - -#include "global.h" - -#define SND_CMD_COUNT 256 -#define SND_CMD_ARG_MAX 4 - -#define SND_CMD_FLAG_NOBLOCK 0x0 -#define SND_CMD_FLAG_BLOCK 0x1 -#define SND_CMD_FLAG_IMMEDIATE 0x2 - -#define SND_CMD_START_SEQ 0x00 -#define SND_CMD_STOP_SEQ 0x01 -#define SND_CMD_PREPARE_SEQ 0x02 -#define SND_CMD_START_PREPARED_SEQ 0x03 -#define SND_CMD_PAUSE_SEQ 0x04 -#define SND_CMD_SKIP_SEQ 0x05 -#define SND_CMD_PLAYER_PARAM 0x06 -#define SND_CMD_TRACK_PARAM 0x07 -#define SND_CMD_MUTE_TRACK 0x08 -#define SND_CMD_ALLOCATABLE_CHANNEL 0x09 -#define SND_CMD_PLAYER_LOCAL_VAR 0x0A -#define SND_CMD_PLAYER_GLOBAL_VAR 0x0B -#define SND_CMD_START_TIMER 0x0C -#define SND_CMD_STOP_TIMER 0x0D -#define SND_CMD_SETUP_CHANNEL_PCM 0x0E -#define SND_CMD_SETUP_CHANNEL_PSG 0x0F -#define SND_CMD_SETUP_CHANNEL_NOISE 0x10 -#define SND_CMD_SETUP_CAPTURE 0x11 -#define SND_CMD_SETUP_ALARM 0x12 -#define SND_CMD_CHANNEL_TIMER 0x13 -#define SND_CMD_CHANNEL_VOLUME 0x14 -#define SND_CMD_CHANNEL_PAN 0x15 -#define SND_CMD_SURROUND_DECAY 0x16 -#define SND_CMD_MASTER_VOLUME 0x17 -#define SND_CMD_MASTER_PAN 0x18 -#define SND_CMD_OUTPUT_SELECTOR 0x19 -#define SND_CMD_LOCK_CHANNEL 0x1A -#define SND_CMD_UNLOCK_CHANNEL 0x1B -#define SND_CMD_STOP_UNLOCKED_CHANNEL 0x1C -#define SND_CMD_SET_SHARED_WORK 0x1D -#define SND_CMD_INVALIDATE_SEQ 0x1E -#define SND_CMD_INVALIDATE_BANK 0x1F -#define SND_CMD_INVALIDATE_WAVE 0x20 -#define SND_CMD_READ_DRIVER_INFO 0x21 - -struct SNDCommand { - struct SNDCommand *llNext; // 0x0 - s32 id; // 0x4 - u32 arg[SND_CMD_ARG_MAX]; // 0x8 -}; // size = 0x18 - -void SND_CommandInit(void); -const struct SNDCommand *SND_RecvCommandReply(u32 flags); -struct SNDCommand *SND_AllocCommand(u32 flags); -void SND_PushCommand(struct SNDCommand *cmd); -BOOL SND_FlushCommand(u32 flags); -void SND_WaitForCommandProc(u32 tag); -void SND_WaitForFreeCommand(s32 count); -u32 SND_GetCurrentCommandTag(void); -BOOL SND_IsFinishedCommandTag(u32 tag); -s32 SND_CountFreeCommand(void); -s32 SND_CountReservedCommand(void); -s32 SND_CountWaitingCommand(void); - -#endif // GUARD_SND_COMMAND_H diff --git a/arm9/lib/include/SND_interface.h b/arm9/lib/include/SND_interface.h deleted file mode 100644 index d0898f85..00000000 --- a/arm9/lib/include/SND_interface.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef GUARD_SND_INTERFACE_H -#define GUARD_SND_INTERFACE_H - -#include "global.h" -#include "SND_bank.h" -#include "SND_work.h" -#include "SND_alarm.h" - -void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData); -void SND_StopSeq(s32 player); -void SND_PrepareSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData); -void SND_StartPreparedSeq(s32 player); -void SND_PauseSeq(s32 player, BOOL flag); - -void SND_SetPlayerTempoRatio(s32 player, s32 ratio); -void SND_SetPlayerVolume(s32 player, s32 volume); -void SND_SetPlayerChannelPriority(s32 player, s32 prio); -void SND_SetPlayerLocalVariable(s32 player, s32 varNo, s16 var); -void SND_SetPlayerGlobalVariable(s32 varNo, s16 var); - -void SND_SetTrackVolume(s32 player, u32 trackBitMask, s32 volume); -void SND_SetTrackPitch(s32 player, u32 trackBitMask, s32 pitch); -void SND_SetTrackPan(s32 player, u32 trackBitMask, s32 pan); -void SND_SetTrackPanRange(s32 player, u32 trackBitMask, s32 panRange); -void SND_SetTrackModDepth(s32 player, u32 trackBitMask, s32 depth); -void SND_SetTrackModSpeed(s32 player, u32 trackBitMask, s32 speed); -void SND_SetTrackAllocatableChannel(s32 player, u32 trackBitMask, u32 chnBitMask); -void SND_SetTrackMute(s32 player, u32 trackBitMask, BOOL flag); - -void SND_StartTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags); -void SND_StopTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags); - -void SND_SetupCapture(s32 capture, s32 format, void *bufferPtr, u32 length, BOOL loopFlag, s32 in, s32 out); -void SND_SetupAlarm(s32 alarm, u32 tick, u32 period, SNDAlarmCallback cb, void *userData); - -void SND_StopUnlockedChannel(u32 chnBitMask, u32 flags); -void SND_LockChannel(u32 chnBitMask, u32 flags); -void SND_UnlockChannel(u32 chnBitMask, u32 flags); - -void SND_SetChannelTimer(u32 chnBitMask, s32 timer); -void SND_SetChannelVolume(u32 chnBitMask, s32 volume, s32 chnDataShift); -void SND_SetChannelPan(u32 chnBitMask, s32 pan); -void SND_SetupChannelPcm(s32 chn, s32 waveFormat, const void *dataAddr, s32 loopMode, s32 loopStart, s32 dataLen, s32 volume, s32 chnDataShift, s32 timer, s32 pan); -void SND_SetupChannelPsg(s32 chn, s32 sndDuty, s32 volume, s32 chnDataShift, s32 timer, s32 pan); -void SND_SetupChannelNoise(s32 chn, s32 volume, s32 chnDataShift, s32 timer, s32 pan); - -void SND_InvalidateSeqData(const void *start, const void *end); -void SND_InvalidateBankData(const void *start, const void *end); -void SND_InvalidateWaveData(const void *start, const void *end); - -void SND_SetMasterVolume(s32 volume); -void SND_SetOutputSelector(s32 left, s32 right, s32 channel1, s32 channel3); -void SND_SetMasterPan(s32 pan); -void SND_ResetMasterPan(void); - -void SND_ReadDriverInfo(struct SNDDriverInfo *info); - -void SNDi_SetPlayerParam(s32 player, u32 offset, u32 data, s32 size); -void SNDi_SetTrackParam(s32 player, u32 trackBitMask, u32 offset, u32 data, s32 size); -void SNDi_SetSurroundDecay(s32 decay); -void SNDi_SkipSeq(s32 player, u32 tick); - -#endif // GUARD_SND_INTERFACE_H diff --git a/arm9/lib/include/SND_main.h b/arm9/lib/include/SND_main.h deleted file mode 100644 index 8fa9364e..00000000 --- a/arm9/lib/include/SND_main.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef GUARD_SND_MAIN_H -#define GUARD_SND_MAIN_H - -#include "global.h" - -#include "nitro/SND_main_shared.h" - -void SNDi_UnlockMutex(void); -void SNDi_LockMutex(void); -void SND_Init(void); - -struct SNDBinaryFileHeader { - s8 signature[4]; // 0x0 - u16 byteOrder; // 0x4 - u16 version; // 0x6 - u32 fileSize; // 0x8 - u16 headerSize; // 0xC - u16 dataBlocks; // 0xE -}; // size = 0x10 - -typedef struct SNDBinaryBlockHeader { - u32 type; // 0x0 - u32 size; // 0x4 -} SNDBinaryBlockHeader; // size = 0x8 - -#endif // GUARD_SND_MAIN_H diff --git a/arm9/lib/include/SND_util.h b/arm9/lib/include/SND_util.h deleted file mode 100644 index 4137459a..00000000 --- a/arm9/lib/include/SND_util.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GUARD_SND_UTIL_H -#define GUARD_SND_UTIL_H - -#include "global.h" - -void SND_CalcTimer(void); -u16 SND_CalcChannelVolume(s32 x); - -extern const s16 SNDi_DecibelTable[0x80]; - -// not used in pokediamond -//extern const s16 SNDi_DecibelSquareTable[0x80]; - -#endif // GUARD_SND_UTIL_H diff --git a/arm9/lib/include/SND_work.h b/arm9/lib/include/SND_work.h deleted file mode 100644 index a8a3d62b..00000000 --- a/arm9/lib/include/SND_work.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef GUARD_SND_WORK_H -#define GUARD_SND_WORK_H - -#include "global.h" - -#include "SND_main.h" -#include "nitro/SND_work_shared.h" - -struct SNDDriverInfo { - struct SNDWork work; // 0x0000 - u32 channelControls[SND_CHANNEL_COUNT]; // 0x1180 - struct SNDWork *workPtr; // 0x11C0 - u32 lockedChannels; // 0x11C4 - u8 unk_XXX[24]; // 0x11C8 -}; // size = 0x11E0 - -struct SNDChannelInfo { - struct { - BOOL active : 1; - BOOL locked: 1; - } flags; // 0x0 - u16 volume; // 0x4 - u8 pan; // 0x6 - u8 unk_7; // 0x7 - s32 envStatus; // 0x8 -}; // size = 0xC - -struct SNDPlayerInfo { - struct { - BOOL active : 1; - BOOL paused : 1; - } flags; // 0x0 - u16 trackBitMask; // 0x4 - u16 tempo; // 0x6 - u8 volume; // 0x8 - u8 unk_9[3]; // 0x9 -}; // size = 0xC - -struct SNDTrackInfo { - u16 program; // 0x0 - u8 volume; // 0x2 - u8 expression; // 0x3 - - s8 pitchBend; // 0x4 - u8 bendRange; // 0x5 - u8 pan; // 0x6 - s8 transpose; // 0x7 - - u8 unk_8; // 0x8 - u8 chnCount; // 0x9 - u8 channel[SND_CHANNEL_COUNT]; // 0xA -}; // size = 0x1A - -u32 SND_GetPlayerStatus(void); -u16 SND_GetChannelStatus(void); -//u16 SND_GetCaptureStatus(void); -u32 SND_GetPlayerTickCounter(u32 playerId); -//s16 SND_GetPlayerLocalVariable(u32 playerId, u32 var); -//s16 SND_GetPlayerGlobalVariable(u32 var); -//BOOL SND_ReadChannelInfo(const SNDDriverInfo *driverInfo, s32 chnId, SNDChannelInfo *chnInfo); -//BOOL SND_ReadPlayerInfo(const SNDDriverInfo *driverInfo, s32 playerId, s32 trackId, SNDPlayerInfo *playerInfo); -//BOOL SND_ReadTrackInfo(const SNDDriverInfo *driverInfo s32 playerId, s32 trackId, SNDTrackInfo *trackInfo); -u32 SNDi_GetFinishedCommandTag(void); -void SNDi_InitSharedWork(struct SNDSharedWork *sw); - -extern struct SNDSharedWork *SNDi_SharedWork; - -#endif // GUARD_SND_WORK_H diff --git a/arm9/lib/include/SPI_mic.h b/arm9/lib/include/SPI_mic.h deleted file mode 100644 index 79588fe9..00000000 --- a/arm9/lib/include/SPI_mic.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef NITRO_SPI_MIC_H_ -#define NITRO_SPI_MIC_H_ - -void MIC_Init(void); - -#endif //NITRO_SPI_MIC_H_ diff --git a/arm9/lib/include/SPI_pm.h b/arm9/lib/include/SPI_pm.h deleted file mode 100644 index 95f94f24..00000000 --- a/arm9/lib/include/SPI_pm.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef NITRO_SPI_PM_H_ -#define NITRO_SPI_PM_H_ - -ENUMS_ALWAYS_INT_ON - -#define PM_TRIGGER_KEY (1 << 0) -#define PM_TRIGGER_RTC_ALARM (1 << 1) -#define PM_TRIGGER_COVER_OPEN (1 << 2) -#define PM_TRIGGER_CARD (1 << 3) -#define PM_TRIGGER_CARTRIDGE (1 << 4) -typedef u32 PMWakeUpTrigger; - -#define PM_PAD_LOGIC_OR (0 << REG_PAD_KEYCNT_LOGIC_SHIFT) -#define PM_PAD_LOGIC_AND (1 << REG_PAD_KEYCNT_LOGIC_SHIFT) -typedef u32 PMLogic; - -typedef enum -{ - PM_BACKLIGHT_OFF = 0, - PM_BACKLIGHT_ON = 1 -} PMBackLightSwitch; - -typedef enum -{ - PM_LCD_TOP = 0, - PM_LCD_BOTTOM = 1, - PM_LCD_ALL = 2 -} -PMLCDTarget; - -void PM_GetBackLight(PMBackLightSwitch * top, PMBackLightSwitch * bottom); -void PM_GoSleepMode(PMWakeUpTrigger trigger, PMLogic logic, u16 keyPattern); -u32 PM_SetBackLight(PMLCDTarget target, PMBackLightSwitch status); -u32 PM_ForceToPowerOff(void); -void PM_SetAmp(int gain); -void PM_SetAmpGain(int gain); - -ENUMS_ALWAYS_INT_RESET - -#endif //NITRO_SPI_PM_H_ diff --git a/arm9/lib/include/WM.h b/arm9/lib/include/WM.h deleted file mode 100644 index ad287292..00000000 --- a/arm9/lib/include/WM.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef POKEDIAMOND_WM_H -#define POKEDIAMOND_WM_H - -#include "nitro/types.h" - -typedef struct WMDataSet -{ - u16 aidBitmap; - u16 receivedBitmap; - u16 data[508 / sizeof(u16)]; -} WMDataSet; - -typedef struct WMDataSharingInfo -{ - WMDataSet ds[4]; - u16 seqNum[4]; - u16 writeIndex; - u16 sendIndex; - u16 readIndex; - u16 aidBitmap; - u16 dataLength; - u16 stationNumber; - u16 dataSetLength; - u16 port; - u16 doubleMode; - u16 currentSeqNum; - u16 state; - u16 reserved[1]; -} WMDataSharingInfo; - -typedef WMDataSharingInfo WMKeySetBuf; - -typedef enum WMErrCode -{ - WM_ERRCODE_SUCCESS = 0, - WM_ERRCODE_FAILED = 1, - WM_ERRCODE_OPERATING = 2, - WM_ERRCODE_ILLEGAL_STATE = 3, - WM_ERRCODE_WM_DISABLE = 4, - WM_ERRCODE_NO_KEYSET = 5, - WM_ERRCODE_NO_DATASET = 5, - WM_ERRCODE_INVALID_PARAM = 6, - WM_ERRCODE_NO_CHILD = 7, - WM_ERRCODE_FIFO_ERROR = 8, - WM_ERRCODE_TIMEOUT = 9, - WM_ERRCODE_SEND_QUEUE_FULL = 10, - WM_ERRCODE_NO_ENTRY = 11, - WM_ERRCODE_OVER_MAX_ENTRY = 12, - WM_ERRCODE_INVALID_POLLBITMAP = 13, - WM_ERRCODE_NO_DATA = 14, - WM_ERRCODE_SEND_FAILED = 15, - - WM_ERRCODE_DCF_TEST, - WM_ERRCODE_WL_INVALID_PARAM, - WM_ERRCODE_WL_LENGTH_ERR, - - WM_ERRCODE_FLASH_ERROR, - WM_ERRCODE_MAX -} WMErrCode; - -#endif //POKEDIAMOND_WM_H diff --git a/arm9/lib/include/WM_ks.h b/arm9/lib/include/WM_ks.h deleted file mode 100644 index 0eeb6b1b..00000000 --- a/arm9/lib/include/WM_ks.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEDIAMOND_WM_KS_H -#define POKEDIAMOND_WM_KS_H - -#include "WM.h" - -WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port); -WMErrCode WM_EndKeySharing(WMKeySetBuf *buf); - -#endif //POKEDIAMOND_WM_KS_H diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h deleted file mode 100644 index 127339ca..00000000 --- a/arm9/lib/include/consts.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_CONSTS_H -#define POKEDIAMOND_ARM9_CONSTS_H - -#include "nitro/consts_shared.h" - -#define HW_C5_PERMIT_MASK 0xf - -#define HW_C5_PERMIT_RO 5 -#define HW_C5_PERMIT_RW 1 - -#define HW_C5_PR3_SFT 12 - -#define HW_C6_PR_4KB 0x16 -#define HW_C6_PR_8KB 0x18 -#define HW_C6_PR_16KB 0x1a -#define HW_C6_PR_32KB 0x1c -#define HW_C6_PR_64KB 0x1e -#define HW_C6_PR_128KB 0x20 -#define HW_C6_PR_256KB 0x22 -#define HW_C6_PR_512KB 0x24 -#define HW_C6_PR_1MB 0x26 -#define HW_C6_PR_2MB 0x28 -#define HW_C6_PR_4MB 0x2a -#define HW_C6_PR_8MB 0x2c -#define HW_C6_PR_16MB 0x2e -#define HW_C6_PR_32MB 0x30 -#define HW_C6_PR_64MB 0x32 -#define HW_C6_PR_128MB 0x34 -#define HW_C6_PR_256MB 0x36 -#define HW_C6_PR_512MB 0x38 -#define HW_C6_PR_1GB 0x3a -#define HW_C6_PR_2GB 0x3c -#define HW_C6_PR_4GB 0x3e - -#define HW_C6_PR_ENABLE 1 - -#define HW_C9_TCMR_16KB 0x0a -#define HW_C9_TCMR_32MB 0x20 - -#define HW_CACHE_LINE_SIZE 32 - -#define OSi_CONSOLE_NOT_DETECT 0xffffffff - -#define OS_CONSOLE_NITRO 0x80000000 -#define OS_CONSOLE_DEV_CARD 0x02000000 -#define OS_CONSOLE_SIZE_MASK 0x00000003 -#define OS_CONSOLE_SIZE_4MB 0x00000001 - -#define OSi_TCM_REGION_BASE_MASK 0xfffff000 - -#define OS_IE_V_BLANK (1UL << 0) -#define OS_IE_H_BLANK (1UL << 1) - -#define HW_CPU_CLOCK_ARM9 67027964 - -#define REG_PXI_SUBP_FIFO_CNT_E_MASK 0x8000 -#define REG_PXI_SUBP_FIFO_CNT_ERR_MASK 0x4000 -#define REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK 0x0400 -#define REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK 0x0100 -#define REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK 0x0008 -#define REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK 0x0002 - -#endif //POKEDIAMOND_ARM9_CONSTS_H diff --git a/arm9/lib/include/custom_allocator.h b/arm9/lib/include/custom_allocator.h deleted file mode 100644 index 0a42ae13..00000000 --- a/arm9/lib/include/custom_allocator.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POKEDIAMOND_CUSTOM_ALLOCATOR_H -#define POKEDIAMOND_CUSTOM_ALLOCATOR_H - -#include "nitro/types.h" - -typedef void * (* AllocFunc)(u32 size); -typedef void (* FreeFunc)(void * ptr); - -void* CallCustomAllocator(u32 size); -void CallCustomDestructor(void * ptr); -void SetCustomAllocatorAndDestructor(AllocFunc allocator, FreeFunc destructor); - -#endif //POKEDIAMOND_CUSTOM_ALLOCATOR_H diff --git a/arm9/lib/include/dgt.h b/arm9/lib/include/dgt.h deleted file mode 100644 index 97916f1b..00000000 --- a/arm9/lib/include/dgt.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef GUARD_DGT_H -#define GUARD_DGT_H - -#include "nitro/types.h" - -struct DGTHash1Context { - union { - struct { - unsigned long a, b, c, d; - }; - unsigned long state[4]; - }; - unsigned long long length; - union { - unsigned long buffer32[16]; - unsigned char buffer8[64]; - }; -}; - -struct DGTHash2Context { - unsigned long Intermediate_Hash[5]; - unsigned long Length_Low; - unsigned long Length_High; - int Message_Block_Index; - unsigned char Message_Block[64]; - int Computed; - int Corrupted; -}; - -void DGT_Hash1Reset(struct DGTHash1Context *context); -void DGT_Hash1SetSource(struct DGTHash1Context *context, u8 *input, u32 length); -void DGT_Hash1GetDigest_R(u8 *digest, struct DGTHash1Context *context); -void DGT_Hash2Reset(struct DGTHash2Context *context); -void DGT_Hash2SetSource(struct DGTHash2Context *context, u8 *input, u32 length); -void DGT_Hash2GetDigest(struct DGTHash2Context *context, u8 *digest); - -#endif diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h deleted file mode 100644 index bdf49037..00000000 --- a/arm9/lib/include/fx.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef GUARD_FX_H -#define GUARD_FX_H - -#include "nitro/types.h" - -typedef s16 fx16; -typedef s32 fx32; -typedef s64 fx64; -typedef s64 fx64c; - -#define FX16_INT_MASK 0xF000 -#define FX16_INT_ABS_MASK 0x7000 -#define FX16_FRAC_MASK 0x0FFF -#define FX16_INT_SHIFT 0xC - -#define FX32_INT_MASK 0xFFFFF000 -#define FX32_INT_ABS_MASK 0x7FFFF000 -#define FX32_FRAC_MASK 0x00000FFF -#define FX32_INT_SHIFT 0xC - -#define FX64_INT_MASK 0xFFFFFFFFFFFFF000 -#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000 -#define FX64_FRAC_MASK 0x0000000000000FFF -#define FX64_INT_SHIFT 0xC - -#define FX64C_INT_MASK 0xFFFFFFFF00000000 -#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000 -#define FX64C_FRAC_MASK 0x00000000FFFFFFFF -#define FX64C_INT_SHIFT 0x20 - -#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT) -#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT) -#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK) - -#define FX16_INT(x) FX_INT(FX16, x) -#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x) -#define FX16_FRAC(x) FX_FRAC(FX16, x) - -#define FX32_INT(x) FX_INT(FX32, x) -#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x) -#define FX32_FRAC(x) FX_FRAC(FX32, x) - -#define FX64_INT(x) FX_INT(FX64, x) -#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x) -#define FX64_FRAC(x) FX_FRAC(FX64, x) - -#define FX64C_INT(x) FX_INT(FX64C, x) -#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) -#define FX64C_FRAC(x) FX_FRAC(FX64C, x) - -//TODO: clean up these macros -#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) -#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) -#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) -//the extra term here is for rounding -#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) - -#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) - -#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT))) -#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \ - (fx16)((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ - (fx16)((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) -#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \ - (fx32)((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ - (fx32)((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) -#define FX16_CONST(x) FX_F32_TO_FX16(x) -#define FX32_CONST(x) FX_F32_TO_FX32(x) - -#define FX16_ONE ((fx16)0x1000) -#define FX32_ONE ((fx32)0x00001000L) - -struct Vecx32 -{ - fx32 x; - fx32 y; - fx32 z; -}; - -struct Vecx16 -{ - fx16 x; - fx16 y; - fx16 z; -}; - -//Matrices are indexed as [column][row] -struct Mtx44 -{ - fx32 _[16]; -}; - -struct Mtx43 -{ - fx32 _[12]; -}; - -struct Mtx33 -{ - fx32 _[9]; -}; - -struct Mtx22 -{ - fx32 _[4]; -}; - -//FX -void FX_Init(); -fx32 FX_Modf(fx32 x, fx32 *iptr); - -//Atan -u16 FX_Atan(fx32 x); -u16 FX_Atan2(fx32 x, fx32 y); - -//Vec -void VEC_Add(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst); -void VEC_Subtract(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst); -void VEC_Fx16Add(struct Vecx16 *x, struct Vecx16 *y, struct Vecx16 *dst); -fx32 VEC_DotProduct(struct Vecx32 *x, struct Vecx32 *y); -fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b); -void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst); -void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst); -fx32 VEC_Mag(struct Vecx32 *a); -void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst); -void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst); -void VEC_MultAdd(fx32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst); - -//CP -fx32 FX_Div(fx32 numerator, fx32 denominator); -fx32 FX_Inv(fx32 x); -fx32 FX_Sqrt(fx32 x); -fx64 FX_GetDivResultFx64c(); -fx32 FX_GetDivResult(); -void FX_InvAsync(fx32 x); -fx32 FX_GetSqrtResult(); -void FX_DivAsync(fx32 numerator, fx32 denominator); -fx32 FX_DivS32(fx32 numerator, fx32 denominator); -fx32 FX_ModS32(fx32 num, fx32 mod); - -//Mtx -//The functions ending in underscores seem to be in assembly originally -//Mtx44 -void MTX_TransApply44(struct Mtx44 *mtx, struct Mtx44 *dst, fx32 x, fx32 y, fx32 z); -void MTX_Concat44(struct Mtx44 *a, struct Mtx44 *b, struct Mtx44 *c); -void MTX_Identity44_(struct Mtx44 *dst); -void MTX_Copy44To43_(struct Mtx44 *src, struct Mtx43 *dst); -void MTX_RotX44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); -void MTX_RotY44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); -void MTX_RotZ44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi); - -//Mtx43 -void MTX_ScaleApply43(struct Mtx43 *mtx, struct Mtx43 *dst, fx32 x, fx32 y, fx32 z); -fx32 MTX_Inverse43(struct Mtx43 *mtx, struct Mtx43 *inv); -void MTX_Concat43(struct Mtx43 *a, struct Mtx43 *b, struct Mtx43 *c); -void MTX_MultVec43(struct Vecx32 *vec, struct Mtx43 *mtx, struct Vecx32 *dst); -void MTX_Identity43_(struct Mtx43 *mtx); -void MTX_Copy43To44_(struct Mtx43 *src, struct Mtx44 *dst); -void MTX_Scale43_(struct Mtx43 *dst, fx32 x, fx32 y, fx32 z); -void MTX_RotX43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi); -void MTX_RotY43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi); - -//Mtx33 -void MTX_ScaleApply33(struct Mtx33 *mtx, struct Mtx33 *dst, fx32 x, fx32 y, fx32 z); -void MTX_Concat33(struct Mtx33 *a, struct Mtx33 *b, struct Mtx33 *c); -void MTX_MultVec33(struct Vecx32 *vec, struct Mtx33 *mtx, struct Vecx32 *dst); -void MTX_Identity33_(struct Mtx33 *mtx); -void MTX_RotX33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); -void MTX_RotY33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); -void MTX_RotZ33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi); - -//Mtx22 -void MTX_ScaleApply22(struct Mtx22 *mtx, struct Mtx22 *dst, fx32 x, fx32 y); -void MTX_Identity22_(struct Mtx22 *mtx); -void MTX_Rot22_(struct Mtx22 *mtx, fx32 sinphi, fx32 cosphi); - -#endif //GUARD_FX_H diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h deleted file mode 100644 index 7e6606fa..00000000 --- a/arm9/lib/include/gx.h +++ /dev/null @@ -1,234 +0,0 @@ -#ifndef GUARD_GX_H -#define GUARD_GX_H - -#include "fx.h" -#include "MI_memory.h" -#include "MI_dma.h" -#include "OS_vramExclusive.h" -#include "registers.h" - -//temporary while other files aren't decompiled - -void GXi_NopClearFifo128_(void *); - -#include "GXcommon.h" -#include "GX_struct_2d.h" -#include "GX_g3.h" -#include "GX_g3_util.h" -#include "GX_g3x.h" -#include "GX_g3b.h" -#include "GX_asm.h" -#include "GX_vramcnt.h" -#include "GX_bgcnt.h" -#include "GX_load2d.h" -#include "GX_load3d.h" -#include "GX_g2.h" -#include "GX_state.h" -#include "GX_g3imm.h" -#include "GX_dma.h" - -typedef union -{ - u32 raw; - struct - { - u32 bgMode:3; - u32 bg0_2d3d:1; - u32 objMapChar:1; - u32 objMapBmp:2; - u32 blankScr:1; - u32 visiblePlane:5; - u32 visibleWnd:3; - u32 dispMode:4; - u32 extObjMapChar:2; - u32 extObjMapBmp:1; - u32 hBlankObjProc:1; - u32 bgCharOffset:3; - u32 bgScrOffset:3; - u32 bgExtPltt:1; - u32 objExtPltt:1; - }; -} -GXDispCnt; - -typedef union -{ - u32 raw; - struct - { - u32 bgMode:3; - u32 _reserve1:1; - u32 objMapChar:1; - u32 objMapBmp:2; - u32 blankScr:1; - u32 visiblePlane:5; - u32 visibleWnd:3; - u32 dispMode:1; - u32 _reserve2:3; - u32 extObjMapChar:2; - u32 _reserve3:1; - u32 hBlankObjProc:1; - u32 _reserve4:6; - u32 bgExtPltt:1; - u32 objExtPltt:1; - }; -} -GXSDispCnt; - -typedef enum -{ - GX_BGMODE_0 = 0, - GX_BGMODE_1 = 1, - GX_BGMODE_2 = 2, - GX_BGMODE_3 = 3, - GX_BGMODE_4 = 4, - GX_BGMODE_5 = 5, - GX_BGMODE_6 = 6 -} -GXBGMode; - -typedef enum -{ - GX_BG0_AS_2D = 0, - GX_BG0_AS_3D = 1 -} -GXBG0As; - -typedef enum -{ - GX_DISPMODE_GRAPHICS = 0x01, - GX_DISPMODE_VRAM_A = 0x02, - GX_DISPMODE_VRAM_B = 0x06, - GX_DISPMODE_VRAM_C = 0x0a, - GX_DISPMODE_VRAM_D = 0x0e, - GX_DISPMODE_MMEM = 0x03 -} -GXDispMode; - -typedef enum -{ - GX_PLANEMASK_NONE = 0x00, - GX_PLANEMASK_BG0 = 0x01, - GX_PLANEMASK_BG1 = 0x02, - GX_PLANEMASK_BG2 = 0x04, - GX_PLANEMASK_BG3 = 0x08, - GX_PLANEMASK_OBJ = 0x10 -} -GXPlaneMask; - -typedef enum -{ - GX_WNDMASK_NONE = 0x00, - GX_WNDMASK_W0 = 0x01, - GX_WNDMASK_W1 = 0x02, - GX_WNDMASK_OW = 0x04 -} -GXWndMask; - -typedef enum -{ - GX_BGCHAROFFSET_0x00000 = 0x00, - GX_BGCHAROFFSET_0x10000 = 0x01, - GX_BGCHAROFFSET_0x20000 = 0x02, - GX_BGCHAROFFSET_0x30000 = 0x03, - GX_BGCHAROFFSET_0x40000 = 0x04, - GX_BGCHAROFFSET_0x50000 = 0x05, - GX_BGCHAROFFSET_0x60000 = 0x06, - GX_BGCHAROFFSET_0x70000 = 0x07 -} -GXBGCharOffset; - -typedef enum -{ - GX_BGSCROFFSET_0x00000 = 0x00, - GX_BGSCROFFSET_0x10000 = 0x01, - GX_BGSCROFFSET_0x20000 = 0x02, - GX_BGSCROFFSET_0x30000 = 0x03, - GX_BGSCROFFSET_0x40000 = 0x04, - GX_BGSCROFFSET_0x50000 = 0x05, - GX_BGSCROFFSET_0x60000 = 0x06, - GX_BGSCROFFSET_0x70000 = 0x07 -} -GXBGScrOffset; - -typedef enum -{ - GX_DISP_SELECT_SUB_MAIN = 0, - GX_DISP_SELECT_MAIN_SUB = 1 -} -GXDispSelect; - -typedef enum -{ - GX_OBJVRAMMODE_CHAR_2D = (0 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT), - GX_OBJVRAMMODE_CHAR_1D_32K = - (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (0 << REG_GX_DISPCNT_EXOBJ_SHIFT), - GX_OBJVRAMMODE_CHAR_1D_64K = - (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (1 << REG_GX_DISPCNT_EXOBJ_SHIFT), - GX_OBJVRAMMODE_CHAR_1D_128K = - (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (2 << REG_GX_DISPCNT_EXOBJ_SHIFT), - GX_OBJVRAMMODE_CHAR_1D_256K = - (1 << REG_GX_DISPCNT_OBJMAP_SHIFT) | (3 << REG_GX_DISPCNT_EXOBJ_SHIFT) -} - GXOBJVRamModeChar; - -void GX_Init(); -u32 GX_HBlankIntr(u32 enable); -u32 GX_VBlankIntr(u32 enable); -void GX_DispOff(); -void GX_DispOn(); -void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d); -void GXS_SetGraphicsMode(GXBGMode mode); -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); - -static inline void GX_SetMasterBrightness(int brightness) -{ - GXx_SetMasterBrightness_(®_GX_MASTER_BRIGHT, brightness); -} - -static inline void GX_SetVisiblePlane(int plane) -{ - reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_DISPLAY_MASK) | (plane << REG_GX_DISPCNT_DISPLAY_SHIFT)); -} - -static inline void GXS_SetVisiblePlane(int plane) -{ - reg_GXS_DB_DISPCNT = (u32)((reg_GXS_DB_DISPCNT & ~REG_GXS_DB_DISPCNT_DISPLAY_MASK) | (plane << REG_GXS_DB_DISPCNT_DISPLAY_SHIFT)); -} - -static inline void GXS_DispOn(void) -{ - reg_GXS_DB_DISPCNT |= REG_GXS_DB_DISPCNT_MODE_MASK; -} - -static inline void GX_SetDispSelect(GXDispSelect sel) -{ - reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~REG_GX_POWCNT_DSEL_MASK) | (sel << REG_GX_POWCNT_DSEL_SHIFT)); -} - -static inline void GX_SetBGScrOffset(GXBGScrOffset offset) -{ - reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_BGSCREENOFFSET_MASK) | (offset << REG_GX_DISPCNT_BGSCREENOFFSET_SHIFT)); -} - -static inline void GX_SetBGCharOffset(GXBGCharOffset offset) -{ - reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~REG_GX_DISPCNT_BGCHAROFFSET_MASK) | (offset << REG_GX_DISPCNT_BGCHAROFFSET_SHIFT)); -} - -static inline void GX_SetVisibleWnd(int window) -{ - reg_GX_DISPCNT = (u32)((reg_GX_DISPCNT & ~(REG_GX_DISPCNT_W0_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_OW_MASK)) | (window << REG_GX_DISPCNT_W0_SHIFT)); -} - -static inline void GXS_SetVisibleWnd(int window) -{ - reg_GXS_DB_DISPCNT = (u32)((reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_W0_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_OW_MASK)) | (window << REG_GXS_DB_DISPCNT_W0_SHIFT)); -} - -static inline void GXS_SetOBJVRamModeChar(GXOBJVRamModeChar mode) -{ - reg_GXS_DB_DISPCNT = (u32)(reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK) | mode); -} - -#endif //GUARD_GX_H diff --git a/arm9/lib/include/math.h b/arm9/lib/include/math.h deleted file mode 100644 index 085aa24f..00000000 --- a/arm9/lib/include/math.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GUARD_MATH_H -#define GUARD_MATH_H - -#include "dgt.h" -#include "MATH_pop.h" -#include "MATH_crc.h" -#include "MATH_dgt.h" - -#endif diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h deleted file mode 100644 index 69e9c696..00000000 --- a/arm9/lib/include/mmap.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_MMAP_H -#define POKEDIAMOND_ARM9_MMAP_H - -#include "nitro/types.h" -#include "nitro/mmap_shared.h" - -extern u32 SDK_AUTOLOAD_DTCM_START[]; - -#define HW_MAIN_MEM_EX_SIZE 0x00800000 -#define HW_MAIN_MEM_DEBUGGER_OFFSET 0x00700000 - -#define HW_ITCM_IMAGE 0x01000000 -#define HW_ITCM 0x01FF8000 -#define HW_ITCM_SIZE 0x00008000 -#define HW_ITCM_END (HW_ITCM + HW_ITCM_SIZE) - -#define HW_IOREG 0x04000000 -#define HW_CTRDG_ROM 0x08000000 -#define HW_BIOS 0xffff0000 - -#define HW_DTCM ((u32)SDK_AUTOLOAD_DTCM_START) -#define HW_DTCM_SIZE 0x00004000 - -#define HW_DTCM_SYSRV (HW_DTCM + 0x00003fc0) -#define HW_INTR_CHECK_BUF (HW_DTCM_SYSRV + 0x38) -#define HW_EXCP_VECTOR_BUF (HW_DTCM_SYSRV + 0x1C) - - -#define HW_CARD_ROM_HEADER_SIZE 0x00000160 -#define HW_DOWNLOAD_PARAMETER_SIZE 0x00000020 - -#define HW_CHECK_DEBUGGER_SW 0x027ffc10 -#define HW_CARD_ROM_HEADER (HW_MAIN_MEM + 0x007ffa80) -#define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM + 0x007ffc00) -#define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20) -#define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c) -#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM + 0x007ffc30) -#define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer -#define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory -#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) -#define HW_MAIN_MEM_SHARED (HW_MAIN_MEM_EX_END - HW_MAIN_MEM_SHARED_SIZE) -#define HW_DTCM_SVC_STACK_END (HW_DTCM + 0x00003fc0) -#define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE) -#define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK) - -#define HW_MAIN_MEM_SUB (HW_MAIN_MEM_MAIN_END + 0x400000) - -#define HW_BIOS_EXCP_STACK_MAIN (HW_MAIN_MEM + 0x007ffd80) -#define HW_EXCP_VECTOR_MAIN (HW_MAIN_MEM + 0x007ffd9c) - -#define HW_PXI_SIGNAL_PARAM_ARM9 (HW_MAIN_MEM + 0x007fff80) - -#define HW_WM_RSSI_POOL (HW_MAIN_MEM + 0x007fff98) - -#define HW_COMPONENT_PARAM (HW_MAIN_MEM + 0x007fff9c) - -#define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0) -#define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0) -#define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0) - -#define OSi_MAIN_ARENA_HI_DEFAULT (HW_MAIN_MEM_MAIN_END) -#define OSi_MAINEX_ARENA_HI_DEFAULT (HW_MAIN_MEM + HW_MAIN_MEM_DEBUGGER_OFFSET) -#define HW_ITCM_ARENA_HI_DEFAULT (HW_ITCM + HW_ITCM_SIZE) -#define HW_SHARED_ARENA_HI_DEFAULT (HW_RED_RESERVED - HW_CARD_ROM_HEADER_SIZE - HW_DOWNLOAD_PARAMETER_SIZE) -#define HW_SHARED_ARENA_LO_DEFAULT (HW_MAIN_MEM_SHARED) -#define OSi_WRAM_MAIN_ARENA_HI_DEFAULT (HW_WRAM) -#define OSi_WRAM_MAIN_ARENA_LO_DEFAULT (HW_WRAM) - -#define HW_BG_PLTT 0x05000000 -#define HW_BG_PLTT_END 0x05000200 -#define HW_BG_PLTT_SIZE (HW_BG_PLTT_END-HW_BG_PLTT) -#define HW_OBJ_PLTT 0x05000200 -#define HW_OBJ_PLTT_END 0x05000400 -#define HW_OBJ_PLTT_SIZE (HW_OBJ_PLTT_END-HW_OBJ_PLTT) -#define HW_PLTT HW_BG_PLTT -#define HW_PLTT_END HW_OBJ_PLTT_END -#define HW_PLTT_SIZE (HW_PLTT_END-HW_PLTT) -#define HW_DB_BG_PLTT 0x05000400 -#define HW_DB_BG_PLTT_END 0x05000600 -#define HW_DB_BG_PLTT_SIZE (HW_DB_BG_PLTT_END-HW_DB_BG_PLTT) -#define HW_DB_OBJ_PLTT 0x05000600 -#define HW_DB_OBJ_PLTT_END 0x05000800 -#define HW_DB_OBJ_PLTT_SIZE (HW_DB_OBJ_PLTT_END-HW_DB_OBJ_PLTT) -#define HW_DB_PLTT HW_DB_BG_PLTT -#define HW_DB_PLTT_END HW_DB_OBJ_PLTT_END -#define HW_DB_PLTT_SIZE (HW_DB_PLTT_END-HW_DB_PLTT) -#define HW_LCDC_VRAM 0x6800000 -#define HW_LCDC_VRAM_END 0x68a4000 -#define HW_LCDC_VRAM_SIZE (HW_LCDC_VRAM_END - HW_LCDC_VRAM) -#define HW_OAM 0x07000000 -#define HW_OAM_END 0x07000400 -#define HW_OAM_SIZE (HW_OAM_END-HW_OAM) -#define HW_DB_OAM 0x07000400 -#define HW_DB_OAM_END 0x07000800 -#define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM) - -#define HW_CTRDG_RAM_END 0x0a010000 - -#define HW_DTCM_SYSRV_OFS_INTR_VECTOR 0x3c -#define HW_RESET_VECTOR 0xffff0000 - -#endif //POKEDIAMOND_ARM9_MMAP_H diff --git a/arm9/lib/include/nitro.h b/arm9/lib/include/nitro.h deleted file mode 100644 index ea7503cc..00000000 --- a/arm9/lib/include/nitro.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef POKEDIAMOND_NITRO_H -#define POKEDIAMOND_NITRO_H - -#ifdef __cplusplus -extern "C" { -#endif - -// Include all nitro files -#include "sections.h" -#include "misc.h" -#include "nitro/types.h" -#include "consts.h" -#include "OS_init.h" -#include "mmap.h" - -#ifdef __cplusplus -} -#endif - -#endif //POKEDIAMOND_NITRO_H diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h deleted file mode 100644 index b4fd8ce7..00000000 --- a/arm9/lib/include/registers.h +++ /dev/null @@ -1,1069 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_REGISTERS_H -#define POKEDIAMOND_ARM9_REGISTERS_H - -#include "nitro/types.h" -#include "nitro/registers_shared.h" - -#define reg_GX_DISPCNT (*(REGType32v *)0x4000000) -#define reg_GX_DISPSTAT (*(REGType16v *)0x4000004) -#define reg_GX_VCOUNT (*(REGType16v *)0x4000006) - -#define reg_G2_BG0CNT (*(REGType16v *)0x4000008) -#define reg_G2_BG1CNT (*(REGType16v *)0x400000a) -#define reg_G2_BG2CNT (*(REGType16v *)0x400000c) -#define reg_G2_BG3CNT (*(REGType16v *)0x400000e) -#define reg_G2_BG0OFS (*(REGType32v *)0x4000010) -#define reg_G2_BG0HOFS (*(REGType16v *)0x4000010) -#define reg_G2_BG0VOFS (*(REGType16v *)0x4000012) -#define reg_G2_BG1OFS (*(REGType32v *)0x4000014) -#define reg_G2_BG1HOFS (*(REGType16v *)0x4000014) -#define reg_G2_BG1VOFS (*(REGType16v *)0x4000016) -#define reg_G2_BG2OFS (*(REGType32v *)0x4000018) -#define reg_G2_BG2HOFS (*(REGType16v *)0x4000018) -#define reg_G2_BG2VOFS (*(REGType16v *)0x400001a) -#define reg_G2_BG3OFS (*(REGType32v *)0x400001c) -#define reg_G2_BG3HOFS (*(REGType16v *)0x400001c) -#define reg_G2_BG3VOFS (*(REGType16v *)0x400001e) -#define reg_G2_BG2PA (*(REGType16v *)0x4000020) -#define reg_G2_BG2PB (*(REGType16v *)0x4000022) -#define reg_G2_BG2PC (*(REGType16v *)0x4000024) -#define reg_G2_BG2PD (*(REGType16v *)0x4000026) -#define reg_G2_BG2X (*(REGType32v *)0x4000028) -#define reg_G2_BG2Y (*(REGType32v *)0x400002c) -#define reg_G2_BG3PA (*(REGType16v *)0x4000030) -#define reg_G2_BG3PB (*(REGType16v *)0x4000032) -#define reg_G2_BG3PC (*(REGType16v *)0x4000034) -#define reg_G2_BG3PD (*(REGType16v *)0x4000036) -#define reg_G2_BG3X (*(REGType32v *)0x4000038) -#define reg_G2_BG3Y (*(REGType32v *)0x400003c) -#define reg_G2_WIN0H (*(REGType16v *)0x4000040) -#define reg_G2_WIN1H (*(REGType16v *)0x4000042) -#define reg_G2_WIN0V (*(REGType16v *)0x4000044) -#define reg_G2_WIN1V (*(REGType16v *)0x4000046) -#define reg_G2_WININ (*(REGType16v *)0x4000048) -#define reg_G2_WINOUT (*(REGType16v *)0x400004a) -#define reg_G2_MOSAIC (*(REGType16v *)0x400004c) -#define reg_G2_BLDCNT (*(REGType16v *)0x4000050) -#define reg_G2_BLDALPHA (*(REGType16v *)0x4000052) -#define reg_G2_BLDY (*(REGType16v *)0x4000054) - -#define reg_G3X_DISP3DCNT (*(REGType16v *)0x4000060) - -#define reg_GX_DISPCAPCNT (*(REGType32v *)0x4000064) -#define reg_GX_DISP_MMEM_FIFO (*(REGType32v *)0x4000068) -#define reg_GX_DISP_MMEM_FIFO_L (*(REGType16v *)0x4000068) -#define reg_GX_DISP_MMEM_FIFO_H (*(REGType16v *)0x400006a) -#define reg_GX_MASTER_BRIGHT (*(REGType16v *)0x400006c) -#define reg_GX_TVOUTCNT (*(REGType16v *)0x4000070) - -#define reg_MI_DMA0SAD (*(REGType32v *)0x40000b0) -#define reg_MI_DMA0DAD (*(REGType32v *)0x40000b4) -#define reg_MI_DMA0CNT (*(REGType32v *)0x40000b8) -#define reg_MI_DMA1SAD (*(REGType32v *)0x40000bc) -#define reg_MI_DMA1DAD (*(REGType32v *)0x40000c0) -#define reg_MI_DMA1CNT (*(REGType32v *)0x40000c4) -#define reg_MI_DMA2SAD (*(REGType32v *)0x40000c8) -#define reg_MI_DMA2DAD (*(REGType32v *)0x40000cc) -#define reg_MI_DMA2CNT (*(REGType32v *)0x40000d0) -#define reg_MI_DMA3SAD (*(REGType32v *)0x40000d4) -#define reg_MI_DMA3DAD (*(REGType32v *)0x40000d8) -#define reg_MI_DMA3CNT (*(REGType32v *)0x40000dc) -#define reg_MI_DMA0_CLR_DATA (*(REGType32v *)0x40000e0) -#define reg_MI_DMA1_CLR_DATA (*(REGType32v *)0x40000e4) -#define reg_MI_DMA2_CLR_DATA (*(REGType32v *)0x40000e8) -#define reg_MI_DMA3_CLR_DATA (*(REGType32v *)0x40000ec) - -#define reg_EXI_SIODATA32 (*(REGType32v *)0x4000120) -#define reg_EXI_SIOCNT (*(REGType16v *)0x4000128) -#define reg_EXI_SIOSEL (*(REGType32v *)0x400012c) - -#define reg_PAD_KEYINPUT (*(REGType16v *)0x4000130) -#define reg_PAD_KEYCNT (*(REGType16v *)0x4000132) - -#define REG_SUBPINTF_ADDR 0x4000180 -#define reg_PXI_SUBPINTF (*(REGType16v *)REG_SUBPINTF_ADDR) -#define reg_PXI_SUBP_FIFO_CNT (*(REGType16v *)0x4000184) -#define reg_PXI_SEND_FIFO (*(REGType32v *)0x4000188) - -#define reg_MI_MCCNT0 (*(REGType16v *)0x40001a0) -#define reg_CARD_MASTERCNT (*(REGType8v *)0x40001a1) //? -#define reg_MI_MCD0 (*(REGType16v *)0x40001a2) -#define reg_MI_MCCNT1 (*(REGType32v *)0x40001a4) -#define reg_CARD_CNT (*(REGType32v *)0x40001a4) //? -#define reg_MI_MCCMD0 (*(REGType32v *)0x40001a8) -#define reg_CARD_CMD (*(REGType8v *)0x40001a8) //? -#define reg_MI_MCCMD1 (*(REGType32v *)0x40001ac) -#define reg_MI_EXMEMCNT (*(REGType16v *)0x4000204) - -#define reg_OS_PAUSE (*(REGType16v *)0x4000300) - -#define reg_GX_VRAMCNT (*(REGType32v *)0x4000240) -#define reg_GX_VRAMCNT_A (*(REGType8v *)0x4000240) -#define reg_GX_VRAMCNT_B (*(REGType8v *)0x4000241) -#define reg_GX_VRAMCNT_C (*(REGType8v *)0x4000242) -#define reg_GX_VRAMCNT_D (*(REGType8v *)0x4000243) -#define reg_GX_WVRAMCNT (*(REGType32v *)0x4000244) -#define reg_GX_VRAMCNT_E (*(REGType8v *)0x4000244) -#define reg_GX_VRAMCNT_F (*(REGType8v *)0x4000245) -#define reg_GX_VRAMCNT_G (*(REGType8v *)0x4000246) -#define reg_GX_VRAMCNT_WRAM (*(REGType8v *)0x4000247) -#define reg_GX_VRAM_HI_CNT (*(REGType16v *)0x4000248) -#define reg_GX_VRAMCNT_H (*(REGType8v *)0x4000248) -#define reg_GX_VRAMCNT_I (*(REGType8v *)0x4000249) - -#define reg_CP_DIVCNT (*(REGType16v *)0x4000280) - -#define REG_DIV_NUMER_ADDR 0x4000290 -#define reg_CP_DIV_NUMER (*(REGType64v *)REG_DIV_NUMER_ADDR) -#define reg_CP_DIV_NUMER_L (*(REGType32v *)REG_DIV_NUMER_ADDR) -#define reg_CP_DIV_NUMER_H (*(REGType32v *)0x4000294) -#define reg_CP_DIV_DENOM (*(REGType64v *)0x4000298) -#define reg_CP_DIV_DENOM_L (*(REGType32v *)0x4000298) -#define reg_CP_DIV_DENOM_H (*(REGType32v *)0x400029c) -#define reg_CP_DIV_RESULT (*(REGType64v *)0x40002A0) -#define reg_CP_DIV_RESULT_L (*(REGType32v *)0x40002A0) -#define reg_CP_DIV_RESULT_H (*(REGType32v *)0x40002A4) -#define reg_CP_DIVREM_RESULT (*(REGType64v *)0x40002A8) -#define reg_CP_DIVREM_RESULT_L (*(REGType32v *)0x40002A8) -#define reg_CP_DIVREM_RESULT_H (*(REGType32v *)0x40002Ac) -#define reg_CP_SQRTCNT (*(REGType16v *)0x40002B0) -#define reg_CP_SQRT_RESULT (*(REGType32v *)0x40002B4) -#define reg_CP_SQRT_PARAM (*(REGType64v *)0x40002B8) -#define reg_CP_SQRT_PARAM_L (*(REGType32v *)0x40002B8) -#define reg_CP_SQRT_PARAM_H (*(REGType32v *)0x40002Bc) - -#define reg_GX_POWCNT (*(REGType16v *)0x4000304) - -#define reg_G3X_RDLINES_COUNT (*(const REGType16v *)0x4000320) -#define reg_G3X_EDGE_COLOR_0 (*(REGType32v *)0x4000330) -#define reg_G3X_EDGE_COLOR_0_L (*(REGType16v *)0x4000330) -#define reg_G3X_EDGE_COLOR_0_H (*(REGType16v *)0x4000332) -#define reg_G3X_EDGE_COLOR_1 (*(REGType32v *)0x4000334) -#define reg_G3X_EDGE_COLOR_1_L (*(REGType16v *)0x4000334) -#define reg_G3X_EDGE_COLOR_1_H (*(REGType16v *)0x4000336) -#define reg_G3X_EDGE_COLOR_2 (*(REGType32v *)0x4000338) -#define reg_G3X_EDGE_COLOR_2_L (*(REGType16v *)0x4000338) -#define reg_G3X_EDGE_COLOR_2_H (*(REGType16v *)0x400033a) -#define reg_G3X_EDGE_COLOR_3 (*(REGType32v *)0x400033c) -#define reg_G3X_EDGE_COLOR_3_L (*(REGType16v *)0x400033c) -#define reg_G3X_EDGE_COLOR_3_H (*(REGType16v *)0x400033e) -#define reg_G3X_ALPHA_TEST_REF (*(REGType16v *)0x4000340) -#define reg_G3X_CLEAR_COLOR (*(REGType32v *)0x4000350) -#define reg_G3X_CLEAR_DEPTH (*(REGType16v *)0x4000354) -#define reg_G3X_CLRIMAGE_OFFSET (*(REGType16v *)0x4000356) -#define reg_G3X_FOG_COLOR (*(REGType32v *)0x4000358) -#define reg_G3X_FOG_OFFSET (*(REGType16v *)0x400035c) -#define reg_G3X_FOG_TABLE_0 (*(REGType32v *)0x4000360) -#define reg_G3X_FOG_TABLE_0_L (*(REGType16v *)0x4000360) -#define reg_G3X_FOG_TABLE_0_H (*(REGType16v *)0x4000362) -#define reg_G3X_FOG_TABLE_1 (*(REGType32v *)0x4000364) -#define reg_G3X_FOG_TABLE_1_L (*(REGType16v *)0x4000364) -#define reg_G3X_FOG_TABLE_1_H (*(REGType16v *)0x4000366) -#define reg_G3X_FOG_TABLE_2 (*(REGType32v *)0x4000368) -#define reg_G3X_FOG_TABLE_2_L (*(REGType16v *)0x4000368) -#define reg_G3X_FOG_TABLE_2_H (*(REGType16v *)0x400036a) -#define reg_G3X_FOG_TABLE_3 (*(REGType32v *)0x400036c) -#define reg_G3X_FOG_TABLE_3_L (*(REGType16v *)0x400036c) -#define reg_G3X_FOG_TABLE_3_H (*(REGType16v *)0x400036e) -#define reg_G3X_FOG_TABLE_4 (*(REGType32v *)0x4000370) -#define reg_G3X_FOG_TABLE_4_L (*(REGType16v *)0x4000370) -#define reg_G3X_FOG_TABLE_4_H (*(REGType16v *)0x4000372) -#define reg_G3X_FOG_TABLE_5 (*(REGType32v *)0x4000374) -#define reg_G3X_FOG_TABLE_5_L (*(REGType16v *)0x4000374) -#define reg_G3X_FOG_TABLE_5_H (*(REGType16v *)0x4000376) -#define reg_G3X_FOG_TABLE_6 (*(REGType32v *)0x4000378) -#define reg_G3X_FOG_TABLE_6_L (*(REGType16v *)0x4000378) -#define reg_G3X_FOG_TABLE_6_H (*(REGType16v *)0x400037a) -#define reg_G3X_FOG_TABLE_7 (*(REGType32v *)0x400037c) -#define reg_G3X_FOG_TABLE_7_L (*(REGType16v *)0x400037c) -#define reg_G3X_FOG_TABLE_7_H (*(REGType16v *)0x400037e) -#define reg_G3X_TOON_TABLE_0 (*(REGType32v *)0x4000380) -#define reg_G3X_TOON_TABLE_0_L (*(REGType16v *)0x4000380) -#define reg_G3X_TOON_TABLE_0_H (*(REGType16v *)0x4000382) -#define reg_G3X_TOON_TABLE_1 (*(REGType32v *)0x4000384) -#define reg_G3X_TOON_TABLE_1_L (*(REGType16v *)0x4000384) -#define reg_G3X_TOON_TABLE_1_H (*(REGType16v *)0x4000386) -#define reg_G3X_TOON_TABLE_2 (*(REGType32v *)0x4000388) -#define reg_G3X_TOON_TABLE_2_L (*(REGType16v *)0x4000388) -#define reg_G3X_TOON_TABLE_2_H (*(REGType16v *)0x400038a) -#define reg_G3X_TOON_TABLE_3 (*(REGType32v *)0x400038c) -#define reg_G3X_TOON_TABLE_3_L (*(REGType16v *)0x400038c) -#define reg_G3X_TOON_TABLE_3_H (*(REGType16v *)0x400038e) -#define reg_G3X_TOON_TABLE_4 (*(REGType32v *)0x4000390) -#define reg_G3X_TOON_TABLE_4_L (*(REGType16v *)0x4000390) -#define reg_G3X_TOON_TABLE_4_H (*(REGType16v *)0x4000392) -#define reg_G3X_TOON_TABLE_5 (*(REGType32v *)0x4000394) -#define reg_G3X_TOON_TABLE_5_L (*(REGType16v *)0x4000394) -#define reg_G3X_TOON_TABLE_5_H (*(REGType16v *)0x4000396) -#define reg_G3X_TOON_TABLE_7 (*(REGType32v *)0x400039c) -#define reg_G3X_TOON_TABLE_7_L (*(REGType16v *)0x400039c) -#define reg_G3X_TOON_TABLE_7_H (*(REGType16v *)0x400039e) -#define reg_G3X_TOON_TABLE_8 (*(REGType32v *)0x40003a0) -#define reg_G3X_TOON_TABLE_8_L (*(REGType16v *)0x40003a0) -#define reg_G3X_TOON_TABLE_8_H (*(REGType16v *)0x40003a2) -#define reg_G3X_TOON_TABLE_9 (*(REGType32v *)0x40003a4) -#define reg_G3X_TOON_TABLE_9_L (*(REGType16v *)0x40003a4) -#define reg_G3X_TOON_TABLE_9_H (*(REGType16v *)0x40003a6) -#define reg_G3X_TOON_TABLE_10 (*(REGType32v *)0x40003a8) -#define reg_G3X_TOON_TABLE_10_L (*(REGType16v *)0x40003a8) -#define reg_G3X_TOON_TABLE_10_H (*(REGType16v *)0x40003aa) -#define reg_G3X_TOON_TABLE_11 (*(REGType32v *)0x40003ac) -#define reg_G3X_TOON_TABLE_11_L (*(REGType16v *)0x40003ac) -#define reg_G3X_TOON_TABLE_11_H (*(REGType16v *)0x40003ae) -#define reg_G3X_TOON_TABLE_12 (*(REGType32v *)0x40003b0) -#define reg_G3X_TOON_TABLE_12_L (*(REGType16v *)0x40003b0) -#define reg_G3X_TOON_TABLE_12_H (*(REGType16v *)0x40003b2) -#define reg_G3X_TOON_TABLE_13 (*(REGType32v *)0x40003b4) -#define reg_G3X_TOON_TABLE_13_L (*(REGType16v *)0x40003b4) -#define reg_G3X_TOON_TABLE_13_H (*(REGType16v *)0x40003b6) -#define reg_G3X_TOON_TABLE_14 (*(REGType32v *)0x40003b8) -#define reg_G3X_TOON_TABLE_14_L (*(REGType16v *)0x40003b8) -#define reg_G3X_TOON_TABLE_14_H (*(REGType16v *)0x40003ba) -#define reg_G3X_TOON_TABLE_15 (*(REGType32v *)0x40003bc) -#define reg_G3X_TOON_TABLE_15_L (*(REGType16v *)0x40003bc) -#define reg_G3X_TOON_TABLE_15_H (*(REGType16v *)0x40003be) -#define reg_G3X_GXFIFO (*(REGType32v *)0x4000400) - -#define reg_G3_MTX_MODE (*(REGType32v *)0x4000440) -#define reg_G3_MTX_PUSH (*(REGType32v *)0x4000444) -#define reg_G3_MTX_POP (*(REGType32v *)0x4000448) -#define reg_G3_MTX_STORE (*(REGType32v *)0x400044c) -#define reg_G3_MTX_RESTORE (*(REGType32v *)0x4000450) -#define reg_G3_MTX_IDENTITY (*(REGType32v *)0x4000454) -#define reg_G3_MTX_LOAD_4x4 (*(REGType32v *)0x4000458) -#define reg_G3_MTX_LOAD_4x3 (*(REGType32v *)0x400045c) -#define reg_G3_MTX_MULT_4x4 (*(REGType32v *)0x4000460) -#define reg_G3_MTX_MULT_4x3 (*(REGType32v *)0x4000464) -#define reg_G3_MTX_MULT_3x3 (*(REGType32v *)0x4000468) -#define reg_G3_MTX_SCALE (*(REGType32v *)0x400046c) -#define reg_G3_MTX_TRANS (*(REGType32v *)0x4000470) -#define reg_G3_COLOR (*(REGType32v *)0x4000480) -#define reg_G3_NORMAL (*(REGType32v *)0x4000484) -#define reg_G3_TEXCOORD (*(REGType32v *)0x4000488) -#define reg_G3_VTX_16 (*(REGType32v *)0x400048c) -#define reg_G3_VTX_10 (*(REGType32v *)0x4000490) -#define reg_G3_VTX_XY (*(REGType32v *)0x4000494) -#define reg_G3_VTX_XZ (*(REGType32v *)0x4000498) -#define reg_G3_VTX_YZ (*(REGType32v *)0x400049c) -#define reg_G3_VTX_DIFF (*(REGType32v *)0x40004a0) -#define reg_G3_POLYGON_ATTR (*(REGType32v *)0x40004a4) -#define reg_G3_TEXIMAGE_PARAM (*(REGType32v *)0x40004a8) -#define reg_G3_TEXPLTT_BASE (*(REGType32v *)0x40004ac) -#define reg_G3_DIF_AMB (*(REGType32v *)0x40004c0) -#define reg_G3_SPE_EMI (*(REGType32v *)0x40004c4) -#define reg_G3_LIGHT_VECTOR (*(REGType32v *)0x40004c8) -#define reg_G3_LIGHT_COLOR (*(REGType32v *)0x40004cc) -#define reg_G3_SHININESS (*(REGType32v *)0x40004d0) -#define reg_G3_BEGIN_VTXS (*(REGType32v *)0x4000500) -#define reg_G3_END_VTXS (*(REGType32v *)0x4000504) -#define reg_G3_SWAP_BUFFERS (*(REGType32v *)0x4000540) -#define reg_G3_VIEWPORT (*(REGType32v *)0x4000580) -#define reg_G3_BOX_TEST (*(REGType32v *)0x40005c0) -#define reg_G3_POS_TEST (*(REGType32v *)0x40005c4) -#define reg_G3_VEC_TEST (*(REGType32v *)0x40005c8) - -#define reg_G3X_GXSTAT (*(REGType32v *)0x4000600) -#define reg_G3X_LISTRAM_COUNT (*(REGType16v *)0x4000604) -#define reg_G3X_VTXRAM_COUNT (*(REGType16v *)0x4000606) -#define reg_G3X_DISP_1DOT_DEPTH (*(REGType16v *)0x4000610) -#define reg_G3X_POS_RESULT_X (*(const REGType32v *)0x4000620) -#define reg_G3X_POS_RESULT_Y (*(const REGType32v *)0x4000624) -#define reg_G3X_POS_RESULT_Z (*(const REGType32v *)0x4000628) -#define reg_G3X_POS_RESULT_W (*(const REGType32v *)0x400062c) -#define reg_G3X_VEC_RESULT_X (*(const REGType16v *)0x4000630) -#define reg_G3X_VEC_RESULT_Y (*(const REGType16v *)0x4000632) -#define reg_G3X_VEC_RESULT_Z (*(const REGType16v *)0x4000634) -#define reg_G3X_CLIPMTX_RESULT_0 (*(const REGType32v *)0x4000640) -#define reg_G3X_CLIPMTX_RESULT_1 (*(const REGType32v *)0x4000644) -#define reg_G3X_CLIPMTX_RESULT_2 (*(const REGType32v *)0x4000648) -#define reg_G3X_CLIPMTX_RESULT_3 (*(const REGType32v *)0x400064c) -#define reg_G3X_CLIPMTX_RESULT_4 (*(const REGType32v *)0x4000650) -#define reg_G3X_CLIPMTX_RESULT_5 (*(const REGType32v *)0x4000654) -#define reg_G3X_CLIPMTX_RESULT_6 (*(const REGType32v *)0x4000658) -#define reg_G3X_CLIPMTX_RESULT_7 (*(const REGType32v *)0x400065c) -#define reg_G3X_CLIPMTX_RESULT_8 (*(const REGType32v *)0x4000660) -#define reg_G3X_CLIPMTX_RESULT_9 (*(const REGType32v *)0x4000664) -#define reg_G3X_CLIPMTX_RESULT_10 (*(const REGType32v *)0x4000668) -#define reg_G3X_CLIPMTX_RESULT_11 (*(const REGType32v *)0x400066c) -#define reg_G3X_CLIPMTX_RESULT_12 (*(const REGType32v *)0x4000670) -#define reg_G3X_CLIPMTX_RESULT_13 (*(const REGType32v *)0x4000674) -#define reg_G3X_CLIPMTX_RESULT_14 (*(const REGType32v *)0x4000678) -#define reg_G3X_CLIPMTX_RESULT_15 (*(const REGType32v *)0x400067c) -#define reg_G3X_VECMTX_RESULT_0 (*(const REGType32v *)0x4000680) -#define reg_G3X_VECMTX_RESULT_1 (*(const REGType32v *)0x4000684) -#define reg_G3X_VECMTX_RESULT_2 (*(const REGType32v *)0x4000688) -#define reg_G3X_VECMTX_RESULT_3 (*(const REGType32v *)0x400068c) -#define reg_G3X_VECMTX_RESULT_4 (*(const REGType32v *)0x4000690) -#define reg_G3X_VECMTX_RESULT_5 (*(const REGType32v *)0x4000694) -#define reg_G3X_VECMTX_RESULT_6 (*(const REGType32v *)0x4000698) -#define reg_G3X_VECMTX_RESULT_7 (*(const REGType32v *)0x400069c) -#define reg_G3X_VECMTX_RESULT_8 (*(const REGType32v *)0x40006a0) - -#define reg_GXS_DB_DISPCNT (*(REGType32v *)0x4001000) - -#define reg_G2S_DB_BG0CNT (*(REGType16v *)0x4001008) -#define reg_G2S_DB_BG1CNT (*(REGType16v *)0x400100a) -#define reg_G2S_DB_BG2CNT (*(REGType16v *)0x400100c) -#define reg_G2S_DB_BG3CNT (*(REGType16v *)0x400100e) -#define reg_G2S_DB_BG0OFS (*(REGType32v *)0x4001010) -#define reg_G2S_DB_BG0HOFS (*(REGType16v *)0x4001010) -#define reg_G2S_DB_BG0VOFS (*(REGType16v *)0x4001012) -#define reg_G2S_DB_BG1OFS (*(REGType32v *)0x4001014) -#define reg_G2S_DB_BG1HOFS (*(REGType16v *)0x4001014) -#define reg_G2S_DB_BG1VOFS (*(REGType16v *)0x4001016) -#define reg_G2S_DB_BG2OFS (*(REGType32v *)0x4001018) -#define reg_G2S_DB_BG2HOFS (*(REGType16v *)0x4001018) -#define reg_G2S_DB_BG2VOFS (*(REGType16v *)0x400101a) -#define reg_G2S_DB_BG3OFS (*(REGType32v *)0x400101c) -#define reg_G2S_DB_BG3HOFS (*(REGType16v *)0x400101c) -#define reg_G2S_DB_BG3VOFS (*(REGType16v *)0x400101e) -#define reg_G2S_DB_BG2PA (*(REGType16v *)0x4001020) -#define reg_G2S_DB_BG2PB (*(REGType16v *)0x4001022) -#define reg_G2S_DB_BG2PC (*(REGType16v *)0x4001024) -#define reg_G2S_DB_BG2PD (*(REGType16v *)0x4001026) -#define reg_G2S_DB_BG2X (*(REGType32v *)0x4001028) -#define reg_G2S_DB_BG2Y (*(REGType32v *)0x400102c) -#define reg_G2S_DB_BG3PA (*(REGType16v *)0x4001030) -#define reg_G2S_DB_BG3PB (*(REGType16v *)0x4001032) -#define reg_G2S_DB_BG3PC (*(REGType16v *)0x4001034) -#define reg_G2S_DB_BG3PD (*(REGType16v *)0x4001036) -#define reg_G2S_DB_BG3X (*(REGType32v *)0x4001038) -#define reg_G2S_DB_BG3Y (*(REGType32v *)0x400103c) -#define reg_G2S_DB_WIN0H (*(REGType16v *)0x4001040) -#define reg_G2S_DB_WIN1H (*(REGType16v *)0x4001042) -#define reg_G2S_DB_WIN0V (*(REGType16v *)0x4001044) -#define reg_G2S_DB_WIN1V (*(REGType16v *)0x4001046) -#define reg_G2S_DB_WININ (*(REGType16v *)0x4001048) -#define reg_G2S_DB_WINOUT (*(REGType16v *)0x400104a) -#define reg_G2S_DB_MOSAIC (*(REGType16v *)0x400104c) -#define reg_G2S_DB_BLDCNT (*(REGType16v *)0x4001050) -#define reg_G2S_DB_BLDALPHA (*(REGType16v *)0x4001052) -#define reg_G2S_DB_BLDY (*(REGType16v *)0x4001054) - -#define reg_GXS_DB_MASTER_BRIGHT (*(REGType16v *)0x400106c) - -#define reg_PXI_RECV_FIFO (*(REGType32v *)0x4100000) - -#define reg_MI_MCD1 (*(REGType32v *)0x4100010) -#define reg_CARD_DATA (*(REGType32v *)0x4100010) //? - -#define REG_OS_IE_VE_SHIFT 2 -#define REG_OS_IE_T0_SHIFT 3 -#define REG_OS_IE_T1_SHIFT 4 -#define REG_OS_IE_T2_SHIFT 5 -#define REG_OS_IE_T3_SHIFT 6 -#define REG_OS_IE_IFN_SHIFT 18 -#define REG_OS_IE_MC_SHIFT 19 - -#define REG_PAD_KEYINPUT_L_SHIFT 9 -#define REG_PAD_KEYINPUT_L_SIZE 1 -#define REG_PAD_KEYINPUT_L_MASK 0x0200 - -#define REG_PAD_KEYINPUT_R_SHIFT 8 -#define REG_PAD_KEYINPUT_R_SIZE 1 -#define REG_PAD_KEYINPUT_R_MASK 0x0100 - -#define REG_PAD_KEYINPUT_DOWN_SHIFT 7 -#define REG_PAD_KEYINPUT_DOWN_SIZE 1 -#define REG_PAD_KEYINPUT_DOWN_MASK 0x0080 - -#define REG_PAD_KEYINPUT_UP_SHIFT 6 -#define REG_PAD_KEYINPUT_UP_SIZE 1 -#define REG_PAD_KEYINPUT_UP_MASK 0x0040 - -#define REG_PAD_KEYINPUT_LEFT_SHIFT 5 -#define REG_PAD_KEYINPUT_LEFT_SIZE 1 -#define REG_PAD_KEYINPUT_LEFT_MASK 0x0020 - -#define REG_PAD_KEYINPUT_RIGHT_SHIFT 4 -#define REG_PAD_KEYINPUT_RIGHT_SIZE 1 -#define REG_PAD_KEYINPUT_RIGHT_MASK 0x0010 - -#define REG_PAD_KEYINPUT_START_SHIFT 3 -#define REG_PAD_KEYINPUT_START_SIZE 1 -#define REG_PAD_KEYINPUT_START_MASK 0x0008 - -#define REG_PAD_KEYINPUT_SEL_SHIFT 2 -#define REG_PAD_KEYINPUT_SEL_SIZE 1 -#define REG_PAD_KEYINPUT_SEL_MASK 0x0004 - -#define REG_PAD_KEYINPUT_B_SHIFT 1 -#define REG_PAD_KEYINPUT_B_SIZE 1 -#define REG_PAD_KEYINPUT_B_MASK 0x0002 - -#define REG_PAD_KEYINPUT_A_SHIFT 0 -#define REG_PAD_KEYINPUT_A_SIZE 1 -#define REG_PAD_KEYINPUT_A_MASK 0x0001 - -#ifndef SDK_ASM -#define REG_PAD_KEYINPUT_FIELD( l, r, down, up, left, right, start, sel, b, a ) \ - (u16)( \ - ((u32)(l) << REG_PAD_KEYINPUT_L_SHIFT) | \ - ((u32)(r) << REG_PAD_KEYINPUT_R_SHIFT) | \ - ((u32)(down) << REG_PAD_KEYINPUT_DOWN_SHIFT) | \ - ((u32)(up) << REG_PAD_KEYINPUT_UP_SHIFT) | \ - ((u32)(left) << REG_PAD_KEYINPUT_LEFT_SHIFT) | \ - ((u32)(right) << REG_PAD_KEYINPUT_RIGHT_SHIFT) | \ - ((u32)(start) << REG_PAD_KEYINPUT_START_SHIFT) | \ - ((u32)(sel) << REG_PAD_KEYINPUT_SEL_SHIFT) | \ - ((u32)(b) << REG_PAD_KEYINPUT_B_SHIFT) | \ - ((u32)(a) << REG_PAD_KEYINPUT_A_SHIFT)) -#endif - -#define REG_PAD_KEYCNT_LOGIC_SHIFT 15 -#define REG_PAD_KEYCNT_LOGIC_SIZE 1 -#define REG_PAD_KEYCNT_LOGIC_MASK 0x8000 - -#define REG_PAD_KEYCNT_INTR_SHIFT 14 -#define REG_PAD_KEYCNT_INTR_SIZE 1 -#define REG_PAD_KEYCNT_INTR_MASK 0x4000 - -#define REG_PAD_KEYCNT_L_SHIFT 9 -#define REG_PAD_KEYCNT_L_SIZE 1 -#define REG_PAD_KEYCNT_L_MASK 0x0200 - -#define REG_PAD_KEYCNT_R_SHIFT 8 -#define REG_PAD_KEYCNT_R_SIZE 1 -#define REG_PAD_KEYCNT_R_MASK 0x0100 - -#define REG_PAD_KEYCNT_DOWN_SHIFT 7 -#define REG_PAD_KEYCNT_DOWN_SIZE 1 -#define REG_PAD_KEYCNT_DOWN_MASK 0x0080 - -#define REG_PAD_KEYCNT_UP_SHIFT 6 -#define REG_PAD_KEYCNT_UP_SIZE 1 -#define REG_PAD_KEYCNT_UP_MASK 0x0040 - -#define REG_PAD_KEYCNT_LEFT_SHIFT 5 -#define REG_PAD_KEYCNT_LEFT_SIZE 1 -#define REG_PAD_KEYCNT_LEFT_MASK 0x0020 - -#define REG_PAD_KEYCNT_RIGHT_SHIFT 4 -#define REG_PAD_KEYCNT_RIGHT_SIZE 1 -#define REG_PAD_KEYCNT_RIGHT_MASK 0x0010 - -#define REG_PAD_KEYCNT_START_SHIFT 3 -#define REG_PAD_KEYCNT_START_SIZE 1 -#define REG_PAD_KEYCNT_START_MASK 0x0008 - -#define REG_PAD_KEYCNT_SEL_SHIFT 2 -#define REG_PAD_KEYCNT_SEL_SIZE 1 -#define REG_PAD_KEYCNT_SEL_MASK 0x0004 - -#define REG_PAD_KEYCNT_B_SHIFT 1 -#define REG_PAD_KEYCNT_B_SIZE 1 -#define REG_PAD_KEYCNT_B_MASK 0x0002 - -#define REG_PAD_KEYCNT_A_SHIFT 0 -#define REG_PAD_KEYCNT_A_SIZE 1 -#define REG_PAD_KEYCNT_A_MASK 0x0001 - -#define REG_G2_WINOUT_OBJWININ_SHIFT 8 -#define REG_G2_WINOUT_OBJWININ_SIZE 6 -#define REG_G2_WINOUT_OBJWININ_MASK 0x3f00 - -#define REG_G2_WINOUT_WINOUT_SHIFT 0 -#define REG_G2_WINOUT_WINOUT_SIZE 6 -#define REG_G2_WINOUT_WINOUT_MASK 0x003f - -#define REG_G2_WINOUT_FIELD( objwinin, winout ) \ - (u16)( \ - ((u32)(objwinin) << REG_G2_WINOUT_OBJWININ_SHIFT) | \ - ((u32)(winout) << REG_G2_WINOUT_WINOUT_SHIFT)) - -#ifndef SDK_ASM -#define REG_PAD_KEYCNT_FIELD( logic, intr, l, r, down, up, left, right, start, sel, b, a ) \ - (u16)( \ - ((u32)(logic) << REG_PAD_KEYCNT_LOGIC_SHIFT) | \ - ((u32)(intr) << REG_PAD_KEYCNT_INTR_SHIFT) | \ - ((u32)(l) << REG_PAD_KEYCNT_L_SHIFT) | \ - ((u32)(r) << REG_PAD_KEYCNT_R_SHIFT) | \ - ((u32)(down) << REG_PAD_KEYCNT_DOWN_SHIFT) | \ - ((u32)(up) << REG_PAD_KEYCNT_UP_SHIFT) | \ - ((u32)(left) << REG_PAD_KEYCNT_LEFT_SHIFT) | \ - ((u32)(right) << REG_PAD_KEYCNT_RIGHT_SHIFT) | \ - ((u32)(start) << REG_PAD_KEYCNT_START_SHIFT) | \ - ((u32)(sel) << REG_PAD_KEYCNT_SEL_SHIFT) | \ - ((u32)(b) << REG_PAD_KEYCNT_B_SHIFT) | \ - ((u32)(a) << REG_PAD_KEYCNT_A_SHIFT)) -#endif - -#define REG_GX_POWCNT_GE_SHIFT 3 -#define REG_GX_POWCNT_GE_SIZE 1 -#define REG_GX_POWCNT_GE_MASK 0x0008 - -#define REG_GX_POWCNT_RE_SHIFT 2 -#define REG_GX_POWCNT_RE_SIZE 1 -#define REG_GX_POWCNT_RE_MASK 0x0004 - -#define REG_GX_POWCNT_E2DG_SHIFT 1 -#define REG_GX_POWCNT_E2DG_SIZE 1 -#define REG_GX_POWCNT_E2DG_MASK 0x0002 - -#define REG_GX_POWCNT_LCD_SHIFT 0 -#define REG_GX_POWCNT_LCD_SIZE 1 -#define REG_GX_POWCNT_LCD_MASK 0x0001 - -#define REG_GX_POWCNT_LCDB_SHIFT 8 -#define REG_GX_POWCNT_LCDB_SIZE 1 -#define REG_GX_POWCNT_LCDB_MASK 0x0100 - -#define REG_GX_POWCNT_E2DGB_SHIFT 9 -#define REG_GX_POWCNT_E2DGB_SIZE 1 -#define REG_GX_POWCNT_E2DGB_MASK 0x0200 - -#define REG_GX_POWCNT_DSEL_SHIFT 15 -#define REG_GX_POWCNT_DSEL_SIZE 1 -#define REG_GX_POWCNT_DSEL_MASK 0x8000 - -// GX_DISPCNT -#define REG_GX_DISPCNT_O_SHIFT 31 -#define REG_GX_DISPCNT_O_SIZE 1 -#define REG_GX_DISPCNT_O_MASK 0x80000000 - -#define REG_GX_DISPCNT_BG_SHIFT 30 -#define REG_GX_DISPCNT_BG_SIZE 1 -#define REG_GX_DISPCNT_BG_MASK 0x40000000 - -#define REG_GX_DISPCNT_BGSCREENOFFSET_SHIFT 27 -#define REG_GX_DISPCNT_BGSCREENOFFSET_SIZE 3 -#define REG_GX_DISPCNT_BGSCREENOFFSET_MASK 0x38000000 - -#define REG_GX_DISPCNT_BGCHAROFFSET_SHIFT 24 -#define REG_GX_DISPCNT_BGCHAROFFSET_SIZE 3 -#define REG_GX_DISPCNT_BGCHAROFFSET_MASK 0x07000000 - -#define REG_GX_DISPCNT_OH_SHIFT 23 -#define REG_GX_DISPCNT_OH_SIZE 1 -#define REG_GX_DISPCNT_OH_MASK 0x00800000 - -#define REG_GX_DISPCNT_EXOBJ_SHIFT 20 -#define REG_GX_DISPCNT_EXOBJ_SIZE 3 -#define REG_GX_DISPCNT_EXOBJ_MASK 0x00700000 - -#define REG_GX_DISPCNT_VRAM_SHIFT 18 -#define REG_GX_DISPCNT_VRAM_SIZE 2 -#define REG_GX_DISPCNT_VRAM_MASK 0x000c0000 - -#define REG_GX_DISPCNT_MODE_SHIFT 16 -#define REG_GX_DISPCNT_MODE_SIZE 2 -#define REG_GX_DISPCNT_MODE_MASK 0x00030000 - -#define REG_GX_DISPCNT_OW_SHIFT 15 -#define REG_GX_DISPCNT_OW_SIZE 1 -#define REG_GX_DISPCNT_OW_MASK 0x00008000 - -#define REG_GX_DISPCNT_W1_SHIFT 14 -#define REG_GX_DISPCNT_W1_SIZE 1 -#define REG_GX_DISPCNT_W1_MASK 0x00004000 - -#define REG_GX_DISPCNT_W0_SHIFT 13 -#define REG_GX_DISPCNT_W0_SIZE 1 -#define REG_GX_DISPCNT_W0_MASK 0x00002000 - -#define REG_GX_DISPCNT_DISPLAY_SHIFT 8 -#define REG_GX_DISPCNT_DISPLAY_SIZE 5 -#define REG_GX_DISPCNT_DISPLAY_MASK 0x00001f00 - -#define REG_GX_DISPCNT_BLANK_SHIFT 7 -#define REG_GX_DISPCNT_BLANK_SIZE 1 -#define REG_GX_DISPCNT_BLANK_MASK 0x00000080 - -#define REG_GX_DISPCNT_OBJMAP_SHIFT 4 -#define REG_GX_DISPCNT_OBJMAP_SIZE 3 -#define REG_GX_DISPCNT_OBJMAP_MASK 0x00000070 - -#define REG_GX_DISPCNT_BG02D3D_SHIFT 3 -#define REG_GX_DISPCNT_BG02D3D_SIZE 1 -#define REG_GX_DISPCNT_BG02D3D_MASK 0x00000008 - -#define REG_GX_DISPCNT_BGMODE_SHIFT 0 -#define REG_GX_DISPCNT_BGMODE_SIZE 3 -#define REG_GX_DISPCNT_BGMODE_MASK 0x00000007 - -#define REG_GX_DISPCNT_OBJMAP_CH_SHIFT 4 -#define REG_GX_DISPCNT_OBJMAP_CH_SIZE 1 -#define REG_GX_DISPCNT_OBJMAP_CH_MASK 0x00000010 - -#define REG_GX_DISPCNT_OBJMAP_BM_SHIFT 5 -#define REG_GX_DISPCNT_OBJMAP_BM_SIZE 2 -#define REG_GX_DISPCNT_OBJMAP_BM_MASK 0x00000060 - -#define REG_GX_DISPCNT_EXOBJ_CH_SHIFT 20 -#define REG_GX_DISPCNT_EXOBJ_CH_SIZE 2 -#define REG_GX_DISPCNT_EXOBJ_CH_MASK 0x00300000 - -#define REG_GX_DISPCNT_EXOBJ_BM_SHIFT 22 -#define REG_GX_DISPCNT_EXOBJ_BM_SIZE 1 -#define REG_GX_DISPCNT_EXOBJ_BM_MASK 0x00400000 - -// GXS_DB_DISPCNT -#define REG_GXS_DB_DISPCNT_O_SHIFT 31 -#define REG_GXS_DB_DISPCNT_O_SIZE 1 -#define REG_GXS_DB_DISPCNT_O_MASK 0x80000000 - -#define REG_GXS_DB_DISPCNT_BG_SHIFT 30 -#define REG_GXS_DB_DISPCNT_BG_SIZE 1 -#define REG_GXS_DB_DISPCNT_BG_MASK 0x40000000 - -#define REG_GXS_DB_DISPCNT_OH_SHIFT 23 -#define REG_GXS_DB_DISPCNT_OH_SIZE 1 -#define REG_GXS_DB_DISPCNT_OH_MASK 0x00800000 - -#define REG_GXS_DB_DISPCNT_EXOBJ_SHIFT 20 -#define REG_GXS_DB_DISPCNT_EXOBJ_SIZE 2 -#define REG_GXS_DB_DISPCNT_EXOBJ_MASK 0x00300000 - -#define REG_GXS_DB_DISPCNT_MODE_SHIFT 16 -#define REG_GXS_DB_DISPCNT_MODE_SIZE 1 -#define REG_GXS_DB_DISPCNT_MODE_MASK 0x00010000 - -#define REG_GXS_DB_DISPCNT_OW_SHIFT 15 -#define REG_GXS_DB_DISPCNT_OW_SIZE 1 -#define REG_GXS_DB_DISPCNT_OW_MASK 0x00008000 - -#define REG_GXS_DB_DISPCNT_W1_SHIFT 14 -#define REG_GXS_DB_DISPCNT_W1_SIZE 1 -#define REG_GXS_DB_DISPCNT_W1_MASK 0x00004000 - -#define REG_GXS_DB_DISPCNT_W0_SHIFT 13 -#define REG_GXS_DB_DISPCNT_W0_SIZE 1 -#define REG_GXS_DB_DISPCNT_W0_MASK 0x00002000 - -#define REG_GXS_DB_DISPCNT_DISPLAY_SHIFT 8 -#define REG_GXS_DB_DISPCNT_DISPLAY_SIZE 5 -#define REG_GXS_DB_DISPCNT_DISPLAY_MASK 0x00001f00 - -#define REG_GXS_DB_DISPCNT_BLANK_SHIFT 7 -#define REG_GXS_DB_DISPCNT_BLANK_SIZE 1 -#define REG_GXS_DB_DISPCNT_BLANK_MASK 0x00000080 - -#define REG_GXS_DB_DISPCNT_OBJMAP_SHIFT 4 -#define REG_GXS_DB_DISPCNT_OBJMAP_SIZE 3 -#define REG_GXS_DB_DISPCNT_OBJMAP_MASK 0x00000070 - -#define REG_GXS_DB_DISPCNT_BGMODE_SHIFT 0 -#define REG_GXS_DB_DISPCNT_BGMODE_SIZE 3 -#define REG_GXS_DB_DISPCNT_BGMODE_MASK 0x00000007 - -#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SHIFT 4 -#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SIZE 1 -#define REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK 0x00000010 - -#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SHIFT 5 -#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SIZE 2 -#define REG_GXS_DB_DISPCNT_OBJMAP_BM_MASK 0x00000060 - -#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SHIFT 20 -#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SIZE 2 -#define REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK 0x00300000 - -// MASTER BRIGHT -#define REG_GX_MASTER_BRIGHT_E_MOD_SHIFT 14 -#define REG_GX_MASTER_BRIGHT_E_MOD_SIZE 2 -#define REG_GX_MASTER_BRIGHT_E_MOD_MASK 0xc000 - -#define REG_GX_MASTER_BRIGHT_E_VALUE_SHIFT 0 -#define REG_GX_MASTER_BRIGHT_E_VALUE_SIZE 5 -#define REG_GX_MASTER_BRIGHT_E_VALUE_MASK 0x001f - -// DISPSTAT -#define REG_GX_DISPSTAT_VCOUNTER_SHIFT 7 -#define REG_GX_DISPSTAT_VCOUNTER_SIZE 9 -#define REG_GX_DISPSTAT_VCOUNTER_MASK 0xff80 - -#define REG_GX_DISPSTAT_VQI_SHIFT 5 -#define REG_GX_DISPSTAT_VQI_SIZE 1 -#define REG_GX_DISPSTAT_VQI_MASK 0x0020 - -#define REG_GX_DISPSTAT_HBI_SHIFT 4 -#define REG_GX_DISPSTAT_HBI_SIZE 1 -#define REG_GX_DISPSTAT_HBI_MASK 0x0010 - -#define REG_GX_DISPSTAT_VBI_SHIFT 3 -#define REG_GX_DISPSTAT_VBI_SIZE 1 -#define REG_GX_DISPSTAT_VBI_MASK 0x0008 - -#define REG_GX_DISPSTAT_LYC_SHIFT 2 -#define REG_GX_DISPSTAT_LYC_SIZE 1 -#define REG_GX_DISPSTAT_LYC_MASK 0x0004 - -#define REG_GX_DISPSTAT_HBLK_SHIFT 1 -#define REG_GX_DISPSTAT_HBLK_SIZE 1 -#define REG_GX_DISPSTAT_HBLK_MASK 0x0002 - -#define REG_GX_DISPSTAT_VBLK_SHIFT 0 -#define REG_GX_DISPSTAT_VBLK_SIZE 1 -#define REG_GX_DISPSTAT_VBLK_MASK 0x0001 - -// G2_BG0CNT -#define REG_G2_BG0CNT_SCREENSIZE_SHIFT 14 -#define REG_G2_BG0CNT_SCREENSIZE_SIZE 2 -#define REG_G2_BG0CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2_BG0CNT_BGPLTTSLOT_SHIFT 13 -#define REG_G2_BG0CNT_BGPLTTSLOT_SIZE 1 -#define REG_G2_BG0CNT_BGPLTTSLOT_MASK 0x2000 - -#define REG_G2_BG0CNT_SCREENBASE_SHIFT 8 -#define REG_G2_BG0CNT_SCREENBASE_SIZE 5 -#define REG_G2_BG0CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2_BG0CNT_COLORMODE_SHIFT 7 -#define REG_G2_BG0CNT_COLORMODE_SIZE 1 -#define REG_G2_BG0CNT_COLORMODE_MASK 0x0080 - -#define REG_G2_BG0CNT_MOSAIC_SHIFT 6 -#define REG_G2_BG0CNT_MOSAIC_SIZE 1 -#define REG_G2_BG0CNT_MOSAIC_MASK 0x0040 - -#define REG_G2_BG0CNT_CHARBASE_SHIFT 2 -#define REG_G2_BG0CNT_CHARBASE_SIZE 4 -#define REG_G2_BG0CNT_CHARBASE_MASK 0x003c - -#define REG_G2_BG0CNT_PRIORITY_SHIFT 0 -#define REG_G2_BG0CNT_PRIORITY_SIZE 2 -#define REG_G2_BG0CNT_PRIORITY_MASK 0x0003 - -// G2_BG1CNT -#define REG_G2_BG1CNT_SCREENSIZE_SHIFT 14 -#define REG_G2_BG1CNT_SCREENSIZE_SIZE 2 -#define REG_G2_BG1CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2_BG1CNT_BGPLTTSLOT_SHIFT 13 -#define REG_G2_BG1CNT_BGPLTTSLOT_SIZE 1 -#define REG_G2_BG1CNT_BGPLTTSLOT_MASK 0x2000 - -#define REG_G2_BG1CNT_SCREENBASE_SHIFT 8 -#define REG_G2_BG1CNT_SCREENBASE_SIZE 5 -#define REG_G2_BG1CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2_BG1CNT_COLORMODE_SHIFT 7 -#define REG_G2_BG1CNT_COLORMODE_SIZE 1 -#define REG_G2_BG1CNT_COLORMODE_MASK 0x0080 - -#define REG_G2_BG1CNT_MOSAIC_SHIFT 6 -#define REG_G2_BG1CNT_MOSAIC_SIZE 1 -#define REG_G2_BG1CNT_MOSAIC_MASK 0x0040 - -#define REG_G2_BG1CNT_CHARBASE_SHIFT 2 -#define REG_G2_BG1CNT_CHARBASE_SIZE 4 -#define REG_G2_BG1CNT_CHARBASE_MASK 0x003c - -#define REG_G2_BG1CNT_PRIORITY_SHIFT 0 -#define REG_G2_BG1CNT_PRIORITY_SIZE 2 -#define REG_G2_BG1CNT_PRIORITY_MASK 0x0003 - -// G2_BG2CNT -#define REG_G2_BG2CNT_SCREENSIZE_SHIFT 14 -#define REG_G2_BG2CNT_SCREENSIZE_SIZE 2 -#define REG_G2_BG2CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2_BG2CNT_AREAOVER_SHIFT 13 -#define REG_G2_BG2CNT_AREAOVER_SIZE 1 -#define REG_G2_BG2CNT_AREAOVER_MASK 0x2000 - -#define REG_G2_BG2CNT_SCREENBASE_SHIFT 8 -#define REG_G2_BG2CNT_SCREENBASE_SIZE 5 -#define REG_G2_BG2CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2_BG2CNT_COLORMODE_SHIFT 7 -#define REG_G2_BG2CNT_COLORMODE_SIZE 1 -#define REG_G2_BG2CNT_COLORMODE_MASK 0x0080 - -#define REG_G2_BG2CNT_MOSAIC_SHIFT 6 -#define REG_G2_BG2CNT_MOSAIC_SIZE 1 -#define REG_G2_BG2CNT_MOSAIC_MASK 0x0040 - -#define REG_G2_BG2CNT_CHARBASE_SHIFT 2 -#define REG_G2_BG2CNT_CHARBASE_SIZE 4 -#define REG_G2_BG2CNT_CHARBASE_MASK 0x003c - -#define REG_G2_BG2CNT_PRIORITY_SHIFT 0 -#define REG_G2_BG2CNT_PRIORITY_SIZE 2 -#define REG_G2_BG2CNT_PRIORITY_MASK 0x0003 - -// G2_BG3CNT -#define REG_G2_BG3CNT_SCREENSIZE_SHIFT 14 -#define REG_G2_BG3CNT_SCREENSIZE_SIZE 2 -#define REG_G2_BG3CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2_BG3CNT_AREAOVER_SHIFT 13 -#define REG_G2_BG3CNT_AREAOVER_SIZE 1 -#define REG_G2_BG3CNT_AREAOVER_MASK 0x2000 - -#define REG_G2_BG3CNT_SCREENBASE_SHIFT 8 -#define REG_G2_BG3CNT_SCREENBASE_SIZE 5 -#define REG_G2_BG3CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2_BG3CNT_COLORMODE_SHIFT 7 -#define REG_G2_BG3CNT_COLORMODE_SIZE 1 -#define REG_G2_BG3CNT_COLORMODE_MASK 0x0080 - -#define REG_G2_BG3CNT_MOSAIC_SHIFT 6 -#define REG_G2_BG3CNT_MOSAIC_SIZE 1 -#define REG_G2_BG3CNT_MOSAIC_MASK 0x0040 - -#define REG_G2_BG3CNT_CHARBASE_SHIFT 2 -#define REG_G2_BG3CNT_CHARBASE_SIZE 4 -#define REG_G2_BG3CNT_CHARBASE_MASK 0x003c - -#define REG_G2_BG3CNT_PRIORITY_SHIFT 0 -#define REG_G2_BG3CNT_PRIORITY_SIZE 2 -#define REG_G2_BG3CNT_PRIORITY_MASK 0x0003 - -// G2S_DB_BG0CNT -#define REG_G2S_DB_BG0CNT_SCREENSIZE_SHIFT 14 -#define REG_G2S_DB_BG0CNT_SCREENSIZE_SIZE 2 -#define REG_G2S_DB_BG0CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_SHIFT 13 -#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_SIZE 1 -#define REG_G2S_DB_BG0CNT_BGPLTTSLOT_MASK 0x2000 - -#define REG_G2S_DB_BG0CNT_SCREENBASE_SHIFT 8 -#define REG_G2S_DB_BG0CNT_SCREENBASE_SIZE 5 -#define REG_G2S_DB_BG0CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2S_DB_BG0CNT_COLORMODE_SHIFT 7 -#define REG_G2S_DB_BG0CNT_COLORMODE_SIZE 1 -#define REG_G2S_DB_BG0CNT_COLORMODE_MASK 0x0080 - -#define REG_G2S_DB_BG0CNT_MOSAIC_SHIFT 6 -#define REG_G2S_DB_BG0CNT_MOSAIC_SIZE 1 -#define REG_G2S_DB_BG0CNT_MOSAIC_MASK 0x0040 - -#define REG_G2S_DB_BG0CNT_CHARBASE_SHIFT 2 -#define REG_G2S_DB_BG0CNT_CHARBASE_SIZE 4 -#define REG_G2S_DB_BG0CNT_CHARBASE_MASK 0x003c - -#define REG_G2S_DB_BG0CNT_PRIORITY_SHIFT 0 -#define REG_G2S_DB_BG0CNT_PRIORITY_SIZE 2 -#define REG_G2S_DB_BG0CNT_PRIORITY_MASK 0x0003 - -// G2S_DB_BG1CNT -#define REG_G2S_DB_BG1CNT_SCREENSIZE_SHIFT 14 -#define REG_G2S_DB_BG1CNT_SCREENSIZE_SIZE 2 -#define REG_G2S_DB_BG1CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_SHIFT 13 -#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_SIZE 1 -#define REG_G2S_DB_BG1CNT_BGPLTTSLOT_MASK 0x2000 - -#define REG_G2S_DB_BG1CNT_SCREENBASE_SHIFT 8 -#define REG_G2S_DB_BG1CNT_SCREENBASE_SIZE 5 -#define REG_G2S_DB_BG1CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2S_DB_BG1CNT_COLORMODE_SHIFT 7 -#define REG_G2S_DB_BG1CNT_COLORMODE_SIZE 1 -#define REG_G2S_DB_BG1CNT_COLORMODE_MASK 0x0080 - -#define REG_G2S_DB_BG1CNT_MOSAIC_SHIFT 6 -#define REG_G2S_DB_BG1CNT_MOSAIC_SIZE 1 -#define REG_G2S_DB_BG1CNT_MOSAIC_MASK 0x0040 - -#define REG_G2S_DB_BG1CNT_CHARBASE_SHIFT 2 -#define REG_G2S_DB_BG1CNT_CHARBASE_SIZE 4 -#define REG_G2S_DB_BG1CNT_CHARBASE_MASK 0x003c - -#define REG_G2S_DB_BG1CNT_PRIORITY_SHIFT 0 -#define REG_G2S_DB_BG1CNT_PRIORITY_SIZE 2 -#define REG_G2S_DB_BG1CNT_PRIORITY_MASK 0x0003 - -// G2S_DB_BG2CNT -#define REG_G2S_DB_BG2CNT_SCREENSIZE_SHIFT 14 -#define REG_G2S_DB_BG2CNT_SCREENSIZE_SIZE 2 -#define REG_G2S_DB_BG2CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2S_DB_BG2CNT_AREAOVER_SHIFT 13 -#define REG_G2S_DB_BG2CNT_AREAOVER_SIZE 1 -#define REG_G2S_DB_BG2CNT_AREAOVER_MASK 0x2000 - -#define REG_G2S_DB_BG2CNT_SCREENBASE_SHIFT 8 -#define REG_G2S_DB_BG2CNT_SCREENBASE_SIZE 5 -#define REG_G2S_DB_BG2CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2S_DB_BG2CNT_COLORMODE_SHIFT 7 -#define REG_G2S_DB_BG2CNT_COLORMODE_SIZE 1 -#define REG_G2S_DB_BG2CNT_COLORMODE_MASK 0x0080 - -#define REG_G2S_DB_BG2CNT_MOSAIC_SHIFT 6 -#define REG_G2S_DB_BG2CNT_MOSAIC_SIZE 1 -#define REG_G2S_DB_BG2CNT_MOSAIC_MASK 0x0040 - -#define REG_G2S_DB_BG2CNT_CHARBASE_SHIFT 2 -#define REG_G2S_DB_BG2CNT_CHARBASE_SIZE 4 -#define REG_G2S_DB_BG2CNT_CHARBASE_MASK 0x003c - -#define REG_G2S_DB_BG2CNT_PRIORITY_SHIFT 0 -#define REG_G2S_DB_BG2CNT_PRIORITY_SIZE 2 -#define REG_G2S_DB_BG2CNT_PRIORITY_MASK 0x0003 - -// G2S_DB_BG3CNT -#define REG_G2S_DB_BG3CNT_SCREENSIZE_SHIFT 14 -#define REG_G2S_DB_BG3CNT_SCREENSIZE_SIZE 2 -#define REG_G2S_DB_BG3CNT_SCREENSIZE_MASK 0xc000 - -#define REG_G2S_DB_BG3CNT_AREAOVER_SHIFT 13 -#define REG_G2S_DB_BG3CNT_AREAOVER_SIZE 1 -#define REG_G2S_DB_BG3CNT_AREAOVER_MASK 0x2000 - -#define REG_G2S_DB_BG3CNT_SCREENBASE_SHIFT 8 -#define REG_G2S_DB_BG3CNT_SCREENBASE_SIZE 5 -#define REG_G2S_DB_BG3CNT_SCREENBASE_MASK 0x1f00 - -#define REG_G2S_DB_BG3CNT_COLORMODE_SHIFT 7 -#define REG_G2S_DB_BG3CNT_COLORMODE_SIZE 1 -#define REG_G2S_DB_BG3CNT_COLORMODE_MASK 0x0080 - -#define REG_G2S_DB_BG3CNT_MOSAIC_SHIFT 6 -#define REG_G2S_DB_BG3CNT_MOSAIC_SIZE 1 -#define REG_G2S_DB_BG3CNT_MOSAIC_MASK 0x0040 - -#define REG_G2S_DB_BG3CNT_CHARBASE_SHIFT 2 -#define REG_G2S_DB_BG3CNT_CHARBASE_SIZE 4 -#define REG_G2S_DB_BG3CNT_CHARBASE_MASK 0x003c - -#define REG_G2S_DB_BG3CNT_PRIORITY_SHIFT 0 -#define REG_G2S_DB_BG3CNT_PRIORITY_SIZE 2 -#define REG_G2S_DB_BG3CNT_PRIORITY_MASK 0x0003 - -// G2_BG0OFS -#define REG_G2_BG0OFS_VOFFSET_SHIFT 16 -#define REG_G2_BG0OFS_VOFFSET_SIZE 9 -#define REG_G2_BG0OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2_BG0OFS_HOFFSET_SHIFT 0 -#define REG_G2_BG0OFS_HOFFSET_SIZE 9 -#define REG_G2_BG0OFS_HOFFSET_MASK 0x000001ff - -// G2_BG1OFS -#define REG_G2_BG1OFS_VOFFSET_SHIFT 16 -#define REG_G2_BG1OFS_VOFFSET_SIZE 9 -#define REG_G2_BG1OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2_BG1OFS_HOFFSET_SHIFT 0 -#define REG_G2_BG1OFS_HOFFSET_SIZE 9 -#define REG_G2_BG1OFS_HOFFSET_MASK 0x000001ff - -// G2_BG2OFS -#define REG_G2_BG2OFS_VOFFSET_SHIFT 16 -#define REG_G2_BG2OFS_VOFFSET_SIZE 9 -#define REG_G2_BG2OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2_BG2OFS_HOFFSET_SHIFT 0 -#define REG_G2_BG2OFS_HOFFSET_SIZE 9 -#define REG_G2_BG2OFS_HOFFSET_MASK 0x000001ff - -// G2_BG3OFS -#define REG_G2_BG3OFS_VOFFSET_SHIFT 16 -#define REG_G2_BG3OFS_VOFFSET_SIZE 9 -#define REG_G2_BG3OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2_BG3OFS_HOFFSET_SHIFT 0 -#define REG_G2_BG3OFS_HOFFSET_SIZE 9 -#define REG_G2_BG3OFS_HOFFSET_MASK 0x000001ff - -// G2S_DB_BG0OFS -#define REG_G2S_DB_BG0OFS_VOFFSET_SHIFT 16 -#define REG_G2S_DB_BG0OFS_VOFFSET_SIZE 9 -#define REG_G2S_DB_BG0OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2S_DB_BG0OFS_HOFFSET_SHIFT 0 -#define REG_G2S_DB_BG0OFS_HOFFSET_SIZE 9 -#define REG_G2S_DB_BG0OFS_HOFFSET_MASK 0x000001ff - -// G2S_DB_BG1OFS -#define REG_G2S_DB_BG1OFS_VOFFSET_SHIFT 16 -#define REG_G2S_DB_BG1OFS_VOFFSET_SIZE 9 -#define REG_G2S_DB_BG1OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2S_DB_BG1OFS_HOFFSET_SHIFT 0 -#define REG_G2S_DB_BG1OFS_HOFFSET_SIZE 9 -#define REG_G2S_DB_BG1OFS_HOFFSET_MASK 0x000001ff - -// G2S_DB_BG2OFS -#define REG_G2S_DB_BG2OFS_VOFFSET_SHIFT 16 -#define REG_G2S_DB_BG2OFS_VOFFSET_SIZE 9 -#define REG_G2S_DB_BG2OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2S_DB_BG2OFS_HOFFSET_SHIFT 0 -#define REG_G2S_DB_BG2OFS_HOFFSET_SIZE 9 -#define REG_G2S_DB_BG2OFS_HOFFSET_MASK 0x000001ff - -// G2S_DB_BG3OFS -#define REG_G2S_DB_BG3OFS_VOFFSET_SHIFT 16 -#define REG_G2S_DB_BG3OFS_VOFFSET_SIZE 9 -#define REG_G2S_DB_BG3OFS_VOFFSET_MASK 0x01ff0000 - -#define REG_G2S_DB_BG3OFS_HOFFSET_SHIFT 0 -#define REG_G2S_DB_BG3OFS_HOFFSET_SIZE 9 -#define REG_G2S_DB_BG3OFS_HOFFSET_MASK 0x000001ff - -// Timer control - -#define REG_OS_TM0CNT_L_TIMER0CNT_SHIFT 0 -#define REG_OS_TM0CNT_L_TIMER0CNT_SIZE 16 -#define REG_OS_TM0CNT_L_TIMER0CNT_MASK 0xffff - -#define REG_OS_TM0CNT_H_E_SHIFT 7 -#define REG_OS_TM0CNT_H_E_SIZE 1 -#define REG_OS_TM0CNT_H_E_MASK 0x0080 - -#define REG_OS_TM0CNT_H_I_SHIFT 6 -#define REG_OS_TM0CNT_H_I_SIZE 1 -#define REG_OS_TM0CNT_H_I_MASK 0x0040 - -#define REG_OS_TM0CNT_H_PS_SHIFT 0 -#define REG_OS_TM0CNT_H_PS_SIZE 2 -#define REG_OS_TM0CNT_H_PS_MASK 0x0003 - -#define REG_OS_TM1CNT_L_TIMER0CNT_SHIFT 0 -#define REG_OS_TM1CNT_L_TIMER0CNT_SIZE 16 -#define REG_OS_TM1CNT_L_TIMER0CNT_MASK 0xffff - -#define REG_OS_TM1CNT_H_E_SHIFT 7 -#define REG_OS_TM1CNT_H_E_SIZE 1 -#define REG_OS_TM1CNT_H_E_MASK 0x0080 - -#define REG_OS_TM1CNT_H_I_SHIFT 6 -#define REG_OS_TM1CNT_H_I_SIZE 1 -#define REG_OS_TM1CNT_H_I_MASK 0x0040 - -#define REG_OS_TM1CNT_H_PS_SHIFT 0 -#define REG_OS_TM1CNT_H_PS_SIZE 2 -#define REG_OS_TM1CNT_H_PS_MASK 0x0003 - -#define REG_OS_TM2CNT_L_TIMER0CNT_SHIFT 0 -#define REG_OS_TM2CNT_L_TIMER0CNT_SIZE 16 -#define REG_OS_TM2CNT_L_TIMER0CNT_MASK 0xffff - -#define REG_OS_TM2CNT_H_E_SHIFT 7 -#define REG_OS_TM2CNT_H_E_SIZE 1 -#define REG_OS_TM2CNT_H_E_MASK 0x0080 - -#define REG_OS_TM2CNT_H_I_SHIFT 6 -#define REG_OS_TM2CNT_H_I_SIZE 1 -#define REG_OS_TM2CNT_H_I_MASK 0x0040 - -#define REG_OS_TM2CNT_H_PS_SHIFT 0 -#define REG_OS_TM2CNT_H_PS_SIZE 2 -#define REG_OS_TM2CNT_H_PS_MASK 0x0003 - -#define REG_OS_TM3CNT_L_TIMER0CNT_SHIFT 0 -#define REG_OS_TM3CNT_L_TIMER0CNT_SIZE 16 -#define REG_OS_TM3CNT_L_TIMER0CNT_MASK 0xffff - -#define REG_OS_TM3CNT_H_E_SHIFT 7 -#define REG_OS_TM3CNT_H_E_SIZE 1 -#define REG_OS_TM3CNT_H_E_MASK 0x0080 - -#define REG_OS_TM3CNT_H_I_SHIFT 6 -#define REG_OS_TM3CNT_H_I_SIZE 1 -#define REG_OS_TM3CNT_H_I_MASK 0x0040 - -#define REG_OS_TM3CNT_H_PS_SHIFT 0 -#define REG_OS_TM3CNT_H_PS_SIZE 2 -#define REG_OS_TM3CNT_H_PS_MASK 0x0003 - -#endif //POKEDIAMOND_ARM9_REGISTERS_H diff --git a/arm9/lib/include/syscall.h b/arm9/lib/include/syscall.h deleted file mode 100644 index 8e7962df..00000000 --- a/arm9/lib/include/syscall.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_SYSCALL_H -#define POKEDIAMOND_ARM9_SYSCALL_H - -#include "consts.h" -#include "MI_dma.h" - -void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData); - -#define SVC_CpuClear( data, destp, size, bit ) \ -do{ \ - vu##bit tmp = (vu##bit )(data); \ - SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ - MI_DMA_SRC_FIX | \ - MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \ -} while(0) - -void SVC_WaitByLoop(u32 ct); - -#endif //POKEDIAMOND_ARM9_SYSCALL_H diff --git a/arm9/lib/include/systemWork.h b/arm9/lib/include/systemWork.h deleted file mode 100644 index 1e3ba46b..00000000 --- a/arm9/lib/include/systemWork.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEDIAMOND_ARM9_SYSTEMWORK_H -#define POKEDIAMOND_ARM9_SYSTEMWORK_H - -#include "nitro/OS_systemWork_shared.h" - -#endif //POKEDIAMOND_ARM9_SYSTEMWORK_H diff --git a/arm9/lib/include/tp.h b/arm9/lib/include/tp.h deleted file mode 100644 index dc762f10..00000000 --- a/arm9/lib/include/tp.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef NITRO_TP_H_ -#define NITRO_TP_H_ - -#define TP_TOUCH_OFF 0 // Not being touched -#define TP_TOUCH_ON 1 // Being touched - -#define TP_VALIDITY_VALID 0 // Valid -#define TP_VALIDITY_INVALID_X 1 // Data with invalid X coordinate -#define TP_VALIDITY_INVALID_Y 2 // Data with invalid Y coordinate -#define TP_VALIDITY_INVALID_XY (TP_VALIDITY_INVALID_X | TP_VALIDITY_INVALID_Y) // Data with invalid X and Y coordinates - -// Touch panel input structure -typedef struct -{ - u16 x; // x coordinate ( 0 - 4095 ) - u16 y; // y coordinate ( 0 - 4095 ) - u16 touch; // Touch yes/no - u16 validity; // Valid yes/no -} -TPData; - -typedef struct NvTpData -{ - s16 x0; // X origin coordinate - s16 y0; // Y origin coordinate - s16 xDotSize; // X dot size - s16 yDotSize; // Y dot size -} -TPCalibrateParam; - -void TP_Init(void); -void TP_SetCalibrateParam(const TPCalibrateParam *param); -BOOL TP_GetUserInfo(TPCalibrateParam *calibrate); -void TP_RequestSamplingAsync(void); -u32 TP_WaitRawResult(TPData *result); -void TP_GetLatestRawPointInAuto(TPData *result); -void TP_GetCalibratedPoint(TPData *disp, const TPData *raw); - -static inline u32 TP_RequestRawSampling(TPData *result) -{ - TP_RequestSamplingAsync(); - return TP_WaitRawResult(result); -} - -#endif //NITRO_TP_H_ diff --git a/arm9/lib/include/userInfo.h b/arm9/lib/include/userInfo.h deleted file mode 100644 index 690dcf54..00000000 --- a/arm9/lib/include/userInfo.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef POKEDIAMOND_USERINFO_H -#define POKEDIAMOND_USERINFO_H - -typedef struct NVRAMConfigDate -{ - u8 month; //0x00 - u8 day; //0x01 -} NVRAMConfigDate; //0x02 - -typedef struct NVRAMConfigNickname -{ - u16 str[10]; //0x00 - u8 length; //0x14 - u8 rsv; //0x15 -} NVRAMConfigNickname; //0x16 - -typedef struct NVRAMConfigComment -{ - u16 str[26]; //0x00 - u8 length; //0x34 - u8 rsv; //0x35 -} NVRAMConfigComment; //0x36 - -typedef struct NVRAMConfigOwnerInfo -{ - u8 favouriteColour:4; //0x00 (0-3) - u8 rsv:4; //0x00 (4-7) - NVRAMConfigDate birthday; //0x01 - u8 pad; //0x03 - NVRAMConfigNickname nickname; //0x04 - NVRAMConfigComment comment; //0x1a -} NVRAMConfigOwnerInfo; //0x50 - -typedef struct NVRAMConfigAlarm -{ - u8 hour; //0x00 - u8 minute; //0x01 - u8 second; //0x02 - u8 pad; //0x03 - u16 enableWeek:7; //0x04 (0-6) - u16 alarmOn:1; //0x04 (7) - u16 rsv:8; //0x04 (8-15) -} NVRAMConfigAlarm; //0x06 - -typedef struct NVRAMConfigTpCalibData -{ - u16 raw_x1; //0x00 - u16 raw_y1; //0x02 - u8 dx1; //0x04 - u8 dy1; //0x05 - u16 raw_x2; //0x06 - u16 raw_y2; //0x08 - u8 dx2; //0x0a - u8 dy2; //0x0b -} NVRAMConfigTpCalibData; //0x0c - -typedef struct NVRAMConfigOption -{ - u16 language:3; //0x00 (0-2) - u16 agbLcd:1; //0x00 (3) - u16 detectPullOutCardFlag:1; //0x00 (4) - u16 detectPullOutCtrdgFlag:1; //0x00 (5) - u16 autoBootFlag:1; //0x00 (6) - u16 rsv:4; //0x00 (7-10) - u16 input_favouriteColour:1; //0x00 (11) - u16 input_tp:1; //0x00 (12) - u16 input_language:1; //0x00 (13) - u16 input_rtc:1; //0x00 (14) - u16 input_nickname:1; //0x00 (15) - u8 timeZone; //0x02 - u8 rtcClockAdjust; //0x03 - s64 rtcOffset; //0x04 -} NVRAMConfigOption; //0x0c - -typedef struct NVRAMConfigData -{ - u8 version; //0x00 - u8 pad; //0x01 - NVRAMConfigOwnerInfo owner; //0x02 - NVRAMConfigAlarm alarm; //0x52 - NVRAMConfigTpCalibData tp; //0x58 - NVRAMConfigOption option; //0x64 -} NVRAMConfigData; //0x70 - -typedef struct NVRAMConfig -{ - NVRAMConfigData ncd; //0x00 - u16 saveCount; //0x70 - u16 crc16; //0x72 -} NVRAMConfig; //0x74 - -#endif //POKEDIAMOND_USERINFO_H diff --git a/arm9/lib/libc/Makefile b/arm9/lib/libc/Makefile new file mode 100644 index 00000000..5a993851 --- /dev/null +++ b/arm9/lib/libc/Makefile @@ -0,0 +1,80 @@ +# Try to include devkitarm if installed +TOOLCHAIN := $(DEVKITARM) + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +endif + +# If you are using WSL, it is recommended you build with NOWINE=1. +WSLENV ?= no +ifeq ($(WSLENV),) +NOWINE = 1 +else +NOWINE = 0 +endif + +ifeq ($(OS),Windows_NT) +EXE := .exe +WINE := +else +EXE := +WINE := wine +endif + +ifeq ($(NOWINE),1) +WINE := +endif + +# Compare result of arm9, arm7, and ROM to sha1 hash(s) +COMPARE ?= 1 + +##################### Compiler Options ####################### + +MWCCVERSION = 2.0/sp1 + +CROSS := arm-none-eabi- + +MWCCARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwccarm.exe +# Argh... due to EABI version shenanigans, we can't use GNU LD to link together +# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we +# have to use mwldarm for now. +# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the +# only dependency should be MWCCARM. +MWLDARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe +SCANINC = ../../../tools/scaninc/scaninc$(EXE) + +AS = $(WINE) $(MWASMARM) +CC = $(WINE) $(MWCCARM) +CPP := cpp -P +LD = $(WINE) $(MWLDARM) +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy + +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +ASFLAGS = -proc arm5te -ir ../../.. +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -i include -ir include-mw -ir arm9/lib/libc/include -ir arm9/lib/libnns/include -ir arm9/lib/NitroSDK/include -W all +LDFLAGS = -library -nodead -w off -proc v5te -interworking -pic +ARFLAGS = rcS + +export MWCIncludes := include + +################ Targets ################# + +.PHONY: all clean + +all: + @: + +clean: + $(RM) $(%.a=%/*.o) + +%.a: + $(AR) $(ARFLAGS) -o $@ $^ + +%.o: %.c + $(CC) $(CFLAGS) -o $@ $< + +%.o: %.s + $(AS) $(ASFLAGS) -o $@ $< diff --git a/arm9/lib/libc/include/MSL.h b/arm9/lib/libc/include/MSL.h new file mode 100644 index 00000000..a1709bc4 --- /dev/null +++ b/arm9/lib/libc/include/MSL.h @@ -0,0 +1,8 @@ +#ifndef MSL_H +#define MSL_H + +//include all msl files here + +#include "MSL_Common_arith.h" + +#endif //MSL_H diff --git a/arm9/lib/libc/include/MSL_Common_arith.h b/arm9/lib/libc/include/MSL_Common_arith.h new file mode 100644 index 00000000..3ec6bdbc --- /dev/null +++ b/arm9/lib/libc/include/MSL_Common_arith.h @@ -0,0 +1,8 @@ +#ifndef MSL_COMMON_ARITH_H +#define MSL_COMMON_ARITH_H + +#include "nitro/types.h" + +s32 abs(s32 val); + +#endif //MSL_COMMON_ARITH_H diff --git a/arm9/lib/libc/src/MSL_Common_arith.c b/arm9/lib/libc/src/MSL_Common_arith.c new file mode 100644 index 00000000..d4a2e834 --- /dev/null +++ b/arm9/lib/libc/src/MSL_Common_arith.c @@ -0,0 +1,7 @@ +#include "MSL_Common_arith.h" +#include "function_target.h" + +ARM_FUNC s32 abs(s32 val) +{ + return val < 0 ? -val : val; +} diff --git a/arm9/lib/libnns/Makefile b/arm9/lib/libnns/Makefile new file mode 100644 index 00000000..029dda4d --- /dev/null +++ b/arm9/lib/libnns/Makefile @@ -0,0 +1,81 @@ +# Try to include devkitarm if installed +TOOLCHAIN := $(DEVKITARM) + +ifneq (,$(wildcard $(TOOLCHAIN)/base_tools)) +include $(TOOLCHAIN)/base_tools +endif + +# If you are using WSL, it is recommended you build with NOWINE=1. +WSLENV ?= no +ifeq ($(WSLENV),) +NOWINE = 1 +else +NOWINE = 0 +endif + +ifeq ($(OS),Windows_NT) +EXE := .exe +WINE := +else +EXE := +WINE := wine +endif + +ifeq ($(NOWINE),1) +WINE := +endif + +# Compare result of arm9, arm7, and ROM to sha1 hash(s) +COMPARE ?= 1 + +##################### Compiler Options ####################### + +# TODO: this is likely 2.0 for libnns +MWCCVERSION = 1.2/sp2p3 + +CROSS := arm-none-eabi- + +MWCCARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwccarm.exe +# Argh... due to EABI version shenanigans, we can't use GNU LD to link together +# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we +# have to use mwldarm for now. +# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the +# only dependency should be MWCCARM. +MWLDARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwldarm.exe +MWASMARM = ../../../tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe +SCANINC = ../../../tools/scaninc/scaninc$(EXE) + +AS = $(WINE) $(MWASMARM) +CC = $(WINE) $(MWCCARM) +CPP := cpp -P +LD = $(WINE) $(MWLDARM) +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy + +# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o +ASFLAGS = -proc arm5te -ir ../../.. +CFLAGS = -O4,p -proc arm946e -fp soft -lang c99 -Cpp_exceptions off -i include -ir include-mw -ir arm9/lib/libc/include -ir arm9/lib/libnns/include -ir arm9/lib/NitroSDK/include -W all +LDFLAGS = -library -nodead -w off -proc v5te -interworking -pic +ARFLAGS = rcS + +export MWCIncludes := include + +################ Targets ################# + +.PHONY: all clean + +all: + @: + +clean: + $(RM) $(%.a=%/*.o) + +%.a: + $(AR) $(ARFLAGS) -o $@ $^ + +%.o: %.c + $(CC) $(CFLAGS) -o $@ $< + +%.o: %.s + $(AS) $(ASFLAGS) -o $@ $< diff --git a/arm9/lib/libnns/include/NNS_FND_allocator.h b/arm9/lib/libnns/include/NNS_FND_allocator.h new file mode 100644 index 00000000..eb17fa70 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_FND_allocator.h @@ -0,0 +1,34 @@ +#ifndef GUARD_NNS_FND_ALLOCATOR_H +#define GUARD_NNS_FND_ALLOCATOR_H + +#include "NNS_FND_heapcommon.h" + +typedef struct NNSFndAllocator NNSFndAllocator; + +typedef void* (*NNSFndFuncAllocatorAlloc)( + NNSFndAllocator* pAllocator, + u32 size); + +typedef void (*NNSFndFuncAllocatorFree)( + NNSFndAllocator* pAllocator, + void* memBlock); + +typedef struct NNSFndAllocatorFunc NNSFndAllocatorFunc; + +struct NNSFndAllocatorFunc +{ + NNSFndFuncAllocatorAlloc pfAlloc; + NNSFndFuncAllocatorFree pfFree; +}; + +struct NNSFndAllocator +{ + NNSFndAllocatorFunc const * pFunc; + void* pHeap; + u32 heapParam1; + u32 heapParam2; +}; + +void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle heap, int alignment); + +#endif //GUARD_NNS_FND_ALLOCATOR_H diff --git a/arm9/lib/libnns/include/NNS_FND_expheap.h b/arm9/lib/libnns/include/NNS_FND_expheap.h new file mode 100644 index 00000000..bdc3fcc4 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_FND_expheap.h @@ -0,0 +1,55 @@ +#ifndef GUARD_NNS_FND_EXPHEAP_H +#define GUARD_NNS_FND_EXPHEAP_H + +#include "NNS_FND_heapcommon.h" + +typedef struct NNSiFndExpHeapMBlockHead NNSiFndExpHeapMBlockHead; + +struct NNSiFndExpHeapMBlockHead +{ + u16 signature; // Signature + u16 attribute; // Attribute + // [8:groupID] + // [7:alignment] + // [1:temporary flag] + + u32 blockSize; // Block size (data area only) + + NNSiFndExpHeapMBlockHead* pMBHeadPrev; // Previous block + NNSiFndExpHeapMBlockHead* pMBHeadNext; // Next block +}; + +typedef struct NNSiFndExpMBlockList NNSiFndExpMBlockList; + +struct NNSiFndExpMBlockList +{ + NNSiFndExpHeapMBlockHead* head; // Pointer for memory block linked to header + NNSiFndExpHeapMBlockHead* tail; // Pointer to the memory block linked to the tail of the expanded heap +}; + +typedef struct NNSiFndExpHeapHead NNSiFndExpHeapHead; + +struct NNSiFndExpHeapHead +{ + NNSiFndExpMBlockList mbFreeList; // Free list + NNSiFndExpMBlockList mbUsedList; // Used list + + u16 groupID; // Current group ID (lower 8 bits only) + u16 feature; // Attribute +}; + +NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u32 optFlag); +void *NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle heap, u32 size, int alignment); +void NNS_FndDestroyExpHeap(NNSFndHeapHandle heap); +void NNS_FndFreeToExpHeap(NNSFndHeapHandle heap, void *memBlock); +u32 NNS_FndGetTotalFreeSizeForExpHeap(NNSFndHeapHandle heap); +u32 NNS_FndGetSizeForMBlockExpHeap(const void *memBlock); +void NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size); + +#define NNS_FndCreateExpHeap(startAddress, size) \ + NNS_FndCreateExpHeapEx(startAddress, size, 0) +#define NNS_FndAllocFromExpHeap(heap, size) \ + NNS_FndAllocFromExpHeapEx(heap, size, NNS_FND_HEAP_DEFAULT_ALIGNMENT) + + +#endif //GUARD_NNS_FND_EXPHEAP_H diff --git a/arm9/lib/libnns/include/NNS_FND_heapcommon.h b/arm9/lib/libnns/include/NNS_FND_heapcommon.h new file mode 100644 index 00000000..e6fab69c --- /dev/null +++ b/arm9/lib/libnns/include/NNS_FND_heapcommon.h @@ -0,0 +1,26 @@ +#ifndef GUARD_NNS_FND_HEAPCOMMON_H +#define GUARD_NNS_FND_HEAPCOMMON_H + +#include "NNS_FND_list.h" + +#define NNS_FND_HEAP_DEFAULT_ALIGNMENT 4 + +typedef struct NNSiFndHeapHead NNSiFndHeapHead; + +struct NNSiFndHeapHead +{ + u32 signature; + + NNSFndLink link; + NNSFndList childList; + + void* heapStart; // Heap start address + void* heapEnd; // Heap end (+1) address + + u32 attribute; // Attribute + // [8:Option flag] +}; + +typedef NNSiFndHeapHead* NNSFndHeapHandle; // Type to represent heap handle + +#endif //GUARD_NNS_FND_HEAPCOMMON_H diff --git a/arm9/lib/libnns/include/NNS_FND_list.h b/arm9/lib/libnns/include/NNS_FND_list.h new file mode 100644 index 00000000..5fec2fdf --- /dev/null +++ b/arm9/lib/libnns/include/NNS_FND_list.h @@ -0,0 +1,20 @@ +#ifndef GUARD_NNS_FND_LIST_H +#define GUARD_NNS_FND_LIST_H + +typedef struct +{ + void* prevObject; // Pointer to the previous linked object. + void* nextObject; // Pointer to the next linked object. + +} NNSFndLink; + +typedef struct +{ + void* headObject; // Pointer for the object linked to the top of the list. + void* tailObject; // Pointer for the object linked to the end of the list. + u16 numObjects; // Number of objects linked in the list. + u16 offset; // Offset for NNSFndLink type structure member. + +} NNSFndList; + +#endif //GUARD_NNS_FND_LIST_H diff --git a/arm9/lib/libnns/include/NNS_SND_arc.h b/arm9/lib/libnns/include/NNS_SND_arc.h new file mode 100644 index 00000000..5298d805 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_SND_arc.h @@ -0,0 +1,39 @@ +#ifndef GUARD_NNS_SND_ARC_H +#define GUARD_NNS_SND_ARC_H + +#include "SND_main.h" +#include "FS_file.h" + +typedef struct NNSSndArcHeader +{ + struct SNDBinaryFileHeader fileHeader; + u32 symbolDataOffset; + u32 symbolDataSize; + u32 infoOffset; + u32 infoSize; + u32 fatOffset; + u32 fatSize; + u32 fileImageOffset; + u32 fileImageSize; +} NNSSndArcHeader; + +typedef struct NNSSndArc +{ + NNSSndArcHeader header; + BOOL file_open; + FSFile file; + FSFileID fileId; + struct NNSSndArcFat* fat; + struct NNSSndArcSymbol* symbol; + struct NNSSndArcInfo* info; +} NNSSndArc; + +void NNS_SndInit(void); +void NNS_SndArcInit(NNSSndArc *, const char *, void *, u32); +void NNS_SndArcPlayerSetup(void *); +void NNS_SndMain(void); +void NNS_SndHandleInit(u32 *); +void NNS_SndPlayerStopSeqByPlayerNo(int playerNo, int fadeFrame); +void NNS_SndHandleReleaseSeq(u32 *); + +#endif //GUARD_NNS_SND_ARC_H diff --git a/arm9/lib/libnns/include/NNS_SND_arc_loader.h b/arm9/lib/libnns/include/NNS_SND_arc_loader.h new file mode 100644 index 00000000..7d1e2787 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_SND_arc_loader.h @@ -0,0 +1,12 @@ +#ifndef GUARD_NNS_SND_ARC_LOADER_H +#define GUARD_NNS_SND_ARC_LOADER_H + +#include "NNS_SND_heap.h" + +BOOL NNS_SndArcLoadGroup(int groupNo, NNSSndHeapHandle * heap); +BOOL NNS_SndArcLoadSeq(int seqNo, NNSSndHeapHandle * heap); +BOOL NNS_SndArcLoadSeqEx(int seqNo, u32 loadFlag, NNSSndHeapHandle * heap); +BOOL NNS_SndArcLoadWaveArc(int waveArcNo, NNSSndHeapHandle * heap); +BOOL NNS_SndArcLoadBank(int bankNo, NNSSndHeapHandle * heap); + +#endif //GUARD_NNS_SND_ARC_LOADER_H diff --git a/arm9/lib/libnns/include/NNS_SND_heap.h b/arm9/lib/libnns/include/NNS_SND_heap.h new file mode 100644 index 00000000..2909d662 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_SND_heap.h @@ -0,0 +1,11 @@ +#ifndef GUARD_NNS_SND_HEAP_H +#define GUARD_NNS_SND_HEAP_H + +struct NNSSndHeap; +typedef struct NNSSndHeap* NNSSndHeapHandle; + +NNSSndHeapHandle * NNS_SndHeapCreate(void * start, u32 size); +int NNS_SndHeapSaveState(NNSSndHeapHandle * heap); +void NNS_SndHeapLoadState(NNSSndHeapHandle * heap, int level); + +#endif //GUARD_NNS_SND_HEAP_H diff --git a/arm9/lib/libnns/include/NNS_g2d.h b/arm9/lib/libnns/include/NNS_g2d.h new file mode 100644 index 00000000..f7eed210 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_g2d.h @@ -0,0 +1,212 @@ +#ifndef NNSYS_NNS_G2D_H +#define NNSYS_NNS_G2D_H + +#include "gx.h" + +typedef struct NNSG2dCharacterData +{ + u16 H; + u16 W; + GXTexFmt pixelFmt; + GXOBJVRamModeChar mapingType; + u32 characterFmt; + u32 szByte; + void * pRawData; +} NNSG2dCharacterData; + +typedef struct NNSG2dScreenData +{ + u16 screenWidth; + u16 screenHeight; + u16 colorMode; + u16 screenFormat; + u32 szByte; + u32 rawData[1]; +} NNSG2dScreenData; + +typedef struct NNSG2dPaletteData +{ + GXTexFmt fmt; + BOOL bExtendedPlt; + u32 szByte; + void * pRawData; + +} NNSG2dPaletteData; + +typedef enum NNS_G2D_VRAM_TYPE +{ + NNS_G2D_VRAM_TYPE_3DMAIN = 0, + NNS_G2D_VRAM_TYPE_2DMAIN = 1, + NNS_G2D_VRAM_TYPE_2DSUB = 2, + NNS_G2D_VRAM_TYPE_MAX = 3 +} NNS_G2D_VRAM_TYPE; + +typedef enum NNSG2dCharacterDataMapingType +{ + NNS_G2D_CHARACTERMAPING_1D_32, + NNS_G2D_CHARACTERMAPING_1D_64, + NNS_G2D_CHARACTERMAPING_1D_128, + NNS_G2D_CHARACTERMAPING_1D_256, + NNS_G2D_CHARACTERMAPING_2D, + NNS_G2D_CHARACTERMAPING_MAX + +} NNSG2dCharacterDataMapingType; + +typedef struct NNSG2dImageAttr +{ + GXTexSizeS sizeS; + GXTexSizeT sizeT; + GXTexFmt fmt; + BOOL bExtendedPlt; + GXTexPlttColor0 plttUse; + GXOBJVRamModeChar mappingType; +} NNSG2dImageAttr; + +typedef struct NNSG2dVRamLocation +{ + u32 baseAddrOfVram[ NNS_G2D_VRAM_TYPE_MAX ]; +} NNSG2dVRamLocation; + +typedef struct NNSG2dImageProxy +{ + NNSG2dVRamLocation vramLocation; + NNSG2dImageAttr attr; +} NNSG2dImageProxy; + +typedef struct NNSG2dPaletteCompressInfo +{ + u16 numPalette; + u16 pad16; + void * pPlttIdxTbl; + +} NNSG2dPaletteCompressInfo; + +void NNS_G2dLoadImage1DMapping +( + const NNSG2dCharacterData * pSrcData, + u32 baseAddr, + NNS_G2D_VRAM_TYPE type, + NNSG2dImageProxy * pImgProxy +); + +void NNS_G2dLoadImage2DMapping +( + const NNSG2dCharacterData * pSrcData, + u32 baseAddr, + NNS_G2D_VRAM_TYPE type, + NNSG2dImageProxy * pImgProxy +); + +typedef struct NNSG2dImagePaletteProxy +{ + GXTexFmt fmt; + BOOL bExtendedPlt; + NNSG2dVRamLocation vramLocation; +} NNSG2dImagePaletteProxy; + +void NNS_G2dLoadPalette +( + const NNSG2dPaletteData * pSrcData, + u32 addr, + NNS_G2D_VRAM_TYPE type, + NNSG2dImagePaletteProxy * pPltProxy +); + +void NNS_G2dLoadPaletteEx +( + const NNSG2dPaletteData * pSrcData, + const NNSG2dPaletteCompressInfo * pCmpInfo, + u32 addr, + NNS_G2D_VRAM_TYPE type, + NNSG2dImagePaletteProxy * pPltProxy +); + +typedef struct NNSG2dCellVramTransferData +{ + u32 srcDataOffset; + u32 szByte; +} NNSG2dCellVramTransferData; + +typedef struct NNSG2dVramTransferData +{ + u32 szByteMax; + NNSG2dCellVramTransferData * pCellTransferDataArray; +} NNSG2dVramTransferData; + +typedef struct NNSG2dCellOAMAttrData +{ + u16 attr0; + u16 attr1; + u16 attr2; +} NNSG2dCellOAMAttrData; + +typedef struct NNSG2dCellData +{ + u16 numOAMAttrs; + u16 cellAttr; + NNSG2dCellOAMAttrData * pOamAttrArray; + +} NNSG2dCellData; + +typedef struct NNSG2dCellDataBank +{ + u16 numCells; + u16 cellBankAttr; + NNSG2dCellData * pCellDataArrayHead; + NNSG2dCharacterDataMapingType mappingMode; + NNSG2dVramTransferData * pVramTransferData; + void * pStringBank; + void * pExtendedData; + +} NNSG2dCellDataBank; + +typedef enum NNSG2dAnimationPlayMode +{ + NNS_G2D_ANIMATIONPLAYMODE_INVALID = 0x0, + NNS_G2D_ANIMATIONPLAYMODE_FORWARD, + NNS_G2D_ANIMATIONPLAYMODE_FORWARD_LOOP, + NNS_G2D_ANIMATIONPLAYMODE_REVERSE, + NNS_G2D_ANIMATIONPLAYMODE_REVERSE_LOOP, + NNS_G2D_ANIMATIONPLAYMODE_MAX +} NNSG2dAnimationPlayMode; + +typedef struct NNSG2dAnimFrameData +{ + void * pContent; + u16 frames; + u16 pad16; +} NNSG2dAnimFrameData; + +typedef struct NNSG2dAnimSequenceData +{ + u16 numFrames; + u16 loopStartFrameIdx; + u32 animType; + NNSG2dAnimationPlayMode playMode; + NNSG2dAnimFrameData * pAnmFrameArray; + +} NNSG2dAnimSequenceData; + +typedef struct NNSG2dAnimBankData +{ + + u16 numSequences; + u16 numTotalFrames; + NNSG2dAnimSequenceData * pSequenceArrayHead; + NNSG2dAnimFrameData * pFrameArrayHead; + void * pAnimContents; + void * pStringBank; + void * pExtendedData; + +} NNSG2dAnimBankData; + +BOOL NNS_G2dGetUnpackedBGCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); +BOOL NNS_G2dGetUnpackedCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); +BOOL NNS_G2dGetUnpackedScreenData(void * pNscrFile, NNSG2dScreenData ** ppScrData); +BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData); +BOOL NNS_G2dGetUnpackedPaletteData(void * pNclrFile, NNSG2dPaletteData ** ppPltData); +BOOL NNS_G2dGetUnpackedPaletteCompressInfo(void * pNclrFile, NNSG2dPaletteCompressInfo ** ppPltCmpInfo); +BOOL NNS_G2dGetUnpackedCellBank(void * pNcerFile, NNSG2dCellDataBank ** ppCellBank); +BOOL NNS_G2dGetUnpackedAnimBank(void * pNanrFile, NNSG2dAnimBankData ** ppAnimBank); + +#endif //NNSYS_NNS_G2D_H diff --git a/arm9/lib/libnns/src/.gitkeep b/arm9/lib/libnns/src/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/arm9/lib/src/CARD_backup.c b/arm9/lib/src/CARD_backup.c deleted file mode 100644 index 714ac479..00000000 --- a/arm9/lib/src/CARD_backup.c +++ /dev/null @@ -1,159 +0,0 @@ -#include "CARD_backup.h" -#include "function_target.h" -#include "CARD_common.h" -#include "CARD_request.h" -#include "CARD_spi.h" -#include "OS_cache.h" -#include "MI_memory.h" -#include "OS_terminate_proc.h" -#include "OS_system.h" - -extern void OSi_ReferSymbol(void *symbol); -extern char _SDK_NintendoBackup[]; - -extern CARDiCommon cardi_common; - -static void CARDi_RequestStreamCommandCore(CARDiCommon *p); - -ARM_FUNC static void CARDi_RequestStreamCommandCore(CARDiCommon *p) -{ - const int req_type = p->req_type; - const int req_mode = p->req_mode; - const int retry_count = p->req_retry; - u32 size = sizeof(p->backup_cache_page_buf); - - OSi_ReferSymbol((void *)_SDK_NintendoBackup); - - if (req_type == CARD_REQ_ERASE_SECTOR_BACKUP) - { - size = CARD_GetBackupSectorSize(); - } - do - { - const u32 len = (size < p->len) ? size : p->len; - p->cmd->len = len; - - if ((p->flag & CARD_STAT_CANCEL) != 0) - { - p->flag &= ~CARD_STAT_CANCEL; - p->cmd->result = CARD_RESULT_CANCELED; - break; - } - switch (req_mode) - { - case CARD_REQUEST_MODE_RECV: - DC_InvalidateRange(p->backup_cache_page_buf, len); - p->cmd->src = (u32)p->src; - p->cmd->dest = (u32)p->backup_cache_page_buf; - break; - case CARD_REQUEST_MODE_SEND: - case CARD_REQUEST_MODE_SEND_VERIFY: - MI_CpuCopy8((const void *)p->src, p->backup_cache_page_buf, len); - DC_FlushRange(p->backup_cache_page_buf, len); - DC_WaitWriteBufferEmpty(); - p->cmd->src = (u32)p->backup_cache_page_buf; - p->cmd->dest = (u32)p->dst; - break; - case CARD_REQUEST_MODE_SPECIAL: - p->cmd->src = (u32)p->src; - p->cmd->dest = (u32)p->dst; - break; - } - - if (!CARDi_Request(p, req_type, retry_count)) - { - break; - } - - if (req_mode == CARD_REQUEST_MODE_SEND_VERIFY) - { - if (!CARDi_Request(p, CARD_REQ_VERIFY_BACKUP, 1)) - { - break; - } - } - else if (req_mode == CARD_REQUEST_MODE_RECV) - { - MI_CpuCopy8(p->backup_cache_page_buf, (void *)p->dst, len); - } - p->src += len; - p->dst += len; - p->len -= len; - } - while (p->len > 0); - CARDi_EndTask(p, TRUE); -} - -ARM_FUNC BOOL CARDi_RequestStreamCommand(u32 src, u32 dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async, - CARDRequest req_type, int req_retry, CARDRequestMode req_mode) -{ - CARDiCommon *const p = &cardi_common; - - OSi_ReferSymbol((void *)_SDK_NintendoBackup); - - CARDi_WaitTask(p, callback, arg); - p->src = src; - p->dst = dst; - p->len = len; - p->req_type = req_type; - p->req_retry = req_retry; - p->req_mode = req_mode; - if (is_async) - { - CARDi_SetTask(CARDi_RequestStreamCommandCore); - return TRUE; - } - else - { - cardi_common.cur_th = OS_GetCurrentThread(); - CARDi_RequestStreamCommandCore(p); - return (p->cmd->result == CARD_RESULT_SUCCESS); - } -} - -ARM_FUNC u32 CARD_GetBackupSectorSize(void) -{ - return cardi_common.cmd->spec.sect_size; -} - -ARM_FUNC BOOL CARD_IdentifyBackup(CARDBackupType type) -{ - CARDiCommon *const p = &cardi_common; - - OSi_ReferSymbol((void *)_SDK_NintendoBackup); - if (type == CARD_BACKUP_TYPE_NOT_USE) - { - OS_Terminate(); - } - - CARD_CheckEnabled(); - - CARDi_WaitTask(p, NULL, NULL); - CARDi_IdentifyBackupCore(type); - cardi_common.cur_th = OS_GetCurrentThread(); - (void)CARDi_Request(p, CARD_REQ_IDENTIFY, 1); - - p->cmd->src = 0; - p->cmd->dest = (u32)p->backup_cache_page_buf; - p->cmd->len = 1; - (void)CARDi_Request(p, CARD_REQ_READ_BACKUP, 1); - CARDi_EndTask(p, TRUE); - return (p->cmd->result == CARD_RESULT_SUCCESS); -} - -ARM_FUNC BOOL CARD_WaitBackupAsync(void) -{ - return CARDi_WaitAsync(); -} - -ARM_FUNC BOOL CARD_TryWaitBackupAsync(void) -{ - return CARDi_TryWaitAsync(); -} - -ARM_FUNC void CARD_CancelBackupAsync(void) -{ - OSIntrMode bak_cpsr = OS_DisableInterrupts(); - cardi_common.flag |= CARD_STAT_CANCEL; - (void)OS_RestoreInterrupts(bak_cpsr); -} diff --git a/arm9/lib/src/CARD_common.c b/arm9/lib/src/CARD_common.c deleted file mode 100644 index fd66c7ce..00000000 --- a/arm9/lib/src/CARD_common.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "CARD_common.h" -#include "CARD_request.h" -#include "consts.h" -#include "function_target.h" -#include "MI_memory.h" -#include "OS_terminate_proc.h" -#include "OS_spinLock.h" -#include "OS_cache.h" -#include "MB_mb.h" -#include "PXI_fifo.h" -#include "mmap.h" - -CARDiCommon cardi_common ALIGN(32); -static CARDiCommandArg cardi_arg ALIGN(32); - -u8 cardi_thread_stack[0x400] ALIGN(4); - -static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target); -static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target); - -ARM_FUNC void CARDi_SetTask(void (*task) (CARDiCommon *)) -{ - CARDiCommon *const p = &cardi_common; - - (void)OS_SetThreadPriority(p->thread, p->priority); - - p->cur_th = p->thread; - p->task_func = task; - p->flag |= CARD_STAT_TASK; - OS_WakeupThreadDirect(p->thread); -} - -ARM_FUNC static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target) -{ - CARDiCommon *const p = &cardi_common; - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (p->lock_owner == owner) - { - if (p->lock_target != target) - { - OS_Terminate(); - } - } - else - { - while (p->lock_owner != OS_LOCK_ID_ERROR) - { - OS_SleepThread(p->lock_queue); - } - p->lock_owner = owner; - p->lock_target = target; - } - ++p->lock_ref; - p->cmd->result = CARD_RESULT_SUCCESS; - (void)OS_RestoreInterrupts(bak_psr); -} - -ARM_FUNC static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target) -{ - CARDiCommon *p = &cardi_common; - OSIntrMode bak_psr = OS_DisableInterrupts(); - if ((p->lock_owner != owner) || !p->lock_ref) - { - OS_Terminate(); - } - else - { - if (p->lock_target != target) - { - OS_Terminate(); - } - if (!--p->lock_ref) - { - p->lock_owner = OS_LOCK_ID_ERROR; - p->lock_target = CARD_TARGET_NONE; - OS_WakeupThread(p->lock_queue); - } - } - p->cmd->result = CARD_RESULT_SUCCESS; - (void)OS_RestoreInterrupts(bak_psr); -} - -ARM_FUNC void CARDi_InitCommon(void) -{ - CARDiCommon *p = &cardi_common; - - p->lock_owner = OS_LOCK_ID_ERROR; - p->lock_ref = 0; - p->lock_target = CARD_TARGET_NONE; - - p->cmd = &cardi_arg; - MI_CpuFillFast(&cardi_arg, 0x00, sizeof(cardi_arg)); - DC_FlushRange(&cardi_arg, sizeof(cardi_arg)); - - if (!MB_IsMultiBootChild()) - { - MI_CpuCopy8((const void *)HW_ROM_HEADER_BUF, (void *)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE); - } - OS_InitThreadQueue(p->lock_queue); - OS_InitThreadQueue(p->busy_q); - p->priority = CARD_THREAD_PRIORITY_DEFAULT; - OS_CreateThread(p->thread, CARDi_TaskThread, NULL, cardi_thread_stack + sizeof(cardi_thread_stack), - sizeof(cardi_thread_stack), p->priority); - OS_WakeupThreadDirect(p->thread); - - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_FS, CARDi_OnFifoRecv); - - if (!MB_IsMultiBootChild()) - { - CARD_Enable(TRUE); - } -} - -static BOOL CARDi_EnableFlag = FALSE; - -ARM_FUNC BOOL CARD_IsEnabled(void) -{ - return CARDi_EnableFlag; -} - -ARM_FUNC void CARD_CheckEnabled(void) -{ - if (!CARD_IsEnabled()) - { - OS_Terminate(); - } -} - -ARM_FUNC void CARD_Enable(BOOL enable) -{ - CARDi_EnableFlag = enable; -} - -ARM_FUNC BOOL CARDi_WaitAsync(void) -{ - CARDiCommon *const p = &cardi_common; - - OSIntrMode bak_psr = OS_DisableInterrupts(); - while ((p->flag & CARD_STAT_BUSY) != 0) - { - OS_SleepThread(p->busy_q); - } - (void)OS_RestoreInterrupts(bak_psr); - return (p->cmd->result == CARD_RESULT_SUCCESS); -} - -ARM_FUNC BOOL CARDi_TryWaitAsync(void) -{ - CARDiCommon *const p = &cardi_common; - - return !(p->flag & CARD_STAT_BUSY); -} - -ARM_FUNC CARDResult CARD_GetResultCode(void) -{ - CARDiCommon *const p = &cardi_common; - - return p->cmd->result; -} - -ARM_FUNC void CARD_LockRom(u16 lock_id) -{ - CARDi_LockResource(lock_id, CARD_TARGET_ROM); - (void)OS_TryLockCard(lock_id); -} - -ARM_FUNC void CARD_UnlockRom(u16 lock_id) -{ - (void)OS_UnlockCard(lock_id); - CARDi_UnlockResource(lock_id, CARD_TARGET_ROM); -} - -ARM_FUNC void CARD_LockBackup(u16 lock_id) -{ - CARDi_LockResource(lock_id, CARD_TARGET_BACKUP); -} - -ARM_FUNC void CARD_UnlockBackup(u16 lock_id) -{ - CARDi_UnlockResource(lock_id, CARD_TARGET_BACKUP); -} diff --git a/arm9/lib/src/CARD_pullOut.c b/arm9/lib/src/CARD_pullOut.c deleted file mode 100644 index d5c7737f..00000000 --- a/arm9/lib/src/CARD_pullOut.c +++ /dev/null @@ -1,105 +0,0 @@ -#include "function_target.h" -#include "CARD_common.h" -#include "CARD_pullOut.h" -#include "PXI_init.h" -#include "PXI_fifo.h" -#include "OS_terminate_proc.h" -#include "OS_system.h" -#include "PAD_pad.h" -#include "SPI_pm.h" -#include "syscall.h" -#include "mmap.h" - -static CARDPulledOutCallback CARD_UserCallback; -static BOOL CARDi_IsPulledOutFlag = FALSE; - -static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err); -static void CARDi_SendtoPxi(u32 data, u32 wait); - -ARM_FUNC void CARD_InitPulledOutCallback(void) -{ - PXI_Init(); - - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CARD, CARDi_PulledOutCallback); - - CARD_UserCallback = NULL; -} - -ARM_FUNC static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused(tag, err) - u32 command = data & CARD_PXI_COMMAND_MASK; - - if (command == CARD_PXI_COMMAND_PULLED_OUT) - { - if (!CARDi_IsPulledOutFlag) - { - BOOL isTerminateImm = TRUE; - CARDi_IsPulledOutFlag = TRUE; - - if (CARD_UserCallback) - { - isTerminateImm = CARD_UserCallback(); - } - - if (isTerminateImm) - { - CARD_TerminateForPulledOut(); - } - } - } - else - { - OS_Terminate(); - } -} - -ARM_FUNC BOOL CARD_IsPulledOut(void) -{ - return CARDi_IsPulledOutFlag; -} - -ARM_FUNC void CARD_TerminateForPulledOut(void) -{ - BOOL should_be_halt = TRUE; - - if (PAD_DetectFold()) - { - u32 res; - while ((res = PM_ForceToPowerOff()) == 0x04) - { - OS_SpinWait(HW_CPU_CLOCK_ARM9 / 100); - } - if (res == 0) - { - should_be_halt = FALSE; - } - } - - if (should_be_halt) - { - CARDi_SendtoPxi(CARD_PXI_COMMAND_TERMINATE, 1); - } - - OS_Terminate(); -} - -ARM_FUNC void CARDi_CheckPulledOutCore(u32 id) -{ - vu32 iplCardID = *(vu32 *)((*(u16 *)HW_CHECK_DEBUGGER_SW == 0) ? HW_RED_RESERVED : HW_BOOT_CHECK_INFO_BUF); - - if (id != (u32)iplCardID) - { - OSIntrMode bak_cpsr = OS_DisableInterrupts(); - CARDi_PulledOutCallback(PXI_FIFO_TAG_CARD, CARD_PXI_COMMAND_PULLED_OUT, FALSE); - (void)OS_RestoreInterrupts(bak_cpsr); - } -} - -ARM_FUNC static void CARDi_SendtoPxi(u32 data, u32 wait) -{ - while (PXI_SendWordByFifo(PXI_FIFO_TAG_CARD, data, FALSE) != PXI_FIFO_SUCCESS) - { - SVC_WaitByLoop((u32)wait); - } -} diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c deleted file mode 100644 index 098fe7a5..00000000 --- a/arm9/lib/src/CARD_request.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "function_target.h" -#include "CARD_request.h" -#include "OS_cache.h" -#include "OS_system.h" -#include "OS_thread.h" - -extern CARDiCommon cardi_common; - -ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused (data) - if ((tag == PXI_FIFO_TAG_FS) && err) - { - CARDiCommon *const p = &cardi_common; - p->flag &= ~CARD_STAT_REQ; - OS_WakeupThreadDirect(p->cur_th); - } -} - -ARM_FUNC void CARDi_TaskThread(void *arg) -{ -#pragma unused (arg) - CARDiCommon *const p = &cardi_common; - - while (TRUE) - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - while ((p->flag & CARD_STAT_TASK) == 0) - { - p->cur_th = p->thread; - OS_SleepThread(NULL); - } - (void)OS_RestoreInterrupts(bak_psr); - (*p->task_func)(p); - } -} - -ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) -{ - if ((p->flag & CARD_STAT_INIT_CMD) == 0) - { - p->flag |= CARD_STAT_INIT_CMD; - while (!PXI_IsCallbackReady(PXI_FIFO_TAG_FS, PXI_PROC_ARM7)) - { - OS_SpinWait(100); - } - - (void)CARDi_Request(p, CARD_REQ_INIT, 1); - } - DC_FlushRange(p->cmd, sizeof(*p->cmd)); - DC_WaitWriteBufferEmpty(); - - do - { - p->command = req_type; - p->flag |= CARD_STAT_REQ; - CARDi_SendPxi((u32)req_type); - - switch (req_type) - { - case CARD_REQ_INIT: - CARDi_SendPxi((u32)p->cmd); - break; - } - OSIntrMode bak_psr = OS_DisableInterrupts(); - while ((p->flag & CARD_STAT_REQ) != 0) - { - OS_SleepThread(NULL); - } - (void)OS_RestoreInterrupts(bak_psr); - DC_InvalidateRange(p->cmd, sizeof(*p->cmd)); - } - while ((p->cmd->result == CARD_RESULT_TIMEOUT) && (--retry_count > 0)); - - return (p->cmd->result == CARD_RESULT_SUCCESS); -} diff --git a/arm9/lib/src/CARD_rom.c b/arm9/lib/src/CARD_rom.c deleted file mode 100644 index 6d6b1ff8..00000000 --- a/arm9/lib/src/CARD_rom.c +++ /dev/null @@ -1,280 +0,0 @@ -#include "function_target.h" -#include "nitro/types.h" -#include "CARD_pullOut.h" -#include "CARD_rom.h" -#include "MI_dma_card.h" -#include "MI_memory.h" -#include "OS_cache.h" -#include "OS_interrupt.h" - -extern u32 cardi_rom_base; -u32 cardi_rom_base; -u32 cardi_rom_header_addr = HW_ROM_HEADER_BUF; - -CARDRomStat rom_stat ALIGN(32); - -static BOOL CARDi_ReadFromCache(CARDRomStat *p); -static void CARDi_SetRomOp(u32 cmd1, u32 cmd2); -static void CARDi_SetCardDma(void); -static void CARDi_OnReadCard(void); -static void CARDi_ReadRomSyncCore(CARDiCommon *c); - -static inline BOOL CARDi_OnReadPageDirect(CARDRomStat *arg) -{ -#pragma unused(arg) - CARDiCommon *p = &cardi_common; - p->src += CARD_ROM_PAGE_SIZE; - p->dst += CARD_ROM_PAGE_SIZE; - p->len -= CARD_ROM_PAGE_SIZE; - return (p->len > 0); -} - -ARM_FUNC static BOOL CARDi_ReadFromCache(CARDRomStat *p) -{ - CARDiCommon *c = &cardi_common; - const u32 cur_page = CARD_ALIGN_HI_BIT(c->src); - if (cur_page == (u32)p->cache_page) - { - const u32 mod = c->src - cur_page; - u32 len = CARD_ROM_PAGE_SIZE - mod; - if (len > c->len) - { - len = c->len; - } - MI_CpuCopy8(p->cache_buf + mod, (void *)c->dst, len); - c->src += len; - c->dst += len; - c->len -= len; - } - return (c->len > 0); -} - -ARM_FUNC static void CARDi_SetRomOp(u32 cmd1, u32 cmd2) -{ - while ((reg_CARD_CNT & CARD_START) != 0) {} - - reg_CARD_MASTERCNT = CARDMST_SEL_ROM | CARDMST_ENABLE | CARDMST_IF_ENABLE; - { - vu8 *const p_cmd = ®_CARD_CMD; - p_cmd[0] = (u8)(cmd1 >> (8 * 3)); - p_cmd[1] = (u8)(cmd1 >> (8 * 2)); - p_cmd[2] = (u8)(cmd1 >> (8 * 1)); - p_cmd[3] = (u8)(cmd1 >> (8 * 0)); - p_cmd[4] = (u8)(cmd2 >> (8 * 3)); - p_cmd[5] = (u8)(cmd2 >> (8 * 2)); - p_cmd[6] = (u8)(cmd2 >> (8 * 1)); - p_cmd[7] = (u8)(cmd2 >> (8 * 0)); - } -} - -static inline void CARDi_SetRomOpReadPage1(u32 src) -{ - CARDi_SetRomOp((u32)(MROMOP_G_READ_PAGE | (src >> 8)), (u32)(src << 24)); -} - -ARM_FUNC static void CARDi_SetCardDma(void) -{ - CARDiCommon *const c = &cardi_common; - CARDRomStat *const p = &rom_stat; - MIi_CardDmaCopy32(c->dma, (const void *)®_CARD_DATA, (void *)c->dst, CARD_ROM_PAGE_SIZE); - CARDi_SetRomOpReadPage1(c->src); - reg_CARD_CNT = p->ctrl; -} - -ARM_FUNC static void CARDi_OnReadCard(void) -{ - CARDRomStat *const p = &rom_stat; - CARDiCommon *const c = &cardi_common; - MI_StopDma(c->dma); - if (!CARDi_OnReadPageDirect(p)) - { - (void)OS_DisableIrqMask(OS_IE_CARD_DATA); - (void)OS_ResetRequestIrqMask(OS_IE_CARD_DATA); - CARDi_ReadEnd(); - } - else - { - CARDi_SetCardDma(); - } -} - -ARM_FUNC BOOL CARDi_TryReadCardDma(CARDRomStat *p) -{ - CARDiCommon *const c = &cardi_common; - const u32 dst = c->dst; - u32 len = c->len; - const BOOL is_async = !(dst & 31) && - (c->dma <= MI_DMA_MAX_NUM) && - !CARDi_IsInTcm(dst, len) && - !CARD_ALIGN_LO_BIT(c->src | len) && - (len > 0); - p->ctrl = CARDi_GetRomFlag(CARD_COMMAND_PAGE); - if (is_async) - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - IC_InvalidateRange((void *)dst, len); - { - u32 pos = dst; - u32 mod = (dst & (HW_CACHE_LINE_SIZE - 1)); - if (mod) - { - pos -= mod; - DC_StoreRange((void *)(pos), HW_CACHE_LINE_SIZE); - DC_StoreRange((void *)(pos + len), HW_CACHE_LINE_SIZE); - len += HW_CACHE_LINE_SIZE; - } - DC_InvalidateRange((void *)pos, len); - DC_WaitWriteBufferEmpty(); - } - (void)OS_SetIrqFunction(OS_IE_CARD_DATA, CARDi_OnReadCard); - (void)OS_ResetRequestIrqMask(OS_IE_CARD_DATA); - (void)OS_EnableIrqMask(OS_IE_CARD_DATA); - (void)OS_RestoreInterrupts(bak_psr); - CARDi_SetCardDma(); - } - return is_async; -} - -ARM_FUNC void CARDi_ReadCard(CARDRomStat *p) -{ - CARDiCommon *const c = &cardi_common; - while (TRUE) - { - const u32 len = CARD_ROM_PAGE_SIZE; - u32 src = CARD_ALIGN_HI_BIT(c->src); - u32 dst; - if ((src != c->src) || ((c->dst & 3) != 0) || (c->len < len)) - { - dst = (u32)p->cache_buf; - p->cache_page = (void *)src; - } - else - { - dst = c->dst; - } - - CARDi_SetRomOpReadPage1(src); - { - u32 pos = 0; - reg_CARD_CNT = p->ctrl; - while (TRUE) - { - const u32 ctrl = reg_CARD_CNT; - if ((ctrl & CARD_DATA_READY) != 0) - { - u32 data = reg_CARD_DATA; - if (pos < len) - { - ((u32 *)dst)[pos++] = data; - } - } - if (!(ctrl & CARD_START)) - { - break; - } - } - } - if (dst == c->dst) - { - if (!CARDi_OnReadPageDirect(p)) - { - break; - } - } - else - { - if (!CARDi_ReadFromCache(p)) - { - break; - } - } - } -} - -ARM_FUNC u32 CARDi_ReadRomIDCore(void) -{ - CARDi_SetRomOp(MROMOP_G_READ_ID, 0); - reg_CARD_CNT = (u32)(CARDi_GetRomFlag(CARD_COMMAND_ID) & ~CARD_LATENCY1_MASK); - while (!(reg_CARD_CNT & CARD_DATA_READY)) {} - return reg_CARD_DATA; -} - -ARM_FUNC static void CARDi_ReadRomSyncCore(CARDiCommon *c) -{ -#pragma unused(c) - CARDRomStat *const p = &rom_stat; - - if (CARDi_ReadFromCache(p)) - { - (*p->read_func) (p); - } - CARDi_ReadEnd(); -} - -ARM_FUNC void CARDi_ReadRom(u32 dma, const void *src, void *dst, u32 len, MIDmaCallback callback, void *arg, BOOL is_async) -{ - CARDRomStat *const p = &rom_stat; - CARDiCommon *const c = &cardi_common; - - CARD_CheckEnabled(); - - CARDi_WaitTask(c, callback, arg); - - c->dma = dma; - c->src = (u32)((u32)src + cardi_rom_base); - c->dst = (u32)dst; - c->len = (u32)len; - if (dma <= MI_DMA_MAX_NUM) - { - MI_StopDma(dma); - } - - if (CARDi_TryReadCardDma(p)) - { - if (!is_async) - { - CARD_WaitRomAsync(); - } - } - else if (is_async) - { - CARDi_SetTask(CARDi_ReadRomSyncCore); - } - else - { - c->cur_th = OS_GetCurrentThread(); - CARDi_ReadRomSyncCore(c); - } -} - -ARM_FUNC void CARD_Init(void) -{ - CARDiCommon *const p = &cardi_common; - - if (!p->flag) - { - p->flag = CARD_STAT_INIT; - p->src = p->dst = p->len = 0; - p->dma = (u32)~0; - p->callback = NULL; - p->callback_arg = NULL; - - cardi_rom_base = 0; - - CARDi_InitCommon(); - - rom_stat.read_func = CARDi_GetRomAccessor(); - - CARD_InitPulledOutCallback(); - } -} - -ARM_FUNC void CARD_WaitRomAsync(void) -{ - (void)CARDi_WaitAsync(); -} - -ARM_FUNC void (*CARDi_GetRomAccessor(void)) (CARDRomStat *) -{ - return CARDi_ReadCard; -} diff --git a/arm9/lib/src/CARD_spi.c b/arm9/lib/src/CARD_spi.c deleted file mode 100644 index 5f02b276..00000000 --- a/arm9/lib/src/CARD_spi.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "function_target.h" -#include "nitro/types.h" -#include "CARD_common.h" -#include "CARD_spi.h" -#include "MI_memory.h" - -extern CARDiCommon cardi_common; - -ARM_FUNC void CARDi_IdentifyBackupCore(CARDBackupType type) -{ - CARDiCommandArg *const p = cardi_common.cmd; - - MI_CpuFill8(&p->spec, 0, sizeof(p->spec)); - p->type = type; - p->spec.caps = CARD_BACKUP_CAPS_AVAILABLE; - if (type != CARD_BACKUP_TYPE_NOT_USE) - { - const u32 size = (u32)(1 << ((type >> CARD_BACKUP_TYPE_SIZEBIT_SHIFT) & CARD_BACKUP_TYPE_SIZEBIT_MASK)); - - const s32 device = ((type >> CARD_BACKUP_TYPE_DEVICE_SHIFT) & CARD_BACKUP_TYPE_DEVICE_MASK); - - p->spec.total_size = size; - p->spec.initial_status = 0xFF; - if (device == CARD_BACKUP_TYPE_DEVICE_EEPROM) - { - switch (size) - { - default: - goto invalid_type; - case 0x000200: //CARD_BACKUP_TYPE_EEPROM_4KBITS - p->spec.page_size = 0x10; - p->spec.addr_width = 1; - p->spec.program_page = 5; - p->spec.initial_status = 0xF0; - break; - case 0x002000: //CARD_BACKUP_TYPE_EEPROM_64KIBTS - p->spec.page_size = 0x0020; - p->spec.addr_width = 2; - p->spec.program_page = 5; - p->spec.initial_status = 0x00; - break; - case 0x010000: //CARD_BACKUP_TYPE_EEPROM_512KBITS - p->spec.page_size = 0x0080; - p->spec.addr_width = 2; - p->spec.program_page = 10; - p->spec.initial_status = 0x00; - break; - } - p->spec.sect_size = p->spec.page_size; - p->spec.caps |= CARD_BACKUP_CAPS_READ; - p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; - p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; - } - else if (device == CARD_BACKUP_TYPE_DEVICE_FLASH) - { - switch (size) - { - default: - goto invalid_type; - case 0x040000: //CARD_BACKUP_TYPE_FLASH_2MBITS - case 0x080000: //CARD_BACKUP_TYPE_FLASH_4MBITS - case 0x100000: //CARD_BACKUP_TYPE_FLASH_8MBITS - p->spec.write_page = 25; - p->spec.write_page_total = 300; - p->spec.erase_page = 300; - p->spec.erase_sector = 5000; - p->spec.caps |= CARD_BACKUP_CAPS_WRITE; - p->spec.caps |= CARD_BACKUP_CAPS_ERASE_PAGE; - break; - case 0x200000: //CARD_BACKUP_TYPE_FLASH_16MBITS - p->spec.erase_sector = 1000; - p->spec.erase_sector_total = 3000; - p->spec.erase_chip = 17000; - p->spec.erase_chip_total = 40000; - p->spec.initial_status = 0x00; - p->spec.caps |= CARD_BACKUP_CAPS_ERASE_CHIP; - break; - case 0x800000: //CARD_BACKUP_TYPE_FLASH_64MBITS - p->spec.erase_sector = 1000; - p->spec.erase_sector_total = 3000; - p->spec.erase_chip = 68000; - p->spec.erase_chip_total = 160000; - p->spec.initial_status = 0x00; - p->spec.caps |= CARD_BACKUP_CAPS_ERASE_CHIP; - break; - } - p->spec.sect_size = 0x010000; - p->spec.page_size = 0x0100; - p->spec.addr_width = 3; - p->spec.program_page = 5; - p->spec.caps |= CARD_BACKUP_CAPS_READ; - p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; - p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; - p->spec.caps |= CARD_BACKUP_CAPS_ERASE_SECTOR; - } - else if (device == CARD_BACKUP_TYPE_DEVICE_FRAM) - { - switch (size) - { - default: - goto invalid_type; - case 0x002000: //CARD_BACKUP_TYPE_FRAM_64KBITS - case 0x008000: //CARD_BACKUP_TYPE_FRAM_64KBITS - break; - } - p->spec.page_size = size; - p->spec.sect_size = size; - p->spec.addr_width = 2; - p->spec.initial_status = 0x00; - p->spec.caps |= CARD_BACKUP_CAPS_READ; - p->spec.caps |= CARD_BACKUP_CAPS_PROGRAM; - p->spec.caps |= CARD_BACKUP_CAPS_VERIFY; - } - else - { - invalid_type: - p->type = CARD_BACKUP_TYPE_NOT_USE; - p->spec.total_size = 0; - cardi_common.cmd->result = CARD_RESULT_UNSUPPORTED; - return; - } - } -} diff --git a/arm9/lib/src/CP_context.c b/arm9/lib/src/CP_context.c deleted file mode 100644 index 6567f516..00000000 --- a/arm9/lib/src/CP_context.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "CP_context.h" -#include "function_target.h" -#include "registers.h" - -ARM_FUNC asm void CP_SaveContext(register CPContext *context) -{ - ldr r1, =REG_DIV_NUMER_ADDR - stmfd sp!, {r4} - ldmia r1, {r2-r4, r12} - stmia r0!, {r2-r4, r12} - ldrh r12, [r1, #-16] - - add r1, r1, #40 - ldmia r1, {r2-r3} - stmia r0!, {r2-r3} - - and r12, r12, #3 - ldrh r2, [r1, #-8] - strh r12, [r0] - and r2, r2, #1 - strh r2, [r0, #2] - ldmfd sp!, {r4} - - bx lr -} - -ARM_FUNC asm void CPi_RestoreContext(register const CPContext *context) -{ - stmfd sp!, {r4} - ldr r1, =REG_DIV_NUMER_ADDR - ldmia r0, {r2-r4, r12} - stmia r1, {r2-r4, r12} - ldrh r2, [r0, #24] //CPContext.div_mode - ldrh r3, [r0, #26] //CPContext.sqrt_mode - - strh r2, [r1, #-16] - strh r3, [r1, #32] - - add r0, r0, #16 //CPContext.sqrt - add r1, r1, #40 - - ldmia r0, {r2-r3} - stmia r1, {r2-r3} - - ldmfd sp!, {r4} - - bx lr -} diff --git a/arm9/lib/src/CTRDG_backup.c b/arm9/lib/src/CTRDG_backup.c deleted file mode 100644 index dc1a3f4b..00000000 --- a/arm9/lib/src/CTRDG_backup.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "CTRDG_backup.h" -#include "function_target.h" -#include "OS_spinLock.h" - -extern u16 ctrdgi_flash_lock_id; -extern u16 ctrdgi_sram_lock_id; - -extern u16 CTRDGi_ReadFlashID(void); - -extern const CTRDGiFlashTypePlus defaultFlash1M; -extern const CTRDGiFlashTypePlus MX29L010; -extern const CTRDGiFlashTypePlus LE26FV10N1TS_10; - -extern const CTRDGiFlashTypePlus defaultFlash512; -extern const CTRDGiFlashTypePlus LE39FW512; -extern const CTRDGiFlashTypePlus AT29LV512_lib; -extern const CTRDGiFlashTypePlus MN63F805MNP; - -static const CTRDGiFlashTypePlus *const flash1M_list[] = { - &MX29L010, - &LE26FV10N1TS_10, - &defaultFlash1M -}; - -static const CTRDGiFlashTypePlus *const flash512_list[] = { - &LE39FW512, - &AT29LV512_lib, - &MN63F805MNP, - &defaultFlash512 -}; - -static const u16 readidtime[] = { - 20 -}; - -ARM_FUNC u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type) -{ - u16 result = 1; - u16 flashID; - const CTRDGiFlashTypePlus *const *flp; - MICartridgeRamCycle ram_cycle; - - if (type == CTRDG_BACKUP_TYPE_FLASH_512K || type == CTRDG_BACKUP_TYPE_FLASH_1M) - { - ctrdgi_flash_lock_id = (u16)OS_GetLockID(); - - (void)OS_LockCartridge(ctrdgi_flash_lock_id); - - ram_cycle = MI_GetCartridgeRamCycle(); - MI_SetCartridgeRamCycle(MI_CTRDG_RAMCYCLE_18); - - ctrdgi_fl_maxtime = readidtime; - flashID = CTRDGi_ReadFlashID(); - - if (type == CTRDG_BACKUP_TYPE_FLASH_512K) - { - flp = flash512_list; - } - - if (type == CTRDG_BACKUP_TYPE_FLASH_1M) - { - flp = flash1M_list; - } - - MI_SetCartridgeRamCycle(ram_cycle); - (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); - - result = 1; - while ((*flp)->type.makerID != 0) - { - if ((flashID & 0xff) == *(u16 *)&((*flp)->type.makerID)) - { - result = 0; - break; - } - flp++; - } - CTRDGi_WriteAgbFlashSector = (*flp)->CTRDGi_WriteAgbFlashSector; - CTRDGi_EraseAgbFlashChip = (*flp)->CTRDGi_EraseAgbFlashChip; - CTRDGi_EraseAgbFlashSector = (*flp)->CTRDGi_EraseAgbFlashSector; - CTRDGi_WriteAgbFlashSectorAsync = (*flp)->CTRDGi_WriteAgbFlashSectorAsync; - CTRDGi_EraseAgbFlashChipAsync = (*flp)->CTRDGi_EraseAgbFlashChipAsync; - CTRDGi_EraseAgbFlashSectorAsync = (*flp)->CTRDGi_EraseAgbFlashSectorAsync; - CTRDGi_PollingSR = (*flp)->CTRDGi_PollingSR; - ctrdgi_fl_maxtime = (*flp)->maxtime; - AgbFlash = &(*flp)->type; - } - else if (type == CTRDG_BACKUP_TYPE_SRAM) - { - ctrdgi_sram_lock_id = (u16)OS_GetLockID(); - result = 0; - } - return result; -} diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c deleted file mode 100644 index df3ec0b6..00000000 --- a/arm9/lib/src/CTRDG_common.c +++ /dev/null @@ -1,350 +0,0 @@ -#include "CTRDG_common.h" -#include "function_target.h" -#include "syscall.h" -#include "OS_cache.h" -#include "OS_protectionRegion.h" -#include "OS_terminate_proc.h" -#include "PXI_fifo.h" -#include "MI_dma.h" -#include "MI_memory.h" -#include "mmap.h" - -CTRDGWork CTRDGi_Work; - -static BOOL CTRDGi_EnableFlag = FALSE; - -ARM_FUNC void CTRDGi_InitCommon(void) -{ - SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32); - - CTRDGi_Work.lockID = (u16)OS_GetLockID(); -} - -ARM_FUNC BOOL CTRDG_IsAgbCartridge(void) -{ - return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit()); -} - -ARM_FUNC BOOL CTRDG_IsOptionCartridge(void) -{ - return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit()); -} - -ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void) -{ - CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); - - return cip->isAgbCartridge; -} - -ARM_FUNC u32 CTRDG_GetAgbGameCode(void) -{ - u32 ret = 0; - - if (CTRDG_IsExisting()) - { - ret = CTRDGi_GetAgbGameCodeAtInit(); - } - - return ret; -} - -ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void) -{ - CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); - u32 ret = 0; - - if (CTRDGi_IsAgbCartridgeAtInit()) - { - ret = cip->gameCode; - } - - return ret; -} - -ARM_FUNC u16 CTRDG_GetAgbMakerCode(void) -{ - u16 ret = 0; - - if (CTRDG_IsExisting()) - { - ret = CTRDGi_GetAgbMakerCodeAtInit(); - } - - return ret; -} - -ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void) -{ - CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); - u16 ret = 0; - - if (CTRDGi_IsAgbCartridgeAtInit()) - { - ret = cip->makerCode; - } - - return ret; -} - -ARM_FUNC BOOL CTRDG_IsPulledOut(void) -{ - CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); - - if (cip->moduleID.raw == 0xffff) - { - return FALSE; - } - - if (!cip->detectPullOut) - { - (void)CTRDG_IsExisting(); - } - - return cip->detectPullOut; -} - -ARM_FUNC BOOL CTRDG_IsExisting(void) -{ - BOOL ret = TRUE; - CTRDGLockByProc lockInfo; - - CTRDGHeader *chp = CTRDGi_GetHeaderAddr(); - CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr(); - - if (cip->moduleID.raw == 0xffff) - { - return FALSE; - } - - if (cip->detectPullOut == TRUE) - { - return FALSE; - } - - CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo); - - CTRDGRomCycle rc; - - CTRDGi_ChangeLatestAccessCycle(&rc); - u8 isRomCode = chp->isRomCode; - - if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID) - || (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr()) - || ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge)) - { - cip->detectPullOut = TRUE; - ret = FALSE; - } - - CTRDGi_RestoreAccessCycle(&rc); - - CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo); - - return ret; -} - -ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r) -{ - r->c1 = MI_GetCartridgeRomCycle1st(); - r->c2 = MI_GetCartridgeRomCycle2nd(); - - MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18); - MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6); -} - -ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r) -{ - MI_SetCartridgeRomCycle1st(r->c1); - MI_SetCartridgeRomCycle2nd(r->c2); -} - -ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info) -{ - while (TRUE) - { - info->irq = OS_DisableInterrupts(); - if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0) - || (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS)) - { - break; - } - (void)OS_RestoreInterrupts(info->irq); - - SVC_WaitByLoop(1); - } -} - -ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info) -{ - if (!info->locked) - { - (void)OS_UnLockCartridge(lockID); - } - - (void)OS_RestoreInterrupts(info->irq); -} - -ARM_FUNC void CTRDGi_SendtoPxi(u32 data) -{ - while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS) - { - SVC_WaitByLoop(1); - } -} - -ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size) -{ - if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END) - { - return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8); - } - else - { - return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8); - } -} - -ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size) -{ - return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16); -} - -ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size) -{ - return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32); -} - -ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType) -{ - if (!CTRDG_IsExisting()) - { - return FALSE; - } - - CTRDG_CheckEnabled(); - - (void)OS_LockCartridge(CTRDGi_Work.lockID); - - if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA) - { - MI_StopDma(dmaNo); - DC_FlushRange(dest, size); - } - - switch (forwardType) - { - case CTRDGi_FORWARD_DMA16: - MI_DmaCopy16(dmaNo, src, dest, size); - break; - case CTRDGi_FORWARD_DMA32: - MI_DmaCopy32(dmaNo, src, dest, size); - break; - case CTRDGi_FORWARD_CPU16: - MI_CpuCopy16(src, dest, size); - break; - case CTRDGi_FORWARD_CPU32: - MI_CpuCopy32(src, dest, size); - break; - - case CTRDGi_FORWARD_CPU8: - u8 *dest8 = (u8 *)dest; - u8 *src8 = (u8 *)src; - for (s32 n = 0; n < size; n++) - { - *dest8++ = *src8++; - } - break; - } - - (void)OS_UnLockCartridge(CTRDGi_Work.lockID); - - if (!CTRDG_IsExisting()) - { - return FALSE; - } - - return TRUE; -} - -ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata) -{ - return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32); -} - -ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType) -{ - if (!CTRDG_IsExisting()) - { - return FALSE; - } - - CTRDG_CheckEnabled(); - - (void)OS_LockCartridge(CTRDGi_Work.lockID); - - switch (accessType) - { - case CTRDGi_ACCESS_READ8: - if (rdata) - { - *(u8 *)rdata = *(u8 *)address; - } - break; - case CTRDGi_ACCESS_READ16: - if (rdata) - { - *(u16 *)rdata = *(u16 *)address; - } - break; - case CTRDGi_ACCESS_READ32: - if (rdata) - { - *(u32 *)rdata = *(u32 *)address; - } - break; - case CTRDGi_ACCESS_WRITE8: - *(u8 *)address = (u8)data; - break; - case CTRDGi_ACCESS_WRITE16: - *(u16 *)address = (u16)data; - break; - case CTRDGi_ACCESS_WRITE32: - *(u32 *)address = (u32)data; - break; - } - - (void)OS_UnLockCartridge(CTRDGi_Work.lockID); - - if (!CTRDG_IsExisting()) - { - return FALSE; - } - - return TRUE; -} - -ARM_FUNC BOOL CTRDG_IsEnabled(void) -{ - return CTRDGi_EnableFlag; -} - -ARM_FUNC void CTRDG_Enable(BOOL enable) -{ - OSIntrMode bak_cpsr = OS_DisableInterrupts(); - CTRDGi_EnableFlag = enable; - if (!CTRDG_IsOptionCartridge()) - { - u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO); - (void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc); - } - (void)OS_RestoreInterrupts(bak_cpsr); -} - -ARM_FUNC void CTRDG_CheckEnabled(void) -{ - if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled()) - { - OS_Terminate(); - } -} diff --git a/arm9/lib/src/CTRDG_flash_AT29LV512.c b/arm9/lib/src/CTRDG_flash_AT29LV512.c deleted file mode 100644 index b1d09738..00000000 --- a/arm9/lib/src/CTRDG_flash_AT29LV512.c +++ /dev/null @@ -1,327 +0,0 @@ -#include "CTRDG_flash_AT29LV512.h" -#include "function_target.h" -#include "CTRDG_backup.h" -#include "CTRDG_flash.h" -#include "MI_exMemory.h" -#include "OS_interrupt.h" -#include "OS_spinLock.h" - -#define CTRDG_BACKUP_COM_ADR1 (CTRDG_AGB_FLASH_ADR+0x00005555) -#define CTRDG_BACKUP_COM_ADR2 (CTRDG_AGB_FLASH_ADR+0x00002aaa) - -#define FLASH_LOG_SECTOR_COUNT 16 -#define FLASH_SECTOR_LOG_TO_PHYS 32 -#define FLASH_SECTOR_LOG_TO_PHYS_SHIFT 5 - -extern u16 ctrdgi_flash_lock_id; -extern BOOL ctrdgi_backup_irq; - -extern void CTRDGi_SetTask(CTRDGTaskInfo * pt, CTRDG_TASK_FUNC task, CTRDG_TASK_FUNC callback); - -extern u16 CTRDGi_PollingSR512kCOMMON(u16 phase, u8 *adr, u16 lastData); - -static const u16 atMaxTime[] = { - 10, 40, 0, 40 -}; - -const CTRDGiFlashTypePlus AT29LV512_lib = { - CTRDGi_WriteFlash4KBAT, - CTRDGi_EraseFlashChipAT, - CTRDGi_EraseFlash4KBAT, - CTRDGi_WriteFlash4KBAsyncAT, - CTRDGi_EraseFlashChipAsyncAT, - CTRDGi_EraseFlash4KBAsyncAT, - CTRDGi_PollingSR512kCOMMON, - atMaxTime, - { - 0x00010000, //ROM size - {0x00001000, 12, 16, 0}, //sector - {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle - 0x1f, //maker ID - 0x3d, //device ID - } -}; - -const CTRDGiFlashTypePlus AT29LV512_org = { - CTRDGi_WriteFlashSectorAT, - CTRDGi_EraseFlashChipAT, - CTRDGi_EraseFlashSectorAT, - CTRDGi_WriteFlashSectorAsyncAT, - CTRDGi_EraseFlashChipAsyncAT, - CTRDGi_EraseFlashSectorAsyncAT, - CTRDGi_PollingSR512kCOMMON, - atMaxTime, - { - 0x00010000, //ROM size - {0x00000080, 7, 512, 0}, //sector - {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle - 0x1f, //maker ID - 0x3d, //device ID - } -}; - -ARM_FUNC u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg) -{ - MICartridgeRamCycle ram_cycle; - u32 result; - (void)arg; - - (void)OS_LockCartridge(ctrdgi_flash_lock_id); - - ram_cycle = MI_GetCartridgeRamCycle(); - MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); - - ctrdgi_backup_irq = OS_DisableIrq(); - - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; - *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x80; - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; - *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x10; - - (void)OS_RestoreIrq(ctrdgi_backup_irq); - - result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_CHIP_ERASE, (u8 *)CTRDG_AGB_FLASH_ADR, 0xff); - - MI_SetCartridgeRamCycle(ram_cycle); - - (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); - - return result; -} - -ARM_FUNC u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg) -{ - u32 i; - u8 *dst; - BOOL shlet_ime; - MICartridgeRamCycle ram_cycle; - u32 result; - CTRDGTaskInfo p = *arg; - u16 p_secNo = p.sec_num; - - dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift)); - - (void)OS_LockCartridge(ctrdgi_flash_lock_id); - - ram_cycle = MI_GetCartridgeRamCycle(); - MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); - - shlet_ime = OS_DisableIrq(); - - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; - *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0; - - for (i = AT29LV512_org.type.sector.size; i > 0; i--) - { - *dst++ = 0xff; - } - dst--; - - (void)OS_RestoreIrq(shlet_ime); - - result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, 0xff); - - if (result) - { - result = (u16)((result & 0xff00) | CTRDG_BACKUP_PHASE_SECTOR_ERASE); - } - - MI_SetCartridgeRamCycle(ram_cycle); - - (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); - - return result; -} - -ARM_FUNC u32 CTRDGi_EraseFlash4KBCoreAT(CTRDGTaskInfo *arg) -{ - u32 result; - u16 i, p_secNo, retry; - CTRDGTaskInfo p = *arg; - u16 l_secNo = p.sec_num; - - if (l_secNo >= FLASH_LOG_SECTOR_COUNT) - { - return CTRDG_BACKUP_RESULT_ERROR | CTRDG_BACKUP_PHASE_PARAMETER_CHECK; - } - - p_secNo = (u16)(l_secNo << FLASH_SECTOR_LOG_TO_PHYS_SHIFT); - for (i = 0; i < FLASH_SECTOR_LOG_TO_PHYS; i++) - { - for (retry = 2; retry > 0; retry--) - { - result = CTRDGi_EraseFlashSectorAT(p_secNo); - if (result == 0) - { - break; - } - } - p_secNo++; - if (result) - { - break; - } - } - - return result; -} - -ARM_FUNC u32 CTRDGi_WriteFlashSectorCoreAT(CTRDGTaskInfo *arg) -{ - u32 i; - u8 *dst; - BOOL shlet_ime; - MICartridgeRamCycle ram_cycle; - u32 result; - CTRDGTaskInfo p = *arg; - u16 p_secNo = p.sec_num; - u8 *src = p.data; - - (void)OS_LockCartridge(ctrdgi_flash_lock_id); - - ram_cycle = MI_GetCartridgeRamCycle(); - MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]); - - dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift)); - - shlet_ime = OS_DisableIrq(); - - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa; - *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55; - *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0; - - for (i = AT29LV512_org.type.sector.size; i > 0; i--) - { - *dst++ = *src++; - } - dst--; - src--; - - (void)OS_RestoreIrq(shlet_ime); - - result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, *src); - - MI_SetCartridgeRamCycle(ram_cycle); - - (void)OS_UnlockCartridge(ctrdgi_flash_lock_id); - - return result; -} - -ARM_FUNC u32 CTRDGi_WriteFlash4KBCoreAT(CTRDGTaskInfo *arg) -{ - u32 result; - u16 p_secNo, retry; - CTRDGTaskInfo p = *arg; - u16 l_secNo = p.sec_num; - u8 *src = p.data; - - if (l_secNo >= FLASH_LOG_SECTOR_COUNT) - { - return CTRDG_BACKUP_RESULT_ERROR | CTRDG_BACKUP_PHASE_PARAMETER_CHECK; - } - - p_secNo = (u16)(l_secNo << FLASH_SECTOR_LOG_TO_PHYS_SHIFT); - ctrdg_flash_remainder = (u16)(AT29LV512_lib.type.sector.size); - while (ctrdg_flash_remainder) - { - for (retry = 2; retry > 0; retry--) - { - result = CTRDGi_WriteFlashSectorAT(p_secNo, src); - if (result == 0) - { - break; - } - } - if (result) - { - break; - } - ctrdg_flash_remainder -= AT29LV512_org.type.sector.size; - src += AT29LV512_org.type.sector.size; - p_secNo++; - } - - return result; -} - -ARM_FUNC u16 CTRDGi_EraseFlashChipAT(void) -{ - CTRDGTaskInfo p; - return (u16)CTRDGi_EraseFlashChipCoreAT(&p); -} - -ARM_FUNC u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo) -{ - CTRDGTaskInfo p; - p.sec_num = l_secNo; - return (u16)CTRDGi_EraseFlash4KBCoreAT(&p); -} - -ARM_FUNC u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src) -{ - CTRDGTaskInfo p; - p.sec_num = l_secNo; - p.data = src; - return (u16)CTRDGi_WriteFlash4KBCoreAT(&p); -} - -ARM_FUNC void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback) -{ - CTRDGTaskInfo p; - - CTRDGi_SetTask(&p, CTRDGi_EraseFlashChipCoreAT, callback); -} - -ARM_FUNC void CTRDGi_EraseFlash4KBAsyncAT(u16 l_secNo, CTRDG_TASK_FUNC callback) -{ - CTRDGTaskInfo p; - - p.sec_num = l_secNo; - CTRDGi_SetTask(&p, CTRDGi_EraseFlash4KBCoreAT, callback); -} - -ARM_FUNC void CTRDGi_WriteFlash4KBAsyncAT(u16 l_secNo, u8 *src, CTRDG_TASK_FUNC callback) -{ - CTRDGTaskInfo p; - - p.sec_num = l_secNo; - p.data = src; - CTRDGi_SetTask(&p, CTRDGi_WriteFlash4KBCoreAT, callback); -} - -ARM_FUNC u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo) -{ - CTRDGTaskInfo p; - p.sec_num = p_secNo; - return (u16)CTRDGi_EraseFlashSectorCoreAT(&p); -} - -ARM_FUNC u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src) -{ - CTRDGTaskInfo p; - - p.sec_num = p_secNo; - p.data = src; - return (u16)CTRDGi_WriteFlashSectorCoreAT(&p); -} - -ARM_FUNC void CTRDGi_EraseFlashSectorAsyncAT(u16 p_secNo, CTRDG_TASK_FUNC callback) -{ - CTRDGTaskInfo p; - - p.sec_num = p_secNo; - CTRDGi_SetTask(&p, CTRDGi_EraseFlashSectorCoreAT, callback); -} - -ARM_FUNC void CTRDGi_WriteFlashSectorAsyncAT(u16 p_secNo, u8 *src, CTRDG_TASK_FUNC callback) -{ - CTRDGTaskInfo p; - - p.sec_num = p_secNo; - p.data = src; - CTRDGi_SetTask(&p, CTRDGi_WriteFlashSectorCoreAT, callback); -} diff --git a/arm9/lib/src/FS_archive.c b/arm9/lib/src/FS_archive.c deleted file mode 100644 index 01f794f8..00000000 --- a/arm9/lib/src/FS_archive.c +++ /dev/null @@ -1,445 +0,0 @@ -#include "FS_archive.h" -#include "FS_command.h" -#include "FSi_util.h" -#include "MI_memory.h" -#include "MI_byteAccess.h" -#include "OS_printf.h" - -FSArchive * arc_list = NULL; -FSDirPos current_dir_pos; - -ARM_FUNC u32 FSi_GetPackedName(const char * name, int name_len) -{ - u32 ret = 0; - if (name_len <= FS_ARCHIVE_NAME_LEN_MAX) - { - int i = 0; - for (; i < name_len; i++) - { - u32 c = MI_ReadByte(name + i); - if (!c) - break; - c = (u32)(c - 'A'); - if (c <= (u32)('Z' - 'A')) - c = (u32)(c + 'a'); - else - c = (u32)(c + 'A'); - ret |= (u32)(c << (i * 8)); - } - } - return ret; -} - -ARM_FUNC FSResult FSi_ReadMemCallback(struct FSArchive * p_arc, void * dest, u32 pos, u32 size) -{ - MI_CpuCopy8((const void *)FS_GetArchiveOffset(p_arc, pos), dest, size); - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSResult FSi_WriteMemCallback(struct FSArchive * p_arc, const void * src, u32 pos, u32 size) -{ - MI_CpuCopy8(src, (void *)FS_GetArchiveOffset(p_arc, pos), size); - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSResult FSi_ReadMemoryCore(FSArchive * p_arc, void * dest, u32 pos, u32 size) -{ -#pragma unused(p_arc) - MI_CpuCopy8((const void *)pos, dest, size); - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSFile * FSi_NextCommand(FSArchive * p_arc) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (FSi_IsArchiveCanceling(p_arc)) - { - FSFile *p, *q; - p_arc->flag &= ~FS_ARCHIVE_FLAG_CANCELING; - for (p = p_arc->list.next; p; p = q) - { - q = p->link.next; - if (FS_IsCanceling(p)) - { - if (p_arc->list.next == p) - p_arc->list.next = q; - FSi_ReleaseCommand(p, FS_RESULT_CANCELED); - if (!q) - q = p_arc->list.next; - } - } - } - if (!FSi_IsArchiveSuspending(p_arc) && !FS_IsArchiveSuspended(p_arc)) - { - FSFile * p_file = p_arc->list.next; - if (p_file != NULL) - { - const BOOL is_start = !FSi_IsArchiveRunning(p_arc); - if (is_start) - p_arc->flag |= FS_ARCHIVE_FLAG_RUNNING; - (void)OS_RestoreInterrupts(bak_psr); - if (is_start) - { - if ((p_arc->proc_flag & FS_ARCHIVE_PROC_ACTIVATE) != 0) - (void)((*p_arc->proc) (p_file, FS_COMMAND_ACTIVATE)); - } - bak_psr = OS_DisableInterrupts(); - p_file->stat |= FS_FILE_STATUS_OPERATING; - if (FS_IsFileSyncMode(p_file)) - { - OS_WakeupThread(p_file->queue); - (void)OS_RestoreInterrupts(bak_psr); - return NULL; - } - (void)OS_RestoreInterrupts(bak_psr); - return p_file; - } - } - if (FSi_IsArchiveRunning(p_arc)) - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_RUNNING; - if (p_arc->proc_flag & FS_ARCHIVE_PROC_IDLE) - { - FSFile tmp; - FS_InitFile(&tmp); - tmp.arc = p_arc; - (void)((*p_arc->proc)(&tmp, FS_COMMAND_IDLE)); - } - } - if (FSi_IsArchiveSuspending(p_arc)) - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_SUSPENDING; - p_arc->flag |= FS_ARCHIVE_FLAG_SUSPEND; - OS_WakeupThread(&p_arc->stat_q); - } - (void)OS_RestoreInterrupts(bak_psr); - return NULL; -} - -ARM_FUNC void FSi_ExecuteAsyncCommand(FSFile * p_file) -{ - FSArchive *const p_arc = p_file->arc; - while (p_file) - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - p_file->stat |= FS_FILE_STATUS_OPERATING; - if (FS_IsFileSyncMode(p_file)) - { - OS_WakeupThread(p_file->queue); - (void)OS_RestoreInterrupts(bak_psr); - break; - } - p_file->stat |= FS_FILE_STATUS_ASYNC; - (void)OS_RestoreInterrupts(bak_psr); - if (FSi_TranslateCommand(p_file, p_file->command) == FS_RESULT_PROC_ASYNC) - break; - p_file = FSi_NextCommand(p_arc); - } -} - -ARM_FUNC BOOL FSi_ExecuteSyncCommand(FSFile * p_file) -{ - FSFile * p_target; - FSResult ret = FSi_TranslateCommand(p_file, p_file->command); - FSi_ReleaseCommand(p_file, ret); - p_target = FSi_NextCommand(p_file->arc); - if (p_target) - FSi_ExecuteAsyncCommand(p_target); - return FS_IsSucceeded(p_file); -} - -ARM_FUNC BOOL FSi_SendCommand(FSFile * p_file, FSCommandType command) -{ - FSArchive * p_arc = p_file->arc; - const int bit = 1 << command; - p_file->command = command; - p_file->error = FS_RESULT_BUSY; - p_file->stat |= FS_FILE_STATUS_BUSY; - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (FSi_IsArchiveUnloading(p_arc)) - { - FSi_ReleaseCommand(p_file, FS_RESULT_CANCELLED); - (void)OS_RestoreInterrupts(bak_psr); - return FALSE; - } - if ((bit & FS_ARCHIVE_PROC_SYNC) != 0) - p_file->stat |= FS_FILE_STATUS_SYNC; - FSi_AppendToList(p_file, (FSFile *)&p_arc->list); - if (!FS_IsArchiveSuspended(p_arc) && !FSi_IsArchiveRunning(p_arc)) - { - p_arc->flag |= FS_ARCHIVE_FLAG_RUNNING; - (void)OS_RestoreInterrupts(bak_psr); - if ((p_arc->proc_flag & FS_ARCHIVE_PROC_ACTIVATE)) - (void)((*p_arc->proc)(p_file, FS_COMMAND_ACTIVATE)); - bak_psr = OS_DisableInterrupts(); - p_file->stat |= FS_FILE_STATUS_OPERATING; - if (!FS_IsFileSyncMode(p_file)) - { - (void)OS_RestoreInterrupts(bak_psr); - FSi_ExecuteAsyncCommand(p_file); - return TRUE; - } - (void)OS_RestoreInterrupts(bak_psr); - } - else if (!FS_IsFileSyncMode(p_file)) - { - (void)OS_RestoreInterrupts(bak_psr); - return TRUE; - } - else - { - do - { - OS_SleepThread(p_file->queue); - } while (!(p_file->stat & FS_FILE_STATUS_OPERATING)); - (void)OS_RestoreInterrupts(bak_psr); - } - } - return FSi_ExecuteSyncCommand(p_file); -} - -ARM_FUNC void FS_InitArchive(FSArchive * p_arc) -{ - MI_CpuClear8(p_arc, sizeof(FSArchive)); - p_arc->sync_q.head = p_arc->sync_q.tail = NULL; - p_arc->stat_q.head = p_arc->stat_q.tail = NULL; -} - -ARM_FUNC FSArchive * const FS_FindArchive(const char * name, int name_len) -{ - u32 pack = FSi_GetPackedName(name, name_len); - OSIntrMode bak_psr = OS_DisableInterrupts(); - FSArchive * p_arc = arc_list; - while (p_arc && (p_arc->name.pack != pack)) - p_arc = p_arc->next; - (void)OS_RestoreInterrupts(bak_psr); - return p_arc; -} - -ARM_FUNC BOOL FS_RegisterArchiveName(FSArchive * p_arc, const char * name, int name_len) -{ - BOOL ret = FALSE; - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (!FS_FindArchive(name, name_len)) - { - FSArchive * p_tail = arc_list; - if (!p_tail) - { - arc_list = p_arc; - current_dir_pos.arc = p_arc; - current_dir_pos.pos = 0; - current_dir_pos.index = 0; - current_dir_pos.own_id = 0; - } - else - { - while (p_tail->next) - p_tail = p_tail->next; - p_tail->next = p_arc; - p_arc->prev = p_tail; - } - p_arc->name.pack = FSi_GetPackedName(name, name_len); - p_arc->flag |= FS_ARCHIVE_FLAG_REGISTER; - ret = TRUE; - } - (void)OS_RestoreInterrupts(bak_psr); - return ret; -} - -ARM_FUNC void FS_ReleaseArchiveName(FSArchive * p_arc) -{ - if (p_arc->name.pack) - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (p_arc->next) - p_arc->next->prev = p_arc->prev; - if (p_arc->prev) - p_arc->prev->next = p_arc->next; - p_arc->name.pack = 0; - p_arc->next = p_arc->prev = NULL; - p_arc->flag &= ~FS_ARCHIVE_FLAG_REGISTER; - if (current_dir_pos.arc == p_arc) - { - current_dir_pos.arc = arc_list; - current_dir_pos.pos = 0; - current_dir_pos.index = 0; - current_dir_pos.own_id = 0; - } - (void)OS_RestoreInterrupts(bak_psr); - } -} - -ARM_FUNC BOOL FS_LoadArchive(FSArchive * p_arc, u32 base, u32 fat, u32 fat_size, u32 fnt, u32 fnt_size, FS_ARCHIVE_READ_FUNC read_func, FS_ARCHIVE_WRITE_FUNC write_func) -{ - p_arc->base = base; - p_arc->fat_size = fat_size; - p_arc->fat = p_arc->fat_bak = fat; - p_arc->fnt_size = fnt_size; - p_arc->fnt = p_arc->fnt_bak = fnt; - p_arc->read_func = (read_func != NULL) ? read_func : FSi_ReadMemCallback; - p_arc->write_func = (write_func != NULL) ? write_func : FSi_WriteMemCallback; - p_arc->table_func = p_arc->read_func; - p_arc->load_mem = NULL; - p_arc->flag |= FS_ARCHIVE_FLAG_LOADED; - return TRUE; -} - -ARM_FUNC BOOL FS_UnloadArchive(FSArchive * p_arc) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - if (FS_IsArchiveLoaded(p_arc)) - { - if (FS_IsArchiveTableLoaded(p_arc)) - { - OS_TWarning("memory may leak. preloaded-table of archive \"%s\" (0x%08X)", p_arc->name.ptr, p_arc->load_mem); - } - { - FSFile *p, *q; - BOOL bak_state = FS_SuspendArchive(p_arc); - p_arc->flag |= FS_ARCHIVE_FLAG_UNLOADING; - for (p = p_arc->list.next; p; p = q) - { - q = p->link.next; - FSi_ReleaseCommand(p, FS_RESULT_CANCELED); - } - p_arc->list.next = NULL; - if (bak_state) - (void)FS_ResumeArchive(p_arc); - } - p_arc->base = 0; - p_arc->fat = 0; - p_arc->fat_size = 0; - p_arc->fnt = 0; - p_arc->fnt_size = 0; - p_arc->fat_bak = p_arc->fnt_bak = 0; - p_arc->flag &= ~(FS_ARCHIVE_FLAG_CANCELING | FS_ARCHIVE_FLAG_LOADED | FS_ARCHIVE_FLAG_UNLOADING); - } - (void)OS_RestoreInterrupts(bak_psr); - return TRUE; -} - -ARM_FUNC u32 FS_LoadArchiveTables(FSArchive *p_arc, void *p_mem, u32 max_size) -{ - u32 total_size = ALIGN_BYTE(p_arc->fat_size + p_arc->fnt_size + 32, 32); - if (total_size <= max_size) - { - u8 *p_cache = (u8 *)ALIGN_BYTE((u32)p_mem, 32); - FSFile tmp; - FS_InitFile(&tmp); - if (FS_OpenFileDirect(&tmp, p_arc, p_arc->fat, p_arc->fat + p_arc->fat_size, (u32)~0)) - { - if (FS_ReadFile(&tmp, p_cache, (s32)p_arc->fat_size) < 0) - { - MI_CpuFill8(p_cache, 0x00, p_arc->fat_size); - } - (void)FS_CloseFile(&tmp); - } - p_arc->fat = (u32)p_cache; - p_cache += p_arc->fat_size; - if (FS_OpenFileDirect(&tmp, p_arc, p_arc->fnt, p_arc->fnt + p_arc->fnt_size, (u32)~0)) - { - if (FS_ReadFile(&tmp, p_cache, (s32)p_arc->fnt_size) < 0) - { - MI_CpuFill8(p_cache, 0x00, p_arc->fnt_size); - } - (void)FS_CloseFile(&tmp); - } - p_arc->fnt = (u32)p_cache; - p_arc->load_mem = p_mem; - p_arc->table_func = FSi_ReadMemoryCore; - p_arc->flag |= FS_ARCHIVE_FLAG_TABLE_LOAD; - } - return total_size; -} - -ARM_FUNC void * FS_UnloadArchiveTables(FSArchive * p_arc) -{ - void *ret = NULL; - if (FS_IsArchiveLoaded(p_arc)) - { - BOOL bak_stat = FS_SuspendArchive(p_arc); - if (FS_IsArchiveTableLoaded(p_arc)) - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_TABLE_LOAD; - ret = p_arc->load_mem; - p_arc->load_mem = NULL; - p_arc->fat = p_arc->fat_bak; - p_arc->fnt = p_arc->fnt_bak; - p_arc->table_func = p_arc->read_func; - } - if (bak_stat) - (void)FS_ResumeArchive(p_arc); - } - return ret; -} - -ARM_FUNC BOOL FS_SuspendArchive(FSArchive * p_arc) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - const BOOL bak_stat = !FS_IsArchiveSuspended(p_arc); - if (bak_stat) - { - if (FSi_IsArchiveRunning(p_arc)) - { - p_arc->flag |= FS_ARCHIVE_FLAG_SUSPENDING; - do { - OS_SleepThread(&p_arc->stat_q); - } while (FSi_IsArchiveSuspending(p_arc)); - } - else - { - p_arc->flag |= FS_ARCHIVE_FLAG_SUSPEND; - } - } - (void)OS_RestoreInterrupts(bak_psr); - return bak_stat; -} - -ARM_FUNC BOOL FS_ResumeArchive(FSArchive * p_arc) -{ - FSFile * p_target = NULL; - OSIntrMode bak_psr = OS_DisableInterrupts(); - const BOOL bak_stat = !FS_IsArchiveSuspended(p_arc); - if (!bak_stat) - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_SUSPEND; - p_target = FSi_NextCommand(p_arc); - } - (void)OS_RestoreInterrupts(bak_psr); - if (p_target) - FSi_ExecuteAsyncCommand(p_target); - return bak_stat; -} - -ARM_FUNC void FS_SetArchiveProc(struct FSArchive * p_arc, FS_ARCHIVE_PROC_FUNC proc, u32 flags) -{ - if (!flags) - proc = NULL; - else if (!proc) - flags = 0; - p_arc->proc = proc; - p_arc->proc_flag = flags; -} - -ARM_FUNC void FS_NotifyArchiveAsyncEnd(FSArchive *p_arc, FSResult ret) -{ - if (FSi_IsArchiveAsync(p_arc)) - { - FSFile *p_file = p_arc->list.next; - p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_ASYNC; - FSi_ReleaseCommand(p_file, ret); - p_file = FSi_NextCommand(p_arc); - if (p_file) - FSi_ExecuteAsyncCommand(p_file); - } - else - { - FSFile *p_file = p_arc->list.next; - OSIntrMode bak_psr = OS_DisableInterrupts(); - p_file->error = ret; - p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; - OS_WakeupThread(&p_arc->sync_q); - (void)OS_RestoreInterrupts(bak_psr); - } -} diff --git a/arm9/lib/src/FS_command.c b/arm9/lib/src/FS_command.c deleted file mode 100644 index e677f6c6..00000000 --- a/arm9/lib/src/FS_command.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "FS_file.h" -#include "FS_archive.h" -#include "FSi_util.h" -#include "FS_command.h" - -ARM_FUNC void FSi_ReleaseCommand(FSFile * p_file, FSResult ret) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - FSi_CutFromList(p_file); - p_file->stat &= ~(FS_FILE_STATUS_CANCEL | FS_FILE_STATUS_BUSY | FS_FILE_STATUS_SYNC | FS_FILE_STATUS_ASYNC | FS_FILE_STATUS_OPERATING); - p_file->error = ret; - OS_WakeupThread(p_file->queue); - (void)OS_RestoreInterrupts(bak_psr); -} - -ARM_FUNC FSResult FSi_TranslateCommand(FSFile *p_file, FSCommandType command) -{ - FSResult ret; - - FSArchive *const p_arc = p_file->arc; - const int bit = (1 << command); - - if (FS_IsFileSyncMode(p_file)) - p_arc->flag |= FS_ARCHIVE_FLAG_IS_SYNC; - else - p_arc->flag |= FS_ARCHIVE_FLAG_IS_ASYNC; - - if ((p_arc->proc_flag & bit) != 0) - { - switch (ret = (*p_arc->proc) (p_file, command)) - { - case FS_RESULT_SUCCESS: - case FS_RESULT_FAILURE: - case FS_RESULT_UNSUPPORTED: - p_file->error = ret; - break; - case FS_RESULT_PROC_ASYNC: - break; - case FS_RESULT_PROC_UNKNOWN: - ret = FS_RESULT_PROC_DEFAULT; - p_arc->proc_flag &= ~bit; - break; - default: - break; - } - } - else - { - ret = FS_RESULT_PROC_DEFAULT; - } - if (ret == FS_RESULT_PROC_DEFAULT) - { - ret = (*fsi_default_command[command]) (p_file); - } - if (ret == FS_RESULT_PROC_ASYNC) - { - if (FS_IsFileSyncMode(p_file)) - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - while (FSi_IsArchiveSync(p_arc)) - OS_SleepThread(&p_arc->sync_q); - ret = p_file->error; - (void)OS_RestoreInterrupts(bak_psr); - } - } - else if (!FS_IsFileSyncMode(p_file)) - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_ASYNC; - FSi_ReleaseCommand(p_file, ret); - } - else - { - p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; - p_file->error = ret; - } - return ret; -} diff --git a/arm9/lib/src/FS_command_default.c b/arm9/lib/src/FS_command_default.c deleted file mode 100644 index 0cdc91fc..00000000 --- a/arm9/lib/src/FS_command_default.c +++ /dev/null @@ -1,453 +0,0 @@ -#include "nitro.h" -#include "FS_file.h" -#include "FS_command.h" -#include "MI_byteAccess.h" -#include "MI_memory.h" -#include "FSi_util.h" -#include "FS_command_default.h" - -FSResult (*const fsi_default_command[])(FSFile *) = { - [FS_COMMAND_READFILE] = FSi_ReadFileCommand, - [FS_COMMAND_WRITEFILE] = FSi_WriteFileCommand, - [FS_COMMAND_SEEKDIR] = FSi_SeekDirCommand, - [FS_COMMAND_READDIR] = FSi_ReadDirCommand, - [FS_COMMAND_FINDPATH] = FSi_FindPathCommand, - [FS_COMMAND_GETPATH] = FSi_GetPathCommand, - [FS_COMMAND_OPENFILEFAST] = FSi_OpenFileFastCommand, - [FS_COMMAND_OPENFILEDIRECT] = FSi_OpenFileDirectCommand, - [FS_COMMAND_CLOSEFILE] = FSi_CloseFileCommand, -}; - -// Case-insensitive string comparison -ARM_FUNC u32 FSi_StrNICmp(const char * str1, const char * str2, u32 len) -{ - int i; - for (i = 0; i < len; i++) - { - u32 c = (u32)(MI_ReadByte(str1 + i) - 'A'); - u32 d = (u32)(MI_ReadByte(str2 + i) - 'A'); - if (c <= 'Z' - 'A') - c += 'a' - 'A'; - if (d <= 'Z' - 'A') - d += 'a' - 'A'; - if (c != d) - return c - d; - } - return 0; -} - -ARM_FUNC FSResult FSi_ReadTable(FSiSyncReadParam * p, void * dst, u32 len) -{ - FSResult ret; - FSArchive * const p_arc = p->arc; - p_arc->flag |= FS_ARCHIVE_FLAG_IS_SYNC; - switch (ret = (*p_arc->table_func)(p_arc, dst, p->pos, len)) - { - case FS_RESULT_SUCCESS: - case FS_RESULT_FAILURE: - p_arc->flag &= ~FS_ARCHIVE_FLAG_IS_SYNC; - break; - case FS_RESULT_PROC_ASYNC: - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - while (FSi_IsArchiveSync(p_arc)) - OS_SleepThread(&p_arc->sync_q); - (void)OS_RestoreInterrupts(bak_psr); - ret = p_arc->list.next->error; - } - default: - break; - } - p->pos += len; - return ret; -} - -ARM_FUNC FSResult FSi_SeekDirDirect(FSFile * p_dir, u32 id) -{ - p_dir->stat |= FS_FILE_STATUS_SYNC; - p_dir->arg.seekdir.pos.arc = p_dir->arc; - p_dir->arg.seekdir.pos.pos = 0; - p_dir->arg.seekdir.pos.index = 0; - p_dir->arg.seekdir.pos.own_id = (u16)id; - return FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); -} - -// The actual commands -ARM_FUNC FSResult FSi_ReadFileCommand(FSFile * p_file) -{ - FSArchive *const p_arc = p_file->arc; - const u32 pos = p_file->prop.file.pos; - const u32 len = p_file->arg.readfile.len; - void *const dst = p_file->arg.readfile.dst; - p_file->prop.file.pos += len; - return (*p_arc->read_func)(p_arc, dst, pos, len); -} - -ARM_FUNC FSResult FSi_WriteFileCommand(FSFile * p_file) -{ - FSArchive *const p_arc = p_file->arc; - const u32 pos = p_file->prop.file.pos; - const u32 len = p_file->arg.writefile.len; - const void *const src = p_file->arg.writefile.src; - p_file->prop.file.pos += len; - return (*p_arc->write_func)(p_arc, src, pos, len); -} - -ARM_FUNC FSResult FSi_SeekDirCommand(FSFile * p_dir) -{ - FSResult ret; - FSArchive *const p_arc = p_dir->arc; - const FSDirPos *const arg = &p_dir->arg.seekdir.pos; - - FSArchiveFNT fnt_entry; - FSiSyncReadParam param; - param.arc = p_arc; - param.pos = p_arc->fnt + arg->own_id * sizeof(fnt_entry); - ret = FSi_ReadTable(¶m, &fnt_entry, sizeof(fnt_entry)); - if (ret == FS_RESULT_SUCCESS) - { - p_dir->prop.dir.pos = *arg; - if ((arg->index == 0) && (arg->pos == 0)) - { - p_dir->prop.dir.pos.index = fnt_entry.index; - p_dir->prop.dir.pos.pos = p_arc->fnt + fnt_entry.start; - } - p_dir->prop.dir.parent = (u32) (fnt_entry.parent & BIT_MASK(12)); - } - return ret; -} - -ARM_FUNC FSResult FSi_ReadDirCommand(FSFile *p_dir) -{ - FSDirEntry *p_entry = p_dir->arg.readdir.p_entry; - FSResult ret; - - FSiSyncReadParam param; - param.arc = p_dir->arc; - param.pos = p_dir->prop.dir.pos.pos; - - { - u8 len; - ret = FSi_ReadTable(¶m, &len, sizeof(len)); - if (ret != FS_RESULT_SUCCESS) - return ret; - p_entry->name_len = (u32)(len & BIT_MASK(7)); - p_entry->is_directory = (u32)((len >> 7) & 1); - } - if (p_entry->name_len == 0) - return FS_RESULT_FAILURE; - - if (!p_dir->arg.readdir.skip_string) - { - ret = FSi_ReadTable(¶m, p_entry->name, p_entry->name_len); - if (ret != FS_RESULT_SUCCESS) - return ret; - MI_WriteByte((u8 *)p_entry->name + p_entry->name_len, (u8)'\0'); - } - else - { - param.pos += p_entry->name_len; - } - - if (p_entry->is_directory) - { - u16 id; - ret = FSi_ReadTable(¶m, &id, sizeof(id)); - if (ret != FS_RESULT_SUCCESS) - return ret; - p_entry->dir_id.arc = p_dir->arc; - p_entry->dir_id.own_id = (u16)(id & BIT_MASK(12)); - p_entry->dir_id.index = 0; - p_entry->dir_id.pos = 0; - } - else - { - p_entry->file_id.arc = p_dir->arc; - p_entry->file_id.file_id = p_dir->prop.dir.pos.index; - ++p_dir->prop.dir.pos.index; - } - p_dir->prop.dir.pos.pos = param.pos; - - return ret; -} - -ARM_FUNC FSResult FSi_FindPathCommand(FSFile *p_dir) -{ - const char *path = p_dir->arg.findpath.path; - const BOOL is_dir = p_dir->arg.findpath.find_directory; - p_dir->arg.seekdir.pos = p_dir->arg.findpath.pos; - (void)FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); - for (; MI_ReadByte(path); path += (MI_ReadByte(path) ? 1 : 0)) - { - u32 is_directory; - int name_len = 0; - while ((is_directory = MI_ReadByte(path + name_len)), - (is_directory && !FSi_IsSlash(is_directory))) - ++name_len; - if (is_directory || is_dir) - is_directory = 1; - if (name_len == 0) - { - return FS_RESULT_FAILURE; - } - else if (MI_ReadByte(path) == '.') - { - if (name_len == 1) - { - path += 1; - continue; - } - else if ((name_len == 2) & (MI_ReadByte(path + 1) == '.')) - { - if (p_dir->prop.dir.pos.own_id != 0) - (void)FSi_SeekDirDirect(p_dir, p_dir->prop.dir.parent); - path += 2; - continue; - } - } - if (name_len > FS_FILE_NAME_MAX) - { - return FS_RESULT_FAILURE; - } - else - { - FSDirEntry etr; - p_dir->arg.readdir.p_entry = &etr; - p_dir->arg.readdir.skip_string = FALSE; - for (;;) - { - if (FSi_TranslateCommand(p_dir, FS_COMMAND_READDIR) != FS_RESULT_SUCCESS) - return FS_RESULT_FAILURE; - if ((is_directory != etr.is_directory) || - (name_len != etr.name_len) || FSi_StrNICmp(path, etr.name, (u32)name_len)) - continue; - if (is_directory) - { - path += name_len; - p_dir->arg.seekdir.pos = etr.dir_id; - (void)FSi_TranslateCommand(p_dir, FS_COMMAND_SEEKDIR); - break; - } - else if (is_dir) - { - return FS_RESULT_FAILURE; - } - else - { - *p_dir->arg.findpath.result.file = etr.file_id; - return FS_RESULT_SUCCESS; - } - } - } - } - if (!is_dir) - return FS_RESULT_FAILURE; - *p_dir->arg.findpath.result.dir = p_dir->prop.dir.pos; - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSResult FSi_GetPathCommand(FSFile *p_file) -{ - FSArchive *const p_arc = p_file->arc; - - FSGetPathInfo *p_info = &p_file->arg.getpath; - - FSDirEntry entry; - FSFile tmp; - u32 dir_id; - u32 file_id; - u32 id; - u32 len; - - enum - { INVALID_ID = 0x10000 }; - - FS_InitFile(&tmp); - tmp.arc = p_file->arc; - - if (FS_IsDir(p_file)) - { - dir_id = p_file->prop.dir.pos.own_id; - file_id = INVALID_ID; - } - else - { - file_id = p_file->prop.file.own_id; - if (p_info->total_len != 0) - { - dir_id = p_info->dir_id; - } - else - { - u32 pos = 0; - u32 num_dir = 0; - dir_id = INVALID_ID; - do - { - (void)FSi_SeekDirDirect(&tmp, pos); - if (!pos) - num_dir = tmp.prop.dir.parent; - tmp.arg.readdir.p_entry = &entry; - tmp.arg.readdir.skip_string = TRUE; - while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) - { - if (!entry.is_directory && (entry.file_id.file_id == file_id)) - { - dir_id = tmp.prop.dir.pos.own_id; - break; - } - } - } - while ((dir_id == INVALID_ID) && (++pos < num_dir)); - } - } - if (dir_id == INVALID_ID) - { - p_info->total_len = 0; - return FS_RESULT_FAILURE; - } - if (p_info->total_len == 0) - { - len = 0; - if (p_arc->name.pack <= 0x000000FF) - len += 1; - else if (p_arc->name.pack <= 0x0000FF00) - len += 2; - else - len += 3; - len += 1 + 1; - if (file_id != INVALID_ID) - len += entry.name_len; - id = dir_id; - if (id != 0) - { - (void)FSi_SeekDirDirect(&tmp, id); - do - { - (void)FSi_SeekDirDirect(&tmp, tmp.prop.dir.parent); - tmp.arg.readdir.p_entry = &entry; - tmp.arg.readdir.skip_string = TRUE; - while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) - { - if (entry.is_directory && (entry.dir_id.own_id == id)) - { - len += entry.name_len + 1; - break; - } - } - id = tmp.prop.dir.pos.own_id; - } - while (id != 0); - } - p_info->total_len = (u16)(len + 1); - p_info->dir_id = (u16)dir_id; - } - if (!p_info->buf) - return FS_RESULT_SUCCESS; - if (p_info->buf_len < p_info->total_len) - return FS_RESULT_FAILURE; - else - { - u8 *dst = p_info->buf; - u32 total = p_info->total_len; - u32 pos = 0; - if (p_arc->name.pack <= 0x000000FF) - len = 1; - else if (p_arc->name.pack <= 0x0000FF00) - len = 2; - else - len = 3; - MI_CpuCopy8(p_arc->name.ptr, dst + pos, len); - pos += len; - MI_CpuCopy8(":/", dst + pos, 2); - pos += 2; - id = dir_id; - (void)FSi_SeekDirDirect(&tmp, id); - if (file_id != INVALID_ID) - { - tmp.arg.readdir.p_entry = &entry; - tmp.arg.readdir.skip_string = FALSE; - while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) - { - if (!entry.is_directory && (entry.file_id.file_id == file_id)) - break; - } - len = entry.name_len + 1; - MI_CpuCopy8(entry.name, dst + total - len, len); - total -= len; - } - else - { - MI_WriteByte(dst + total - 1, '\0'); - total -= 1; - } - if (id != 0) - { - do - { - (void)FSi_SeekDirDirect(&tmp, tmp.prop.dir.parent); - tmp.arg.readdir.p_entry = &entry; - tmp.arg.readdir.skip_string = FALSE; - MI_WriteByte(dst + total - 1, '/'); - total -= 1; - while (FSi_TranslateCommand(&tmp, FS_COMMAND_READDIR) == FS_RESULT_SUCCESS) - { - if (entry.is_directory && (entry.dir_id.own_id == id)) - { - len = entry.name_len; - MI_CpuCopy8(entry.name, dst + total - len, len); - total -= len; - break; - } - } - id = tmp.prop.dir.pos.own_id; - } - while (id != 0); - } - } - - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSResult FSi_OpenFileFastCommand(FSFile * p_file) -{ - FSArchive *const p_arc = p_file->arc; - const FSFileID *p_id = &p_file->arg.openfilefast.id; - const u32 index = p_id->file_id; - FSResult ret; - - { - u32 pos = (u32)(index * sizeof(FSArchiveFAT)); - if (pos >= p_arc->fat_size) - return FS_RESULT_FAILURE; - else - { - FSArchiveFAT fat; - FSiSyncReadParam param; - param.arc = p_arc; - param.pos = p_arc->fat + pos; - ret = FSi_ReadTable(¶m, &fat, sizeof(fat)); - if (ret != FS_RESULT_SUCCESS) - return ret; - p_file->arg.openfiledirect.top = fat.top; - p_file->arg.openfiledirect.bottom = fat.bottom; - p_file->arg.openfiledirect.index = index; - return FSi_TranslateCommand(p_file, FS_COMMAND_OPENFILEDIRECT); - } - } -} - -ARM_FUNC FSResult FSi_OpenFileDirectCommand(FSFile * p_file) -{ - p_file->prop.file.top = p_file->arg.openfiledirect.top; - p_file->prop.file.pos = p_file->arg.openfiledirect.top; - p_file->prop.file.bottom = p_file->arg.openfiledirect.bottom; - p_file->prop.file.own_id = p_file->arg.openfiledirect.index; - return FS_RESULT_SUCCESS; -} - -ARM_FUNC FSResult FSi_CloseFileCommand(FSFile * p_file) -{ -#pragma unused (p_file) - return FS_RESULT_SUCCESS; -} diff --git a/arm9/lib/src/FS_file.c b/arm9/lib/src/FS_file.c deleted file mode 100644 index 11595c02..00000000 --- a/arm9/lib/src/FS_file.c +++ /dev/null @@ -1,244 +0,0 @@ -#include "nitro.h" -#include "MI_byteAccess.h" -#include "FS_rom.h" -#include "FS_file.h" -#include "FSi_util.h" - -extern FSDirPos current_dir_pos; -BOOL is_init = FALSE; - -static BOOL FSi_FindPath(FSFile * p_dir, const char * path, FSFileID * p_file_id, FSDirPos * p_dir_pos); - -ARM_FUNC void FS_Init(u32 default_dma_no) -{ - if (!is_init) - { - is_init = TRUE; - FSi_InitRom(default_dma_no); - } -} - -ARM_FUNC BOOL FS_IsAvailable(void) -{ - return is_init; -} - -ARM_FUNC void FS_InitFile(FSFile * p_file) -{ - p_file->link.next = p_file->link.prev = NULL; - OS_InitThreadQueue(p_file->queue); - p_file->arc = NULL; - p_file->command = FS_COMMAND_INVALID; - p_file->stat = 0; -} - -static BOOL FSi_FindPath(FSFile * p_dir, const char * path, FSFileID * p_file_id, FSDirPos * p_dir_pos) -{ - FSDirPos pos; - if (FSi_IsSlash(MI_ReadByte(path))) - { - pos.arc = current_dir_pos.arc; - pos.own_id = 0; - pos.pos = 0; - pos.index = 0; - path++; - } - else - { - int i; - pos = current_dir_pos; - for (i = 0; i <= FS_ARCHIVE_NAME_LEN_MAX; ++i) - { - u32 c = MI_ReadByte(path + i); - if (!c || FSi_IsSlash(c)) - break; - else if (c == ':') - { - FSArchive * const p_arc = FS_FindArchive(path, i); - if (!p_arc) - { - return FALSE; - } - else if (!FS_IsArchiveLoaded(p_arc)) - { - return FALSE; - } - pos.arc = p_arc; - pos.pos = 0; - pos.index = 0; - pos.own_id = 0; - path += i + 1; - if (FSi_IsSlash(MI_ReadByte(path))) - ++path; - break; - } - } - } - p_dir->arc = pos.arc; - p_dir->arg.findpath.path = path; - p_dir->arg.findpath.pos = pos; - if (p_dir_pos) - { - p_dir->arg.findpath.find_directory = TRUE; - p_dir->arg.findpath.result.dir = p_dir_pos; - } - else - { - p_dir->arg.findpath.find_directory = FALSE; - p_dir->arg.findpath.result.file = p_file_id; - } - return FSi_SendCommand(p_dir, FS_COMMAND_FINDPATH); -} - -ARM_FUNC int FSi_ReadFileCore(FSFile * p_file, void * dst, s32 len, BOOL async) -{ - const s32 pos = (s32)p_file->prop.file.pos; - const s32 rest = (s32)(p_file->prop.file.bottom - pos); - const u32 org = (u32)len; - if (len > rest) - len = rest; - if (len < 0) - len = 0; - p_file->arg.readfile.dst = dst; - p_file->arg.readfile.len_org = org; - p_file->arg.readfile.len = (u32)len; - if (!async) - p_file->stat |= FS_FILE_STATUS_SYNC; - (void)FSi_SendCommand(p_file, FS_COMMAND_READFILE); - if (!async) - { - if (FS_WaitAsync(p_file)) - len = (s32)(p_file->prop.file.pos - pos); - else - len = -1; - } - return len; -} - -ARM_FUNC BOOL FS_ConvertPathToFileID(FSFileID * p_file_id, const char * path) -{ - FSFile dir; - FS_InitFile(&dir); - if (!FSi_FindPath(&dir, path, p_file_id, NULL)) - return FALSE; - return TRUE; -} - -ARM_FUNC BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index) -{ - p_file->arc = p_arc; - p_file->arg.openfiledirect.index = file_index; - p_file->arg.openfiledirect.top = image_top; - p_file->arg.openfiledirect.bottom = image_bottom; - if (!FSi_SendCommand(p_file, FS_COMMAND_OPENFILEDIRECT)) - return FALSE; - p_file->stat |= FS_FILE_STATUS_IS_FILE; - p_file->stat &= ~FS_FILE_STATUS_IS_DIR; - return TRUE; -} - -ARM_FUNC BOOL FS_OpenFileFast(FSFile * p_file, FSFileID file_id) -{ - if (!file_id.arc) - return FALSE; - p_file->arc = file_id.arc; - p_file->arg.openfilefast.id = file_id; - if (!FSi_SendCommand(p_file, FS_COMMAND_OPENFILEFAST)) - return FALSE; - p_file->stat |= FS_FILE_STATUS_IS_FILE; - p_file->stat &= ~FS_FILE_STATUS_IS_DIR; - return TRUE; -} - -ARM_FUNC BOOL FS_OpenFile(FSFile * p_file, const char * path) -{ - FSFileID file_id; - return FS_ConvertPathToFileID(&file_id, path) && FS_OpenFileFast(p_file, file_id); -} - -ARM_FUNC BOOL FS_CloseFile(FSFile * p_file) -{ - if (!FSi_SendCommand(p_file, FS_COMMAND_CLOSEFILE)) - return FALSE; - p_file->arc = NULL; - p_file->command = FS_COMMAND_INVALID; - p_file->stat &= ~(FS_FILE_STATUS_IS_FILE | FS_FILE_STATUS_IS_DIR); - return TRUE; -} - -ARM_FUNC BOOL FS_WaitAsync(FSFile * p_file) -{ - BOOL is_owner = FALSE; - OSIntrMode bak_par = OS_DisableInterrupts(); - if (FS_IsBusy(p_file)) - { - is_owner = !(p_file->stat & (FS_FILE_STATUS_SYNC | FS_FILE_STATUS_OPERATING)); - if (is_owner) - { - p_file->stat |= FS_FILE_STATUS_SYNC; - do - { - OS_SleepThread(p_file->queue); - } while (!(p_file->stat & FS_FILE_STATUS_OPERATING)); - } - else - { - do - { - OS_SleepThread(p_file->queue); - } while (FS_IsBusy(p_file)); - } - } - (void)OS_RestoreInterrupts(bak_par); - if (is_owner) - { - return FSi_ExecuteSyncCommand(p_file); - } - - return FS_IsSucceeded(p_file); -} - -ARM_FUNC int FS_ReadFileAsync(FSFile * p_file, void * dst, s32 len) -{ - return FSi_ReadFileCore(p_file, dst, len, TRUE); -} - -ARM_FUNC int FS_ReadFile(FSFile * p_file, void * dst, s32 len) -{ - return FSi_ReadFileCore(p_file, dst, len, FALSE); -} - -ARM_FUNC BOOL FS_SeekFile(FSFile * p_file, s32 offset, FSSeekFileMode origin) -{ - switch (origin) - { - case FS_SEEK_SET: - offset += p_file->prop.file.top; - break; - case FS_SEEK_CUR: - offset += p_file->prop.file.pos; - break; - case FS_SEEK_END: - offset += p_file->prop.file.bottom; - break; - default: - return FALSE; - } - if (offset < (s32)p_file->prop.file.top) - offset = (s32)p_file->prop.file.top; - if (offset > (s32)p_file->prop.file.bottom) - offset = (s32)p_file->prop.file.bottom; - p_file->prop.file.pos = (u32)offset; - return TRUE; -} - -ARM_FUNC BOOL FS_ChangeDir(const char * path) -{ - FSDirPos pos; - FSFile dir; - FS_InitFile(&dir); - if (!FSi_FindPath(&dir, path, NULL, &pos)) - return FALSE; - current_dir_pos = pos; - return TRUE; -} diff --git a/arm9/lib/src/FS_overlay.c b/arm9/lib/src/FS_overlay.c deleted file mode 100644 index de64d97d..00000000 --- a/arm9/lib/src/FS_overlay.c +++ /dev/null @@ -1,320 +0,0 @@ -#include "nitro.h" -#include "DGT_common.h" -#include "DGT_dgt.h" -#include "OS_cache.h" -#include "OS_system.h" -#include "OS_printf.h" -#include "MI_memory.h" -#include "MI_uncompress.h" -#include "FS_rom.h" -#include "FS_overlay.h" -#include "FS_mw_dtor.h" -#include "MB_mb.h" - -#define FS_OVERLAY_FLAG_COMP 0x0001 -#define FS_OVERLAY_FLAG_AUTH 0x0002 -#define FS_OVERLAY_DIGEST_SIZE DGT_HASH2_DIGEST_SIZE - -ARM_FUNC u32 FSi_GetOverlayBinarySize(FSOverlayInfo * p_ovi) -{ - u32 size = (p_ovi->header.flag & FS_OVERLAY_FLAG_COMP) - ? p_ovi->header.compressed - : p_ovi->header.ram_size; - return size; -} - -ARM_FUNC void FS_ClearOverlayImage(FSOverlayInfo * p_ovi) -{ - u8 * const im_start = FS_GetOverlayAddress(p_ovi); - u32 const ram_size = FS_GetOverlayImageSize(p_ovi); - u32 const total_size = FS_GetOverlayTotalSize(p_ovi); - - IC_InvalidateRange(im_start, total_size); - DC_InvalidateRange(im_start, total_size); - MI_CpuFill8(im_start + ram_size, 0, total_size - ram_size); -} - -ARM_FUNC FSFileID FS_GetOverlayFileID(FSOverlayInfo * p_ovi) -{ - FSFileID ret; - ret.arc = &fsi_arc_rom; - ret.file_id = p_ovi->header.file_id; - return ret; -} - -ARM_FUNC BOOL FSi_LoadOverlayInfoCore(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id, FSArchive * arc, u32 offset_arm9, u32 len_arm9, u32 offset_arm7, u32 len_arm7) -{ - CARDRomRegion pr[1]; - u32 pos; - if (target == MI_PROCESSOR_ARM9) - { - pr->offset = offset_arm9; - pr->length = len_arm9; - } - else - { - pr->offset = offset_arm7; - pr->length = len_arm7; - } - pos = (u32) id * sizeof(FSOverlayInfoHeader); - if (pos >= pr->length) - return FALSE; - - FSFile file[1]; - FS_InitFile(file); - // BOOL FS_OpenFileDirect(FSFile * p_file, FSArchive * p_arc, u32 image_top, u32 image_bottom, u32 file_index) - if (!FS_OpenFileDirect(file, arc, pr->offset + pos, pr->offset + pr->length, (u32)~0)) - return FALSE; - if (FS_ReadFile(file, p_ovi, sizeof(FSOverlayInfoHeader)) != sizeof(FSOverlayInfoHeader)) - { - (void)FS_CloseFile(file); - return FALSE; - } - (void)FS_CloseFile(file); - p_ovi->target = target; - if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) - return FALSE; - p_ovi->file_pos.offset = FS_GetFileImageTop(file); - p_ovi->file_pos.length = FS_GetLength(file); - (void)FS_CloseFile(file); - return TRUE; -} - -ARM_FUNC BOOL FS_LoadOverlayInfo(FSOverlayInfo * p_ovi, MIProcessor target, FSOverlayID id) -{ - CARDRomRegion * const pr = (target == MI_PROCESSOR_ARM9) ? &fsi_ovt9 : &fsi_ovt7; - if (pr->offset) - { - FSFile file[1]; - const u32 pos = id * sizeof(FSOverlayInfoHeader); - if (pos >= pr->length) - return FALSE; - MI_CpuCopy8((const void *)(pr->offset + pos), p_ovi, sizeof(FSOverlayInfoHeader)); - p_ovi->target = target; - FS_InitFile(file); - if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) - return FALSE; - p_ovi->file_pos.offset = FS_GetFileImageTop(file); - p_ovi->file_pos.length = FS_GetLength(file); - (void)FS_CloseFile(file); - return TRUE; - } - else - { - const CARDRomRegion * const p_ovt9 = CARD_GetRomRegionOVT(MI_PROCESSOR_ARM9); - const CARDRomRegion * const p_ovt7 = CARD_GetRomRegionOVT(MI_PROCESSOR_ARM7); - return FSi_LoadOverlayInfoCore(p_ovi, target, id, &fsi_arc_rom, p_ovt9->offset, p_ovt9->length, p_ovt7->offset, p_ovt7->length); - } -} - -ARM_FUNC BOOL FS_LoadOverlayImageAsync(FSOverlayInfo * p_ovi, FSFile * p_file) -{ - FS_InitFile(p_file); - if (!FS_OpenFileFast(p_file, FS_GetOverlayFileID(p_ovi))) - return FALSE; - else - { - s32 size = (s32)FSi_GetOverlayBinarySize(p_ovi); - FS_ClearOverlayImage(p_ovi); - if (FS_ReadFileAsync(p_file, FS_GetOverlayAddress(p_ovi), size) != size) - { - (void)FS_CloseFile(p_file); - return FALSE; - } - return TRUE; - } -} - -ARM_FUNC BOOL FS_LoadOverlayImage(FSOverlayInfo * p_ovi) -{ - FSFile file[1]; - FS_InitFile(file); - if (!FS_OpenFileFast(file, FS_GetOverlayFileID(p_ovi))) - return FALSE; - else - { - s32 size = (s32)FSi_GetOverlayBinarySize(p_ovi); - FS_ClearOverlayImage(p_ovi); - if (FS_ReadFile(file, FS_GetOverlayAddress(p_ovi), size) != size) - { - (void)FS_CloseFile(file); - return FALSE; - } - (void)FS_CloseFile(file); - return TRUE; - } -} - -static const u8 fsi_def_digest_key[64] = { - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24, -}; - -static const void *fsi_digest_key_ptr = fsi_def_digest_key; -static u32 fsi_digest_key_len = sizeof(fsi_def_digest_key); - -ARM_FUNC BOOL FSi_CompareDigest(const u8 *spec_digest, void *src, u32 len) -{ - int i; - u8 digest[FS_OVERLAY_DIGEST_SIZE]; - u8 digest_key[64]; - - MI_CpuClear8(digest, sizeof(digest)); - MI_CpuCopy8(fsi_digest_key_ptr, digest_key, fsi_digest_key_len); - DGT_Hash2CalcHmac(digest, src, len, digest_key, fsi_digest_key_len); - for (i = 0; i < sizeof(digest); i += sizeof(u32)) - { - if (*(const u32 *)(digest + i) != *(const u32 *)(spec_digest + i)) - break; - } - return i == sizeof(digest); -} - -extern u8 SDK_OVERLAY_DIGEST[]; -extern u8 SDK_OVERLAY_DIGEST_END[]; - -ARM_FUNC void FS_StartOverlay(FSOverlayInfo * p_ovi) -{ - u32 rare_size = FSi_GetOverlayBinarySize(p_ovi); - if (MB_IsMultiBootChild()) - { - BOOL ret = FALSE; - - if (p_ovi->header.flag & FS_OVERLAY_FLAG_AUTH) - { - const u32 odt_max = (u32)((SDK_OVERLAY_DIGEST_END - SDK_OVERLAY_DIGEST) / FS_OVERLAY_DIGEST_SIZE); - if (p_ovi->header.id < odt_max) - { - const u8 * spec_digest = SDK_OVERLAY_DIGEST + FS_OVERLAY_DIGEST_SIZE * p_ovi->header.id; - ret = FSi_CompareDigest(spec_digest, p_ovi->header.ram_address, rare_size); - } - } - if (!ret) - { - MI_CpuClear8(p_ovi->header.ram_address, rare_size); - OS_TPanic("FS_StartOverlay() failed! (invalid overlay-segment data)"); - return; - } - } - if (p_ovi->header.flag & FS_OVERLAY_FLAG_COMP) - { - MIi_UncompressBackward(p_ovi->header.ram_address + rare_size); - } - DC_FlushRange(p_ovi->header.ram_address, p_ovi->header.ram_size); - - { - FSOverlayInitFunc *p = p_ovi->header.sinit_init; - FSOverlayInitFunc *q = p_ovi->header.sinit_init_end; - for (; p < q; ++p) - { - if (*p) - (**p)(); - } - } -} - -ARM_FUNC void FS_EndOverlay(FSOverlayInfo *p_ovi) -{ - for (;;) - { - MWiDestructorChain *head = NULL, *tail = NULL; - const u32 region_top = (u32)FS_GetOverlayAddress(p_ovi); - const u32 region_bottom = region_top + FS_GetOverlayTotalSize(p_ovi); - - { - OSIntrMode bak_psr = OS_DisableInterrupts(); - MWiDestructorChain *prev = NULL; - MWiDestructorChain *base = __global_destructor_chain; - MWiDestructorChain *p = base; - while (p) - { - MWiDestructorChain *next = p->next; - const u32 dtor = (u32)p->dtor; - const u32 obj = (u32)p->obj; - if (((obj == 0) && (dtor >= region_top) && (dtor < region_bottom)) || - ((obj >= region_top) && (obj < region_bottom))) - { - /* If appropriate, extract*/ - if (!tail) - { - head = p; - } - else - { - tail->next = p; - } - if (base == p) - { - base = __global_destructor_chain = next; - } - tail = p, p->next = NULL; - if (prev) - { - prev->next = next; - } - } - else - { - prev = p; - } - p = next; - } - (void)OS_RestoreInterrupts(bak_psr); - } - - if (!head) - { - break; - } - do - { - MWiDestructorChain *next = head->next; - if (head->dtor) - { - (*head->dtor) (head->obj); - } - head = next; - } - while (head); - } -} - -ARM_FUNC BOOL FS_UnloadOverlayImage(FSOverlayInfo * p_ovi) -{ - FS_EndOverlay(p_ovi); - return TRUE; -} - -ARM_FUNC BOOL FS_LoadOverlay(MIProcessor target, FSOverlayID id) -{ - FSOverlayInfo ovi; - if (!FS_LoadOverlayInfo(&ovi, target, id) || !FS_LoadOverlayImage(&ovi)) - return FALSE; - FS_StartOverlay(&ovi); - return TRUE; -} - -ARM_FUNC BOOL FS_UnloadOverlay(MIProcessor target, FSOverlayID id) -{ - FSOverlayInfo ovi; - if (!FS_LoadOverlayInfo(&ovi, target, id) || !FS_UnloadOverlayImage(&ovi)) - return FALSE; - return TRUE; -} diff --git a/arm9/lib/src/FS_rom.c b/arm9/lib/src/FS_rom.c deleted file mode 100644 index 09098dfe..00000000 --- a/arm9/lib/src/FS_rom.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "FS_rom.h" -#include "FS_archive.h" -#include "FS_file.h" -#include "CARD_pullOut.h" -#include "CARD_rom.h" -#include "CARD_common.h" -#include "MB_mb.h" -#include "OS_printf.h" - -static u32 fsi_default_dma_no; -s32 fsi_card_lock_id; -CARDRomRegion fsi_ovt9; -CARDRomRegion fsi_ovt7; -FSArchive fsi_arc_rom; - -ARM_FUNC void FSi_OnRomReadDone(void * p_arc) -{ - FS_NotifyArchiveAsyncEnd(p_arc, CARD_IsPulledOut() ? FS_RESULT_ERROR : FS_RESULT_SUCCESS); -} - -ARM_FUNC FSResult FSi_ReadRomCallback(FSArchive * p_arc, void * dst, u32 src, u32 len) -{ - CARD_ReadRomAsync(fsi_default_dma_no, (const void *)src, dst, len, FSi_OnRomReadDone, p_arc); - return FS_RESULT_PROC_ASYNC; -} - -ARM_FUNC FSResult FSi_WriteDummyCallback(FSArchive * p_arc, const void *src, u32 dst, u32 len) -{ -#pragma unused(p_arc, src, dst, len) - return FS_RESULT_FAILURE; -} - -ARM_FUNC FSResult FSi_RomArchiveProc(FSFile * p_arc, FSCommandType cmd) -{ -#pragma unused(p_arc) - switch (cmd) - { - case FS_COMMAND_ACTIVATE: - CARD_LockRom((u16)fsi_card_lock_id); - return FS_RESULT_SUCCESS; - case FS_COMMAND_IDLE: - CARD_UnlockRom((u16)fsi_card_lock_id); - return FS_RESULT_SUCCESS; - case FS_COMMAND_WRITEFILE: - return FS_RESULT_UNSUPPORTED; - default: - return FS_RESULT_PROC_UNKNOWN; - } -} - -ARM_FUNC FSResult FSi_ReadDummyCallback(FSArchive *p_arc, void *dst, u32 src, u32 len) -{ -#pragma unused (p_arc, dst, src, len) - return FS_RESULT_FAILURE; -} - -ARM_FUNC FSResult FSi_EmptyArchiveProc(FSFile *p_file, FSCommandType cmd) -{ -#pragma unused(p_file, cmd) - return FS_RESULT_UNSUPPORTED; -} - -ARM_FUNC void FSi_InitRom(u32 default_dma_no) -{ - fsi_default_dma_no = default_dma_no; - fsi_card_lock_id = OS_GetLockID(); - fsi_ovt9.offset = 0; - fsi_ovt9.length = 0; - fsi_ovt7.offset = 0; - fsi_ovt7.length = 0; - - CARD_Init(); - - FS_InitArchive(&fsi_arc_rom); - (void)FS_RegisterArchiveName(&fsi_arc_rom, "rom", 3); - - if (MB_IsMultiBootChild()) - { - fsi_ovt9.offset = (u32)~0; - fsi_ovt9.length = 0; - fsi_ovt7.offset = (u32)~0; - fsi_ovt7.length = 0; - FS_SetArchiveProc(&fsi_arc_rom, FSi_EmptyArchiveProc, (u32)FS_ARCHIVE_PROC_ALL); - (void)FS_LoadArchive(&fsi_arc_rom, 0x00000000, 0, 0, 0, 0, FSi_ReadDummyCallback, FSi_WriteDummyCallback); - } - else - { - const CARDRomRegion *const fnt = CARD_GetRomRegionFNT(); - const CARDRomRegion *const fat = CARD_GetRomRegionFAT(); - - FS_SetArchiveProc(&fsi_arc_rom, FSi_RomArchiveProc, - FS_ARCHIVE_PROC_WRITEFILE | - FS_ARCHIVE_PROC_ACTIVATE | FS_ARCHIVE_PROC_IDLE); - - if ((fnt->offset == 0xFFFFFFFF) || (fnt->offset == 0x00000000) || - (fat->offset == 0xFFFFFFFF) || (fat->offset == 0x00000000)) - { - OS_Warning("file-system : no MAKEROM-information in rom header."); - } - else - { - (void)FS_LoadArchive(&fsi_arc_rom, 0x00000000, - fat->offset, fat->length, - fnt->offset, fnt->length, - FSi_ReadRomCallback, FSi_WriteDummyCallback); - } - } -} - -ARM_FUNC u32 FS_SetDefaultDMA(u32 dma_no) -{ - OSIntrMode bak_psr = OS_DisableInterrupts(); - u32 bak_dma_no = fsi_default_dma_no; - BOOL bak_stat = FS_SuspendArchive(&fsi_arc_rom); - fsi_default_dma_no = dma_no; - if (bak_stat) - (void)FS_ResumeArchive(&fsi_arc_rom); - (void)OS_RestoreInterrupts(bak_psr); - return bak_dma_no; -} - -ARM_FUNC u32 FS_TryLoadTable(void * p_mem, u32 size) -{ - return FS_LoadArchiveTables(&fsi_arc_rom, p_mem, size); -} - diff --git a/arm9/lib/src/FX.c b/arm9/lib/src/FX.c deleted file mode 100644 index ea730538..00000000 --- a/arm9/lib/src/FX.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "global.h" -#include "fx.h" - -ARM_FUNC void FX_Init(){ - return; -} - -ARM_FUNC fx32 FX_Modf(fx32 x, fx32 *iptr){ - if (x >= 0) - { - *iptr = x & 0x7FFFF000; - return x & 0xFFF; - } - else - { - *iptr = -(-x & 0x7FFFF000); - return -(-x & 0xFFF); - } -} diff --git a/arm9/lib/src/FX_atan.c b/arm9/lib/src/FX_atan.c deleted file mode 100644 index ef2a662d..00000000 --- a/arm9/lib/src/FX_atan.c +++ /dev/null @@ -1,289 +0,0 @@ -#include "global.h" -#include "fx.h" - -const fx16 FX_AtanTable_[] = { - FX16_CONST(0.0), - FX16_CONST(0.019775390625), - FX16_CONST(0.039794921875), - FX16_CONST(0.0595703125), - FX16_CONST(0.07958984375), - FX16_CONST(0.099365234375), - FX16_CONST(0.119384765625), - FX16_CONST(0.13916015625), - FX16_CONST(0.158935546875), - FX16_CONST(0.1787109375), - FX16_CONST(0.198486328125), - FX16_CONST(0.21826171875), - FX16_CONST(0.238037109375), - FX16_CONST(0.2578125), - FX16_CONST(0.27734375), - FX16_CONST(0.297119140625), - FX16_CONST(0.316650390625), - FX16_CONST(0.336181640625), - FX16_CONST(0.355712890625), - FX16_CONST(0.375244140625), - FX16_CONST(0.394775390625), - FX16_CONST(0.4140625), - FX16_CONST(0.433349609375), - FX16_CONST(0.45263671875), - FX16_CONST(0.471923828125), - FX16_CONST(0.4912109375), - FX16_CONST(0.51025390625), - FX16_CONST(0.529296875), - FX16_CONST(0.54833984375), - FX16_CONST(0.5673828125), - FX16_CONST(0.586181640625), - FX16_CONST(0.60498046875), - FX16_CONST(0.623779296875), - FX16_CONST(0.642578125), - FX16_CONST(0.6611328125), - FX16_CONST(0.6796875), - FX16_CONST(0.6982421875), - FX16_CONST(0.716552734375), - FX16_CONST(0.73486328125), - FX16_CONST(0.753173828125), - FX16_CONST(0.771240234375), - FX16_CONST(0.789306640625), - FX16_CONST(0.807373046875), - FX16_CONST(0.8251953125), - FX16_CONST(0.843017578125), - FX16_CONST(0.86083984375), - FX16_CONST(0.878662109375), - FX16_CONST(0.89599609375), - FX16_CONST(0.91357421875), - FX16_CONST(0.930908203125), - FX16_CONST(0.9482421875), - FX16_CONST(0.965576171875), - FX16_CONST(0.982666015625), - FX16_CONST(0.999755859375), - FX16_CONST(1.0166015625), - FX16_CONST(1.033447265625), - FX16_CONST(1.05029296875), - FX16_CONST(1.06689453125), - FX16_CONST(1.08349609375), - FX16_CONST(1.099853515625), - FX16_CONST(1.1162109375), - FX16_CONST(1.132568359375), - FX16_CONST(1.148681640625), - FX16_CONST(1.164794921875), - FX16_CONST(1.1806640625), - FX16_CONST(1.196533203125), - FX16_CONST(1.21240234375), - FX16_CONST(1.22802734375), - FX16_CONST(1.24365234375), - FX16_CONST(1.259033203125), - FX16_CONST(1.2744140625), - FX16_CONST(1.28955078125), - FX16_CONST(1.3046875), - FX16_CONST(1.31982421875), - FX16_CONST(1.334716796875), - FX16_CONST(1.349609375), - FX16_CONST(1.364501953125), - FX16_CONST(1.379150390625), - FX16_CONST(1.3935546875), - FX16_CONST(1.408203125), - FX16_CONST(1.42236328125), - FX16_CONST(1.436767578125), - FX16_CONST(1.450927734375), - FX16_CONST(1.46484375), - FX16_CONST(1.47900390625), - FX16_CONST(1.49267578125), - FX16_CONST(1.506591796875), - FX16_CONST(1.520263671875), - FX16_CONST(1.53369140625), - FX16_CONST(1.547119140625), - FX16_CONST(1.560546875), - FX16_CONST(1.57373046875), - FX16_CONST(1.5869140625), - FX16_CONST(1.60009765625), - FX16_CONST(1.613037109375), - FX16_CONST(1.6259765625), - FX16_CONST(1.638671875), - FX16_CONST(1.6513671875), - FX16_CONST(1.663818359375), - FX16_CONST(1.676513671875), - FX16_CONST(1.688720703125), - FX16_CONST(1.701171875), - FX16_CONST(1.71337890625), - FX16_CONST(1.7255859375), - FX16_CONST(1.737548828125), - FX16_CONST(1.74951171875), - FX16_CONST(1.76123046875), - FX16_CONST(1.77294921875), - FX16_CONST(1.78466796875), - FX16_CONST(1.79638671875), - FX16_CONST(1.807861328125), - FX16_CONST(1.819091796875), - FX16_CONST(1.83056640625), - FX16_CONST(1.841796875), - FX16_CONST(1.852783203125), - FX16_CONST(1.864013671875), - FX16_CONST(1.874755859375), - FX16_CONST(1.8857421875), - FX16_CONST(1.896484375), - FX16_CONST(1.9072265625), - FX16_CONST(1.91796875), - FX16_CONST(1.928466796875), - FX16_CONST(1.93896484375), - FX16_CONST(1.94921875), - FX16_CONST(1.95947265625), - FX16_CONST(1.9697265625), - FX16_CONST(1.97998046875), - FX16_CONST(1.989990234375), - FX16_CONST(2.0), -}; - -ARM_FUNC u16 FX_Atan(fx32 x){ - if (x >= 0) - { - if (x > 0x1000) - { - x = FX_Inv(x); - fx16 y = FX_AtanTable_[x >> 5]; - return (u16)(0x4000 - y); - } - else if (x < 0x1000) - { - return (u16)FX_AtanTable_[x >> 5]; - } - else - { - return 0x2000; - } - } - else - { - if (x < -0x1000) - { - x = FX_Inv(-x); - fx16 y = FX_AtanTable_[x >> 5]; - return (u16)(y - 0x4000); - } - else if (x > -0x1000) - { - return (u16)(-FX_AtanTable_[-x >> 5]); - } - else - { - return (u16)(-0x2000); - } - } -} - -ARM_FUNC u16 FX_Atan2(fx32 x, fx32 y){ - u32 positive, bias, denominator, numerator; - if (x > 0) - { - if (y > 0) - { - if (y > x) - { - numerator = (u32)x; - denominator = (u32)y; - bias = 0; - positive = TRUE; - } - else if (y < x) - { - numerator = (u32)y; - denominator = (u32)x; - bias = 0x4000; - positive = FALSE; - } - else - { - return 0x2000; - } - } - else if (y < 0) - { - y = -y; - if (y < x) - { - numerator = (u32)y; - denominator = (u32)x; - bias = 0x4000; - positive = TRUE; - } - else if (y > x) - { - numerator = (u32)x; - denominator = (u32)y; - bias = 0x8000; - positive = FALSE; - } - else - { - return 0x6000; - } - } - else - { - return 0x4000; - } - } - else if (x < 0) - { - x = -x; - if (y < 0) - { - y = -y; - if (y > x) - { - numerator = (u32)x; - denominator = (u32)y; - bias = (u32)(-0x8000); - positive = TRUE; - } - else if (y < x) - { - numerator = (u32)y; - denominator = (u32)x; - bias = (u32)(-0x4000); - positive = FALSE; - } - else - { - return 0xA000; - } - } - else if (y > 0) - { - if (y < x) - { - numerator = (u32)y; - denominator = (u32)x; - bias = (u32)(-0x4000); - positive = TRUE; - } - else if (y > x) - { - numerator = (u32)x; - denominator = (u32)y; - bias = 0x0; - positive = FALSE; - } - else - { - return 0xE000; - } - } - else - { - return 0xC000; - } - } - else - { - if (y >= 0) - return 0x0; - else - return 0x8000; - } - if (denominator == 0x0) - return 0x0; - if (positive) - return (u16)(bias + FX_AtanTable_[FX_Div((fx32)numerator, (fx32)denominator) >> 5]); - else - return (u16)(bias - FX_AtanTable_[FX_Div((fx32)numerator, (fx32)denominator) >> 5]); -} diff --git a/arm9/lib/src/FX_cp.c b/arm9/lib/src/FX_cp.c deleted file mode 100644 index 0c5d4ff8..00000000 --- a/arm9/lib/src/FX_cp.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "fx.h" - -#include "global.h" -#include "registers.h" - - -ARM_FUNC fx32 FX_Div(fx32 numerator, fx32 denominator){ - FX_DivAsync(numerator, denominator); - return FX_GetDivResult(); -} - -ARM_FUNC fx32 FX_Inv(fx32 x){ - FX_InvAsync(x); - return FX_GetDivResult(); -} - -ARM_FUNC fx32 FX_Sqrt(fx32 x){ - if (x > 0) - { - reg_CP_SQRTCNT = 0x1; - reg_CP_SQRT_PARAM = (u64)((fx64)x << 32); - return FX_GetSqrtResult(); - } - else - { - return 0; - } -} - -ARM_FUNC fx64c FX_GetDivResultFx64c(){ - while (reg_CP_DIVCNT & 0x8000) {} - return (fx64c)reg_CP_DIV_RESULT; -} - -ARM_FUNC fx32 FX_GetDivResult(){ - while (reg_CP_DIVCNT & 0x8000) {} - return (fx32)((reg_CP_DIV_RESULT + (1 << (0x14 - 1))) >> 0x14); -} - -ARM_FUNC void FX_InvAsync(fx32 x){ - reg_CP_DIVCNT = 0x1; - reg_CP_DIV_NUMER = (fx64)0x00001000 << 32; - reg_CP_DIV_DENOM = (u32)x; -} - -ARM_FUNC fx32 FX_GetSqrtResult(){ - while (reg_CP_SQRTCNT & 0x8000) {} - return (fx32)((reg_CP_SQRT_RESULT + (1 << (0xA - 1))) >> 0xA); -} - -ARM_FUNC void FX_DivAsync(fx32 numerator, fx32 denominator){ - reg_CP_DIVCNT = 0x1; - reg_CP_DIV_NUMER = (u64)((fx64)numerator << 32); - reg_CP_DIV_DENOM = (u32)denominator; -} - -ARM_FUNC fx32 FX_DivS32(fx32 numerator, fx32 denominator){ - reg_CP_DIVCNT = 0x0; - *(REGType32v *)®_CP_DIV_NUMER = (u32)numerator; //32bit write for some reason - reg_CP_DIV_DENOM = (u32)denominator; - while (reg_CP_DIVCNT & 0x8000) {} - return (fx32)(*(REGType32v *)®_CP_DIV_RESULT); -} - -ARM_FUNC fx32 FX_ModS32(fx32 num, fx32 mod){ - reg_CP_DIVCNT = 0x0; - *(REGType32v *)®_CP_DIV_NUMER = (u32)num; //32bit write for some reason - reg_CP_DIV_DENOM = (u32)mod; - while (reg_CP_DIVCNT & 0x8000) {} - return (fx32)(*(REGType32v *)®_CP_DIVREM_RESULT); -} diff --git a/arm9/lib/src/FX_mtx22.c b/arm9/lib/src/FX_mtx22.c deleted file mode 100644 index a74bb25c..00000000 --- a/arm9/lib/src/FX_mtx22.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "global.h" -#include "main.h" -#include "fx.h" - -ARM_FUNC void MTX_ScaleApply22(struct Mtx22 *mtx, struct Mtx22 *dst, fx32 x, fx32 y){ - dst->_[0] = (fx32)(((fx64)x * mtx->_[0]) >> FX32_INT_SHIFT); - dst->_[1] = (fx32)(((fx64)x * mtx->_[1]) >> FX32_INT_SHIFT); - dst->_[2] = (fx32)(((fx64)y * mtx->_[2]) >> FX32_INT_SHIFT); - dst->_[3] = (fx32)(((fx64)y * mtx->_[3]) >> FX32_INT_SHIFT); -} - -ARM_FUNC asm void MTX_Identity22_(struct Mtx22 *mtx){ - mov r1, #0x0 - mov r2, #0x1000 - mov r3, #0x0 - stmia r0!, {r2-r3} - stmia r0!, {r1-r2} - bx lr -} - -THUMB_FUNC asm void MTX_Rot22_(struct Mtx22 *mtx, fx32 sinphi, fx32 cosphi){ - str r2, [r0, #0x0] - str r1, [r0, #0x4] - neg r1, r1 - str r1, [r0, #0x8] - str r2, [r0, #0xc] - bx lr -} diff --git a/arm9/lib/src/FX_mtx33.c b/arm9/lib/src/FX_mtx33.c deleted file mode 100644 index 86169ea0..00000000 --- a/arm9/lib/src/FX_mtx33.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "global.h" -#include "main.h" -#include "fx.h" - -ARM_FUNC void MTX_ScaleApply33(struct Mtx33 *mtx, struct Mtx33 *dst, fx32 x, fx32 y, fx32 z){ - dst->_[0] = (fx32)(((fx64)x * mtx->_[0]) >> FX32_INT_SHIFT); - dst->_[1] = (fx32)(((fx64)x * mtx->_[1]) >> FX32_INT_SHIFT); - dst->_[2] = (fx32)(((fx64)x * mtx->_[2]) >> FX32_INT_SHIFT); - dst->_[3] = (fx32)(((fx64)y * mtx->_[3]) >> FX32_INT_SHIFT); - dst->_[4] = (fx32)(((fx64)y * mtx->_[4]) >> FX32_INT_SHIFT); - dst->_[5] = (fx32)(((fx64)y * mtx->_[5]) >> FX32_INT_SHIFT); - dst->_[6] = (fx32)(((fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); - dst->_[7] = (fx32)(((fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); - dst->_[8] = (fx32)(((fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); -} - -ARM_FUNC void MTX_Concat33(struct Mtx33 *a, struct Mtx33 *b, struct Mtx33 *c){ - struct Mtx33 temp; - struct Mtx33 *dst; - fx32 a0, a1, a2; - fx32 b0, b1, b2; - - if (c == b) - dst = &temp; - else - dst = c; - - a0 = a->_[0]; - a1 = a->_[1]; - a2 = a->_[2]; - dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6] ) >> FX32_INT_SHIFT); - dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[5]; - b2 = b->_[8]; - dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - a0 = a->_[3]; - a1 = a->_[4]; - a2 = a->_[5]; - dst->_[5] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - dst->_[4] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[0]; - b1 = b->_[3]; - b2 = b->_[6]; - dst->_[3] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - a0 = a->_[6]; - a1 = a->_[7]; - a2 = a->_[8]; - dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - dst->_[7] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[5]; - b2 = b->_[8]; - dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - - if (dst == &temp) - *c = temp; -} - -ARM_FUNC void MTX_MultVec33(struct Vecx32 *vec, struct Mtx33 *mtx, struct Vecx32 *dst){ - fx32 x, y, z; - x = vec->x; - y = vec->y; - z = vec->z; - dst->x = (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[3] + (fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); - dst->y = (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); - dst->z = (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); -} - -ARM_FUNC asm void MTX_Identity33_(struct Mtx33 *mtx){ - mov r2, #0x1000 - str r2, [r0, #0x20] - mov r3, #0x0 - stmia r0!, {r2-r3} - mov r1, #0x0 - stmia r0!, {r1,r3} - stmia r0!, {r2-r3} - stmia r0!, {r1,r3} - bx lr -} - -THUMB_FUNC asm void MTX_RotX33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ - mov r3, #0x1 - lsl r3, r3, #0xc - str r3, [r0, #0x0] - mov r3, #0x0 - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r3, [r0, #0xc] - str r2, [r0, #0x10] - str r1, [r0, #0x14] - str r3, [r0, #0x18] - neg r1, r1 - str r1, [r0, #0x1c] - str r2, [r0, #0x20] - bx lr -} - -THUMB_FUNC asm void MTX_RotY33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ - str r2, [r0, #0x0] - str r2, [r0, #0x20] - mov r3, #0x0 - str r3, [r0, #0x4] - str r3, [r0, #0xc] - str r3, [r0, #0x14] - str r3, [r0, #0x1c] - neg r2, r1 - mov r3, #0x1 - lsl r3, r3, #0xc - str r1, [r0, #0x18] - str r2, [r0, #0x8] - str r3, [r0, #0x10] - bx lr -} - -THUMB_FUNC asm void MTX_RotZ33_(struct Mtx33 *mtx, fx32 sinphi, fx32 cosphi){ - stmia r0!, {r2} - mov r3, #0x0 - stmia r0!, {r1,r3} - neg r1, r1 - stmia r0!, {r1-r2} - mov r1, #0x1 - lsl r1, r1, #0xc - str r3, [r0, #0x0] - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r1, [r0, #0xc] - bx lr -} diff --git a/arm9/lib/src/FX_mtx43.c b/arm9/lib/src/FX_mtx43.c deleted file mode 100644 index 693dddff..00000000 --- a/arm9/lib/src/FX_mtx43.c +++ /dev/null @@ -1,200 +0,0 @@ -#include "global.h" -#include "main.h" -#include "fx.h" - -void MI_Copy48B(void *src, void *dst); - - -ARM_FUNC void MTX_ScaleApply43(struct Mtx43 *mtx, struct Mtx43 *dst, fx32 x, fx32 y, fx32 z){ - //this works because matrices are indexed columns first - MTX_ScaleApply33((struct Mtx33 *)mtx, (struct Mtx33 *)dst, x, y, z); - dst->_[9] = mtx->_[9]; - dst->_[10] = mtx->_[10]; - dst->_[11] = mtx->_[11]; -} - -ARM_FUNC fx32 MTX_Inverse43(struct Mtx43 *mtx, struct Mtx43 *inv){ - struct Mtx43 tempmat; - struct Mtx43 *dst; - fx32 det0, det1, det2, det; - fx32 var0, var1, var2, var3; - if (mtx == inv) - dst = &tempmat; - else - dst = inv; - //subdeterminants - det0 = (fx32)(((fx64)mtx->_[4] * mtx->_[8] - (fx64)mtx->_[5] * mtx->_[7] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); - det1 = (fx32)(((fx64)mtx->_[3] * mtx->_[8] - (fx64)mtx->_[5] * mtx->_[6] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); - det2 = (fx32)(((fx64)mtx->_[3] * mtx->_[7] - (fx64)mtx->_[4] * mtx->_[6] + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); - //matrix determinant - det = (fx32)(((fx64)mtx->_[0] * det0 - (fx64)mtx->_[1] * det1 + (fx64)mtx->_[2] * det2 + (fx64)(1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT); - - if (det == 0) - return -1; //not invertible - - FX_InvAsync(det); - - var0 = (fx32)(((fx64)mtx->_[1] * mtx->_[8] - (fx64)mtx->_[7] * mtx->_[2]) >> FX32_INT_SHIFT); - var1 = (fx32)(((fx64)mtx->_[1] * mtx->_[5] - (fx64)mtx->_[4] * mtx->_[2]) >> FX32_INT_SHIFT); - var2 = (fx32)(((fx64)mtx->_[0] * mtx->_[8] - (fx64)mtx->_[6] * mtx->_[2]) >> FX32_INT_SHIFT); - var3 = (fx32)(((fx64)mtx->_[0] * mtx->_[5] - (fx64)mtx->_[3] * mtx->_[2]) >> FX32_INT_SHIFT); - - fx32 ret = FX_GetDivResult(); - dst->_[0] = (fx32)(((fx64)ret * det0) >> FX32_INT_SHIFT); - dst->_[1] = -(fx32)(((fx64)ret * var0) >> FX32_INT_SHIFT); - dst->_[2] = (fx32)(((fx64)ret * var1) >> FX32_INT_SHIFT); - dst->_[3] = -(fx32)(((fx64)ret * det1) >> FX32_INT_SHIFT); - dst->_[4] = (fx32)(((fx64)ret * var2) >> FX32_INT_SHIFT); - dst->_[5] = -(fx32)(((fx64)ret * var3) >> FX32_INT_SHIFT); - - dst->_[6] = (fx32)(((fx64)ret * det2) >> FX32_INT_SHIFT); - fx32 temp = (fx32)(((fx64)mtx->_[0] * mtx->_[7] - (fx64)mtx->_[6] * mtx->_[1]) >> FX32_INT_SHIFT); - dst->_[7] = -(fx32)(((fx64)ret * temp) >> FX32_INT_SHIFT); - fx32 temp1 = (fx32)(((fx64)mtx->_[0] * mtx->_[4] - (fx64)mtx->_[3] * mtx->_[1]) >> FX32_INT_SHIFT); - dst->_[8] = (fx32)(((fx64)ret * temp1) >> FX32_INT_SHIFT); - dst->_[9] = -(fx32)(((fx64)dst->_[0] * mtx->_[9] + (fx64)dst->_[3] * mtx->_[10] + (fx64)dst->_[6] * mtx->_[11]) >> FX32_INT_SHIFT); - dst->_[10] = -(fx32)(((fx64)dst->_[1] * mtx->_[9] + (fx64)dst->_[4] * mtx->_[10] + (fx64)dst->_[7] * mtx->_[11]) >> FX32_INT_SHIFT); - dst->_[11] = -(fx32)(((fx64)dst->_[2] * mtx->_[9] + (fx64)dst->_[5] * mtx->_[10] + (fx64)dst->_[8] * mtx->_[11]) >> FX32_INT_SHIFT); - - if (dst == &tempmat) - MI_Copy48B(&tempmat, inv); - return 0; -} - -ARM_FUNC void MTX_Concat43(struct Mtx43 *a, struct Mtx43 *b, struct Mtx43 *c){ - struct Mtx43 temp; - struct Mtx43 *dst; - fx32 a0, a1, a2; - fx32 b0, b1, b2; - - if (c == b) - dst = &temp; - else - dst = c; - - a0 = a->_[0]; - a1 = a->_[1]; - a2 = a->_[2]; - dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6] ) >> FX32_INT_SHIFT); - dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[5]; - b2 = b->_[8]; - dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - a0 = a->_[3]; - a1 = a->_[4]; - a2 = a->_[5]; - dst->_[5] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - dst->_[4] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[0]; - b1 = b->_[3]; - b2 = b->_[6]; - dst->_[3] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - a0 = a->_[6]; - a1 = a->_[7]; - a2 = a->_[8]; - dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - dst->_[7] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7] ) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[5]; - b2 = b->_[8]; - dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT); - a0 = a->_[9]; - a1 = a->_[10]; - a2 = a->_[11]; - dst->_[11] = (fx32)((((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2) >> FX32_INT_SHIFT) + b->_[11]); - dst->_[10] = (fx32)((((fx64)a0 * b->_[1] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[7]) >> FX32_INT_SHIFT) + b->_[10]); - dst->_[9] = (fx32)((((fx64)a0 * b->_[0] + (fx64)a1 * b->_[3] + (fx64)a2 * b->_[6]) >> FX32_INT_SHIFT) + b->_[9]); - if (dst == &temp) - *c = temp; -} - -ARM_FUNC void MTX_MultVec43(struct Vecx32 *vec, struct Mtx43 *mtx, struct Vecx32 *dst){ - fx32 x, y, z; - x = vec->x; - y = vec->y; - z = vec->z; - dst->x = (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[3] + (fx64)z * mtx->_[6]) >> FX32_INT_SHIFT); - dst->x += mtx->_[9]; - dst->y = (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[7]) >> FX32_INT_SHIFT); - dst->y += mtx->_[10]; - dst->z = (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[8]) >> FX32_INT_SHIFT); - dst->z += mtx->_[11]; -} - -ARM_FUNC asm void MTX_Identity43_(struct Mtx43 *mtx){ - mov r2, #0x1000 - mov r3, #0x0 - stmia r0!, {r2-r3} - mov r1, #0x0 - stmia r0!, {r1,r3} - stmia r0!, {r2-r3} - stmia r0!, {r1,r3} - stmia r0!, {r2-r3} - stmia r0!, {r1,r3} - bx lr -} - -ARM_FUNC asm void MTX_Copy43To44_(struct Mtx43 *src, struct Mtx44 *dst){ - stmdb sp!, {r4} - mov r12, #0x0 - ldmia r0!, {r2-r4} - stmia r1!, {r2-r4,r12} - ldmia r0!, {r2-r4} - stmia r1!, {r2-r4,r12} - ldmia r0!, {r2-r4} - stmia r1!, {r2-r4,r12} - mov r12, #0x1000 - ldmia r0!, {r2-r4} - stmia r1!, {r2-r4,r12} - ldmia sp!, {r4} - bx lr -} - -THUMB_FUNC asm void MTX_Scale43_(struct Mtx43 *dst, fx32 x, fx32 y, fx32 z){ - stmia r0!, {r1} - mov r1, #0x0 - str r3, [r0, #0x1c] - mov r3, #0x0 - stmia r0!, {r1,r3} - stmia r0!, {r1-r3} - mov r2, #0x0 - stmia r0!, {r1,r3} - add r0, #0x4 - stmia r0!, {r1-r3} - bx lr -} - -THUMB_FUNC asm void MTX_RotX43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi){ - str r1, [r0, #0x14] - neg r1, r1 - str r1, [r0, #0x1c] - mov r1, #0x1 - lsl r1, r1, #0xc - stmia r0!, {r1} - mov r3, #0x0 - mov r1, #0x0 - stmia r0!, {r1,r3} - stmia r0!, {r1-r2} - str r1, [r0, #0x4] - add r0, #0xc - stmia r0!, {r2-r3} - stmia r0!, {r1,r3} - bx lr -} - -THUMB_FUNC asm void MTX_RotY43_(struct Mtx43 *mtx, fx32 sinphi, fx32 cosphi){ - str r1, [r0, #0x18] - mov r3, #0x0 - stmia r0!, {r2-r3} - neg r1, r1 - stmia r0!, {r1,r3} - mov r1, #0x1 - lsl r1, r1, #0xc - stmia r0!, {r1,r3} - add r0, #0x4 - mov r1, #0x0 - stmia r0!, {r1-r3} - stmia r0!, {r1,r3} - bx lr -} diff --git a/arm9/lib/src/FX_mtx44.c b/arm9/lib/src/FX_mtx44.c deleted file mode 100644 index c72f6158..00000000 --- a/arm9/lib/src/FX_mtx44.c +++ /dev/null @@ -1,166 +0,0 @@ -#include "global.h" -#include "main.h" -#include "fx.h" - -void MI_Copy48B(void *src, void *dst); - - -ARM_FUNC void MTX_TransApply44(struct Mtx44 *mtx, struct Mtx44 *dst, fx32 x, fx32 y, fx32 z){ - if(mtx != dst) - MI_Copy48B(mtx, dst); - dst->_[12] = mtx->_[12] + (fx32)(((fx64)x * mtx->_[0] + (fx64)y * mtx->_[4] + (fx64)z * mtx->_[8] ) >> FX32_INT_SHIFT); - dst->_[13] = mtx->_[13] + (fx32)(((fx64)x * mtx->_[1] + (fx64)y * mtx->_[5] + (fx64)z * mtx->_[9] ) >> FX32_INT_SHIFT); - dst->_[14] = mtx->_[14] + (fx32)(((fx64)x * mtx->_[2] + (fx64)y * mtx->_[6] + (fx64)z * mtx->_[10]) >> FX32_INT_SHIFT); - dst->_[15] = mtx->_[15] + (fx32)(((fx64)x * mtx->_[3] + (fx64)y * mtx->_[7] + (fx64)z * mtx->_[11]) >> FX32_INT_SHIFT); -} - -ARM_FUNC void MTX_Concat44(struct Mtx44 *a, struct Mtx44 *b, struct Mtx44 *c){ - struct Mtx44 temp; - struct Mtx44 *dst; - fx32 a0, a1, a2, a3; - fx32 b0, b1, b2, b3; - - if (c == b) - dst = &temp; - else - dst = c; - - a0 = a->_[0]; - a1 = a->_[1]; - a2 = a->_[2]; - a3 = a->_[3]; - dst->_[0] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[8] + (fx64)a3 * b->_[12]) >> FX32_INT_SHIFT); - dst->_[1] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); - dst->_[3] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[6]; - b2 = b->_[10]; - b3 = b->_[14]; - dst->_[2] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - a0 = a->_[4]; - a1 = a->_[5]; - a2 = a->_[6]; - a3 = a->_[7]; - dst->_[6] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - dst->_[5] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); - dst->_[7] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); - b0 = b->_[0]; - b1 = b->_[4]; - b2 = b->_[8]; - b3 = b->_[12]; - dst->_[4] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - a0 = a->_[8]; - a1 = a->_[9]; - a2 = a->_[10]; - a3 = a->_[11]; - dst->_[8] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - dst->_[9] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); - dst->_[11] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); - b0 = b->_[2]; - b1 = b->_[6]; - b2 = b->_[10]; - b3 = b->_[14]; - dst->_[10] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - a0 = a->_[12]; - a1 = a->_[13]; - a2 = a->_[14]; - a3 = a->_[15]; - dst->_[14] = (fx32)(((fx64)a0 * b0 + (fx64)a1 * b1 + (fx64)a2 * b2 + (fx64)a3 * b3) >> FX32_INT_SHIFT); - dst->_[13] = (fx32)(((fx64)a0 * b->_[1] + (fx64)a1 * b->_[5] + (fx64)a2 * b->_[9] + (fx64)a3 * b->_[13]) >> FX32_INT_SHIFT); - dst->_[12] = (fx32)(((fx64)a0 * b->_[0] + (fx64)a1 * b->_[4] + (fx64)a2 * b->_[8] + (fx64)a3 * b->_[12]) >> FX32_INT_SHIFT); - dst->_[15] = (fx32)(((fx64)a0 * b->_[3] + (fx64)a1 * b->_[7] + (fx64)a2 * b->_[11] + (fx64)a3 * b->_[15]) >> FX32_INT_SHIFT); - if (dst == &temp) - *c = temp; -} - -ARM_FUNC asm void MTX_Identity44_(struct Mtx44 *dst){ - mov r2, #0x1000 - mov r3, #0x0 - stmia r0!, {r2-r3} - mov r1, #0x0 - stmia r0!, {r1,r3} - stmia r0!, {r1-r3} - stmia r0!, {r1,r3} - stmia r0!, {r1-r3} - stmia r0!, {r1,r3} - stmia r0!, {r1-r2} - bx lr -} - -ARM_FUNC asm void MTX_Copy44To43_(struct Mtx44 *src, struct Mtx43 *dst){ - ldmia r0!, {r2-r3,r12} - add r0, r0, #0x4 - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - add r0, r0, #0x4 - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - add r0, r0, #0x4 - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - add r0, r0, #0x4 - stmia r1!, {r2-r3,r12} - bx lr -} - -THUMB_FUNC asm void MTX_RotX44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ - str r2, [r0, #0x14] - str r2, [r0, #0x28] - str r1, [r0, #0x18] - neg r1, r1 - str r1, [r0, #0x24] - mov r1, #0x1 - mov r2, #0x0 - lsl r1, r1, #0xc - mov r3, #0x0 - stmia r0!, {r1-r3} - stmia r0!, {r2-r3} - add r0, #0x8 - stmia r0!, {r2-r3} - add r0, #0x8 - stmia r0!, {r2-r3} - stmia r0!, {r2-r3} - str r1, [r0, #0x0] - bx lr -} - -THUMB_FUNC asm void MTX_RotY44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ - str r2, [r0, #0x0] - str r2, [r0, #0x28] - str r1, [r0, #0x20] - neg r1, r1 - str r1, [r0, #0x8] - mov r3, #0x1 - mov r1, #0x0 - lsl r3, r3, #0xc - mov r2, #0x0 - str r2, [r0, #0x4] - add r0, #0xc - stmia r0!, {r1-r3} - stmia r0!, {r1-r2} - str r2, [r0, #0x4] - add r0, #0xc - stmia r0!, {r1-r2} - stmia r0!, {r1-r3} - bx lr -} - -THUMB_FUNC asm void MTX_RotZ44_(struct Mtx44 *mtx, fx32 sinphi, fx32 cosphi){ - str r2, [r0, #0x0] - str r2, [r0, #0x14] - str r1, [r0, #0x4] - neg r1, r1 - str r1, [r0, #0x10] - mov r3, #0x1 - mov r1, #0x0 - lsl r3, r3, #0xc - mov r2, #0x0 - add r0, #0x8 - stmia r0!, {r1-r2} - add r0, #0x8 - stmia r0!, {r1-r2} - stmia r0!, {r1-r3} - stmia r0!, {r1-r2} - stmia r0!, {r1-r3} - bx lr -} diff --git a/arm9/lib/src/FX_sincos.c b/arm9/lib/src/FX_sincos.c deleted file mode 100644 index 89c8fc78..00000000 --- a/arm9/lib/src/FX_sincos.c +++ /dev/null @@ -1,4105 +0,0 @@ -#include "global.h" -#include "fx.h" - -/* - * [2 * idx + 0] <- sin(idx * 2pi / 4096) - * [2 * idx + 1] <- cos(idx * 2pi / 4096) - */ -const fx16 FX_SinCosTable_[4096 * 2] = { - FX16_CONST(0.0), FX16_CONST(1.0), - FX16_CONST(0.0015339801862847655), FX16_CONST(0.9999988234517019), - FX16_CONST(0.003067956762965976), FX16_CONST(0.9999952938095762), - FX16_CONST(0.0046019261204485705), FX16_CONST(0.9999894110819284), - FX16_CONST(0.006135884649154475), FX16_CONST(0.9999811752826011), - FX16_CONST(0.007669828739531097), FX16_CONST(0.9999705864309741), - FX16_CONST(0.00920375478205982), FX16_CONST(0.9999576445519639), - FX16_CONST(0.01073765916726449), FX16_CONST(0.9999423496760239), - FX16_CONST(0.012271538285719925), FX16_CONST(0.9999247018391445), - FX16_CONST(0.01380538852806039), FX16_CONST(0.9999047010828529), - FX16_CONST(0.0153392062849881), FX16_CONST(0.9998823474542126), - FX16_CONST(0.01687298794728171), FX16_CONST(0.9998576410058239), - FX16_CONST(0.01840672990580482), FX16_CONST(0.9998305817958234), - FX16_CONST(0.01994042855151444), FX16_CONST(0.9998011698878843), - FX16_CONST(0.021474080275469508), FX16_CONST(0.9997694053512153), - FX16_CONST(0.02300768146883937), FX16_CONST(0.9997352882605617), - FX16_CONST(0.024541228522912288), FX16_CONST(0.9996988186962042), - FX16_CONST(0.0260747178291039), FX16_CONST(0.9996599967439592), - FX16_CONST(0.02760814577896574), FX16_CONST(0.9996188224951786), - FX16_CONST(0.029141508764193722), FX16_CONST(0.9995752960467492), - FX16_CONST(0.030674803176636626), FX16_CONST(0.9995294175010931), - FX16_CONST(0.032208025408304586), FX16_CONST(0.999481186966167), - FX16_CONST(0.03374117185137758), FX16_CONST(0.9994306045554617), - FX16_CONST(0.03527423889821395), FX16_CONST(0.9993776703880028), - FX16_CONST(0.03680722294135883), FX16_CONST(0.9993223845883495), - FX16_CONST(0.038340120373552694), FX16_CONST(0.9992647472865944), - FX16_CONST(0.03987292758773981), FX16_CONST(0.9992047586183639), - FX16_CONST(0.04140564097707674), FX16_CONST(0.9991424187248169), - FX16_CONST(0.04293825693494082), FX16_CONST(0.9990777277526454), - FX16_CONST(0.04447077185493867), FX16_CONST(0.9990106858540734), - FX16_CONST(0.04600318213091462), FX16_CONST(0.9989412931868569), - FX16_CONST(0.0475354841569593), FX16_CONST(0.9988695499142836), - FX16_CONST(0.049067674327418015), FX16_CONST(0.9987954562051724), - FX16_CONST(0.05059974903689928), FX16_CONST(0.9987190122338729), - FX16_CONST(0.052131704680283324), FX16_CONST(0.9986402181802653), - FX16_CONST(0.05366353765273052), FX16_CONST(0.9985590742297593), - FX16_CONST(0.055195244349689934), FX16_CONST(0.9984755805732948), - FX16_CONST(0.05672682116690775), FX16_CONST(0.9983897374073402), - FX16_CONST(0.05825826450043575), FX16_CONST(0.9983015449338929), - FX16_CONST(0.05978957074663987), FX16_CONST(0.9982110033604782), - FX16_CONST(0.06132073630220858), FX16_CONST(0.9981181129001492), - FX16_CONST(0.0628517575641614), FX16_CONST(0.9980228737714862), - FX16_CONST(0.06438263092985747), FX16_CONST(0.997925286198596), - FX16_CONST(0.0659133527970038), FX16_CONST(0.9978253504111116), - FX16_CONST(0.06744391956366405), FX16_CONST(0.9977230666441916), - FX16_CONST(0.06897432762826675), FX16_CONST(0.9976184351385196), - FX16_CONST(0.07050457338961386), FX16_CONST(0.9975114561403035), - FX16_CONST(0.07203465324688933), FX16_CONST(0.9974021299012753), - FX16_CONST(0.07356456359966743), FX16_CONST(0.9972904566786902), - FX16_CONST(0.0750943008479213), FX16_CONST(0.9971764367353262), - FX16_CONST(0.07662386139203149), FX16_CONST(0.997060070339483), - FX16_CONST(0.07815324163279423), FX16_CONST(0.9969413577649822), - FX16_CONST(0.07968243797143013), FX16_CONST(0.9968202992911657), - FX16_CONST(0.08121144680959244), FX16_CONST(0.9966968952028961), - FX16_CONST(0.08274026454937569), FX16_CONST(0.9965711457905548), - FX16_CONST(0.08426888759332407), FX16_CONST(0.9964430513500426), - FX16_CONST(0.0857973123444399), FX16_CONST(0.996312612182778), - FX16_CONST(0.08732553520619206), FX16_CONST(0.996179828595697), - FX16_CONST(0.0888535525825246), FX16_CONST(0.996044700901252), - FX16_CONST(0.09038136087786498), FX16_CONST(0.9959072294174117), - FX16_CONST(0.09190895649713272), FX16_CONST(0.9957674144676598), - FX16_CONST(0.09343633584574779), FX16_CONST(0.9956252563809943), - FX16_CONST(0.09496349532963899), FX16_CONST(0.9954807554919269), - FX16_CONST(0.09649043135525259), FX16_CONST(0.9953339121404823), - FX16_CONST(0.0980171403295606), FX16_CONST(0.9951847266721969), - FX16_CONST(0.09954361866006932), FX16_CONST(0.9950331994381186), - FX16_CONST(0.10106986275482782), FX16_CONST(0.9948793307948056), - FX16_CONST(0.10259586902243628), FX16_CONST(0.9947231211043257), - FX16_CONST(0.10412163387205459), FX16_CONST(0.9945645707342554), - FX16_CONST(0.10564715371341062), FX16_CONST(0.9944036800576791), - FX16_CONST(0.10717242495680884), FX16_CONST(0.9942404494531879), - FX16_CONST(0.10869744401313872), FX16_CONST(0.9940748793048794), - FX16_CONST(0.11022220729388306), FX16_CONST(0.9939069700023561), - FX16_CONST(0.11174671121112659), FX16_CONST(0.9937367219407246), - FX16_CONST(0.11327095217756435), FX16_CONST(0.9935641355205953), - FX16_CONST(0.11479492660651008), FX16_CONST(0.9933892111480807), - FX16_CONST(0.11631863091190475), FX16_CONST(0.9932119492347945), - FX16_CONST(0.11784206150832498), FX16_CONST(0.9930323501978514), - FX16_CONST(0.11936521481099135), FX16_CONST(0.9928504144598651), - FX16_CONST(0.12088808723577708), FX16_CONST(0.992666142448948), - FX16_CONST(0.1224106751992162), FX16_CONST(0.99247953459871), - FX16_CONST(0.12393297511851216), FX16_CONST(0.9922905913482574), - FX16_CONST(0.12545498341154623), FX16_CONST(0.9920993131421918), - FX16_CONST(0.12697669649688587), FX16_CONST(0.9919057004306093), - FX16_CONST(0.12849811079379317), FX16_CONST(0.9917097536690995), - FX16_CONST(0.13001922272223335), FX16_CONST(0.9915114733187439), - FX16_CONST(0.13154002870288312), FX16_CONST(0.9913108598461154), - FX16_CONST(0.13306052515713906), FX16_CONST(0.9911079137232769), - FX16_CONST(0.13458070850712617), FX16_CONST(0.99090263542778), - FX16_CONST(0.1361005751757062), FX16_CONST(0.9906950254426646), - FX16_CONST(0.13762012158648604), FX16_CONST(0.9904850842564571), - FX16_CONST(0.1391393441638262), FX16_CONST(0.9902728123631691), - FX16_CONST(0.1406582393328492), FX16_CONST(0.9900582102622971), - FX16_CONST(0.14217680351944803), FX16_CONST(0.9898412784588205), - FX16_CONST(0.14369503315029447), FX16_CONST(0.9896220174632009), - FX16_CONST(0.14521292465284746), FX16_CONST(0.9894004277913804), - FX16_CONST(0.14673047445536175), FX16_CONST(0.989176509964781), - FX16_CONST(0.14824767898689603), FX16_CONST(0.988950264510303), - FX16_CONST(0.1497645346773215), FX16_CONST(0.9887216919603238), - FX16_CONST(0.15128103795733022), FX16_CONST(0.9884907928526966), - FX16_CONST(0.15279718525844344), FX16_CONST(0.9882575677307495), - FX16_CONST(0.1543129730130201), FX16_CONST(0.9880220171432835), - FX16_CONST(0.15582839765426523), FX16_CONST(0.9877841416445722), - FX16_CONST(0.15734345561623825), FX16_CONST(0.9875439417943592), - FX16_CONST(0.15885814333386145), FX16_CONST(0.9873014181578584), - FX16_CONST(0.16037245724292828), FX16_CONST(0.987056571305751), - FX16_CONST(0.16188639378011183), FX16_CONST(0.9868094018141855), - FX16_CONST(0.16339994938297323), FX16_CONST(0.9865599102647754), - FX16_CONST(0.1649131204899699), FX16_CONST(0.9863080972445987), - FX16_CONST(0.1664259035404641), FX16_CONST(0.9860539633461954), - FX16_CONST(0.16793829497473117), FX16_CONST(0.9857975091675675), - FX16_CONST(0.16945029123396796), FX16_CONST(0.9855387353121761), - FX16_CONST(0.17096188876030122), FX16_CONST(0.9852776423889412), - FX16_CONST(0.17247308399679595), FX16_CONST(0.9850142310122398), - FX16_CONST(0.17398387338746382), FX16_CONST(0.9847485018019042), - FX16_CONST(0.17549425337727143), FX16_CONST(0.9844804553832209), - FX16_CONST(0.17700422041214875), FX16_CONST(0.984210092386929), - FX16_CONST(0.1785137709389975), FX16_CONST(0.9839374134492189), - FX16_CONST(0.18002290140569951), FX16_CONST(0.9836624192117303), - FX16_CONST(0.18153160826112497), FX16_CONST(0.9833851103215512), - FX16_CONST(0.18303988795514095), FX16_CONST(0.9831054874312163), - FX16_CONST(0.18454773693861962), FX16_CONST(0.9828235511987052), - FX16_CONST(0.18605515166344663), FX16_CONST(0.9825393022874412), - FX16_CONST(0.1875621285825296), FX16_CONST(0.9822527413662894), - FX16_CONST(0.1890686641498062), FX16_CONST(0.9819638691095552), - FX16_CONST(0.19057475482025274), FX16_CONST(0.9816726861969831), - FX16_CONST(0.19208039704989244), FX16_CONST(0.9813791933137546), - FX16_CONST(0.1935855872958036), FX16_CONST(0.9810833911504867), - FX16_CONST(0.19509032201612825), FX16_CONST(0.9807852804032304), - FX16_CONST(0.19659459767008022), FX16_CONST(0.9804848617734694), - FX16_CONST(0.19809841071795356), FX16_CONST(0.9801821359681174), - FX16_CONST(0.19960175762113097), FX16_CONST(0.9798771036995176), - FX16_CONST(0.2011046348420919), FX16_CONST(0.9795697656854405), - FX16_CONST(0.20260703884442113), FX16_CONST(0.979260122649082), - FX16_CONST(0.20410896609281687), FX16_CONST(0.9789481753190622), - FX16_CONST(0.20561041305309924), FX16_CONST(0.9786339244294232), - FX16_CONST(0.20711137619221856), FX16_CONST(0.9783173707196277), - FX16_CONST(0.20861185197826349), FX16_CONST(0.9779985149345571), - FX16_CONST(0.2101118368804696), FX16_CONST(0.9776773578245099), - FX16_CONST(0.21161132736922755), FX16_CONST(0.9773539001452), - FX16_CONST(0.21311031991609136), FX16_CONST(0.9770281426577544), - FX16_CONST(0.21460881099378676), FX16_CONST(0.9767000861287118), - FX16_CONST(0.21610679707621952), FX16_CONST(0.9763697313300211), - FX16_CONST(0.21760427463848364), FX16_CONST(0.976037079039039), - FX16_CONST(0.2191012401568698), FX16_CONST(0.9757021300385286), - FX16_CONST(0.2205976901088735), FX16_CONST(0.975364885116657), - FX16_CONST(0.2220936209732035), FX16_CONST(0.9750253450669941), - FX16_CONST(0.22358902922979), FX16_CONST(0.9746835106885107), - FX16_CONST(0.22508391135979283), FX16_CONST(0.9743393827855759), - FX16_CONST(0.22657826384561), FX16_CONST(0.9739929621679558), - FX16_CONST(0.22807208317088573), FX16_CONST(0.973644249650812), - FX16_CONST(0.22956536582051887), FX16_CONST(0.9732932460546982), - FX16_CONST(0.2310581082806711), FX16_CONST(0.9729399522055602), - FX16_CONST(0.23255030703877524), FX16_CONST(0.9725843689347322), - FX16_CONST(0.23404195858354343), FX16_CONST(0.9722264970789363), - FX16_CONST(0.2355330594049755), FX16_CONST(0.9718663374802794), - FX16_CONST(0.2370236059943672), FX16_CONST(0.9715038909862518), - FX16_CONST(0.23851359484431842), FX16_CONST(0.9711391584497251), - FX16_CONST(0.2400030224487415), FX16_CONST(0.9707721407289504), - FX16_CONST(0.24149188530286933), FX16_CONST(0.9704028386875555), - FX16_CONST(0.24298017990326387), FX16_CONST(0.970031253194544), - FX16_CONST(0.24446790274782415), FX16_CONST(0.9696573851242924), - FX16_CONST(0.2459550503357946), FX16_CONST(0.9692812353565485), - FX16_CONST(0.24744161916777327), FX16_CONST(0.9689028047764289), - FX16_CONST(0.24892760574572015), FX16_CONST(0.9685220942744174), - FX16_CONST(0.2504130065729652), FX16_CONST(0.9681391047463624), - FX16_CONST(0.25189781815421697), FX16_CONST(0.9677538370934755), - FX16_CONST(0.25338203699557016), FX16_CONST(0.9673662922223285), - FX16_CONST(0.25486565960451457), FX16_CONST(0.9669764710448521), - FX16_CONST(0.2563486824899429), FX16_CONST(0.9665843744783331), - FX16_CONST(0.257831102162159), FX16_CONST(0.9661900034454125), - FX16_CONST(0.25931291513288623), FX16_CONST(0.9657933588740837), - FX16_CONST(0.2607941179152755), FX16_CONST(0.9653944416976894), - FX16_CONST(0.2622747070239136), FX16_CONST(0.9649932528549203), - FX16_CONST(0.26375467897483135), FX16_CONST(0.9645897932898128), - FX16_CONST(0.2652340302855118), FX16_CONST(0.9641840639517458), - FX16_CONST(0.26671275747489837), FX16_CONST(0.9637760657954398), - FX16_CONST(0.2681908570634032), FX16_CONST(0.963365799780954), - FX16_CONST(0.2696683255729151), FX16_CONST(0.9629532668736839), - FX16_CONST(0.271145159526808), FX16_CONST(0.9625384680443592), - FX16_CONST(0.272621355449949), FX16_CONST(0.9621214042690416), - FX16_CONST(0.2740969098687064), FX16_CONST(0.9617020765291225), - FX16_CONST(0.27557181931095814), FX16_CONST(0.9612804858113206), - FX16_CONST(0.2770460803060999), FX16_CONST(0.9608566331076797), - FX16_CONST(0.27851968938505306), FX16_CONST(0.9604305194155658), - FX16_CONST(0.2799926430802732), FX16_CONST(0.960002145737666), - FX16_CONST(0.28146493792575794), FX16_CONST(0.9595715130819845), - FX16_CONST(0.2829365704570554), FX16_CONST(0.9591386224618419), - FX16_CONST(0.2844075372112719), FX16_CONST(0.9587034748958716), - FX16_CONST(0.2858778347270806), FX16_CONST(0.9582660714080177), - FX16_CONST(0.2873474595447295), FX16_CONST(0.9578264130275329), - FX16_CONST(0.2888164082060495), FX16_CONST(0.9573845007889759), - FX16_CONST(0.29028467725446233), FX16_CONST(0.9569403357322088), - FX16_CONST(0.29175226323498926), FX16_CONST(0.9564939189023951), - FX16_CONST(0.29321916269425863), FX16_CONST(0.9560452513499964), - FX16_CONST(0.2946853721805143), FX16_CONST(0.9555943341307711), - FX16_CONST(0.2961508882436238), FX16_CONST(0.9551411683057708), - FX16_CONST(0.2976157074350862), FX16_CONST(0.9546857549413383), - FX16_CONST(0.2990798263080405), FX16_CONST(0.9542280951091057), - FX16_CONST(0.30054324141727345), FX16_CONST(0.9537681898859903), - FX16_CONST(0.3020059493192281), FX16_CONST(0.9533060403541939), - FX16_CONST(0.3034679465720113), FX16_CONST(0.9528416476011987), - FX16_CONST(0.3049292297354024), FX16_CONST(0.9523750127197659), - FX16_CONST(0.3063897953708609), FX16_CONST(0.9519061368079323), - FX16_CONST(0.30784964004153487), FX16_CONST(0.9514350209690083), - FX16_CONST(0.3093087603122687), FX16_CONST(0.9509616663115751), - FX16_CONST(0.3107671527496115), FX16_CONST(0.9504860739494817), - FX16_CONST(0.3122248139218249), FX16_CONST(0.950008245001843), - FX16_CONST(0.3136817403988915), FX16_CONST(0.9495281805930367), - FX16_CONST(0.31513792875252244), FX16_CONST(0.9490458818527006), - FX16_CONST(0.31659337555616585), FX16_CONST(0.9485613499157303), - FX16_CONST(0.31804807738501495), FX16_CONST(0.9480745859222762), - FX16_CONST(0.3195020308160157), FX16_CONST(0.9475855910177411), - FX16_CONST(0.3209552324278752), FX16_CONST(0.9470943663527772), - FX16_CONST(0.32240767880106985), FX16_CONST(0.9466009130832835), - FX16_CONST(0.32385936651785285), FX16_CONST(0.9461052323704034), - FX16_CONST(0.3253102921622629), FX16_CONST(0.9456073253805213), - FX16_CONST(0.32676045232013173), FX16_CONST(0.9451071932852606), - FX16_CONST(0.3282098435790925), FX16_CONST(0.9446048372614803), - FX16_CONST(0.3296584625285875), FX16_CONST(0.9441002584912727), - FX16_CONST(0.33110630575987643), FX16_CONST(0.9435934581619604), - FX16_CONST(0.3325533698660442), FX16_CONST(0.9430844374660935), - FX16_CONST(0.3339996514420094), FX16_CONST(0.9425731976014469), - FX16_CONST(0.3354451470845316), FX16_CONST(0.9420597397710173), - FX16_CONST(0.33688985339222005), FX16_CONST(0.9415440651830208), - FX16_CONST(0.3383337669655411), FX16_CONST(0.9410261750508893), - FX16_CONST(0.33977688440682685), FX16_CONST(0.9405060705932683), - FX16_CONST(0.34121920232028236), FX16_CONST(0.939983753034014), - FX16_CONST(0.3426607173119944), FX16_CONST(0.9394592236021899), - FX16_CONST(0.3441014259899388), FX16_CONST(0.9389324835320646), - FX16_CONST(0.3455413249639891), FX16_CONST(0.9384035340631081), - FX16_CONST(0.3469804108459237), FX16_CONST(0.9378723764399899), - FX16_CONST(0.34841868024943456), FX16_CONST(0.937339011912575), - FX16_CONST(0.3498561297901349), FX16_CONST(0.9368034417359216), - FX16_CONST(0.3512927560855671), FX16_CONST(0.9362656671702783), - FX16_CONST(0.3527285557552107), FX16_CONST(0.9357256894810804), - FX16_CONST(0.35416352542049034), FX16_CONST(0.9351835099389476), - FX16_CONST(0.35559766170478385), FX16_CONST(0.9346391298196808), - FX16_CONST(0.35703096123343), FX16_CONST(0.9340925504042589), - FX16_CONST(0.35846342063373654), FX16_CONST(0.9335437729788362), - FX16_CONST(0.3598950365349881), FX16_CONST(0.932992798834739), - FX16_CONST(0.3613258055684543), FX16_CONST(0.9324396292684624), - FX16_CONST(0.3627557243673972), FX16_CONST(0.9318842655816681), - FX16_CONST(0.3641847895670799), FX16_CONST(0.9313267090811804), - FX16_CONST(0.36561299780477385), FX16_CONST(0.9307669610789837), - FX16_CONST(0.3670403457197672), FX16_CONST(0.9302050228922191), - FX16_CONST(0.3684668299533723), FX16_CONST(0.9296408958431812), - FX16_CONST(0.3698924471489341), FX16_CONST(0.9290745812593159), - FX16_CONST(0.37131719395183754), FX16_CONST(0.9285060804732156), - FX16_CONST(0.37274106700951576), FX16_CONST(0.9279353948226179), - FX16_CONST(0.37416406297145793), FX16_CONST(0.9273625256504011), - FX16_CONST(0.3755861784892172), FX16_CONST(0.9267874743045817), - FX16_CONST(0.37700741021641826), FX16_CONST(0.9262102421383114), - FX16_CONST(0.37842775480876556), FX16_CONST(0.9256308305098727), - FX16_CONST(0.37984720892405116), FX16_CONST(0.9250492407826776), - FX16_CONST(0.3812657692221624), FX16_CONST(0.9244654743252626), - FX16_CONST(0.3826834323650898), FX16_CONST(0.9238795325112867), - FX16_CONST(0.38410019501693504), FX16_CONST(0.9232914167195276), - FX16_CONST(0.38551605384391885), FX16_CONST(0.9227011283338786), - FX16_CONST(0.3869310055143886), FX16_CONST(0.9221086687433452), - FX16_CONST(0.38834504669882625), FX16_CONST(0.9215140393420419), - FX16_CONST(0.3897581740698564), FX16_CONST(0.9209172415291894), - FX16_CONST(0.39117038430225387), FX16_CONST(0.9203182767091106), - FX16_CONST(0.39258167407295147), FX16_CONST(0.9197171462912274), - FX16_CONST(0.3939920400610481), FX16_CONST(0.9191138516900578), - FX16_CONST(0.39540147894781635), FX16_CONST(0.9185083943252123), - FX16_CONST(0.3968099874167103), FX16_CONST(0.9179007756213905), - FX16_CONST(0.39821756215337356), FX16_CONST(0.9172909970083779), - FX16_CONST(0.3996241998456468), FX16_CONST(0.9166790599210427), - FX16_CONST(0.4010298971835756), FX16_CONST(0.9160649657993317), - FX16_CONST(0.40243465085941843), FX16_CONST(0.9154487160882678), - FX16_CONST(0.4038384575676541), FX16_CONST(0.9148303122379462), - FX16_CONST(0.40524131400498986), FX16_CONST(0.9142097557035307), - FX16_CONST(0.40664321687036903), FX16_CONST(0.9135870479452508), - FX16_CONST(0.4080441628649787), FX16_CONST(0.9129621904283982), - FX16_CONST(0.4094441486922576), FX16_CONST(0.9123351846233227), - FX16_CONST(0.4108431710579039), FX16_CONST(0.9117060320054299), - FX16_CONST(0.4122412266698829), FX16_CONST(0.9110747340551764), - FX16_CONST(0.4136383122384345), FX16_CONST(0.9104412922580672), - FX16_CONST(0.41503442447608163), FX16_CONST(0.9098057081046522), - FX16_CONST(0.41642956009763715), FX16_CONST(0.9091679830905224), - FX16_CONST(0.41782371582021227), FX16_CONST(0.9085281187163061), - FX16_CONST(0.4192168883632239), FX16_CONST(0.9078861164876663), - FX16_CONST(0.4206090744484025), FX16_CONST(0.9072419779152958), - FX16_CONST(0.4220002707997997), FX16_CONST(0.9065957045149153), - FX16_CONST(0.42339047414379605), FX16_CONST(0.9059472978072685), - FX16_CONST(0.4247796812091088), FX16_CONST(0.9052967593181188), - FX16_CONST(0.4261678887267996), FX16_CONST(0.9046440905782462), - FX16_CONST(0.4275550934302821), FX16_CONST(0.9039892931234433), - FX16_CONST(0.4289412920553295), FX16_CONST(0.9033323684945118), - FX16_CONST(0.4303264813400826), FX16_CONST(0.9026733182372588), - FX16_CONST(0.43171065802505726), FX16_CONST(0.9020121439024932), - FX16_CONST(0.43309381885315196), FX16_CONST(0.901348847046022), - FX16_CONST(0.43447596056965565), FX16_CONST(0.9006834292286469), - FX16_CONST(0.4358570799222555), FX16_CONST(0.9000158920161602), - FX16_CONST(0.4372371736610441), FX16_CONST(0.8993462369793416), - FX16_CONST(0.43861623853852766), FX16_CONST(0.8986744656939538), - FX16_CONST(0.43999427130963326), FX16_CONST(0.8980005797407399), - FX16_CONST(0.44137126873171667), FX16_CONST(0.8973245807054183), - FX16_CONST(0.44274722756457), FX16_CONST(0.8966464701786802), - FX16_CONST(0.4441221445704292), FX16_CONST(0.8959662497561852), - FX16_CONST(0.44549601651398174), FX16_CONST(0.8952839210385576), - FX16_CONST(0.44686884016237416), FX16_CONST(0.8945994856313827), - FX16_CONST(0.4482406122852199), FX16_CONST(0.8939129451452033), - FX16_CONST(0.44961132965460654), FX16_CONST(0.8932243011955153), - FX16_CONST(0.45098098904510386), FX16_CONST(0.8925335554027646), - FX16_CONST(0.4523495872337709), FX16_CONST(0.8918407093923427), - FX16_CONST(0.45371712100016387), FX16_CONST(0.8911457647945832), - FX16_CONST(0.45508358712634384), FX16_CONST(0.8904487232447579), - FX16_CONST(0.4564489823968839), FX16_CONST(0.8897495863830728), - FX16_CONST(0.4578133035988772), FX16_CONST(0.8890483558546646), - FX16_CONST(0.4591765475219441), FX16_CONST(0.8883450333095964), - FX16_CONST(0.46053871095824), FX16_CONST(0.8876396204028539), - FX16_CONST(0.46189979070246273), FX16_CONST(0.8869321187943422), - FX16_CONST(0.46325978355186015), FX16_CONST(0.8862225301488806), - FX16_CONST(0.4646186863062378), FX16_CONST(0.8855108561362), - FX16_CONST(0.4659764957679662), FX16_CONST(0.8847970984309378), - FX16_CONST(0.4673332087419884), FX16_CONST(0.884081258712635), - FX16_CONST(0.4686888220358279), FX16_CONST(0.8833633386657316), - FX16_CONST(0.4700433324595956), FX16_CONST(0.8826433399795628), - FX16_CONST(0.47139673682599764), FX16_CONST(0.881921264348355), - FX16_CONST(0.4727490319503428), FX16_CONST(0.8811971134712221), - FX16_CONST(0.47410021465054997), FX16_CONST(0.8804708890521608), - FX16_CONST(0.47545028174715587), FX16_CONST(0.8797425928000474), - FX16_CONST(0.4767992300633221), FX16_CONST(0.8790122264286335), - FX16_CONST(0.478147056424843), FX16_CONST(0.8782797916565416), - FX16_CONST(0.47949375766015295), FX16_CONST(0.8775452902072614), - FX16_CONST(0.48083933060033396), FX16_CONST(0.8768087238091457), - FX16_CONST(0.4821837720791227), FX16_CONST(0.8760700941954066), - FX16_CONST(0.4835270789329187), FX16_CONST(0.8753294031041109), - FX16_CONST(0.48486924800079106), FX16_CONST(0.8745866522781761), - FX16_CONST(0.4862102761244864), FX16_CONST(0.8738418434653669), - FX16_CONST(0.487550160148436), FX16_CONST(0.8730949784182901), - FX16_CONST(0.48888889691976317), FX16_CONST(0.8723460588943915), - FX16_CONST(0.49022648328829116), FX16_CONST(0.871595086655951), - FX16_CONST(0.4915629161065499), FX16_CONST(0.870842063470079), - FX16_CONST(0.49289819222978404), FX16_CONST(0.8700869911087115), - FX16_CONST(0.4942323085159597), FX16_CONST(0.8693298713486068), - FX16_CONST(0.49556526182577254), FX16_CONST(0.8685707059713409), - FX16_CONST(0.49689704902265447), FX16_CONST(0.8678094967633033), - FX16_CONST(0.4982276669727818), FX16_CONST(0.8670462455156926), - FX16_CONST(0.49955711254508184), FX16_CONST(0.866280954024513), - FX16_CONST(0.5008853826112407), FX16_CONST(0.8655136240905691), - FX16_CONST(0.5022124740457108), FX16_CONST(0.8647442575194624), - FX16_CONST(0.5035383837257176), FX16_CONST(0.8639728561215867), - FX16_CONST(0.5048631085312676), FX16_CONST(0.8631994217121242), - FX16_CONST(0.5061866453451552), FX16_CONST(0.8624239561110405), - FX16_CONST(0.5075089910529709), FX16_CONST(0.8616464611430813), - FX16_CONST(0.508830142543107), FX16_CONST(0.8608669386377673), - FX16_CONST(0.5101500967067668), FX16_CONST(0.8600853904293901), - FX16_CONST(0.5114688504379703), FX16_CONST(0.8593018183570085), - FX16_CONST(0.512786400633563), FX16_CONST(0.8585162242644427), - FX16_CONST(0.5141027441932217), FX16_CONST(0.8577286100002721), - FX16_CONST(0.5154178780194629), FX16_CONST(0.8569389774178288), - FX16_CONST(0.5167317990176499), FX16_CONST(0.8561473283751945), - FX16_CONST(0.5180445040959993), FX16_CONST(0.855353664735196), - FX16_CONST(0.5193559901655896), FX16_CONST(0.8545579883654005), - FX16_CONST(0.5206662541403672), FX16_CONST(0.8537603011381114), - FX16_CONST(0.5219752929371544), FX16_CONST(0.8529606049303636), - FX16_CONST(0.5232831034756564), FX16_CONST(0.8521589016239198), - FX16_CONST(0.524589682678469), FX16_CONST(0.8513551931052652), - FX16_CONST(0.5258950274710846), FX16_CONST(0.8505494812656035), - FX16_CONST(0.5271991347819013), FX16_CONST(0.8497417680008525), - FX16_CONST(0.5285020015422285), FX16_CONST(0.8489320552116396), - FX16_CONST(0.5298036246862946), FX16_CONST(0.8481203448032972), - FX16_CONST(0.531104001151255), FX16_CONST(0.8473066386858583), - FX16_CONST(0.5324031278771979), FX16_CONST(0.8464909387740521), - FX16_CONST(0.533701001807153), FX16_CONST(0.8456732469872991), - FX16_CONST(0.5349976198870972), FX16_CONST(0.8448535652497071), - FX16_CONST(0.5362929790659632), FX16_CONST(0.8440318954900664), - FX16_CONST(0.5375870762956454), FX16_CONST(0.8432082396418454), - FX16_CONST(0.5388799085310084), FX16_CONST(0.8423825996431858), - FX16_CONST(0.5401714727298929), FX16_CONST(0.8415549774368984), - FX16_CONST(0.5414617658531234), FX16_CONST(0.8407253749704581), - FX16_CONST(0.5427507848645159), FX16_CONST(0.8398937941959995), - FX16_CONST(0.5440385267308838), FX16_CONST(0.8390602370703127), - FX16_CONST(0.5453249884220465), FX16_CONST(0.8382247055548381), - FX16_CONST(0.5466101669108349), FX16_CONST(0.8373872016156619), - FX16_CONST(0.5478940591731002), FX16_CONST(0.836547727223512), - FX16_CONST(0.5491766621877197), FX16_CONST(0.8357062843537526), - FX16_CONST(0.5504579729366048), FX16_CONST(0.83486287498638), - FX16_CONST(0.5517379884047073), FX16_CONST(0.8340175011060181), - FX16_CONST(0.5530167055800275), FX16_CONST(0.8331701647019132), - FX16_CONST(0.55429412145362), FX16_CONST(0.8323208677679297), - FX16_CONST(0.5555702330196022), FX16_CONST(0.8314696123025452), - FX16_CONST(0.5568450372751601), FX16_CONST(0.8306164003088463), - FX16_CONST(0.5581185312205561), FX16_CONST(0.829761233794523), - FX16_CONST(0.5593907118591361), FX16_CONST(0.8289041147718649), - FX16_CONST(0.560661576197336), FX16_CONST(0.8280450452577558), - FX16_CONST(0.5619311212446894), FX16_CONST(0.8271840272736691), - FX16_CONST(0.5631993440138341), FX16_CONST(0.8263210628456635), - FX16_CONST(0.5644662415205194), FX16_CONST(0.8254561540043776), - FX16_CONST(0.5657318107836131), FX16_CONST(0.8245893027850253), - FX16_CONST(0.5669960488251087), FX16_CONST(0.8237205112273914), - FX16_CONST(0.5682589526701315), FX16_CONST(0.8228497813758264), - FX16_CONST(0.5695205193469471), FX16_CONST(0.8219771152792416), - FX16_CONST(0.5707807458869673), FX16_CONST(0.8211025149911046), - FX16_CONST(0.572039629324757), FX16_CONST(0.8202259825694347), - FX16_CONST(0.5732971666980422), FX16_CONST(0.819347520076797), - FX16_CONST(0.5745533550477158), FX16_CONST(0.8184671295802987), - FX16_CONST(0.5758081914178453), FX16_CONST(0.8175848131515837), - FX16_CONST(0.5770616728556794), FX16_CONST(0.8167005728668278), - FX16_CONST(0.5783137964116556), FX16_CONST(0.8158144108067338), - FX16_CONST(0.5795645591394056), FX16_CONST(0.8149263290565266), - FX16_CONST(0.5808139580957645), FX16_CONST(0.8140363297059484), - FX16_CONST(0.5820619903407754), FX16_CONST(0.8131444148492536), - FX16_CONST(0.5833086529376983), FX16_CONST(0.812250586585204), - FX16_CONST(0.5845539429530153), FX16_CONST(0.8113548470170637), - FX16_CONST(0.5857978574564389), FX16_CONST(0.8104571982525948), - FX16_CONST(0.587040393520918), FX16_CONST(0.8095576424040513), - FX16_CONST(0.5882815482226452), FX16_CONST(0.808656181588175), - FX16_CONST(0.5895213186410639), FX16_CONST(0.8077528179261904), - FX16_CONST(0.5907597018588742), FX16_CONST(0.8068475535437993), - FX16_CONST(0.591996694962041), FX16_CONST(0.8059403905711763), - FX16_CONST(0.5932322950397998), FX16_CONST(0.8050313311429637), - FX16_CONST(0.5944664991846644), FX16_CONST(0.8041203773982657), - FX16_CONST(0.5956993044924334), FX16_CONST(0.8032075314806449), - FX16_CONST(0.5969307080621964), FX16_CONST(0.8022927955381157), - FX16_CONST(0.5981607069963424), FX16_CONST(0.8013761717231402), - FX16_CONST(0.5993892984005645), FX16_CONST(0.8004576621926228), - FX16_CONST(0.600616479383869), FX16_CONST(0.799537269107905), - FX16_CONST(0.60184224705858), FX16_CONST(0.7986149946347609), - FX16_CONST(0.6030665985403482), FX16_CONST(0.7976908409433912), - FX16_CONST(0.604289530948156), FX16_CONST(0.7967648102084188), - FX16_CONST(0.6055110414043255), FX16_CONST(0.7958369046088836), - FX16_CONST(0.6067311270345245), FX16_CONST(0.794907126328237), - FX16_CONST(0.6079497849677736), FX16_CONST(0.7939754775543372), - FX16_CONST(0.6091670123364532), FX16_CONST(0.7930419604794436), - FX16_CONST(0.6103828062763095), FX16_CONST(0.7921065773002124), - FX16_CONST(0.6115971639264619), FX16_CONST(0.7911693302176902), - FX16_CONST(0.6128100824294097), FX16_CONST(0.79023022143731), - FX16_CONST(0.6140215589310385), FX16_CONST(0.7892892531688857), - FX16_CONST(0.6152315905806268), FX16_CONST(0.7883464276266062), - FX16_CONST(0.6164401745308536), FX16_CONST(0.7874017470290314), - FX16_CONST(0.6176473079378039), FX16_CONST(0.7864552135990858), - FX16_CONST(0.6188529879609763), FX16_CONST(0.7855068295640539), - FX16_CONST(0.6200572117632891), FX16_CONST(0.7845565971555752), - FX16_CONST(0.6212599765110876), FX16_CONST(0.7836045186096382), - FX16_CONST(0.62246127937415), FX16_CONST(0.7826505961665757), - FX16_CONST(0.6236611175256945), FX16_CONST(0.7816948320710594), - FX16_CONST(0.6248594881423863), FX16_CONST(0.7807372285720945), - FX16_CONST(0.6260563884043435), FX16_CONST(0.7797777879230146), - FX16_CONST(0.6272518154951441), FX16_CONST(0.778816512381476), - FX16_CONST(0.6284457666018327), FX16_CONST(0.7778534042094531), - FX16_CONST(0.629638238914927), FX16_CONST(0.7768884656732324), - FX16_CONST(0.6308292296284245), FX16_CONST(0.7759216990434077), - FX16_CONST(0.6320187359398091), FX16_CONST(0.7749531065948739), - FX16_CONST(0.6332067550500572), FX16_CONST(0.7739826906068229), - FX16_CONST(0.6343932841636455), FX16_CONST(0.773010453362737), - FX16_CONST(0.6355783204885561), FX16_CONST(0.7720363971503845), - FX16_CONST(0.6367618612362842), FX16_CONST(0.7710605242618138), - FX16_CONST(0.637943903621844), FX16_CONST(0.7700828369933479), - FX16_CONST(0.6391244448637757), FX16_CONST(0.7691033376455797), - FX16_CONST(0.6403034821841517), FX16_CONST(0.7681220285233654), - FX16_CONST(0.641481012808583), FX16_CONST(0.7671389119358204), - FX16_CONST(0.6426570339662269), FX16_CONST(0.7661539901963129), - FX16_CONST(0.6438315428897914), FX16_CONST(0.765167265622459), - FX16_CONST(0.6450045368155439), FX16_CONST(0.7641787405361167), - FX16_CONST(0.6461760129833163), FX16_CONST(0.7631884172633814), - FX16_CONST(0.6473459686365121), FX16_CONST(0.762196298134579), - FX16_CONST(0.6485144010221124), FX16_CONST(0.7612023854842618), - FX16_CONST(0.6496813073906832), FX16_CONST(0.7602066816512024), - FX16_CONST(0.6508466849963809), FX16_CONST(0.759209188978388), - FX16_CONST(0.6520105310969595), FX16_CONST(0.7582099098130153), - FX16_CONST(0.6531728429537768), FX16_CONST(0.7572088465064846), - FX16_CONST(0.6543336178318004), FX16_CONST(0.7562060014143945), - FX16_CONST(0.6554928529996153), FX16_CONST(0.7552013768965365), - FX16_CONST(0.6566505457294289), FX16_CONST(0.7541949753168892), - FX16_CONST(0.6578066932970786), FX16_CONST(0.7531867990436125), - FX16_CONST(0.6589612929820373), FX16_CONST(0.7521768504490427), - FX16_CONST(0.6601143420674205), FX16_CONST(0.7511651319096864), - FX16_CONST(0.6612658378399923), FX16_CONST(0.7501516458062151), - FX16_CONST(0.6624157775901718), FX16_CONST(0.7491363945234594), - FX16_CONST(0.6635641586120398), FX16_CONST(0.7481193804504036), - FX16_CONST(0.6647109782033448), FX16_CONST(0.7471006059801801), - FX16_CONST(0.6658562336655097), FX16_CONST(0.7460800735100638), - FX16_CONST(0.6669999223036375), FX16_CONST(0.745057785441466), - FX16_CONST(0.6681420414265185), FX16_CONST(0.7440337441799293), - FX16_CONST(0.669282588346636), FX16_CONST(0.7430079521351217), - FX16_CONST(0.6704215603801731), FX16_CONST(0.7419804117208311), - FX16_CONST(0.6715589548470183), FX16_CONST(0.7409511253549592), - FX16_CONST(0.6726947690707729), FX16_CONST(0.7399200954595162), - FX16_CONST(0.673829000378756), FX16_CONST(0.7388873244606151), - FX16_CONST(0.6749616461020119), FX16_CONST(0.737852814788466), - FX16_CONST(0.6760927035753159), FX16_CONST(0.7368165688773698), - FX16_CONST(0.6772221701371803), FX16_CONST(0.7357785891657136), - FX16_CONST(0.6783500431298615), FX16_CONST(0.7347388780959635), - FX16_CONST(0.679476319899365), FX16_CONST(0.7336974381146603), - FX16_CONST(0.680600997795453), FX16_CONST(0.7326542716724128), - FX16_CONST(0.6817240741716497), FX16_CONST(0.7316093812238926), - FX16_CONST(0.6828455463852481), FX16_CONST(0.7305627692278276), - FX16_CONST(0.6839654117973154), FX16_CONST(0.729514438146997), - FX16_CONST(0.6850836677727004), FX16_CONST(0.7284643904482252), - FX16_CONST(0.6862003116800386), FX16_CONST(0.7274126286023758), - FX16_CONST(0.687315340891759), FX16_CONST(0.726359155084346), - FX16_CONST(0.6884287527840904), FX16_CONST(0.7253039723730608), - FX16_CONST(0.6895405447370668), FX16_CONST(0.724247082951467), - FX16_CONST(0.6906507141345346), FX16_CONST(0.7231884893065275), - FX16_CONST(0.6917592583641577), FX16_CONST(0.7221281939292153), - FX16_CONST(0.6928661748174246), FX16_CONST(0.7210661993145081), - FX16_CONST(0.6939714608896539), FX16_CONST(0.7200025079613817), - FX16_CONST(0.6950751139800009), FX16_CONST(0.7189371223728045), - FX16_CONST(0.696177131491463), FX16_CONST(0.7178700450557317), - FX16_CONST(0.6972775108308865), FX16_CONST(0.7168012785210995), - FX16_CONST(0.6983762494089728), FX16_CONST(0.7157308252838187), - FX16_CONST(0.6994733446402838), FX16_CONST(0.7146586878627691), - FX16_CONST(0.7005687939432483), FX16_CONST(0.7135848687807935), - FX16_CONST(0.7016625947401685), FX16_CONST(0.7125093705646924), - FX16_CONST(0.7027547444572253), FX16_CONST(0.7114321957452164), - FX16_CONST(0.7038452405244849), FX16_CONST(0.7103533468570624), - FX16_CONST(0.7049340803759049), FX16_CONST(0.7092728264388657), - FX16_CONST(0.7060212614493397), FX16_CONST(0.7081906370331954), - FX16_CONST(0.7071067811865476), FX16_CONST(0.7071067811865476), - FX16_CONST(0.7081906370331954), FX16_CONST(0.7060212614493397), - FX16_CONST(0.7092728264388657), FX16_CONST(0.704934080375905), - FX16_CONST(0.7103533468570624), FX16_CONST(0.7038452405244849), - FX16_CONST(0.7114321957452164), FX16_CONST(0.7027547444572253), - FX16_CONST(0.7125093705646923), FX16_CONST(0.7016625947401685), - FX16_CONST(0.7135848687807935), FX16_CONST(0.7005687939432484), - FX16_CONST(0.7146586878627691), FX16_CONST(0.6994733446402838), - FX16_CONST(0.7157308252838186), FX16_CONST(0.6983762494089729), - FX16_CONST(0.7168012785210994), FX16_CONST(0.6972775108308866), - FX16_CONST(0.7178700450557317), FX16_CONST(0.696177131491463), - FX16_CONST(0.7189371223728044), FX16_CONST(0.6950751139800009), - FX16_CONST(0.7200025079613817), FX16_CONST(0.693971460889654), - FX16_CONST(0.7210661993145081), FX16_CONST(0.6928661748174247), - FX16_CONST(0.7221281939292153), FX16_CONST(0.6917592583641577), - FX16_CONST(0.7231884893065273), FX16_CONST(0.6906507141345346), - FX16_CONST(0.7242470829514669), FX16_CONST(0.6895405447370669), - FX16_CONST(0.7253039723730608), FX16_CONST(0.6884287527840904), - FX16_CONST(0.726359155084346), FX16_CONST(0.687315340891759), - FX16_CONST(0.7274126286023758), FX16_CONST(0.6862003116800386), - FX16_CONST(0.7284643904482252), FX16_CONST(0.6850836677727004), - FX16_CONST(0.7295144381469969), FX16_CONST(0.6839654117973155), - FX16_CONST(0.7305627692278276), FX16_CONST(0.6828455463852481), - FX16_CONST(0.7316093812238926), FX16_CONST(0.6817240741716498), - FX16_CONST(0.7326542716724128), FX16_CONST(0.680600997795453), - FX16_CONST(0.7336974381146603), FX16_CONST(0.679476319899365), - FX16_CONST(0.7347388780959635), FX16_CONST(0.6783500431298615), - FX16_CONST(0.7357785891657135), FX16_CONST(0.6772221701371804), - FX16_CONST(0.7368165688773698), FX16_CONST(0.676092703575316), - FX16_CONST(0.737852814788466), FX16_CONST(0.674961646102012), - FX16_CONST(0.7388873244606151), FX16_CONST(0.6738290003787561), - FX16_CONST(0.7399200954595161), FX16_CONST(0.672694769070773), - FX16_CONST(0.7409511253549591), FX16_CONST(0.6715589548470183), - FX16_CONST(0.741980411720831), FX16_CONST(0.6704215603801731), - FX16_CONST(0.7430079521351217), FX16_CONST(0.669282588346636), - FX16_CONST(0.7440337441799293), FX16_CONST(0.6681420414265186), - FX16_CONST(0.745057785441466), FX16_CONST(0.6669999223036375), - FX16_CONST(0.7460800735100637), FX16_CONST(0.6658562336655097), - FX16_CONST(0.7471006059801801), FX16_CONST(0.6647109782033449), - FX16_CONST(0.7481193804504035), FX16_CONST(0.6635641586120399), - FX16_CONST(0.7491363945234593), FX16_CONST(0.6624157775901718), - FX16_CONST(0.750151645806215), FX16_CONST(0.6612658378399923), - FX16_CONST(0.7511651319096864), FX16_CONST(0.6601143420674205), - FX16_CONST(0.7521768504490427), FX16_CONST(0.6589612929820373), - FX16_CONST(0.7531867990436125), FX16_CONST(0.6578066932970787), - FX16_CONST(0.7541949753168892), FX16_CONST(0.656650545729429), - FX16_CONST(0.7552013768965365), FX16_CONST(0.6554928529996155), - FX16_CONST(0.7562060014143945), FX16_CONST(0.6543336178318006), - FX16_CONST(0.7572088465064846), FX16_CONST(0.6531728429537769), - FX16_CONST(0.7582099098130153), FX16_CONST(0.6520105310969595), - FX16_CONST(0.759209188978388), FX16_CONST(0.650846684996381), - FX16_CONST(0.7602066816512024), FX16_CONST(0.6496813073906832), - FX16_CONST(0.7612023854842618), FX16_CONST(0.6485144010221126), - FX16_CONST(0.7621962981345789), FX16_CONST(0.6473459686365121), - FX16_CONST(0.7631884172633813), FX16_CONST(0.6461760129833164), - FX16_CONST(0.7641787405361167), FX16_CONST(0.645004536815544), - FX16_CONST(0.765167265622459), FX16_CONST(0.6438315428897915), - FX16_CONST(0.7661539901963128), FX16_CONST(0.6426570339662269), - FX16_CONST(0.7671389119358204), FX16_CONST(0.6414810128085832), - FX16_CONST(0.7681220285233653), FX16_CONST(0.6403034821841517), - FX16_CONST(0.7691033376455796), FX16_CONST(0.6391244448637757), - FX16_CONST(0.7700828369933479), FX16_CONST(0.6379439036218442), - FX16_CONST(0.7710605242618138), FX16_CONST(0.6367618612362842), - FX16_CONST(0.7720363971503844), FX16_CONST(0.6355783204885562), - FX16_CONST(0.7730104533627369), FX16_CONST(0.6343932841636455), - FX16_CONST(0.7739826906068228), FX16_CONST(0.6332067550500572), - FX16_CONST(0.7749531065948738), FX16_CONST(0.6320187359398091), - FX16_CONST(0.7759216990434076), FX16_CONST(0.6308292296284246), - FX16_CONST(0.7768884656732324), FX16_CONST(0.6296382389149271), - FX16_CONST(0.777853404209453), FX16_CONST(0.6284457666018327), - FX16_CONST(0.7788165123814759), FX16_CONST(0.6272518154951442), - FX16_CONST(0.7797777879230144), FX16_CONST(0.6260563884043435), - FX16_CONST(0.7807372285720945), FX16_CONST(0.6248594881423865), - FX16_CONST(0.7816948320710594), FX16_CONST(0.6236611175256946), - FX16_CONST(0.7826505961665757), FX16_CONST(0.6224612793741501), - FX16_CONST(0.7836045186096382), FX16_CONST(0.6212599765110877), - FX16_CONST(0.7845565971555752), FX16_CONST(0.6200572117632892), - FX16_CONST(0.7855068295640539), FX16_CONST(0.6188529879609763), - FX16_CONST(0.7864552135990858), FX16_CONST(0.617647307937804), - FX16_CONST(0.7874017470290313), FX16_CONST(0.6164401745308536), - FX16_CONST(0.7883464276266062), FX16_CONST(0.6152315905806268), - FX16_CONST(0.7892892531688857), FX16_CONST(0.6140215589310385), - FX16_CONST(0.79023022143731), FX16_CONST(0.6128100824294097), - FX16_CONST(0.7911693302176901), FX16_CONST(0.611597163926462), - FX16_CONST(0.7921065773002123), FX16_CONST(0.6103828062763095), - FX16_CONST(0.7930419604794436), FX16_CONST(0.6091670123364532), - FX16_CONST(0.7939754775543372), FX16_CONST(0.6079497849677737), - FX16_CONST(0.794907126328237), FX16_CONST(0.6067311270345245), - FX16_CONST(0.7958369046088835), FX16_CONST(0.6055110414043255), - FX16_CONST(0.7967648102084187), FX16_CONST(0.6042895309481561), - FX16_CONST(0.797690840943391), FX16_CONST(0.6030665985403483), - FX16_CONST(0.7986149946347608), FX16_CONST(0.60184224705858), - FX16_CONST(0.799537269107905), FX16_CONST(0.600616479383869), - FX16_CONST(0.8004576621926227), FX16_CONST(0.5993892984005645), - FX16_CONST(0.8013761717231401), FX16_CONST(0.5981607069963424), - FX16_CONST(0.8022927955381157), FX16_CONST(0.5969307080621965), - FX16_CONST(0.8032075314806448), FX16_CONST(0.5956993044924335), - FX16_CONST(0.8041203773982657), FX16_CONST(0.5944664991846645), - FX16_CONST(0.8050313311429637), FX16_CONST(0.5932322950397998), - FX16_CONST(0.8059403905711763), FX16_CONST(0.591996694962041), - FX16_CONST(0.8068475535437992), FX16_CONST(0.5907597018588743), - FX16_CONST(0.8077528179261902), FX16_CONST(0.5895213186410639), - FX16_CONST(0.808656181588175), FX16_CONST(0.5882815482226453), - FX16_CONST(0.8095576424040513), FX16_CONST(0.5870403935209181), - FX16_CONST(0.8104571982525948), FX16_CONST(0.5857978574564389), - FX16_CONST(0.8113548470170637), FX16_CONST(0.5845539429530153), - FX16_CONST(0.8122505865852039), FX16_CONST(0.5833086529376983), - FX16_CONST(0.8131444148492536), FX16_CONST(0.5820619903407755), - FX16_CONST(0.8140363297059483), FX16_CONST(0.5808139580957645), - FX16_CONST(0.8149263290565266), FX16_CONST(0.5795645591394057), - FX16_CONST(0.8158144108067338), FX16_CONST(0.5783137964116556), - FX16_CONST(0.8167005728668278), FX16_CONST(0.5770616728556796), - FX16_CONST(0.8175848131515837), FX16_CONST(0.5758081914178453), - FX16_CONST(0.8184671295802987), FX16_CONST(0.5745533550477158), - FX16_CONST(0.8193475200767969), FX16_CONST(0.5732971666980423), - FX16_CONST(0.8202259825694347), FX16_CONST(0.572039629324757), - FX16_CONST(0.8211025149911046), FX16_CONST(0.5707807458869674), - FX16_CONST(0.8219771152792416), FX16_CONST(0.5695205193469473), - FX16_CONST(0.8228497813758263), FX16_CONST(0.5682589526701315), - FX16_CONST(0.8237205112273913), FX16_CONST(0.5669960488251087), - FX16_CONST(0.8245893027850253), FX16_CONST(0.5657318107836132), - FX16_CONST(0.8254561540043774), FX16_CONST(0.5644662415205195), - FX16_CONST(0.8263210628456635), FX16_CONST(0.5631993440138341), - FX16_CONST(0.8271840272736691), FX16_CONST(0.5619311212446895), - FX16_CONST(0.8280450452577558), FX16_CONST(0.560661576197336), - FX16_CONST(0.8289041147718649), FX16_CONST(0.5593907118591361), - FX16_CONST(0.829761233794523), FX16_CONST(0.5581185312205561), - FX16_CONST(0.8306164003088462), FX16_CONST(0.5568450372751601), - FX16_CONST(0.8314696123025452), FX16_CONST(0.5555702330196023), - FX16_CONST(0.8323208677679297), FX16_CONST(0.5542941214536201), - FX16_CONST(0.8331701647019132), FX16_CONST(0.5530167055800276), - FX16_CONST(0.8340175011060181), FX16_CONST(0.5517379884047074), - FX16_CONST(0.83486287498638), FX16_CONST(0.5504579729366048), - FX16_CONST(0.8357062843537526), FX16_CONST(0.5491766621877198), - FX16_CONST(0.8365477272235119), FX16_CONST(0.5478940591731002), - FX16_CONST(0.8373872016156619), FX16_CONST(0.5466101669108349), - FX16_CONST(0.838224705554838), FX16_CONST(0.5453249884220465), - FX16_CONST(0.8390602370703126), FX16_CONST(0.5440385267308839), - FX16_CONST(0.8398937941959994), FX16_CONST(0.542750784864516), - FX16_CONST(0.840725374970458), FX16_CONST(0.5414617658531236), - FX16_CONST(0.8415549774368983), FX16_CONST(0.540171472729893), - FX16_CONST(0.8423825996431858), FX16_CONST(0.5388799085310084), - FX16_CONST(0.8432082396418454), FX16_CONST(0.5375870762956455), - FX16_CONST(0.8440318954900664), FX16_CONST(0.5362929790659632), - FX16_CONST(0.844853565249707), FX16_CONST(0.5349976198870973), - FX16_CONST(0.8456732469872991), FX16_CONST(0.533701001807153), - FX16_CONST(0.8464909387740521), FX16_CONST(0.532403127877198), - FX16_CONST(0.8473066386858583), FX16_CONST(0.531104001151255), - FX16_CONST(0.8481203448032971), FX16_CONST(0.5298036246862948), - FX16_CONST(0.8489320552116396), FX16_CONST(0.5285020015422285), - FX16_CONST(0.8497417680008524), FX16_CONST(0.5271991347819014), - FX16_CONST(0.8505494812656034), FX16_CONST(0.5258950274710847), - FX16_CONST(0.8513551931052652), FX16_CONST(0.5245896826784688), - FX16_CONST(0.8521589016239198), FX16_CONST(0.5232831034756564), - FX16_CONST(0.8529606049303636), FX16_CONST(0.5219752929371544), - FX16_CONST(0.8537603011381113), FX16_CONST(0.5206662541403673), - FX16_CONST(0.8545579883654005), FX16_CONST(0.5193559901655895), - FX16_CONST(0.855353664735196), FX16_CONST(0.5180445040959993), - FX16_CONST(0.8561473283751945), FX16_CONST(0.51673179901765), - FX16_CONST(0.8569389774178287), FX16_CONST(0.5154178780194631), - FX16_CONST(0.8577286100002721), FX16_CONST(0.5141027441932217), - FX16_CONST(0.8585162242644427), FX16_CONST(0.5127864006335631), - FX16_CONST(0.8593018183570084), FX16_CONST(0.5114688504379705), - FX16_CONST(0.8600853904293903), FX16_CONST(0.5101500967067667), - FX16_CONST(0.8608669386377673), FX16_CONST(0.508830142543107), - FX16_CONST(0.8616464611430813), FX16_CONST(0.5075089910529709), - FX16_CONST(0.8624239561110405), FX16_CONST(0.5061866453451553), - FX16_CONST(0.8631994217121242), FX16_CONST(0.5048631085312675), - FX16_CONST(0.8639728561215867), FX16_CONST(0.5035383837257176), - FX16_CONST(0.8647442575194624), FX16_CONST(0.5022124740457109), - FX16_CONST(0.865513624090569), FX16_CONST(0.5008853826112409), - FX16_CONST(0.866280954024513), FX16_CONST(0.49955711254508184), - FX16_CONST(0.8670462455156926), FX16_CONST(0.49822766697278187), - FX16_CONST(0.8678094967633032), FX16_CONST(0.49689704902265464), - FX16_CONST(0.8685707059713409), FX16_CONST(0.4955652618257725), - FX16_CONST(0.8693298713486067), FX16_CONST(0.49423230851595973), - FX16_CONST(0.8700869911087113), FX16_CONST(0.4928981922297841), - FX16_CONST(0.8708420634700789), FX16_CONST(0.49156291610655006), - FX16_CONST(0.8715950866559511), FX16_CONST(0.4902264832882911), - FX16_CONST(0.8723460588943914), FX16_CONST(0.4888888969197632), - FX16_CONST(0.8730949784182901), FX16_CONST(0.48755016014843605), - FX16_CONST(0.8738418434653668), FX16_CONST(0.48621027612448653), - FX16_CONST(0.8745866522781761), FX16_CONST(0.4848692480007911), - FX16_CONST(0.8753294031041108), FX16_CONST(0.48352707893291874), - FX16_CONST(0.8760700941954066), FX16_CONST(0.48218377207912283), - FX16_CONST(0.8768087238091458), FX16_CONST(0.4808393306003339), - FX16_CONST(0.8775452902072612), FX16_CONST(0.479493757660153), - FX16_CONST(0.8782797916565415), FX16_CONST(0.4781470564248431), - FX16_CONST(0.8790122264286334), FX16_CONST(0.47679923006332225), - FX16_CONST(0.8797425928000474), FX16_CONST(0.47545028174715587), - FX16_CONST(0.8804708890521608), FX16_CONST(0.47410021465055), - FX16_CONST(0.881197113471222), FX16_CONST(0.4727490319503429), - FX16_CONST(0.8819212643483549), FX16_CONST(0.4713967368259978), - FX16_CONST(0.8826433399795628), FX16_CONST(0.4700433324595956), - FX16_CONST(0.8833633386657316), FX16_CONST(0.46868882203582796), - FX16_CONST(0.884081258712635), FX16_CONST(0.4673332087419885), - FX16_CONST(0.8847970984309378), FX16_CONST(0.4659764957679661), - FX16_CONST(0.8855108561362), FX16_CONST(0.4646186863062378), - FX16_CONST(0.8862225301488806), FX16_CONST(0.46325978355186026), - FX16_CONST(0.8869321187943421), FX16_CONST(0.46189979070246284), - FX16_CONST(0.8876396204028539), FX16_CONST(0.46053871095824), - FX16_CONST(0.8883450333095964), FX16_CONST(0.45917654752194415), - FX16_CONST(0.8890483558546646), FX16_CONST(0.4578133035988773), - FX16_CONST(0.8897495863830729), FX16_CONST(0.45644898239688386), - FX16_CONST(0.8904487232447579), FX16_CONST(0.45508358712634384), - FX16_CONST(0.8911457647945832), FX16_CONST(0.4537171210001639), - FX16_CONST(0.8918407093923427), FX16_CONST(0.452349587233771), - FX16_CONST(0.8925335554027647), FX16_CONST(0.4509809890451038), - FX16_CONST(0.8932243011955153), FX16_CONST(0.4496113296546066), - FX16_CONST(0.8939129451452033), FX16_CONST(0.44824061228522), - FX16_CONST(0.8945994856313826), FX16_CONST(0.4468688401623743), - FX16_CONST(0.8952839210385576), FX16_CONST(0.44549601651398174), - FX16_CONST(0.8959662497561851), FX16_CONST(0.44412214457042926), - FX16_CONST(0.8966464701786802), FX16_CONST(0.44274722756457013), - FX16_CONST(0.8973245807054183), FX16_CONST(0.4413712687317166), - FX16_CONST(0.8980005797407399), FX16_CONST(0.43999427130963326), - FX16_CONST(0.8986744656939538), FX16_CONST(0.4386162385385277), - FX16_CONST(0.8993462369793415), FX16_CONST(0.4372371736610442), - FX16_CONST(0.9000158920161603), FX16_CONST(0.4358570799222555), - FX16_CONST(0.9006834292286469), FX16_CONST(0.4344759605696557), - FX16_CONST(0.901348847046022), FX16_CONST(0.433093818853152), - FX16_CONST(0.9020121439024931), FX16_CONST(0.43171065802505737), - FX16_CONST(0.9026733182372588), FX16_CONST(0.4303264813400826), - FX16_CONST(0.9033323684945118), FX16_CONST(0.42894129205532955), - FX16_CONST(0.9039892931234433), FX16_CONST(0.4275550934302822), - FX16_CONST(0.9046440905782462), FX16_CONST(0.4261678887267996), - FX16_CONST(0.9052967593181188), FX16_CONST(0.4247796812091088), - FX16_CONST(0.9059472978072685), FX16_CONST(0.4233904741437961), - FX16_CONST(0.9065957045149153), FX16_CONST(0.4220002707997998), - FX16_CONST(0.9072419779152959), FX16_CONST(0.4206090744484025), - FX16_CONST(0.9078861164876663), FX16_CONST(0.41921688836322396), - FX16_CONST(0.9085281187163061), FX16_CONST(0.4178237158202124), - FX16_CONST(0.9091679830905223), FX16_CONST(0.4164295600976373), - FX16_CONST(0.9098057081046522), FX16_CONST(0.41503442447608163), - FX16_CONST(0.9104412922580671), FX16_CONST(0.41363831223843456), - FX16_CONST(0.9110747340551762), FX16_CONST(0.412241226669883), - FX16_CONST(0.9117060320054299), FX16_CONST(0.4108431710579039), - FX16_CONST(0.9123351846233227), FX16_CONST(0.40944414869225765), - FX16_CONST(0.9129621904283981), FX16_CONST(0.40804416286497874), - FX16_CONST(0.9135870479452508), FX16_CONST(0.40664321687036914), - FX16_CONST(0.9142097557035307), FX16_CONST(0.40524131400498986), - FX16_CONST(0.9148303122379461), FX16_CONST(0.40383845756765413), - FX16_CONST(0.9154487160882678), FX16_CONST(0.40243465085941854), - FX16_CONST(0.9160649657993316), FX16_CONST(0.4010298971835758), - FX16_CONST(0.9166790599210427), FX16_CONST(0.3996241998456468), - FX16_CONST(0.9172909970083779), FX16_CONST(0.3982175621533736), - FX16_CONST(0.9179007756213904), FX16_CONST(0.3968099874167104), - FX16_CONST(0.9185083943252123), FX16_CONST(0.3954014789478163), - FX16_CONST(0.9191138516900578), FX16_CONST(0.3939920400610481), - FX16_CONST(0.9197171462912274), FX16_CONST(0.3925816740729515), - FX16_CONST(0.9203182767091105), FX16_CONST(0.391170384302254), - FX16_CONST(0.9209172415291894), FX16_CONST(0.3897581740698564), - FX16_CONST(0.9215140393420419), FX16_CONST(0.3883450466988263), - FX16_CONST(0.9221086687433451), FX16_CONST(0.3869310055143887), - FX16_CONST(0.9227011283338785), FX16_CONST(0.385516053843919), - FX16_CONST(0.9232914167195276), FX16_CONST(0.38410019501693504), - FX16_CONST(0.9238795325112867), FX16_CONST(0.38268343236508984), - FX16_CONST(0.9244654743252626), FX16_CONST(0.3812657692221625), - FX16_CONST(0.9250492407826776), FX16_CONST(0.3798472089240511), - FX16_CONST(0.9256308305098727), FX16_CONST(0.3784277548087656), - FX16_CONST(0.9262102421383113), FX16_CONST(0.3770074102164183), - FX16_CONST(0.9267874743045817), FX16_CONST(0.3755861784892173), - FX16_CONST(0.9273625256504011), FX16_CONST(0.374164062971458), - FX16_CONST(0.9279353948226179), FX16_CONST(0.3727410670095158), - FX16_CONST(0.9285060804732156), FX16_CONST(0.3713171939518376), - FX16_CONST(0.9290745812593157), FX16_CONST(0.36989244714893427), - FX16_CONST(0.9296408958431812), FX16_CONST(0.3684668299533723), - FX16_CONST(0.9302050228922191), FX16_CONST(0.36704034571976724), - FX16_CONST(0.9307669610789837), FX16_CONST(0.36561299780477396), - FX16_CONST(0.9313267090811804), FX16_CONST(0.36418478956707984), - FX16_CONST(0.9318842655816681), FX16_CONST(0.3627557243673972), - FX16_CONST(0.9324396292684624), FX16_CONST(0.36132580556845434), - FX16_CONST(0.9329927988347388), FX16_CONST(0.3598950365349883), - FX16_CONST(0.9335437729788362), FX16_CONST(0.35846342063373654), - FX16_CONST(0.9340925504042589), FX16_CONST(0.35703096123343003), - FX16_CONST(0.9346391298196808), FX16_CONST(0.35559766170478396), - FX16_CONST(0.9351835099389475), FX16_CONST(0.3541635254204905), - FX16_CONST(0.9357256894810804), FX16_CONST(0.3527285557552107), - FX16_CONST(0.9362656671702783), FX16_CONST(0.35129275608556715), - FX16_CONST(0.9368034417359216), FX16_CONST(0.34985612979013503), - FX16_CONST(0.937339011912575), FX16_CONST(0.3484186802494345), - FX16_CONST(0.9378723764399899), FX16_CONST(0.3469804108459237), - FX16_CONST(0.9384035340631081), FX16_CONST(0.34554132496398915), - FX16_CONST(0.9389324835320645), FX16_CONST(0.344101425989939), - FX16_CONST(0.9394592236021899), FX16_CONST(0.3426607173119944), - FX16_CONST(0.9399837530340139), FX16_CONST(0.3412192023202824), - FX16_CONST(0.9405060705932683), FX16_CONST(0.33977688440682696), - FX16_CONST(0.9410261750508893), FX16_CONST(0.3383337669655413), - FX16_CONST(0.9415440651830208), FX16_CONST(0.33688985339222005), - FX16_CONST(0.9420597397710173), FX16_CONST(0.33544514708453166), - FX16_CONST(0.9425731976014469), FX16_CONST(0.3339996514420095), - FX16_CONST(0.9430844374660935), FX16_CONST(0.3325533698660442), - FX16_CONST(0.9435934581619604), FX16_CONST(0.33110630575987643), - FX16_CONST(0.9441002584912727), FX16_CONST(0.32965846252858755), - FX16_CONST(0.9446048372614803), FX16_CONST(0.32820984357909266), - FX16_CONST(0.9451071932852606), FX16_CONST(0.3267604523201318), - FX16_CONST(0.9456073253805213), FX16_CONST(0.325310292162263), - FX16_CONST(0.9461052323704033), FX16_CONST(0.32385936651785296), - FX16_CONST(0.9466009130832835), FX16_CONST(0.32240767880107), - FX16_CONST(0.9470943663527772), FX16_CONST(0.3209552324278752), - FX16_CONST(0.9475855910177411), FX16_CONST(0.31950203081601575), - FX16_CONST(0.9480745859222762), FX16_CONST(0.31804807738501506), - FX16_CONST(0.9485613499157303), FX16_CONST(0.31659337555616585), - FX16_CONST(0.9490458818527006), FX16_CONST(0.31513792875252244), - FX16_CONST(0.9495281805930367), FX16_CONST(0.3136817403988916), - FX16_CONST(0.950008245001843), FX16_CONST(0.31222481392182505), - FX16_CONST(0.9504860739494817), FX16_CONST(0.3107671527496115), - FX16_CONST(0.9509616663115751), FX16_CONST(0.3093087603122688), - FX16_CONST(0.9514350209690083), FX16_CONST(0.307849640041535), - FX16_CONST(0.9519061368079322), FX16_CONST(0.3063897953708611), - FX16_CONST(0.9523750127197659), FX16_CONST(0.30492922973540243), - FX16_CONST(0.9528416476011987), FX16_CONST(0.30346794657201137), - FX16_CONST(0.9533060403541938), FX16_CONST(0.3020059493192282), - FX16_CONST(0.9537681898859903), FX16_CONST(0.3005432414172734), - FX16_CONST(0.9542280951091057), FX16_CONST(0.2990798263080405), - FX16_CONST(0.9546857549413383), FX16_CONST(0.2976157074350863), - FX16_CONST(0.9551411683057707), FX16_CONST(0.29615088824362396), - FX16_CONST(0.9555943341307711), FX16_CONST(0.2946853721805143), - FX16_CONST(0.9560452513499964), FX16_CONST(0.2932191626942587), - FX16_CONST(0.956493918902395), FX16_CONST(0.2917522632349894), - FX16_CONST(0.9569403357322089), FX16_CONST(0.29028467725446233), - FX16_CONST(0.9573845007889759), FX16_CONST(0.2888164082060495), - FX16_CONST(0.9578264130275329), FX16_CONST(0.28734745954472957), - FX16_CONST(0.9582660714080177), FX16_CONST(0.2858778347270807), - FX16_CONST(0.9587034748958716), FX16_CONST(0.2844075372112718), - FX16_CONST(0.9591386224618419), FX16_CONST(0.2829365704570554), - FX16_CONST(0.9595715130819845), FX16_CONST(0.28146493792575805), - FX16_CONST(0.9600021457376658), FX16_CONST(0.2799926430802734), - FX16_CONST(0.9604305194155658), FX16_CONST(0.27851968938505306), - FX16_CONST(0.9608566331076797), FX16_CONST(0.27704608030609995), - FX16_CONST(0.9612804858113206), FX16_CONST(0.27557181931095825), - FX16_CONST(0.9617020765291225), FX16_CONST(0.27409690986870633), - FX16_CONST(0.9621214042690416), FX16_CONST(0.272621355449949), - FX16_CONST(0.9625384680443592), FX16_CONST(0.27114515952680807), - FX16_CONST(0.9629532668736839), FX16_CONST(0.2696683255729152), - FX16_CONST(0.963365799780954), FX16_CONST(0.2681908570634032), - FX16_CONST(0.9637760657954398), FX16_CONST(0.2667127574748984), - FX16_CONST(0.9641840639517457), FX16_CONST(0.2652340302855119), - FX16_CONST(0.9645897932898126), FX16_CONST(0.2637546789748315), - FX16_CONST(0.9649932528549203), FX16_CONST(0.2622747070239136), - FX16_CONST(0.9653944416976894), FX16_CONST(0.26079411791527557), - FX16_CONST(0.9657933588740836), FX16_CONST(0.25931291513288635), - FX16_CONST(0.9661900034454126), FX16_CONST(0.25783110216215893), - FX16_CONST(0.9665843744783331), FX16_CONST(0.2563486824899429), - FX16_CONST(0.9669764710448521), FX16_CONST(0.2548656596045146), - FX16_CONST(0.9673662922223285), FX16_CONST(0.25338203699557027), - FX16_CONST(0.9677538370934755), FX16_CONST(0.2518978181542169), - FX16_CONST(0.9681391047463624), FX16_CONST(0.2504130065729653), - FX16_CONST(0.9685220942744173), FX16_CONST(0.24892760574572026), - FX16_CONST(0.9689028047764289), FX16_CONST(0.24744161916777344), - FX16_CONST(0.9692812353565485), FX16_CONST(0.2459550503357946), - FX16_CONST(0.9696573851242924), FX16_CONST(0.2444679027478242), - FX16_CONST(0.970031253194544), FX16_CONST(0.24298017990326398), - FX16_CONST(0.9704028386875555), FX16_CONST(0.2414918853028693), - FX16_CONST(0.9707721407289504), FX16_CONST(0.2400030224487415), - FX16_CONST(0.9711391584497251), FX16_CONST(0.2385135948443185), - FX16_CONST(0.9715038909862518), FX16_CONST(0.23702360599436734), - FX16_CONST(0.9718663374802794), FX16_CONST(0.23553305940497546), - FX16_CONST(0.9722264970789363), FX16_CONST(0.23404195858354346), - FX16_CONST(0.9725843689347322), FX16_CONST(0.23255030703877533), - FX16_CONST(0.9729399522055601), FX16_CONST(0.23105810828067128), - FX16_CONST(0.9732932460546982), FX16_CONST(0.22956536582051887), - FX16_CONST(0.9736442496508119), FX16_CONST(0.2280720831708858), - FX16_CONST(0.9739929621679558), FX16_CONST(0.2265782638456101), - FX16_CONST(0.9743393827855759), FX16_CONST(0.22508391135979278), - FX16_CONST(0.9746835106885107), FX16_CONST(0.22358902922979002), - FX16_CONST(0.9750253450669941), FX16_CONST(0.2220936209732036), - FX16_CONST(0.9753648851166569), FX16_CONST(0.22059769010887365), - FX16_CONST(0.9757021300385286), FX16_CONST(0.21910124015686977), - FX16_CONST(0.976037079039039), FX16_CONST(0.21760427463848367), - FX16_CONST(0.9763697313300211), FX16_CONST(0.2161067970762196), - FX16_CONST(0.9767000861287118), FX16_CONST(0.21460881099378692), - FX16_CONST(0.9770281426577544), FX16_CONST(0.21311031991609136), - FX16_CONST(0.9773539001452), FX16_CONST(0.2116113273692276), - FX16_CONST(0.9776773578245099), FX16_CONST(0.21011183688046972), - FX16_CONST(0.9779985149345571), FX16_CONST(0.20861185197826346), - FX16_CONST(0.9783173707196277), FX16_CONST(0.20711137619221856), - FX16_CONST(0.9786339244294231), FX16_CONST(0.20561041305309932), - FX16_CONST(0.9789481753190622), FX16_CONST(0.204108966092817), - FX16_CONST(0.979260122649082), FX16_CONST(0.2026070388444211), - FX16_CONST(0.9795697656854405), FX16_CONST(0.20110463484209196), - FX16_CONST(0.9798771036995176), FX16_CONST(0.19960175762113105), - FX16_CONST(0.9801821359681173), FX16_CONST(0.19809841071795373), - FX16_CONST(0.9804848617734694), FX16_CONST(0.19659459767008022), - FX16_CONST(0.9807852804032304), FX16_CONST(0.19509032201612833), - FX16_CONST(0.9810833911504866), FX16_CONST(0.19358558729580375), - FX16_CONST(0.9813791933137546), FX16_CONST(0.19208039704989238), - FX16_CONST(0.9816726861969831), FX16_CONST(0.1905747548202528), - FX16_CONST(0.9819638691095552), FX16_CONST(0.18906866414980628), - FX16_CONST(0.9822527413662894), FX16_CONST(0.18756212858252974), - FX16_CONST(0.9825393022874412), FX16_CONST(0.18605515166344663), - FX16_CONST(0.9828235511987052), FX16_CONST(0.18454773693861964), - FX16_CONST(0.9831054874312163), FX16_CONST(0.18303988795514106), - FX16_CONST(0.9833851103215512), FX16_CONST(0.18153160826112513), - FX16_CONST(0.9836624192117303), FX16_CONST(0.18002290140569951), - FX16_CONST(0.9839374134492189), FX16_CONST(0.1785137709389976), - FX16_CONST(0.984210092386929), FX16_CONST(0.17700422041214886), - FX16_CONST(0.9844804553832209), FX16_CONST(0.1754942533772714), - FX16_CONST(0.9847485018019042), FX16_CONST(0.17398387338746385), - FX16_CONST(0.9850142310122398), FX16_CONST(0.17247308399679603), - FX16_CONST(0.9852776423889412), FX16_CONST(0.17096188876030136), - FX16_CONST(0.9855387353121761), FX16_CONST(0.16945029123396793), - FX16_CONST(0.9857975091675674), FX16_CONST(0.16793829497473123), - FX16_CONST(0.9860539633461954), FX16_CONST(0.16642590354046422), - FX16_CONST(0.9863080972445987), FX16_CONST(0.1649131204899701), - FX16_CONST(0.9865599102647754), FX16_CONST(0.16339994938297323), - FX16_CONST(0.9868094018141854), FX16_CONST(0.16188639378011188), - FX16_CONST(0.987056571305751), FX16_CONST(0.1603724572429284), - FX16_CONST(0.9873014181578584), FX16_CONST(0.1588581433338614), - FX16_CONST(0.9875439417943592), FX16_CONST(0.15734345561623828), - FX16_CONST(0.9877841416445722), FX16_CONST(0.15582839765426532), - FX16_CONST(0.9880220171432835), FX16_CONST(0.15431297301302024), - FX16_CONST(0.9882575677307495), FX16_CONST(0.1527971852584434), - FX16_CONST(0.9884907928526966), FX16_CONST(0.15128103795733025), - FX16_CONST(0.9887216919603238), FX16_CONST(0.14976453467732162), - FX16_CONST(0.988950264510303), FX16_CONST(0.1482476789868962), - FX16_CONST(0.989176509964781), FX16_CONST(0.14673047445536175), - FX16_CONST(0.9894004277913804), FX16_CONST(0.14521292465284752), - FX16_CONST(0.9896220174632008), FX16_CONST(0.14369503315029458), - FX16_CONST(0.9898412784588205), FX16_CONST(0.142176803519448), - FX16_CONST(0.9900582102622971), FX16_CONST(0.14065823933284924), - FX16_CONST(0.9902728123631691), FX16_CONST(0.13913934416382628), - FX16_CONST(0.990485084256457), FX16_CONST(0.13762012158648618), - FX16_CONST(0.9906950254426646), FX16_CONST(0.1361005751757062), - FX16_CONST(0.99090263542778), FX16_CONST(0.13458070850712622), - FX16_CONST(0.9911079137232768), FX16_CONST(0.13306052515713918), - FX16_CONST(0.9913108598461154), FX16_CONST(0.13154002870288328), - FX16_CONST(0.9915114733187439), FX16_CONST(0.13001922272223335), - FX16_CONST(0.9917097536690995), FX16_CONST(0.12849811079379322), - FX16_CONST(0.9919057004306093), FX16_CONST(0.12697669649688598), - FX16_CONST(0.9920993131421918), FX16_CONST(0.1254549834115462), - FX16_CONST(0.9922905913482574), FX16_CONST(0.1239329751185122), - FX16_CONST(0.99247953459871), FX16_CONST(0.12241067519921628), - FX16_CONST(0.992666142448948), FX16_CONST(0.12088808723577722), - FX16_CONST(0.9928504144598651), FX16_CONST(0.11936521481099135), - FX16_CONST(0.9930323501978514), FX16_CONST(0.11784206150832502), - FX16_CONST(0.9932119492347945), FX16_CONST(0.11631863091190488), - FX16_CONST(0.9933892111480807), FX16_CONST(0.11479492660651025), - FX16_CONST(0.9935641355205953), FX16_CONST(0.11327095217756436), - FX16_CONST(0.9937367219407246), FX16_CONST(0.11174671121112666), - FX16_CONST(0.9939069700023561), FX16_CONST(0.11022220729388318), - FX16_CONST(0.9940748793048794), FX16_CONST(0.10869744401313867), - FX16_CONST(0.9942404494531879), FX16_CONST(0.10717242495680887), - FX16_CONST(0.9944036800576791), FX16_CONST(0.1056471537134107), - FX16_CONST(0.9945645707342554), FX16_CONST(0.10412163387205473), - FX16_CONST(0.9947231211043257), FX16_CONST(0.10259586902243628), - FX16_CONST(0.9948793307948056), FX16_CONST(0.10106986275482788), - FX16_CONST(0.9950331994381186), FX16_CONST(0.09954361866006944), - FX16_CONST(0.9951847266721968), FX16_CONST(0.09801714032956077), - FX16_CONST(0.9953339121404823), FX16_CONST(0.0964904313552526), - FX16_CONST(0.9954807554919269), FX16_CONST(0.09496349532963906), - FX16_CONST(0.9956252563809943), FX16_CONST(0.09343633584574791), - FX16_CONST(0.9957674144676598), FX16_CONST(0.0919089564971327), - FX16_CONST(0.9959072294174117), FX16_CONST(0.09038136087786501), - FX16_CONST(0.996044700901252), FX16_CONST(0.08885355258252468), - FX16_CONST(0.9961798285956969), FX16_CONST(0.08732553520619223), - FX16_CONST(0.996312612182778), FX16_CONST(0.08579731234443988), - FX16_CONST(0.9964430513500426), FX16_CONST(0.08426888759332413), - FX16_CONST(0.9965711457905548), FX16_CONST(0.0827402645493758), - FX16_CONST(0.9966968952028961), FX16_CONST(0.08121144680959239), - FX16_CONST(0.9968202992911657), FX16_CONST(0.07968243797143013), - FX16_CONST(0.9969413577649822), FX16_CONST(0.07815324163279432), - FX16_CONST(0.997060070339483), FX16_CONST(0.07662386139203162), - FX16_CONST(0.9971764367353262), FX16_CONST(0.07509430084792129), - FX16_CONST(0.9972904566786902), FX16_CONST(0.07356456359966745), - FX16_CONST(0.9974021299012753), FX16_CONST(0.07203465324688942), - FX16_CONST(0.9975114561403035), FX16_CONST(0.07050457338961401), - FX16_CONST(0.9976184351385196), FX16_CONST(0.06897432762826673), - FX16_CONST(0.9977230666441916), FX16_CONST(0.0674439195636641), - FX16_CONST(0.9978253504111116), FX16_CONST(0.06591335279700393), - FX16_CONST(0.997925286198596), FX16_CONST(0.06438263092985741), - FX16_CONST(0.9980228737714862), FX16_CONST(0.06285175756416142), - FX16_CONST(0.9981181129001492), FX16_CONST(0.06132073630220865), - FX16_CONST(0.9982110033604782), FX16_CONST(0.05978957074664001), - FX16_CONST(0.9983015449338929), FX16_CONST(0.05825826450043573), - FX16_CONST(0.9983897374073402), FX16_CONST(0.05672682116690778), - FX16_CONST(0.9984755805732948), FX16_CONST(0.05519524434969003), - FX16_CONST(0.9985590742297593), FX16_CONST(0.05366353765273068), - FX16_CONST(0.9986402181802653), FX16_CONST(0.05213170468028332), - FX16_CONST(0.9987190122338729), FX16_CONST(0.05059974903689934), - FX16_CONST(0.9987954562051724), FX16_CONST(0.049067674327418126), - FX16_CONST(0.9988695499142836), FX16_CONST(0.04753548415695926), - FX16_CONST(0.9989412931868569), FX16_CONST(0.046003182130914644), - FX16_CONST(0.9990106858540734), FX16_CONST(0.044470771854938744), - FX16_CONST(0.9990777277526454), FX16_CONST(0.04293825693494096), - FX16_CONST(0.9991424187248169), FX16_CONST(0.04140564097707671), - FX16_CONST(0.9992047586183639), FX16_CONST(0.039872927587739845), - FX16_CONST(0.9992647472865944), FX16_CONST(0.03834012037355279), - FX16_CONST(0.9993223845883495), FX16_CONST(0.03680722294135899), - FX16_CONST(0.9993776703880028), FX16_CONST(0.03527423889821395), - FX16_CONST(0.9994306045554617), FX16_CONST(0.03374117185137764), - FX16_CONST(0.999481186966167), FX16_CONST(0.032208025408304704), - FX16_CONST(0.9995294175010931), FX16_CONST(0.03067480317663658), - FX16_CONST(0.9995752960467492), FX16_CONST(0.02914150876419374), - FX16_CONST(0.9996188224951786), FX16_CONST(0.02760814577896582), - FX16_CONST(0.9996599967439592), FX16_CONST(0.02607471782910404), - FX16_CONST(0.9996988186962042), FX16_CONST(0.024541228522912264), - FX16_CONST(0.9997352882605617), FX16_CONST(0.02300768146883941), - FX16_CONST(0.9997694053512153), FX16_CONST(0.021474080275469605), - FX16_CONST(0.9998011698878843), FX16_CONST(0.019940428551514598), - FX16_CONST(0.9998305817958234), FX16_CONST(0.01840672990580482), - FX16_CONST(0.9998576410058239), FX16_CONST(0.016872987947281773), - FX16_CONST(0.9998823474542126), FX16_CONST(0.01533920628498822), - FX16_CONST(0.9999047010828529), FX16_CONST(0.013805388528060349), - FX16_CONST(0.9999247018391445), FX16_CONST(0.012271538285719944), - FX16_CONST(0.9999423496760239), FX16_CONST(0.010737659167264572), - FX16_CONST(0.9999576445519639), FX16_CONST(0.00920375478205996), - FX16_CONST(0.9999705864309741), FX16_CONST(0.007669828739531077), - FX16_CONST(0.9999811752826011), FX16_CONST(0.006135884649154515), - FX16_CONST(0.9999894110819284), FX16_CONST(0.004601926120448672), - FX16_CONST(0.9999952938095762), FX16_CONST(0.003067956762966138), - FX16_CONST(0.9999988234517019), FX16_CONST(0.0015339801862847662), - FX16_CONST(1.0), FX16_CONST(6.123233995736766e-17), - FX16_CONST(0.9999988234517019), FX16_CONST(-0.0015339801862846436), - FX16_CONST(0.9999952938095762), FX16_CONST(-0.0030679567629660156), - FX16_CONST(0.9999894110819284), FX16_CONST(-0.00460192612044855), - FX16_CONST(0.9999811752826011), FX16_CONST(-0.006135884649154393), - FX16_CONST(0.9999705864309741), FX16_CONST(-0.007669828739530955), - FX16_CONST(0.9999576445519639), FX16_CONST(-0.009203754782059837), - FX16_CONST(0.9999423496760239), FX16_CONST(-0.010737659167264449), - FX16_CONST(0.9999247018391445), FX16_CONST(-0.012271538285719823), - FX16_CONST(0.9999047010828529), FX16_CONST(-0.013805388528060226), - FX16_CONST(0.9998823474542126), FX16_CONST(-0.015339206284988098), - FX16_CONST(0.9998576410058239), FX16_CONST(-0.01687298794728165), - FX16_CONST(0.9998305817958234), FX16_CONST(-0.018406729905804695), - FX16_CONST(0.9998011698878843), FX16_CONST(-0.019940428551514476), - FX16_CONST(0.9997694053512153), FX16_CONST(-0.021474080275469484), - FX16_CONST(0.9997352882605617), FX16_CONST(-0.02300768146883929), - FX16_CONST(0.9996988186962042), FX16_CONST(-0.024541228522912142), - FX16_CONST(0.9996599967439592), FX16_CONST(-0.026074717829103915), - FX16_CONST(0.9996188224951786), FX16_CONST(-0.027608145778965698), - FX16_CONST(0.9995752960467492), FX16_CONST(-0.029141508764193618), - FX16_CONST(0.9995294175010931), FX16_CONST(-0.03067480317663646), - FX16_CONST(0.999481186966167), FX16_CONST(-0.03220802540830458), - FX16_CONST(0.9994306045554617), FX16_CONST(-0.03374117185137752), - FX16_CONST(0.9993776703880028), FX16_CONST(-0.03527423889821382), - FX16_CONST(0.9993223845883495), FX16_CONST(-0.036807222941358866), - FX16_CONST(0.9992647472865944), FX16_CONST(-0.038340120373552666), - FX16_CONST(0.9992047586183639), FX16_CONST(-0.03987292758773973), - FX16_CONST(0.9991424187248169), FX16_CONST(-0.041405640977076594), - FX16_CONST(0.9990777277526454), FX16_CONST(-0.042938256934940834), - FX16_CONST(0.9990106858540734), FX16_CONST(-0.04447077185493862), - FX16_CONST(0.9989412931868569), FX16_CONST(-0.04600318213091452), - FX16_CONST(0.9988695499142836), FX16_CONST(-0.047535484156959136), - FX16_CONST(0.9987954562051724), FX16_CONST(-0.04906767432741801), - FX16_CONST(0.9987190122338729), FX16_CONST(-0.05059974903689921), - FX16_CONST(0.9986402181802653), FX16_CONST(-0.05213170468028319), - FX16_CONST(0.9985590742297593), FX16_CONST(-0.053663537652730554), - FX16_CONST(0.9984755805732948), FX16_CONST(-0.05519524434968991), - FX16_CONST(0.9983897374073402), FX16_CONST(-0.05672682116690766), - FX16_CONST(0.9983015449338929), FX16_CONST(-0.05825826450043561), - FX16_CONST(0.9982110033604782), FX16_CONST(-0.05978957074663988), - FX16_CONST(0.9981181129001492), FX16_CONST(-0.06132073630220853), - FX16_CONST(0.9980228737714862), FX16_CONST(-0.06285175756416131), - FX16_CONST(0.997925286198596), FX16_CONST(-0.06438263092985728), - FX16_CONST(0.9978253504111116), FX16_CONST(-0.0659133527970038), - FX16_CONST(0.9977230666441916), FX16_CONST(-0.06744391956366398), - FX16_CONST(0.9976184351385196), FX16_CONST(-0.06897432762826661), - FX16_CONST(0.9975114561403035), FX16_CONST(-0.0705045733896139), - FX16_CONST(0.9974021299012753), FX16_CONST(-0.07203465324688929), - FX16_CONST(0.9972904566786902), FX16_CONST(-0.07356456359966733), - FX16_CONST(0.9971764367353262), FX16_CONST(-0.07509430084792117), - FX16_CONST(0.997060070339483), FX16_CONST(-0.0766238613920315), - FX16_CONST(0.9969413577649822), FX16_CONST(-0.07815324163279419), - FX16_CONST(0.9968202992911658), FX16_CONST(-0.07968243797143001), - FX16_CONST(0.9966968952028961), FX16_CONST(-0.08121144680959226), - FX16_CONST(0.9965711457905548), FX16_CONST(-0.08274026454937568), - FX16_CONST(0.9964430513500426), FX16_CONST(-0.084268887593324), - FX16_CONST(0.996312612182778), FX16_CONST(-0.08579731234443976), - FX16_CONST(0.9961798285956969), FX16_CONST(-0.0873255352061921), - FX16_CONST(0.996044700901252), FX16_CONST(-0.08885355258252456), - FX16_CONST(0.9959072294174117), FX16_CONST(-0.09038136087786489), - FX16_CONST(0.9957674144676598), FX16_CONST(-0.09190895649713257), - FX16_CONST(0.9956252563809943), FX16_CONST(-0.09343633584574779), - FX16_CONST(0.9954807554919269), FX16_CONST(-0.09496349532963895), - FX16_CONST(0.9953339121404823), FX16_CONST(-0.09649043135525248), - FX16_CONST(0.9951847266721969), FX16_CONST(-0.09801714032956065), - FX16_CONST(0.9950331994381186), FX16_CONST(-0.09954361866006932), - FX16_CONST(0.9948793307948056), FX16_CONST(-0.10106986275482775), - FX16_CONST(0.9947231211043257), FX16_CONST(-0.10259586902243616), - FX16_CONST(0.9945645707342554), FX16_CONST(-0.1041216338720546), - FX16_CONST(0.9944036800576791), FX16_CONST(-0.10564715371341057), - FX16_CONST(0.9942404494531879), FX16_CONST(-0.10717242495680876), - FX16_CONST(0.9940748793048795), FX16_CONST(-0.10869744401313856), - FX16_CONST(0.9939069700023561), FX16_CONST(-0.11022220729388306), - FX16_CONST(0.9937367219407246), FX16_CONST(-0.11174671121112655), - FX16_CONST(0.9935641355205953), FX16_CONST(-0.11327095217756424), - FX16_CONST(0.9933892111480807), FX16_CONST(-0.11479492660651013), - FX16_CONST(0.9932119492347945), FX16_CONST(-0.11631863091190475), - FX16_CONST(0.9930323501978514), FX16_CONST(-0.1178420615083249), - FX16_CONST(0.9928504144598651), FX16_CONST(-0.11936521481099123), - FX16_CONST(0.992666142448948), FX16_CONST(-0.1208880872357771), - FX16_CONST(0.99247953459871), FX16_CONST(-0.12241067519921615), - FX16_CONST(0.9922905913482574), FX16_CONST(-0.12393297511851208), - FX16_CONST(0.9920993131421918), FX16_CONST(-0.12545498341154607), - FX16_CONST(0.9919057004306093), FX16_CONST(-0.12697669649688587), - FX16_CONST(0.9917097536690995), FX16_CONST(-0.1284981107937931), - FX16_CONST(0.991511473318744), FX16_CONST(-0.13001922272223324), - FX16_CONST(0.9913108598461154), FX16_CONST(-0.13154002870288314), - FX16_CONST(0.9911079137232769), FX16_CONST(-0.13306052515713904), - FX16_CONST(0.99090263542778), FX16_CONST(-0.1345807085071261), - FX16_CONST(0.9906950254426646), FX16_CONST(-0.13610057517570606), - FX16_CONST(0.990485084256457), FX16_CONST(-0.13762012158648607), - FX16_CONST(0.9902728123631691), FX16_CONST(-0.13913934416382617), - FX16_CONST(0.9900582102622971), FX16_CONST(-0.14065823933284913), - FX16_CONST(0.9898412784588205), FX16_CONST(-0.1421768035194479), - FX16_CONST(0.9896220174632009), FX16_CONST(-0.14369503315029444), - FX16_CONST(0.9894004277913804), FX16_CONST(-0.1452129246528474), - FX16_CONST(0.989176509964781), FX16_CONST(-0.14673047445536164), - FX16_CONST(0.988950264510303), FX16_CONST(-0.1482476789868961), - FX16_CONST(0.9887216919603238), FX16_CONST(-0.1497645346773215), - FX16_CONST(0.9884907928526967), FX16_CONST(-0.15128103795733014), - FX16_CONST(0.9882575677307495), FX16_CONST(-0.1527971852584433), - FX16_CONST(0.9880220171432835), FX16_CONST(-0.15431297301302013), - FX16_CONST(0.9877841416445722), FX16_CONST(-0.1558283976542652), - FX16_CONST(0.9875439417943593), FX16_CONST(-0.15734345561623816), - FX16_CONST(0.9873014181578584), FX16_CONST(-0.15885814333386128), - FX16_CONST(0.987056571305751), FX16_CONST(-0.16037245724292826), - FX16_CONST(0.9868094018141855), FX16_CONST(-0.16188639378011177), - FX16_CONST(0.9865599102647755), FX16_CONST(-0.16339994938297311), - FX16_CONST(0.9863080972445987), FX16_CONST(-0.16491312048996995), - FX16_CONST(0.9860539633461954), FX16_CONST(-0.1664259035404641), - FX16_CONST(0.9857975091675675), FX16_CONST(-0.1679382949747311), - FX16_CONST(0.9855387353121761), FX16_CONST(-0.16945029123396782), - FX16_CONST(0.9852776423889412), FX16_CONST(-0.17096188876030124), - FX16_CONST(0.9850142310122398), FX16_CONST(-0.17247308399679592), - FX16_CONST(0.9847485018019042), FX16_CONST(-0.1739838733874637), - FX16_CONST(0.9844804553832209), FX16_CONST(-0.17549425337727126), - FX16_CONST(0.984210092386929), FX16_CONST(-0.17700422041214875), - FX16_CONST(0.9839374134492189), FX16_CONST(-0.17851377093899745), - FX16_CONST(0.9836624192117303), FX16_CONST(-0.1800229014056994), - FX16_CONST(0.9833851103215512), FX16_CONST(-0.18153160826112502), - FX16_CONST(0.9831054874312163), FX16_CONST(-0.18303988795514092), - FX16_CONST(0.9828235511987053), FX16_CONST(-0.18454773693861953), - FX16_CONST(0.9825393022874412), FX16_CONST(-0.1860551516634465), - FX16_CONST(0.9822527413662894), FX16_CONST(-0.1875621285825296), - FX16_CONST(0.9819638691095552), FX16_CONST(-0.18906866414980616), - FX16_CONST(0.9816726861969831), FX16_CONST(-0.19057475482025266), - FX16_CONST(0.9813791933137546), FX16_CONST(-0.19208039704989227), - FX16_CONST(0.9810833911504867), FX16_CONST(-0.1935855872958036), - FX16_CONST(0.9807852804032304), FX16_CONST(-0.1950903220161282), - FX16_CONST(0.9804848617734694), FX16_CONST(-0.1965945976700801), - FX16_CONST(0.9801821359681174), FX16_CONST(-0.19809841071795362), - FX16_CONST(0.9798771036995176), FX16_CONST(-0.19960175762113094), - FX16_CONST(0.9795697656854405), FX16_CONST(-0.20110463484209182), - FX16_CONST(0.9792601226490821), FX16_CONST(-0.20260703884442097), - FX16_CONST(0.9789481753190622), FX16_CONST(-0.2041089660928169), - FX16_CONST(0.9786339244294232), FX16_CONST(-0.2056104130530992), - FX16_CONST(0.9783173707196277), FX16_CONST(-0.20711137619221845), - FX16_CONST(0.9779985149345571), FX16_CONST(-0.20861185197826332), - FX16_CONST(0.9776773578245099), FX16_CONST(-0.2101118368804696), - FX16_CONST(0.9773539001452001), FX16_CONST(-0.2116113273692275), - FX16_CONST(0.9770281426577544), FX16_CONST(-0.21311031991609125), - FX16_CONST(0.9767000861287118), FX16_CONST(-0.2146088109937868), - FX16_CONST(0.9763697313300211), FX16_CONST(-0.2161067970762195), - FX16_CONST(0.9760370790390391), FX16_CONST(-0.21760427463848356), - FX16_CONST(0.9757021300385286), FX16_CONST(-0.21910124015686966), - FX16_CONST(0.975364885116657), FX16_CONST(-0.22059769010887353), - FX16_CONST(0.9750253450669941), FX16_CONST(-0.22209362097320348), - FX16_CONST(0.9746835106885107), FX16_CONST(-0.22358902922978988), - FX16_CONST(0.9743393827855759), FX16_CONST(-0.22508391135979267), - FX16_CONST(0.9739929621679558), FX16_CONST(-0.22657826384560997), - FX16_CONST(0.973644249650812), FX16_CONST(-0.22807208317088568), - FX16_CONST(0.9732932460546982), FX16_CONST(-0.22956536582051876), - FX16_CONST(0.9729399522055602), FX16_CONST(-0.23105810828067114), - FX16_CONST(0.9725843689347322), FX16_CONST(-0.23255030703877522), - FX16_CONST(0.9722264970789364), FX16_CONST(-0.23404195858354332), - FX16_CONST(0.9718663374802794), FX16_CONST(-0.23553305940497535), - FX16_CONST(0.9715038909862518), FX16_CONST(-0.23702360599436723), - FX16_CONST(0.9711391584497251), FX16_CONST(-0.2385135948443184), - FX16_CONST(0.9707721407289504), FX16_CONST(-0.2400030224487414), - FX16_CONST(0.9704028386875555), FX16_CONST(-0.24149188530286916), - FX16_CONST(0.970031253194544), FX16_CONST(-0.24298017990326387), - FX16_CONST(0.9696573851242924), FX16_CONST(-0.2444679027478241), - FX16_CONST(0.9692812353565485), FX16_CONST(-0.24595505033579448), - FX16_CONST(0.9689028047764289), FX16_CONST(-0.24744161916777332), - FX16_CONST(0.9685220942744174), FX16_CONST(-0.24892760574572012), - FX16_CONST(0.9681391047463624), FX16_CONST(-0.25041300657296517), - FX16_CONST(0.9677538370934755), FX16_CONST(-0.2518978181542168), - FX16_CONST(0.9673662922223285), FX16_CONST(-0.25338203699557016), - FX16_CONST(0.9669764710448521), FX16_CONST(-0.2548656596045145), - FX16_CONST(0.9665843744783331), FX16_CONST(-0.25634868248994275), - FX16_CONST(0.9661900034454126), FX16_CONST(-0.2578311021621588), - FX16_CONST(0.9657933588740837), FX16_CONST(-0.25931291513288623), - FX16_CONST(0.9653944416976894), FX16_CONST(-0.26079411791527546), - FX16_CONST(0.9649932528549204), FX16_CONST(-0.2622747070239135), - FX16_CONST(0.9645897932898128), FX16_CONST(-0.2637546789748314), - FX16_CONST(0.9641840639517458), FX16_CONST(-0.2652340302855118), - FX16_CONST(0.9637760657954398), FX16_CONST(-0.2667127574748983), - FX16_CONST(0.963365799780954), FX16_CONST(-0.268190857063403), - FX16_CONST(0.9629532668736839), FX16_CONST(-0.2696683255729151), - FX16_CONST(0.9625384680443592), FX16_CONST(-0.27114515952680796), - FX16_CONST(0.9621214042690416), FX16_CONST(-0.27262135544994887), - FX16_CONST(0.9617020765291225), FX16_CONST(-0.2740969098687062), - FX16_CONST(0.9612804858113206), FX16_CONST(-0.27557181931095814), - FX16_CONST(0.9608566331076797), FX16_CONST(-0.27704608030609984), - FX16_CONST(0.9604305194155659), FX16_CONST(-0.27851968938505295), - FX16_CONST(0.9600021457376658), FX16_CONST(-0.2799926430802733), - FX16_CONST(0.9595715130819845), FX16_CONST(-0.28146493792575794), - FX16_CONST(0.959138622461842), FX16_CONST(-0.2829365704570553), - FX16_CONST(0.9587034748958716), FX16_CONST(-0.2844075372112717), - FX16_CONST(0.9582660714080177), FX16_CONST(-0.2858778347270806), - FX16_CONST(0.9578264130275329), FX16_CONST(-0.28734745954472946), - FX16_CONST(0.957384500788976), FX16_CONST(-0.28881640820604937), - FX16_CONST(0.9569403357322089), FX16_CONST(-0.29028467725446216), - FX16_CONST(0.9564939189023951), FX16_CONST(-0.29175226323498926), - FX16_CONST(0.9560452513499965), FX16_CONST(-0.2932191626942586), - FX16_CONST(0.9555943341307711), FX16_CONST(-0.2946853721805142), - FX16_CONST(0.9551411683057707), FX16_CONST(-0.29615088824362384), - FX16_CONST(0.9546857549413383), FX16_CONST(-0.2976157074350862), - FX16_CONST(0.9542280951091057), FX16_CONST(-0.29907982630804036), - FX16_CONST(0.9537681898859903), FX16_CONST(-0.3005432414172733), - FX16_CONST(0.9533060403541939), FX16_CONST(-0.3020059493192281), - FX16_CONST(0.9528416476011987), FX16_CONST(-0.30346794657201126), - FX16_CONST(0.9523750127197659), FX16_CONST(-0.30492922973540226), - FX16_CONST(0.9519061368079323), FX16_CONST(-0.306389795370861), - FX16_CONST(0.9514350209690083), FX16_CONST(-0.30784964004153487), - FX16_CONST(0.9509616663115751), FX16_CONST(-0.3093087603122686), - FX16_CONST(0.9504860739494818), FX16_CONST(-0.31076715274961136), - FX16_CONST(0.950008245001843), FX16_CONST(-0.31222481392182494), - FX16_CONST(0.9495281805930367), FX16_CONST(-0.3136817403988914), - FX16_CONST(0.9490458818527006), FX16_CONST(-0.31513792875252233), - FX16_CONST(0.9485613499157304), FX16_CONST(-0.31659337555616573), - FX16_CONST(0.9480745859222762), FX16_CONST(-0.31804807738501495), - FX16_CONST(0.9475855910177412), FX16_CONST(-0.31950203081601564), - FX16_CONST(0.9470943663527772), FX16_CONST(-0.3209552324278751), - FX16_CONST(0.9466009130832835), FX16_CONST(-0.32240767880106985), - FX16_CONST(0.9461052323704034), FX16_CONST(-0.32385936651785285), - FX16_CONST(0.9456073253805214), FX16_CONST(-0.32531029216226287), - FX16_CONST(0.9451071932852606), FX16_CONST(-0.3267604523201316), - FX16_CONST(0.9446048372614803), FX16_CONST(-0.32820984357909255), - FX16_CONST(0.9441002584912727), FX16_CONST(-0.32965846252858744), - FX16_CONST(0.9435934581619604), FX16_CONST(-0.3311063057598763), - FX16_CONST(0.9430844374660935), FX16_CONST(-0.33255336986604406), - FX16_CONST(0.9425731976014469), FX16_CONST(-0.3339996514420094), - FX16_CONST(0.9420597397710174), FX16_CONST(-0.33544514708453155), - FX16_CONST(0.9415440651830208), FX16_CONST(-0.33688985339221994), - FX16_CONST(0.9410261750508893), FX16_CONST(-0.3383337669655412), - FX16_CONST(0.9405060705932683), FX16_CONST(-0.33977688440682685), - FX16_CONST(0.939983753034014), FX16_CONST(-0.3412192023202823), - FX16_CONST(0.9394592236021899), FX16_CONST(-0.34266071731199427), - FX16_CONST(0.9389324835320645), FX16_CONST(-0.34410142598993887), - FX16_CONST(0.9384035340631082), FX16_CONST(-0.34554132496398904), - FX16_CONST(0.9378723764399899), FX16_CONST(-0.34698041084592357), - FX16_CONST(0.937339011912575), FX16_CONST(-0.3484186802494344), - FX16_CONST(0.9368034417359216), FX16_CONST(-0.3498561297901349), - FX16_CONST(0.9362656671702783), FX16_CONST(-0.35129275608556704), - FX16_CONST(0.9357256894810804), FX16_CONST(-0.3527285557552106), - FX16_CONST(0.9351835099389476), FX16_CONST(-0.3541635254204904), - FX16_CONST(0.9346391298196808), FX16_CONST(-0.35559766170478385), - FX16_CONST(0.934092550404259), FX16_CONST(-0.3570309612334299), - FX16_CONST(0.9335437729788363), FX16_CONST(-0.35846342063373643), - FX16_CONST(0.9329927988347388), FX16_CONST(-0.35989503653498817), - FX16_CONST(0.9324396292684624), FX16_CONST(-0.36132580556845423), - FX16_CONST(0.9318842655816681), FX16_CONST(-0.3627557243673971), - FX16_CONST(0.9313267090811805), FX16_CONST(-0.3641847895670797), - FX16_CONST(0.9307669610789837), FX16_CONST(-0.36561299780477385), - FX16_CONST(0.9302050228922191), FX16_CONST(-0.3670403457197671), - FX16_CONST(0.9296408958431813), FX16_CONST(-0.3684668299533722), - FX16_CONST(0.9290745812593157), FX16_CONST(-0.36989244714893416), - FX16_CONST(0.9285060804732156), FX16_CONST(-0.3713171939518375), - FX16_CONST(0.9279353948226179), FX16_CONST(-0.3727410670095157), - FX16_CONST(0.9273625256504011), FX16_CONST(-0.3741640629714579), - FX16_CONST(0.9267874743045817), FX16_CONST(-0.3755861784892172), - FX16_CONST(0.9262102421383114), FX16_CONST(-0.3770074102164182), - FX16_CONST(0.9256308305098728), FX16_CONST(-0.37842775480876545), - FX16_CONST(0.9250492407826777), FX16_CONST(-0.379847208924051), - FX16_CONST(0.9244654743252626), FX16_CONST(-0.3812657692221624), - FX16_CONST(0.9238795325112867), FX16_CONST(-0.3826834323650897), - FX16_CONST(0.9232914167195277), FX16_CONST(-0.38410019501693493), - FX16_CONST(0.9227011283338785), FX16_CONST(-0.3855160538439189), - FX16_CONST(0.9221086687433452), FX16_CONST(-0.3869310055143886), - FX16_CONST(0.921514039342042), FX16_CONST(-0.3883450466988262), - FX16_CONST(0.9209172415291895), FX16_CONST(-0.3897581740698563), - FX16_CONST(0.9203182767091106), FX16_CONST(-0.39117038430225387), - FX16_CONST(0.9197171462912274), FX16_CONST(-0.3925816740729514), - FX16_CONST(0.9191138516900578), FX16_CONST(-0.393992040061048), - FX16_CONST(0.9185083943252123), FX16_CONST(-0.3954014789478162), - FX16_CONST(0.9179007756213905), FX16_CONST(-0.3968099874167103), - FX16_CONST(0.917290997008378), FX16_CONST(-0.3982175621533735), - FX16_CONST(0.9166790599210427), FX16_CONST(-0.3996241998456467), - FX16_CONST(0.9160649657993317), FX16_CONST(-0.4010298971835757), - FX16_CONST(0.9154487160882678), FX16_CONST(-0.40243465085941843), - FX16_CONST(0.9148303122379462), FX16_CONST(-0.403838457567654), - FX16_CONST(0.9142097557035307), FX16_CONST(-0.40524131400498975), - FX16_CONST(0.9135870479452508), FX16_CONST(-0.40664321687036903), - FX16_CONST(0.9129621904283982), FX16_CONST(-0.40804416286497863), - FX16_CONST(0.9123351846233229), FX16_CONST(-0.40944414869225754), - FX16_CONST(0.9117060320054299), FX16_CONST(-0.4108431710579038), - FX16_CONST(0.9110747340551764), FX16_CONST(-0.4122412266698829), - FX16_CONST(0.9104412922580672), FX16_CONST(-0.4136383122384345), - FX16_CONST(0.9098057081046523), FX16_CONST(-0.4150344244760815), - FX16_CONST(0.9091679830905225), FX16_CONST(-0.416429560097637), - FX16_CONST(0.9085281187163061), FX16_CONST(-0.41782371582021227), - FX16_CONST(0.9078861164876662), FX16_CONST(-0.41921688836322407), - FX16_CONST(0.9072419779152959), FX16_CONST(-0.4206090744484024), - FX16_CONST(0.9065957045149153), FX16_CONST(-0.4220002707997997), - FX16_CONST(0.9059472978072686), FX16_CONST(-0.42339047414379577), - FX16_CONST(0.9052967593181188), FX16_CONST(-0.4247796812091087), - FX16_CONST(0.9046440905782461), FX16_CONST(-0.42616788872679967), - FX16_CONST(0.9039892931234434), FX16_CONST(-0.42755509343028186), - FX16_CONST(0.9033323684945118), FX16_CONST(-0.42894129205532944), - FX16_CONST(0.9026733182372587), FX16_CONST(-0.4303264813400827), - FX16_CONST(0.9020121439024933), FX16_CONST(-0.4317106580250571), - FX16_CONST(0.901348847046022), FX16_CONST(-0.4330938188531519), - FX16_CONST(0.9006834292286469), FX16_CONST(-0.4344759605696558), - FX16_CONST(0.9000158920161603), FX16_CONST(-0.43585707992225536), - FX16_CONST(0.8993462369793416), FX16_CONST(-0.4372371736610441), - FX16_CONST(0.8986744656939539), FX16_CONST(-0.4386162385385274), - FX16_CONST(0.8980005797407399), FX16_CONST(-0.43999427130963314), - FX16_CONST(0.8973245807054183), FX16_CONST(-0.4413712687317167), - FX16_CONST(0.8966464701786803), FX16_CONST(-0.4427472275645698), - FX16_CONST(0.8959662497561852), FX16_CONST(-0.44412214457042914), - FX16_CONST(0.8952839210385575), FX16_CONST(-0.4454960165139818), - FX16_CONST(0.8945994856313828), FX16_CONST(-0.446868840162374), - FX16_CONST(0.8939129451452033), FX16_CONST(-0.4482406122852199), - FX16_CONST(0.8932243011955152), FX16_CONST(-0.4496113296546067), - FX16_CONST(0.8925335554027647), FX16_CONST(-0.4509809890451037), - FX16_CONST(0.8918407093923427), FX16_CONST(-0.4523495872337709), - FX16_CONST(0.8911457647945834), FX16_CONST(-0.4537171210001636), - FX16_CONST(0.890448723244758), FX16_CONST(-0.4550835871263437), - FX16_CONST(0.8897495863830728), FX16_CONST(-0.456448982396884), - FX16_CONST(0.8890483558546647), FX16_CONST(-0.457813303598877), - FX16_CONST(0.8883450333095964), FX16_CONST(-0.45917654752194403), - FX16_CONST(0.8876396204028539), FX16_CONST(-0.46053871095824006), - FX16_CONST(0.8869321187943423), FX16_CONST(-0.46189979070246256), - FX16_CONST(0.8862225301488806), FX16_CONST(-0.46325978355186015), - FX16_CONST(0.8855108561361998), FX16_CONST(-0.4646186863062379), - FX16_CONST(0.8847970984309379), FX16_CONST(-0.465976495767966), - FX16_CONST(0.884081258712635), FX16_CONST(-0.4673332087419884), - FX16_CONST(0.8833633386657317), FX16_CONST(-0.4686888220358277), - FX16_CONST(0.8826433399795628), FX16_CONST(-0.4700433324595955), - FX16_CONST(0.881921264348355), FX16_CONST(-0.4713967368259977), - FX16_CONST(0.8811971134712222), FX16_CONST(-0.47274903195034257), - FX16_CONST(0.8804708890521609), FX16_CONST(-0.4741002146505499), - FX16_CONST(0.8797425928000474), FX16_CONST(-0.4754502817471559), - FX16_CONST(0.8790122264286335), FX16_CONST(-0.4767992300633219), - FX16_CONST(0.8782797916565416), FX16_CONST(-0.478147056424843), - FX16_CONST(0.8775452902072612), FX16_CONST(-0.4794937576601531), - FX16_CONST(0.8768087238091458), FX16_CONST(-0.4808393306003338), - FX16_CONST(0.8760700941954066), FX16_CONST(-0.4821837720791227), - FX16_CONST(0.875329403104111), FX16_CONST(-0.48352707893291846), - FX16_CONST(0.8745866522781762), FX16_CONST(-0.484869248000791), - FX16_CONST(0.8738418434653668), FX16_CONST(-0.4862102761244864), - FX16_CONST(0.8730949784182902), FX16_CONST(-0.4875501601484357), - FX16_CONST(0.8723460588943915), FX16_CONST(-0.4888888969197631), - FX16_CONST(0.871595086655951), FX16_CONST(-0.4902264832882912), - FX16_CONST(0.870842063470079), FX16_CONST(-0.49156291610654973), - FX16_CONST(0.8700869911087115), FX16_CONST(-0.492898192229784), - FX16_CONST(0.8693298713486067), FX16_CONST(-0.49423230851595984), - FX16_CONST(0.868570705971341), FX16_CONST(-0.4955652618257724), - FX16_CONST(0.8678094967633032), FX16_CONST(-0.4968970490226545), - FX16_CONST(0.8670462455156928), FX16_CONST(-0.4982276669727816), - FX16_CONST(0.8662809540245131), FX16_CONST(-0.4995571125450818), - FX16_CONST(0.8655136240905691), FX16_CONST(-0.5008853826112408), - FX16_CONST(0.8647442575194625), FX16_CONST(-0.5022124740457106), - FX16_CONST(0.8639728561215868), FX16_CONST(-0.5035383837257175), - FX16_CONST(0.8631994217121242), FX16_CONST(-0.5048631085312676), - FX16_CONST(0.8624239561110406), FX16_CONST(-0.5061866453451551), - FX16_CONST(0.8616464611430814), FX16_CONST(-0.5075089910529708), - FX16_CONST(0.8608669386377672), FX16_CONST(-0.5088301425431071), - FX16_CONST(0.8600853904293903), FX16_CONST(-0.5101500967067666), - FX16_CONST(0.8593018183570085), FX16_CONST(-0.5114688504379704), - FX16_CONST(0.858516224264443), FX16_CONST(-0.5127864006335627), - FX16_CONST(0.8577286100002721), FX16_CONST(-0.5141027441932216), - FX16_CONST(0.8569389774178287), FX16_CONST(-0.515417878019463), - FX16_CONST(0.8561473283751946), FX16_CONST(-0.5167317990176497), - FX16_CONST(0.855353664735196), FX16_CONST(-0.5180445040959992), - FX16_CONST(0.8545579883654005), FX16_CONST(-0.5193559901655896), - FX16_CONST(0.8537603011381115), FX16_CONST(-0.5206662541403669), - FX16_CONST(0.8529606049303637), FX16_CONST(-0.5219752929371543), - FX16_CONST(0.8521589016239197), FX16_CONST(-0.5232831034756565), - FX16_CONST(0.8513551931052652), FX16_CONST(-0.5245896826784687), - FX16_CONST(0.8505494812656035), FX16_CONST(-0.5258950274710846), - FX16_CONST(0.8497417680008527), FX16_CONST(-0.5271991347819011), - FX16_CONST(0.8489320552116397), FX16_CONST(-0.5285020015422284), - FX16_CONST(0.8481203448032972), FX16_CONST(-0.5298036246862947), - FX16_CONST(0.8473066386858585), FX16_CONST(-0.5311040011512548), - FX16_CONST(0.8464909387740521), FX16_CONST(-0.5324031278771979), - FX16_CONST(0.8456732469872991), FX16_CONST(-0.533701001807153), - FX16_CONST(0.8448535652497072), FX16_CONST(-0.534997619887097), - FX16_CONST(0.8440318954900664), FX16_CONST(-0.5362929790659631), - FX16_CONST(0.8432082396418453), FX16_CONST(-0.5375870762956456), - FX16_CONST(0.842382599643186), FX16_CONST(-0.5388799085310083), - FX16_CONST(0.8415549774368984), FX16_CONST(-0.5401714727298929), - FX16_CONST(0.8407253749704582), FX16_CONST(-0.5414617658531232), - FX16_CONST(0.8398937941959995), FX16_CONST(-0.5427507848645158), - FX16_CONST(0.8390602370703127), FX16_CONST(-0.5440385267308839), - FX16_CONST(0.8382247055548382), FX16_CONST(-0.5453249884220462), - FX16_CONST(0.8373872016156619), FX16_CONST(-0.5466101669108347), - FX16_CONST(0.836547727223512), FX16_CONST(-0.5478940591731002), - FX16_CONST(0.8357062843537527), FX16_CONST(-0.5491766621877195), - FX16_CONST(0.8348628749863801), FX16_CONST(-0.5504579729366047), - FX16_CONST(0.834017501106018), FX16_CONST(-0.5517379884047074), - FX16_CONST(0.8331701647019133), FX16_CONST(-0.5530167055800274), - FX16_CONST(0.8323208677679297), FX16_CONST(-0.5542941214536201), - FX16_CONST(0.8314696123025453), FX16_CONST(-0.555570233019602), - FX16_CONST(0.8306164003088463), FX16_CONST(-0.55684503727516), - FX16_CONST(0.829761233794523), FX16_CONST(-0.5581185312205561), - FX16_CONST(0.8289041147718651), FX16_CONST(-0.5593907118591358), - FX16_CONST(0.8280450452577558), FX16_CONST(-0.5606615761973359), - FX16_CONST(0.827184027273669), FX16_CONST(-0.5619311212446895), - FX16_CONST(0.8263210628456636), FX16_CONST(-0.5631993440138339), - FX16_CONST(0.8254561540043776), FX16_CONST(-0.5644662415205194), - FX16_CONST(0.8245893027850252), FX16_CONST(-0.5657318107836132), - FX16_CONST(0.8237205112273915), FX16_CONST(-0.5669960488251085), - FX16_CONST(0.8228497813758263), FX16_CONST(-0.5682589526701315), - FX16_CONST(0.8219771152792414), FX16_CONST(-0.5695205193469473), - FX16_CONST(0.8211025149911048), FX16_CONST(-0.5707807458869671), - FX16_CONST(0.8202259825694347), FX16_CONST(-0.572039629324757), - FX16_CONST(0.8193475200767971), FX16_CONST(-0.573297166698042), - FX16_CONST(0.8184671295802988), FX16_CONST(-0.5745533550477158), - FX16_CONST(0.8175848131515837), FX16_CONST(-0.5758081914178453), - FX16_CONST(0.816700572866828), FX16_CONST(-0.5770616728556793), - FX16_CONST(0.8158144108067338), FX16_CONST(-0.5783137964116555), - FX16_CONST(0.8149263290565265), FX16_CONST(-0.5795645591394059), - FX16_CONST(0.8140363297059485), FX16_CONST(-0.5808139580957644), - FX16_CONST(0.8131444148492536), FX16_CONST(-0.5820619903407755), - FX16_CONST(0.8122505865852039), FX16_CONST(-0.5833086529376984), - FX16_CONST(0.8113548470170638), FX16_CONST(-0.5845539429530152), - FX16_CONST(0.8104571982525948), FX16_CONST(-0.5857978574564389), - FX16_CONST(0.8095576424040515), FX16_CONST(-0.5870403935209177), - FX16_CONST(0.8086561815881751), FX16_CONST(-0.5882815482226452), - FX16_CONST(0.8077528179261904), FX16_CONST(-0.5895213186410639), - FX16_CONST(0.8068475535437994), FX16_CONST(-0.590759701858874), - FX16_CONST(0.8059403905711764), FX16_CONST(-0.5919966949620409), - FX16_CONST(0.8050313311429635), FX16_CONST(-0.5932322950397999), - FX16_CONST(0.8041203773982658), FX16_CONST(-0.5944664991846643), - FX16_CONST(0.8032075314806449), FX16_CONST(-0.5956993044924334), - FX16_CONST(0.8022927955381156), FX16_CONST(-0.5969307080621966), - FX16_CONST(0.8013761717231402), FX16_CONST(-0.5981607069963422), - FX16_CONST(0.8004576621926228), FX16_CONST(-0.5993892984005645), - FX16_CONST(0.7995372691079052), FX16_CONST(-0.6006164793838688), - FX16_CONST(0.7986149946347609), FX16_CONST(-0.60184224705858), - FX16_CONST(0.797690840943391), FX16_CONST(-0.6030665985403483), - FX16_CONST(0.7967648102084189), FX16_CONST(-0.6042895309481559), - FX16_CONST(0.7958369046088836), FX16_CONST(-0.6055110414043254), - FX16_CONST(0.7949071263282369), FX16_CONST(-0.6067311270345246), - FX16_CONST(0.7939754775543373), FX16_CONST(-0.6079497849677735), - FX16_CONST(0.7930419604794436), FX16_CONST(-0.6091670123364532), - FX16_CONST(0.7921065773002123), FX16_CONST(-0.6103828062763096), - FX16_CONST(0.7911693302176903), FX16_CONST(-0.6115971639264618), - FX16_CONST(0.79023022143731), FX16_CONST(-0.6128100824294097), - FX16_CONST(0.7892892531688859), FX16_CONST(-0.6140215589310382), - FX16_CONST(0.7883464276266063), FX16_CONST(-0.6152315905806267), - FX16_CONST(0.7874017470290313), FX16_CONST(-0.6164401745308536), - FX16_CONST(0.7864552135990859), FX16_CONST(-0.6176473079378038), - FX16_CONST(0.785506829564054), FX16_CONST(-0.6188529879609762), - FX16_CONST(0.7845565971555751), FX16_CONST(-0.6200572117632892), - FX16_CONST(0.7836045186096383), FX16_CONST(-0.6212599765110874), - FX16_CONST(0.7826505961665757), FX16_CONST(-0.62246127937415), - FX16_CONST(0.7816948320710593), FX16_CONST(-0.6236611175256946), - FX16_CONST(0.7807372285720946), FX16_CONST(-0.6248594881423862), - FX16_CONST(0.7797777879230144), FX16_CONST(-0.6260563884043435), - FX16_CONST(0.7788165123814761), FX16_CONST(-0.6272518154951439), - FX16_CONST(0.7778534042094531), FX16_CONST(-0.6284457666018326), - FX16_CONST(0.7768884656732324), FX16_CONST(-0.6296382389149271), - FX16_CONST(0.7759216990434078), FX16_CONST(-0.6308292296284244), - FX16_CONST(0.7749531065948739), FX16_CONST(-0.632018735939809), - FX16_CONST(0.7739826906068228), FX16_CONST(-0.6332067550500573), - FX16_CONST(0.7730104533627371), FX16_CONST(-0.6343932841636454), - FX16_CONST(0.7720363971503845), FX16_CONST(-0.6355783204885561), - FX16_CONST(0.7710605242618137), FX16_CONST(-0.6367618612362843), - FX16_CONST(0.7700828369933481), FX16_CONST(-0.6379439036218439), - FX16_CONST(0.7691033376455796), FX16_CONST(-0.6391244448637757), - FX16_CONST(0.7681220285233655), FX16_CONST(-0.6403034821841515), - FX16_CONST(0.7671389119358204), FX16_CONST(-0.641481012808583), - FX16_CONST(0.7661539901963128), FX16_CONST(-0.6426570339662269), - FX16_CONST(0.7651672656224591), FX16_CONST(-0.6438315428897913), - FX16_CONST(0.7641787405361168), FX16_CONST(-0.6450045368155439), - FX16_CONST(0.7631884172633812), FX16_CONST(-0.6461760129833164), - FX16_CONST(0.762196298134579), FX16_CONST(-0.647345968636512), - FX16_CONST(0.7612023854842619), FX16_CONST(-0.6485144010221124), - FX16_CONST(0.7602066816512023), FX16_CONST(-0.6496813073906833), - FX16_CONST(0.7592091889783881), FX16_CONST(-0.6508466849963808), - FX16_CONST(0.7582099098130153), FX16_CONST(-0.6520105310969595), - FX16_CONST(0.7572088465064847), FX16_CONST(-0.6531728429537765), - FX16_CONST(0.7562060014143945), FX16_CONST(-0.6543336178318004), - FX16_CONST(0.7552013768965364), FX16_CONST(-0.6554928529996155), - FX16_CONST(0.7541949753168893), FX16_CONST(-0.6566505457294288), - FX16_CONST(0.7531867990436125), FX16_CONST(-0.6578066932970785), - FX16_CONST(0.7521768504490427), FX16_CONST(-0.6589612929820374), - FX16_CONST(0.7511651319096866), FX16_CONST(-0.6601143420674204), - FX16_CONST(0.7501516458062151), FX16_CONST(-0.6612658378399922), - FX16_CONST(0.7491363945234593), FX16_CONST(-0.6624157775901719), - FX16_CONST(0.7481193804504037), FX16_CONST(-0.6635641586120397), - FX16_CONST(0.7471006059801801), FX16_CONST(-0.6647109782033449), - FX16_CONST(0.746080073510064), FX16_CONST(-0.6658562336655095), - FX16_CONST(0.7450577854414661), FX16_CONST(-0.6669999223036374), - FX16_CONST(0.7440337441799292), FX16_CONST(-0.6681420414265186), - FX16_CONST(0.7430079521351218), FX16_CONST(-0.6692825883466359), - FX16_CONST(0.7419804117208311), FX16_CONST(-0.6704215603801731), - FX16_CONST(0.740951125354959), FX16_CONST(-0.6715589548470184), - FX16_CONST(0.7399200954595163), FX16_CONST(-0.6726947690707727), - FX16_CONST(0.7388873244606152), FX16_CONST(-0.673829000378756), - FX16_CONST(0.7378528147884659), FX16_CONST(-0.674961646102012), - FX16_CONST(0.73681656887737), FX16_CONST(-0.6760927035753158), - FX16_CONST(0.7357785891657136), FX16_CONST(-0.6772221701371804), - FX16_CONST(0.7347388780959637), FX16_CONST(-0.6783500431298612), - FX16_CONST(0.7336974381146604), FX16_CONST(-0.679476319899365), - FX16_CONST(0.7326542716724128), FX16_CONST(-0.680600997795453), - FX16_CONST(0.7316093812238927), FX16_CONST(-0.6817240741716496), - FX16_CONST(0.7305627692278276), FX16_CONST(-0.682845546385248), - FX16_CONST(0.729514438146997), FX16_CONST(-0.6839654117973155), - FX16_CONST(0.7284643904482253), FX16_CONST(-0.6850836677727002), - FX16_CONST(0.7274126286023758), FX16_CONST(-0.6862003116800386), - FX16_CONST(0.7263591550843459), FX16_CONST(-0.6873153408917592), - FX16_CONST(0.7253039723730609), FX16_CONST(-0.6884287527840903), - FX16_CONST(0.7242470829514669), FX16_CONST(-0.6895405447370669), - FX16_CONST(0.7231884893065276), FX16_CONST(-0.6906507141345344), - FX16_CONST(0.7221281939292155), FX16_CONST(-0.6917592583641576), - FX16_CONST(0.7210661993145081), FX16_CONST(-0.6928661748174247), - FX16_CONST(0.7200025079613818), FX16_CONST(-0.6939714608896538), - FX16_CONST(0.7189371223728045), FX16_CONST(-0.6950751139800008), - FX16_CONST(0.7178700450557317), FX16_CONST(-0.696177131491463), - FX16_CONST(0.7168012785210996), FX16_CONST(-0.6972775108308864), - FX16_CONST(0.7157308252838187), FX16_CONST(-0.6983762494089728), - FX16_CONST(0.714658687862769), FX16_CONST(-0.6994733446402839), - FX16_CONST(0.7135848687807936), FX16_CONST(-0.7005687939432482), - FX16_CONST(0.7125093705646923), FX16_CONST(-0.7016625947401685), - FX16_CONST(0.7114321957452167), FX16_CONST(-0.7027547444572251), - FX16_CONST(0.7103533468570624), FX16_CONST(-0.7038452405244848), - FX16_CONST(0.7092728264388656), FX16_CONST(-0.7049340803759049), - FX16_CONST(0.7081906370331955), FX16_CONST(-0.7060212614493396), - FX16_CONST(0.7071067811865476), FX16_CONST(-0.7071067811865475), - FX16_CONST(0.7060212614493397), FX16_CONST(-0.7081906370331954), - FX16_CONST(0.7049340803759051), FX16_CONST(-0.7092728264388655), - FX16_CONST(0.703845240524485), FX16_CONST(-0.7103533468570623), - FX16_CONST(0.7027547444572252), FX16_CONST(-0.7114321957452165), - FX16_CONST(0.7016625947401687), FX16_CONST(-0.7125093705646922), - FX16_CONST(0.7005687939432483), FX16_CONST(-0.7135848687807935), - FX16_CONST(0.699473344640284), FX16_CONST(-0.7146586878627689), - FX16_CONST(0.6983762494089729), FX16_CONST(-0.7157308252838186), - FX16_CONST(0.6972775108308865), FX16_CONST(-0.7168012785210995), - FX16_CONST(0.6961771314914631), FX16_CONST(-0.7178700450557316), - FX16_CONST(0.6950751139800009), FX16_CONST(-0.7189371223728044), - FX16_CONST(0.6939714608896539), FX16_CONST(-0.7200025079613817), - FX16_CONST(0.6928661748174249), FX16_CONST(-0.7210661993145079), - FX16_CONST(0.6917592583641579), FX16_CONST(-0.7221281939292152), - FX16_CONST(0.6906507141345346), FX16_CONST(-0.7231884893065275), - FX16_CONST(0.689540544737067), FX16_CONST(-0.7242470829514668), - FX16_CONST(0.6884287527840904), FX16_CONST(-0.7253039723730608), - FX16_CONST(0.6873153408917593), FX16_CONST(-0.7263591550843458), - FX16_CONST(0.6862003116800387), FX16_CONST(-0.7274126286023757), - FX16_CONST(0.6850836677727004), FX16_CONST(-0.7284643904482252), - FX16_CONST(0.6839654117973156), FX16_CONST(-0.7295144381469968), - FX16_CONST(0.6828455463852481), FX16_CONST(-0.7305627692278275), - FX16_CONST(0.6817240741716497), FX16_CONST(-0.7316093812238926), - FX16_CONST(0.6806009977954532), FX16_CONST(-0.7326542716724127), - FX16_CONST(0.6794763198993651), FX16_CONST(-0.7336974381146603), - FX16_CONST(0.6783500431298614), FX16_CONST(-0.7347388780959635), - FX16_CONST(0.6772221701371806), FX16_CONST(-0.7357785891657134), - FX16_CONST(0.6760927035753159), FX16_CONST(-0.7368165688773698), - FX16_CONST(0.6749616461020123), FX16_CONST(-0.7378528147884658), - FX16_CONST(0.6738290003787561), FX16_CONST(-0.7388873244606151), - FX16_CONST(0.6726947690707729), FX16_CONST(-0.7399200954595162), - FX16_CONST(0.6715589548470186), FX16_CONST(-0.7409511253549589), - FX16_CONST(0.6704215603801732), FX16_CONST(-0.741980411720831), - FX16_CONST(0.669282588346636), FX16_CONST(-0.7430079521351217), - FX16_CONST(0.6681420414265187), FX16_CONST(-0.7440337441799291), - FX16_CONST(0.6669999223036376), FX16_CONST(-0.745057785441466), - FX16_CONST(0.6658562336655096), FX16_CONST(-0.7460800735100638), - FX16_CONST(0.664710978203345), FX16_CONST(-0.74710060598018), - FX16_CONST(0.6635641586120398), FX16_CONST(-0.7481193804504036), - FX16_CONST(0.662415777590172), FX16_CONST(-0.7491363945234591), - FX16_CONST(0.6612658378399923), FX16_CONST(-0.750151645806215), - FX16_CONST(0.6601143420674205), FX16_CONST(-0.7511651319096864), - FX16_CONST(0.6589612929820375), FX16_CONST(-0.7521768504490425), - FX16_CONST(0.6578066932970787), FX16_CONST(-0.7531867990436124), - FX16_CONST(0.656650545729429), FX16_CONST(-0.7541949753168892), - FX16_CONST(0.6554928529996156), FX16_CONST(-0.7552013768965364), - FX16_CONST(0.6543336178318006), FX16_CONST(-0.7562060014143945), - FX16_CONST(0.6531728429537766), FX16_CONST(-0.7572088465064847), - FX16_CONST(0.6520105310969597), FX16_CONST(-0.7582099098130152), - FX16_CONST(0.650846684996381), FX16_CONST(-0.759209188978388), - FX16_CONST(0.6496813073906834), FX16_CONST(-0.7602066816512022), - FX16_CONST(0.6485144010221126), FX16_CONST(-0.7612023854842617), - FX16_CONST(0.6473459686365121), FX16_CONST(-0.7621962981345789), - FX16_CONST(0.6461760129833166), FX16_CONST(-0.7631884172633812), - FX16_CONST(0.645004536815544), FX16_CONST(-0.7641787405361167), - FX16_CONST(0.6438315428897914), FX16_CONST(-0.765167265622459), - FX16_CONST(0.6426570339662271), FX16_CONST(-0.7661539901963128), - FX16_CONST(0.6414810128085832), FX16_CONST(-0.7671389119358204), - FX16_CONST(0.6403034821841516), FX16_CONST(-0.7681220285233654), - FX16_CONST(0.6391244448637758), FX16_CONST(-0.7691033376455795), - FX16_CONST(0.637943903621844), FX16_CONST(-0.7700828369933479), - FX16_CONST(0.6367618612362844), FX16_CONST(-0.7710605242618136), - FX16_CONST(0.6355783204885562), FX16_CONST(-0.7720363971503844), - FX16_CONST(0.6343932841636455), FX16_CONST(-0.773010453362737), - FX16_CONST(0.6332067550500574), FX16_CONST(-0.7739826906068227), - FX16_CONST(0.6320187359398091), FX16_CONST(-0.7749531065948738), - FX16_CONST(0.6308292296284245), FX16_CONST(-0.7759216990434077), - FX16_CONST(0.6296382389149272), FX16_CONST(-0.7768884656732323), - FX16_CONST(0.6284457666018327), FX16_CONST(-0.777853404209453), - FX16_CONST(0.6272518154951441), FX16_CONST(-0.778816512381476), - FX16_CONST(0.6260563884043436), FX16_CONST(-0.7797777879230143), - FX16_CONST(0.6248594881423863), FX16_CONST(-0.7807372285720945), - FX16_CONST(0.6236611175256949), FX16_CONST(-0.7816948320710593), - FX16_CONST(0.6224612793741501), FX16_CONST(-0.7826505961665756), - FX16_CONST(0.6212599765110876), FX16_CONST(-0.7836045186096382), - FX16_CONST(0.6200572117632894), FX16_CONST(-0.784556597155575), - FX16_CONST(0.6188529879609764), FX16_CONST(-0.7855068295640539), - FX16_CONST(0.6176473079378039), FX16_CONST(-0.7864552135990858), - FX16_CONST(0.6164401745308538), FX16_CONST(-0.7874017470290312), - FX16_CONST(0.6152315905806269), FX16_CONST(-0.7883464276266062), - FX16_CONST(0.6140215589310384), FX16_CONST(-0.7892892531688858), - FX16_CONST(0.6128100824294098), FX16_CONST(-0.7902302214373099), - FX16_CONST(0.6115971639264619), FX16_CONST(-0.7911693302176902), - FX16_CONST(0.6103828062763097), FX16_CONST(-0.7921065773002122), - FX16_CONST(0.6091670123364533), FX16_CONST(-0.7930419604794436), - FX16_CONST(0.6079497849677736), FX16_CONST(-0.7939754775543372), - FX16_CONST(0.6067311270345247), FX16_CONST(-0.7949071263282368), - FX16_CONST(0.6055110414043257), FX16_CONST(-0.7958369046088835), - FX16_CONST(0.604289530948156), FX16_CONST(-0.7967648102084187), - FX16_CONST(0.6030665985403484), FX16_CONST(-0.7976908409433909), - FX16_CONST(0.6018422470585801), FX16_CONST(-0.7986149946347608), - FX16_CONST(0.6006164793838689), FX16_CONST(-0.7995372691079051), - FX16_CONST(0.5993892984005647), FX16_CONST(-0.8004576621926226), - FX16_CONST(0.5981607069963424), FX16_CONST(-0.8013761717231402), - FX16_CONST(0.5969307080621967), FX16_CONST(-0.8022927955381155), - FX16_CONST(0.5956993044924335), FX16_CONST(-0.8032075314806448), - FX16_CONST(0.5944664991846644), FX16_CONST(-0.8041203773982657), - FX16_CONST(0.5932322950398), FX16_CONST(-0.8050313311429634), - FX16_CONST(0.591996694962041), FX16_CONST(-0.8059403905711763), - FX16_CONST(0.5907597018588742), FX16_CONST(-0.8068475535437993), - FX16_CONST(0.589521318641064), FX16_CONST(-0.8077528179261902), - FX16_CONST(0.5882815482226453), FX16_CONST(-0.808656181588175), - FX16_CONST(0.5870403935209179), FX16_CONST(-0.8095576424040514), - FX16_CONST(0.585797857456439), FX16_CONST(-0.8104571982525947), - FX16_CONST(0.5845539429530153), FX16_CONST(-0.8113548470170637), - FX16_CONST(0.5833086529376985), FX16_CONST(-0.8122505865852038), - FX16_CONST(0.5820619903407757), FX16_CONST(-0.8131444148492535), - FX16_CONST(0.5808139580957645), FX16_CONST(-0.8140363297059484), - FX16_CONST(0.579564559139406), FX16_CONST(-0.8149263290565264), - FX16_CONST(0.5783137964116557), FX16_CONST(-0.8158144108067338), - FX16_CONST(0.5770616728556794), FX16_CONST(-0.8167005728668278), - FX16_CONST(0.5758081914178454), FX16_CONST(-0.8175848131515836), - FX16_CONST(0.5745533550477159), FX16_CONST(-0.8184671295802987), - FX16_CONST(0.5732971666980421), FX16_CONST(-0.819347520076797), - FX16_CONST(0.5720396293247573), FX16_CONST(-0.8202259825694346), - FX16_CONST(0.5707807458869673), FX16_CONST(-0.8211025149911046), - FX16_CONST(0.5695205193469475), FX16_CONST(-0.8219771152792413), - FX16_CONST(0.5682589526701317), FX16_CONST(-0.8228497813758262), - FX16_CONST(0.5669960488251087), FX16_CONST(-0.8237205112273914), - FX16_CONST(0.5657318107836135), FX16_CONST(-0.8245893027850251), - FX16_CONST(0.5644662415205195), FX16_CONST(-0.8254561540043774), - FX16_CONST(0.5631993440138341), FX16_CONST(-0.8263210628456635), - FX16_CONST(0.5619311212446896), FX16_CONST(-0.827184027273669), - FX16_CONST(0.5606615761973361), FX16_CONST(-0.8280450452577557), - FX16_CONST(0.559390711859136), FX16_CONST(-0.828904114771865), - FX16_CONST(0.5581185312205563), FX16_CONST(-0.8297612337945229), - FX16_CONST(0.5568450372751601), FX16_CONST(-0.8306164003088462), - FX16_CONST(0.5555702330196022), FX16_CONST(-0.8314696123025453), - FX16_CONST(0.5542941214536202), FX16_CONST(-0.8323208677679296), - FX16_CONST(0.5530167055800275), FX16_CONST(-0.8331701647019132), - FX16_CONST(0.5517379884047077), FX16_CONST(-0.8340175011060179), - FX16_CONST(0.5504579729366049), FX16_CONST(-0.83486287498638), - FX16_CONST(0.5491766621877197), FX16_CONST(-0.8357062843537526), - FX16_CONST(0.5478940591731004), FX16_CONST(-0.8365477272235119), - FX16_CONST(0.546610166910835), FX16_CONST(-0.8373872016156618), - FX16_CONST(0.5453249884220464), FX16_CONST(-0.8382247055548381), - FX16_CONST(0.544038526730884), FX16_CONST(-0.8390602370703126), - FX16_CONST(0.5427507848645159), FX16_CONST(-0.8398937941959995), - FX16_CONST(0.5414617658531233), FX16_CONST(-0.8407253749704581), - FX16_CONST(0.540171472729893), FX16_CONST(-0.8415549774368983), - FX16_CONST(0.5388799085310084), FX16_CONST(-0.8423825996431858), - FX16_CONST(0.5375870762956457), FX16_CONST(-0.8432082396418453), - FX16_CONST(0.5362929790659633), FX16_CONST(-0.8440318954900664), - FX16_CONST(0.5349976198870972), FX16_CONST(-0.8448535652497071), - FX16_CONST(0.5337010018071532), FX16_CONST(-0.845673246987299), - FX16_CONST(0.532403127877198), FX16_CONST(-0.846490938774052), - FX16_CONST(0.5311040011512549), FX16_CONST(-0.8473066386858584), - FX16_CONST(0.5298036246862948), FX16_CONST(-0.8481203448032971), - FX16_CONST(0.5285020015422285), FX16_CONST(-0.8489320552116396), - FX16_CONST(0.5271991347819013), FX16_CONST(-0.8497417680008525), - FX16_CONST(0.5258950274710849), FX16_CONST(-0.8505494812656034), - FX16_CONST(0.524589682678469), FX16_CONST(-0.8513551931052652), - FX16_CONST(0.5232831034756567), FX16_CONST(-0.8521589016239196), - FX16_CONST(0.5219752929371544), FX16_CONST(-0.8529606049303636), - FX16_CONST(0.5206662541403672), FX16_CONST(-0.8537603011381114), - FX16_CONST(0.5193559901655898), FX16_CONST(-0.8545579883654004), - FX16_CONST(0.5180445040959994), FX16_CONST(-0.8553536647351959), - FX16_CONST(0.5167317990176498), FX16_CONST(-0.8561473283751945), - FX16_CONST(0.5154178780194631), FX16_CONST(-0.8569389774178287), - FX16_CONST(0.5141027441932218), FX16_CONST(-0.857728610000272), - FX16_CONST(0.512786400633563), FX16_CONST(-0.8585162242644429), - FX16_CONST(0.5114688504379705), FX16_CONST(-0.8593018183570084), - FX16_CONST(0.5101500967067668), FX16_CONST(-0.8600853904293901), - FX16_CONST(0.5088301425431073), FX16_CONST(-0.8608669386377672), - FX16_CONST(0.507508991052971), FX16_CONST(-0.8616464611430813), - FX16_CONST(0.5061866453451552), FX16_CONST(-0.8624239561110405), - FX16_CONST(0.5048631085312677), FX16_CONST(-0.863199421712124), - FX16_CONST(0.5035383837257176), FX16_CONST(-0.8639728561215867), - FX16_CONST(0.5022124740457107), FX16_CONST(-0.8647442575194624), - FX16_CONST(0.5008853826112409), FX16_CONST(-0.865513624090569), - FX16_CONST(0.4995571125450819), FX16_CONST(-0.866280954024513), - FX16_CONST(0.49822766697278176), FX16_CONST(-0.8670462455156926), - FX16_CONST(0.4968970490226547), FX16_CONST(-0.8678094967633032), - FX16_CONST(0.49556526182577254), FX16_CONST(-0.8685707059713409), - FX16_CONST(0.49423230851596), FX16_CONST(-0.8693298713486066), - FX16_CONST(0.49289819222978415), FX16_CONST(-0.8700869911087113), - FX16_CONST(0.4915629161065499), FX16_CONST(-0.8708420634700789), - FX16_CONST(0.4902264832882914), FX16_CONST(-0.8715950866559509), - FX16_CONST(0.4888888969197632), FX16_CONST(-0.8723460588943914), - FX16_CONST(0.4875501601484359), FX16_CONST(-0.8730949784182901), - FX16_CONST(0.4862102761244866), FX16_CONST(-0.8738418434653668), - FX16_CONST(0.4848692480007911), FX16_CONST(-0.8745866522781761), - FX16_CONST(0.48352707893291863), FX16_CONST(-0.8753294031041109), - FX16_CONST(0.4821837720791229), FX16_CONST(-0.8760700941954065), - FX16_CONST(0.48083933060033396), FX16_CONST(-0.8768087238091457), - FX16_CONST(0.4794937576601533), FX16_CONST(-0.8775452902072611), - FX16_CONST(0.4781470564248432), FX16_CONST(-0.8782797916565415), - FX16_CONST(0.4767992300633221), FX16_CONST(-0.8790122264286335), - FX16_CONST(0.4754502817471561), FX16_CONST(-0.8797425928000473), - FX16_CONST(0.4741002146505501), FX16_CONST(-0.8804708890521608), - FX16_CONST(0.47274903195034274), FX16_CONST(-0.8811971134712221), - FX16_CONST(0.4713967368259978), FX16_CONST(-0.8819212643483549), - FX16_CONST(0.4700433324595957), FX16_CONST(-0.8826433399795628), - FX16_CONST(0.46868882203582785), FX16_CONST(-0.8833633386657317), - FX16_CONST(0.4673332087419886), FX16_CONST(-0.8840812587126349), - FX16_CONST(0.4659764957679662), FX16_CONST(-0.8847970984309378), - FX16_CONST(0.4646186863062381), FX16_CONST(-0.8855108561361998), - FX16_CONST(0.4632597835518603), FX16_CONST(-0.8862225301488805), - FX16_CONST(0.46189979070246273), FX16_CONST(-0.8869321187943422), - FX16_CONST(0.4605387109582402), FX16_CONST(-0.8876396204028538), - FX16_CONST(0.4591765475219442), FX16_CONST(-0.8883450333095962), - FX16_CONST(0.4578133035988772), FX16_CONST(-0.8890483558546646), - FX16_CONST(0.45644898239688414), FX16_CONST(-0.8897495863830727), - FX16_CONST(0.4550835871263439), FX16_CONST(-0.8904487232447579), - FX16_CONST(0.45371712100016376), FX16_CONST(-0.8911457647945833), - FX16_CONST(0.45234958723377106), FX16_CONST(-0.8918407093923426), - FX16_CONST(0.45098098904510386), FX16_CONST(-0.8925335554027646), - FX16_CONST(0.4496113296546069), FX16_CONST(-0.8932243011955152), - FX16_CONST(0.44824061228522005), FX16_CONST(-0.8939129451452031), - FX16_CONST(0.44686884016237416), FX16_CONST(-0.8945994856313827), - FX16_CONST(0.44549601651398196), FX16_CONST(-0.8952839210385574), - FX16_CONST(0.4441221445704293), FX16_CONST(-0.8959662497561851), - FX16_CONST(0.44274722756456997), FX16_CONST(-0.8966464701786803), - FX16_CONST(0.4413712687317169), FX16_CONST(-0.8973245807054182), - FX16_CONST(0.4399942713096333), FX16_CONST(-0.8980005797407398), - FX16_CONST(0.43861623853852755), FX16_CONST(-0.8986744656939539), - FX16_CONST(0.43723717366104425), FX16_CONST(-0.8993462369793415), - FX16_CONST(0.43585707992225553), FX16_CONST(-0.9000158920161602), - FX16_CONST(0.434475960569656), FX16_CONST(-0.9006834292286467), - FX16_CONST(0.43309381885315207), FX16_CONST(-0.9013488470460219), - FX16_CONST(0.43171065802505726), FX16_CONST(-0.9020121439024932), - FX16_CONST(0.4303264813400829), FX16_CONST(-0.9026733182372587), - FX16_CONST(0.4289412920553296), FX16_CONST(-0.9033323684945118), - FX16_CONST(0.42755509343028203), FX16_CONST(-0.9039892931234433), - FX16_CONST(0.42616788872679984), FX16_CONST(-0.9046440905782461), - FX16_CONST(0.42477968120910886), FX16_CONST(-0.9052967593181187), - FX16_CONST(0.42339047414379594), FX16_CONST(-0.9059472978072685), - FX16_CONST(0.42200027079979985), FX16_CONST(-0.9065957045149153), - FX16_CONST(0.42060907444840256), FX16_CONST(-0.9072419779152958), - FX16_CONST(0.41921688836322424), FX16_CONST(-0.907886116487666), - FX16_CONST(0.41782371582021244), FX16_CONST(-0.9085281187163061), - FX16_CONST(0.41642956009763715), FX16_CONST(-0.9091679830905224), - FX16_CONST(0.41503442447608185), FX16_CONST(-0.9098057081046521), - FX16_CONST(0.41363831223843467), FX16_CONST(-0.9104412922580671), - FX16_CONST(0.41224122666988283), FX16_CONST(-0.9110747340551764), - FX16_CONST(0.41084317105790413), FX16_CONST(-0.9117060320054298), - FX16_CONST(0.4094441486922577), FX16_CONST(-0.9123351846233227), - FX16_CONST(0.4080441628649786), FX16_CONST(-0.9129621904283982), - FX16_CONST(0.4066432168703692), FX16_CONST(-0.9135870479452507), - FX16_CONST(0.4052413140049899), FX16_CONST(-0.9142097557035307), - FX16_CONST(0.4038384575676544), FX16_CONST(-0.914830312237946), - FX16_CONST(0.4024346508594186), FX16_CONST(-0.9154487160882677), - FX16_CONST(0.4010298971835756), FX16_CONST(-0.9160649657993317), - FX16_CONST(0.39962419984564707), FX16_CONST(-0.9166790599210426), - FX16_CONST(0.39821756215337367), FX16_CONST(-0.9172909970083779), - FX16_CONST(0.39680998741671025), FX16_CONST(-0.9179007756213905), - FX16_CONST(0.3954014789478165), FX16_CONST(-0.9185083943252121), - FX16_CONST(0.39399204006104815), FX16_CONST(-0.9191138516900578), - FX16_CONST(0.3925816740729514), FX16_CONST(-0.9197171462912274), - FX16_CONST(0.39117038430225404), FX16_CONST(-0.9203182767091105), - FX16_CONST(0.38975817406985647), FX16_CONST(-0.9209172415291894), - FX16_CONST(0.3883450466988266), FX16_CONST(-0.9215140393420418), - FX16_CONST(0.38693100551438875), FX16_CONST(-0.9221086687433451), - FX16_CONST(0.38551605384391885), FX16_CONST(-0.9227011283338786), - FX16_CONST(0.3841001950169353), FX16_CONST(-0.9232914167195275), - FX16_CONST(0.3826834323650899), FX16_CONST(-0.9238795325112867), - FX16_CONST(0.3812657692221623), FX16_CONST(-0.9244654743252626), - FX16_CONST(0.3798472089240514), FX16_CONST(-0.9250492407826775), - FX16_CONST(0.37842775480876567), FX16_CONST(-0.9256308305098727), - FX16_CONST(0.37700741021641815), FX16_CONST(-0.9262102421383114), - FX16_CONST(0.3755861784892174), FX16_CONST(-0.9267874743045817), - FX16_CONST(0.37416406297145804), FX16_CONST(-0.9273625256504011), - FX16_CONST(0.3727410670095161), FX16_CONST(-0.9279353948226178), - FX16_CONST(0.3713171939518377), FX16_CONST(-0.9285060804732155), - FX16_CONST(0.3698924471489341), FX16_CONST(-0.9290745812593159), - FX16_CONST(0.3684668299533726), FX16_CONST(-0.9296408958431812), - FX16_CONST(0.3670403457197673), FX16_CONST(-0.9302050228922191), - FX16_CONST(0.3656129978047738), FX16_CONST(-0.9307669610789837), - FX16_CONST(0.3641847895670801), FX16_CONST(-0.9313267090811803), - FX16_CONST(0.3627557243673973), FX16_CONST(-0.931884265581668), - FX16_CONST(0.3613258055684542), FX16_CONST(-0.9324396292684625), - FX16_CONST(0.35989503653498833), FX16_CONST(-0.9329927988347388), - FX16_CONST(0.3584634206337366), FX16_CONST(-0.9335437729788362), - FX16_CONST(0.3570309612334303), FX16_CONST(-0.9340925504042588), - FX16_CONST(0.355597661704784), FX16_CONST(-0.9346391298196807), - FX16_CONST(0.3541635254204904), FX16_CONST(-0.9351835099389476), - FX16_CONST(0.35272855575521095), FX16_CONST(-0.9357256894810803), - FX16_CONST(0.3512927560855672), FX16_CONST(-0.9362656671702783), - FX16_CONST(0.34985612979013486), FX16_CONST(-0.9368034417359217), - FX16_CONST(0.3484186802494348), FX16_CONST(-0.9373390119125748), - FX16_CONST(0.34698041084592374), FX16_CONST(-0.9378723764399898), - FX16_CONST(0.345541324963989), FX16_CONST(-0.9384035340631082), - FX16_CONST(0.34410142598993904), FX16_CONST(-0.9389324835320645), - FX16_CONST(0.34266071731199443), FX16_CONST(-0.9394592236021899), - FX16_CONST(0.3412192023202827), FX16_CONST(-0.9399837530340138), - FX16_CONST(0.339776884406827), FX16_CONST(-0.9405060705932683), - FX16_CONST(0.3383337669655412), FX16_CONST(-0.9410261750508893), - FX16_CONST(0.33688985339222033), FX16_CONST(-0.9415440651830207), - FX16_CONST(0.3354451470845317), FX16_CONST(-0.9420597397710173), - FX16_CONST(0.3339996514420094), FX16_CONST(-0.9425731976014469), - FX16_CONST(0.33255336986604445), FX16_CONST(-0.9430844374660934), - FX16_CONST(0.3311063057598765), FX16_CONST(-0.9435934581619604), - FX16_CONST(0.32965846252858744), FX16_CONST(-0.9441002584912727), - FX16_CONST(0.3282098435790927), FX16_CONST(-0.9446048372614801), - FX16_CONST(0.32676045232013184), FX16_CONST(-0.9451071932852606), - FX16_CONST(0.32531029216226326), FX16_CONST(-0.9456073253805212), - FX16_CONST(0.323859366517853), FX16_CONST(-0.9461052323704033), - FX16_CONST(0.32240767880106985), FX16_CONST(-0.9466009130832835), - FX16_CONST(0.3209552324278755), FX16_CONST(-0.9470943663527771), - FX16_CONST(0.3195020308160158), FX16_CONST(-0.9475855910177411), - FX16_CONST(0.3180480773850149), FX16_CONST(-0.9480745859222762), - FX16_CONST(0.31659337555616607), FX16_CONST(-0.9485613499157303), - FX16_CONST(0.3151379287525225), FX16_CONST(-0.9490458818527006), - FX16_CONST(0.3136817403988914), FX16_CONST(-0.9495281805930367), - FX16_CONST(0.3122248139218251), FX16_CONST(-0.950008245001843), - FX16_CONST(0.31076715274961153), FX16_CONST(-0.9504860739494817), - FX16_CONST(0.309308760312269), FX16_CONST(-0.950961666311575), - FX16_CONST(0.30784964004153503), FX16_CONST(-0.9514350209690083), - FX16_CONST(0.3063897953708609), FX16_CONST(-0.9519061368079323), - FX16_CONST(0.30492922973540265), FX16_CONST(-0.9523750127197658), - FX16_CONST(0.3034679465720114), FX16_CONST(-0.9528416476011986), - FX16_CONST(0.30200594931922803), FX16_CONST(-0.9533060403541939), - FX16_CONST(0.3005432414172737), FX16_CONST(-0.9537681898859902), - FX16_CONST(0.29907982630804053), FX16_CONST(-0.9542280951091056), - FX16_CONST(0.29761570743508614), FX16_CONST(-0.9546857549413383), - FX16_CONST(0.296150888243624), FX16_CONST(-0.9551411683057707), - FX16_CONST(0.2946853721805144), FX16_CONST(-0.9555943341307711), - FX16_CONST(0.29321916269425896), FX16_CONST(-0.9560452513499963), - FX16_CONST(0.29175226323498943), FX16_CONST(-0.956493918902395), - FX16_CONST(0.2902846772544624), FX16_CONST(-0.9569403357322088), - FX16_CONST(0.28881640820604976), FX16_CONST(-0.9573845007889759), - FX16_CONST(0.2873474595447296), FX16_CONST(-0.9578264130275329), - FX16_CONST(0.28587783472708056), FX16_CONST(-0.9582660714080177), - FX16_CONST(0.2844075372112721), FX16_CONST(-0.9587034748958715), - FX16_CONST(0.28293657045705545), FX16_CONST(-0.9591386224618419), - FX16_CONST(0.2814649379257579), FX16_CONST(-0.9595715130819845), - FX16_CONST(0.27999264308027344), FX16_CONST(-0.9600021457376658), - FX16_CONST(0.27851968938505317), FX16_CONST(-0.9604305194155658), - FX16_CONST(0.27704608030610023), FX16_CONST(-0.9608566331076795), - FX16_CONST(0.2755718193109583), FX16_CONST(-0.9612804858113206), - FX16_CONST(0.2740969098687064), FX16_CONST(-0.9617020765291225), - FX16_CONST(0.27262135544994925), FX16_CONST(-0.9621214042690415), - FX16_CONST(0.2711451595268081), FX16_CONST(-0.9625384680443592), - FX16_CONST(0.2696683255729151), FX16_CONST(-0.9629532668736839), - FX16_CONST(0.2681908570634034), FX16_CONST(-0.9633657997809539), - FX16_CONST(0.2667127574748985), FX16_CONST(-0.9637760657954398), - FX16_CONST(0.26523403028551173), FX16_CONST(-0.9641840639517458), - FX16_CONST(0.26375467897483157), FX16_CONST(-0.9645897932898126), - FX16_CONST(0.2622747070239137), FX16_CONST(-0.9649932528549203), - FX16_CONST(0.26079411791527585), FX16_CONST(-0.9653944416976893), - FX16_CONST(0.2593129151328864), FX16_CONST(-0.9657933588740836), - FX16_CONST(0.257831102162159), FX16_CONST(-0.9661900034454125), - FX16_CONST(0.2563486824899432), FX16_CONST(-0.966584374478333), - FX16_CONST(0.2548656596045147), FX16_CONST(-0.9669764710448521), - FX16_CONST(0.2533820369955701), FX16_CONST(-0.9673662922223285), - FX16_CONST(0.2518978181542172), FX16_CONST(-0.9677538370934754), - FX16_CONST(0.25041300657296534), FX16_CONST(-0.9681391047463623), - FX16_CONST(0.2489276057457201), FX16_CONST(-0.9685220942744174), - FX16_CONST(0.2474416191677735), FX16_CONST(-0.9689028047764289), - FX16_CONST(0.24595505033579465), FX16_CONST(-0.9692812353565484), - FX16_CONST(0.24446790274782448), FX16_CONST(-0.9696573851242923), - FX16_CONST(0.24298017990326407), FX16_CONST(-0.970031253194544), - FX16_CONST(0.24149188530286936), FX16_CONST(-0.9704028386875555), - FX16_CONST(0.24000302244874178), FX16_CONST(-0.9707721407289502), - FX16_CONST(0.23851359484431855), FX16_CONST(-0.9711391584497251), - FX16_CONST(0.23702360599436717), FX16_CONST(-0.9715038909862518), - FX16_CONST(0.23553305940497574), FX16_CONST(-0.9718663374802793), - FX16_CONST(0.2340419585835435), FX16_CONST(-0.9722264970789363), - FX16_CONST(0.23255030703877516), FX16_CONST(-0.9725843689347322), - FX16_CONST(0.23105810828067133), FX16_CONST(-0.9729399522055601), - FX16_CONST(0.22956536582051892), FX16_CONST(-0.9732932460546982), - FX16_CONST(0.22807208317088606), FX16_CONST(-0.9736442496508119), - FX16_CONST(0.22657826384561017), FX16_CONST(-0.9739929621679558), - FX16_CONST(0.22508391135979283), FX16_CONST(-0.9743393827855759), - FX16_CONST(0.2235890292297903), FX16_CONST(-0.9746835106885107), - FX16_CONST(0.22209362097320365), FX16_CONST(-0.9750253450669941), - FX16_CONST(0.2205976901088735), FX16_CONST(-0.975364885116657), - FX16_CONST(0.21910124015687005), FX16_CONST(-0.9757021300385285), - FX16_CONST(0.21760427463848372), FX16_CONST(-0.976037079039039), - FX16_CONST(0.21610679707621944), FX16_CONST(-0.9763697313300211), - FX16_CONST(0.21460881099378698), FX16_CONST(-0.9767000861287117), - FX16_CONST(0.21311031991609142), FX16_CONST(-0.9770281426577544), - FX16_CONST(0.2116113273692279), FX16_CONST(-0.9773539001452), - FX16_CONST(0.2101118368804698), FX16_CONST(-0.9776773578245099), - FX16_CONST(0.2086118519782635), FX16_CONST(-0.9779985149345571), - FX16_CONST(0.20711137619221884), FX16_CONST(-0.9783173707196275), - FX16_CONST(0.20561041305309938), FX16_CONST(-0.9786339244294231), - FX16_CONST(0.20410896609281684), FX16_CONST(-0.9789481753190622), - FX16_CONST(0.20260703884442138), FX16_CONST(-0.979260122649082), - FX16_CONST(0.201104634842092), FX16_CONST(-0.9795697656854405), - FX16_CONST(0.19960175762113092), FX16_CONST(-0.9798771036995176), - FX16_CONST(0.1980984107179538), FX16_CONST(-0.9801821359681173), - FX16_CONST(0.19659459767008028), FX16_CONST(-0.9804848617734694), - FX16_CONST(0.1950903220161286), FX16_CONST(-0.9807852804032304), - FX16_CONST(0.1935855872958038), FX16_CONST(-0.9810833911504866), - FX16_CONST(0.19208039704989247), FX16_CONST(-0.9813791933137546), - FX16_CONST(0.19057475482025307), FX16_CONST(-0.9816726861969831), - FX16_CONST(0.18906866414980636), FX16_CONST(-0.9819638691095552), - FX16_CONST(0.18756212858252957), FX16_CONST(-0.9822527413662894), - FX16_CONST(0.1860551516634469), FX16_CONST(-0.9825393022874412), - FX16_CONST(0.1845477369386197), FX16_CONST(-0.9828235511987052), - FX16_CONST(0.1830398879551409), FX16_CONST(-0.9831054874312163), - FX16_CONST(0.18153160826112522), FX16_CONST(-0.9833851103215512), - FX16_CONST(0.18002290140569957), FX16_CONST(-0.9836624192117303), - FX16_CONST(0.17851377093899742), FX16_CONST(-0.9839374134492189), - FX16_CONST(0.17700422041214894), FX16_CONST(-0.984210092386929), - FX16_CONST(0.17549425337727145), FX16_CONST(-0.9844804553832209), - FX16_CONST(0.17398387338746413), FX16_CONST(-0.9847485018019042), - FX16_CONST(0.17247308399679612), FX16_CONST(-0.9850142310122398), - FX16_CONST(0.17096188876030122), FX16_CONST(-0.9852776423889412), - FX16_CONST(0.1694502912339682), FX16_CONST(-0.9855387353121761), - FX16_CONST(0.16793829497473128), FX16_CONST(-0.9857975091675674), - FX16_CONST(0.16642590354046405), FX16_CONST(-0.9860539633461954), - FX16_CONST(0.16491312048997014), FX16_CONST(-0.9863080972445986), - FX16_CONST(0.16339994938297328), FX16_CONST(-0.9865599102647754), - FX16_CONST(0.16188639378011174), FX16_CONST(-0.9868094018141855), - FX16_CONST(0.16037245724292845), FX16_CONST(-0.987056571305751), - FX16_CONST(0.15885814333386147), FX16_CONST(-0.9873014181578584), - FX16_CONST(0.15734345561623855), FX16_CONST(-0.9875439417943592), - FX16_CONST(0.15582839765426537), FX16_CONST(-0.9877841416445722), - FX16_CONST(0.15431297301302008), FX16_CONST(-0.9880220171432835), - FX16_CONST(0.15279718525844369), FX16_CONST(-0.9882575677307495), - FX16_CONST(0.1512810379573303), FX16_CONST(-0.9884907928526966), - FX16_CONST(0.14976453467732145), FX16_CONST(-0.9887216919603238), - FX16_CONST(0.14824767898689625), FX16_CONST(-0.988950264510303), - FX16_CONST(0.1467304744553618), FX16_CONST(-0.989176509964781), - FX16_CONST(0.14521292465284735), FX16_CONST(-0.9894004277913804), - FX16_CONST(0.14369503315029464), FX16_CONST(-0.9896220174632008), - FX16_CONST(0.1421768035194481), FX16_CONST(-0.9898412784588205), - FX16_CONST(0.14065823933284954), FX16_CONST(-0.990058210262297), - FX16_CONST(0.13913934416382634), FX16_CONST(-0.9902728123631691), - FX16_CONST(0.13762012158648604), FX16_CONST(-0.9904850842564571), - FX16_CONST(0.13610057517570648), FX16_CONST(-0.9906950254426646), - FX16_CONST(0.13458070850712628), FX16_CONST(-0.99090263542778), - FX16_CONST(0.133060525157139), FX16_CONST(-0.9911079137232769), - FX16_CONST(0.13154002870288334), FX16_CONST(-0.9913108598461154), - FX16_CONST(0.13001922272223343), FX16_CONST(-0.9915114733187439), - FX16_CONST(0.12849811079379309), FX16_CONST(-0.9917097536690995), - FX16_CONST(0.12697669649688606), FX16_CONST(-0.9919057004306093), - FX16_CONST(0.12545498341154626), FX16_CONST(-0.9920993131421918), - FX16_CONST(0.12393297511851248), FX16_CONST(-0.9922905913482573), - FX16_CONST(0.12241067519921635), FX16_CONST(-0.99247953459871), - FX16_CONST(0.12088808723577706), FX16_CONST(-0.992666142448948), - FX16_CONST(0.11936521481099163), FX16_CONST(-0.9928504144598651), - FX16_CONST(0.11784206150832509), FX16_CONST(-0.9930323501978514), - FX16_CONST(0.11631863091190471), FX16_CONST(-0.9932119492347945), - FX16_CONST(0.1147949266065103), FX16_CONST(-0.9933892111480807), - FX16_CONST(0.11327095217756442), FX16_CONST(-0.9935641355205953), - FX16_CONST(0.1117467112111265), FX16_CONST(-0.9937367219407246), - FX16_CONST(0.11022220729388324), FX16_CONST(-0.9939069700023561), - FX16_CONST(0.10869744401313874), FX16_CONST(-0.9940748793048794), - FX16_CONST(0.10717242495680916), FX16_CONST(-0.9942404494531879), - FX16_CONST(0.10564715371341075), FX16_CONST(-0.9944036800576791), - FX16_CONST(0.10412163387205457), FX16_CONST(-0.9945645707342554), - FX16_CONST(0.10259586902243656), FX16_CONST(-0.9947231211043257), - FX16_CONST(0.10106986275482793), FX16_CONST(-0.9948793307948056), - FX16_CONST(0.09954361866006928), FX16_CONST(-0.9950331994381186), - FX16_CONST(0.09801714032956083), FX16_CONST(-0.9951847266721968), - FX16_CONST(0.09649043135525266), FX16_CONST(-0.9953339121404823), - FX16_CONST(0.09496349532963891), FX16_CONST(-0.9954807554919269), - FX16_CONST(0.09343633584574797), FX16_CONST(-0.9956252563809943), - FX16_CONST(0.09190895649713275), FX16_CONST(-0.9957674144676598), - FX16_CONST(0.09038136087786529), FX16_CONST(-0.9959072294174117), - FX16_CONST(0.08885355258252475), FX16_CONST(-0.996044700901252), - FX16_CONST(0.08732553520619206), FX16_CONST(-0.996179828595697), - FX16_CONST(0.08579731234444016), FX16_CONST(-0.996312612182778), - FX16_CONST(0.08426888759332418), FX16_CONST(-0.9964430513500426), - FX16_CONST(0.08274026454937564), FX16_CONST(-0.9965711457905548), - FX16_CONST(0.08121144680959266), FX16_CONST(-0.9966968952028961), - FX16_CONST(0.0796824379714302), FX16_CONST(-0.9968202992911657), - FX16_CONST(0.07815324163279415), FX16_CONST(-0.9969413577649822), - FX16_CONST(0.07662386139203169), FX16_CONST(-0.997060070339483), - FX16_CONST(0.07509430084792135), FX16_CONST(-0.9971764367353261), - FX16_CONST(0.07356456359966773), FX16_CONST(-0.9972904566786902), - FX16_CONST(0.07203465324688947), FX16_CONST(-0.9974021299012753), - FX16_CONST(0.07050457338961386), FX16_CONST(-0.9975114561403035), - FX16_CONST(0.06897432762826702), FX16_CONST(-0.9976184351385196), - FX16_CONST(0.06744391956366418), FX16_CONST(-0.9977230666441916), - FX16_CONST(0.06591335279700376), FX16_CONST(-0.9978253504111116), - FX16_CONST(0.0643826309298577), FX16_CONST(-0.997925286198596), - FX16_CONST(0.06285175756416149), FX16_CONST(-0.9980228737714862), - FX16_CONST(0.06132073630220849), FX16_CONST(-0.9981181129001492), - FX16_CONST(0.05978957074664007), FX16_CONST(-0.9982110033604782), - FX16_CONST(0.058258264500435794), FX16_CONST(-0.9983015449338929), - FX16_CONST(0.05672682116690807), FX16_CONST(-0.9983897374073402), - FX16_CONST(0.055195244349690094), FX16_CONST(-0.9984755805732948), - FX16_CONST(0.05366353765273052), FX16_CONST(-0.9985590742297593), - FX16_CONST(0.052131704680283594), FX16_CONST(-0.9986402181802652), - FX16_CONST(0.05059974903689939), FX16_CONST(-0.9987190122338729), - FX16_CONST(0.049067674327417966), FX16_CONST(-0.9987954562051724), - FX16_CONST(0.04753548415695954), FX16_CONST(-0.9988695499142836), - FX16_CONST(0.046003182130914706), FX16_CONST(-0.9989412931868569), - FX16_CONST(0.044470771854938584), FX16_CONST(-0.9990106858540734), - FX16_CONST(0.04293825693494102), FX16_CONST(-0.9990777277526454), - FX16_CONST(0.041405640977076774), FX16_CONST(-0.9991424187248169), - FX16_CONST(0.03987292758774013), FX16_CONST(-0.9992047586183639), - FX16_CONST(0.038340120373552854), FX16_CONST(-0.9992647472865944), - FX16_CONST(0.03680722294135883), FX16_CONST(-0.9993223845883495), - FX16_CONST(0.03527423889821423), FX16_CONST(-0.9993776703880028), - FX16_CONST(0.033741171851377705), FX16_CONST(-0.9994306045554617), - FX16_CONST(0.032208025408304544), FX16_CONST(-0.999481186966167), - FX16_CONST(0.030674803176636865), FX16_CONST(-0.9995294175010931), - FX16_CONST(0.029141508764193802), FX16_CONST(-0.9995752960467492), - FX16_CONST(0.02760814577896566), FX16_CONST(-0.9996188224951786), - FX16_CONST(0.0260747178291041), FX16_CONST(-0.9996599967439592), - FX16_CONST(0.024541228522912326), FX16_CONST(-0.9996988186962042), - FX16_CONST(0.023007681468839695), FX16_CONST(-0.9997352882605617), - FX16_CONST(0.021474080275469667), FX16_CONST(-0.9997694053512153), - FX16_CONST(0.019940428551514438), FX16_CONST(-0.9998011698878843), - FX16_CONST(0.0184067299058051), FX16_CONST(-0.9998305817958234), - FX16_CONST(0.016872987947281835), FX16_CONST(-0.9998576410058239), - FX16_CONST(0.01533920628498806), FX16_CONST(-0.9998823474542126), - FX16_CONST(0.013805388528060632), FX16_CONST(-0.9999047010828528), - FX16_CONST(0.012271538285720007), FX16_CONST(-0.9999247018391445), - FX16_CONST(0.01073765916726441), FX16_CONST(-0.9999423496760239), - FX16_CONST(0.00920375478206002), FX16_CONST(-0.9999576445519639), - FX16_CONST(0.007669828739531138), FX16_CONST(-0.9999705864309741), - FX16_CONST(0.006135884649154799), FX16_CONST(-0.9999811752826011), - FX16_CONST(0.004601926120448733), FX16_CONST(-0.9999894110819284), - FX16_CONST(0.003067956762965977), FX16_CONST(-0.9999952938095762), - FX16_CONST(0.0015339801862850493), FX16_CONST(-0.9999988234517019), - FX16_CONST(1.2246467991473532e-16), FX16_CONST(-1.0), - FX16_CONST(-0.0015339801862848043), FX16_CONST(-0.9999988234517019), - FX16_CONST(-0.0030679567629657324), FX16_CONST(-0.9999952938095762), - FX16_CONST(-0.004601926120448488), FX16_CONST(-0.9999894110819284), - FX16_CONST(-0.006135884649154554), FX16_CONST(-0.9999811752826011), - FX16_CONST(-0.007669828739530893), FX16_CONST(-0.9999705864309741), - FX16_CONST(-0.009203754782059776), FX16_CONST(-0.9999576445519639), - FX16_CONST(-0.010737659167264166), FX16_CONST(-0.9999423496760239), - FX16_CONST(-0.012271538285719762), FX16_CONST(-0.9999247018391445), - FX16_CONST(-0.013805388528060387), FX16_CONST(-0.9999047010828529), - FX16_CONST(-0.015339206284987816), FX16_CONST(-0.9998823474542126), - FX16_CONST(-0.01687298794728159), FX16_CONST(-0.9998576410058239), - FX16_CONST(-0.01840672990580486), FX16_CONST(-0.9998305817958234), - FX16_CONST(-0.01994042855151419), FX16_CONST(-0.9998011698878843), - FX16_CONST(-0.02147408027546942), FX16_CONST(-0.9997694053512153), - FX16_CONST(-0.02300768146883945), FX16_CONST(-0.9997352882605617), - FX16_CONST(-0.02454122852291208), FX16_CONST(-0.9996988186962042), - FX16_CONST(-0.026074717829103856), FX16_CONST(-0.9996599967439592), - FX16_CONST(-0.027608145778965414), FX16_CONST(-0.9996188224951786), - FX16_CONST(-0.029141508764193556), FX16_CONST(-0.9995752960467492), - FX16_CONST(-0.03067480317663662), FX16_CONST(-0.9995294175010931), - FX16_CONST(-0.032208025408304294), FX16_CONST(-0.999481186966167), - FX16_CONST(-0.033741171851377455), FX16_CONST(-0.9994306045554617), - FX16_CONST(-0.03527423889821398), FX16_CONST(-0.9993776703880028), - FX16_CONST(-0.03680722294135858), FX16_CONST(-0.9993223845883495), - FX16_CONST(-0.03834012037355261), FX16_CONST(-0.9992647472865944), - FX16_CONST(-0.03987292758773989), FX16_CONST(-0.9992047586183639), - FX16_CONST(-0.04140564097707653), FX16_CONST(-0.9991424187248169), - FX16_CONST(-0.04293825693494078), FX16_CONST(-0.9990777277526454), - FX16_CONST(-0.044470771854938335), FX16_CONST(-0.9990106858540734), - FX16_CONST(-0.046003182130914456), FX16_CONST(-0.9989412931868569), - FX16_CONST(-0.047535484156959296), FX16_CONST(-0.9988695499142836), - FX16_CONST(-0.049067674327417724), FX16_CONST(-0.9987954562051724), - FX16_CONST(-0.05059974903689915), FX16_CONST(-0.9987190122338729), - FX16_CONST(-0.05213170468028335), FX16_CONST(-0.9986402181802653), - FX16_CONST(-0.05366353765273028), FX16_CONST(-0.9985590742297593), - FX16_CONST(-0.05519524434968985), FX16_CONST(-0.9984755805732948), - FX16_CONST(-0.05672682116690782), FX16_CONST(-0.9983897374073402), - FX16_CONST(-0.05825826450043555), FX16_CONST(-0.9983015449338929), - FX16_CONST(-0.05978957074663983), FX16_CONST(-0.9982110033604782), - FX16_CONST(-0.061320736302208245), FX16_CONST(-0.9981181129001492), - FX16_CONST(-0.06285175756416124), FX16_CONST(-0.9980228737714862), - FX16_CONST(-0.06438263092985745), FX16_CONST(-0.997925286198596), - FX16_CONST(-0.06591335279700353), FX16_CONST(-0.9978253504111116), - FX16_CONST(-0.06744391956366393), FX16_CONST(-0.9977230666441916), - FX16_CONST(-0.06897432762826677), FX16_CONST(-0.9976184351385196), - FX16_CONST(-0.0705045733896136), FX16_CONST(-0.9975114561403035), - FX16_CONST(-0.07203465324688924), FX16_CONST(-0.9974021299012753), - FX16_CONST(-0.0735645635996675), FX16_CONST(-0.9972904566786902), - FX16_CONST(-0.0750943008479211), FX16_CONST(-0.9971764367353262), - FX16_CONST(-0.07662386139203144), FX16_CONST(-0.997060070339483), - FX16_CONST(-0.0781532416327939), FX16_CONST(-0.9969413577649822), - FX16_CONST(-0.07968243797142995), FX16_CONST(-0.9968202992911658), - FX16_CONST(-0.08121144680959243), FX16_CONST(-0.9966968952028961), - FX16_CONST(-0.0827402645493754), FX16_CONST(-0.9965711457905548), - FX16_CONST(-0.08426888759332393), FX16_CONST(-0.9964430513500426), - FX16_CONST(-0.08579731234443992), FX16_CONST(-0.996312612182778), - FX16_CONST(-0.08732553520619181), FX16_CONST(-0.996179828595697), - FX16_CONST(-0.0888535525825245), FX16_CONST(-0.996044700901252), - FX16_CONST(-0.09038136087786505), FX16_CONST(-0.9959072294174117), - FX16_CONST(-0.09190895649713252), FX16_CONST(-0.9957674144676598), - FX16_CONST(-0.09343633584574773), FX16_CONST(-0.9956252563809943), - FX16_CONST(-0.09496349532963866), FX16_CONST(-0.9954807554919269), - FX16_CONST(-0.09649043135525241), FX16_CONST(-0.9953339121404823), - FX16_CONST(-0.09801714032956059), FX16_CONST(-0.9951847266721969), - FX16_CONST(-0.09954361866006904), FX16_CONST(-0.9950331994381186), - FX16_CONST(-0.10106986275482768), FX16_CONST(-0.9948793307948056), - FX16_CONST(-0.10259586902243631), FX16_CONST(-0.9947231211043257), - FX16_CONST(-0.10412163387205432), FX16_CONST(-0.9945645707342555), - FX16_CONST(-0.10564715371341052), FX16_CONST(-0.9944036800576791), - FX16_CONST(-0.10717242495680891), FX16_CONST(-0.9942404494531879), - FX16_CONST(-0.1086974440131385), FX16_CONST(-0.9940748793048795), - FX16_CONST(-0.110222207293883), FX16_CONST(-0.9939069700023561), - FX16_CONST(-0.11174671121112625), FX16_CONST(-0.9937367219407247), - FX16_CONST(-0.11327095217756417), FX16_CONST(-0.9935641355205953), - FX16_CONST(-0.11479492660651007), FX16_CONST(-0.9933892111480807), - FX16_CONST(-0.11631863091190447), FX16_CONST(-0.9932119492347946), - FX16_CONST(-0.11784206150832484), FX16_CONST(-0.9930323501978514), - FX16_CONST(-0.11936521481099138), FX16_CONST(-0.9928504144598651), - FX16_CONST(-0.12088808723577682), FX16_CONST(-0.992666142448948), - FX16_CONST(-0.1224106751992161), FX16_CONST(-0.99247953459871), - FX16_CONST(-0.12393297511851223), FX16_CONST(-0.9922905913482574), - FX16_CONST(-0.125454983411546), FX16_CONST(-0.9920993131421918), - FX16_CONST(-0.1269766964968858), FX16_CONST(-0.9919057004306093), - FX16_CONST(-0.12849811079379284), FX16_CONST(-0.9917097536690995), - FX16_CONST(-0.13001922272223318), FX16_CONST(-0.991511473318744), - FX16_CONST(-0.1315400287028831), FX16_CONST(-0.9913108598461154), - FX16_CONST(-0.13306052515713876), FX16_CONST(-0.9911079137232769), - FX16_CONST(-0.13458070850712606), FX16_CONST(-0.99090263542778), - FX16_CONST(-0.13610057517570623), FX16_CONST(-0.9906950254426646), - FX16_CONST(-0.1376201215864858), FX16_CONST(-0.9904850842564571), - FX16_CONST(-0.13913934416382612), FX16_CONST(-0.9902728123631691), - FX16_CONST(-0.1406582393328493), FX16_CONST(-0.9900582102622971), - FX16_CONST(-0.14217680351944784), FX16_CONST(-0.9898412784588205), - FX16_CONST(-0.1436950331502944), FX16_CONST(-0.9896220174632009), - FX16_CONST(-0.14521292465284713), FX16_CONST(-0.9894004277913804), - FX16_CONST(-0.14673047445536158), FX16_CONST(-0.989176509964781), - FX16_CONST(-0.14824767898689603), FX16_CONST(-0.988950264510303), - FX16_CONST(-0.1497645346773212), FX16_CONST(-0.9887216919603238), - FX16_CONST(-0.15128103795733008), FX16_CONST(-0.9884907928526967), - FX16_CONST(-0.15279718525844344), FX16_CONST(-0.9882575677307495), - FX16_CONST(-0.15431297301301983), FX16_CONST(-0.9880220171432836), - FX16_CONST(-0.15582839765426512), FX16_CONST(-0.9877841416445722), - FX16_CONST(-0.1573434556162383), FX16_CONST(-0.9875439417943592), - FX16_CONST(-0.15885814333386122), FX16_CONST(-0.9873014181578584), - FX16_CONST(-0.1603724572429282), FX16_CONST(-0.987056571305751), - FX16_CONST(-0.1618863937801115), FX16_CONST(-0.9868094018141855), - FX16_CONST(-0.16339994938297306), FX16_CONST(-0.9865599102647755), - FX16_CONST(-0.1649131204899699), FX16_CONST(-0.9863080972445987), - FX16_CONST(-0.16642590354046383), FX16_CONST(-0.9860539633461954), - FX16_CONST(-0.16793829497473103), FX16_CONST(-0.9857975091675675), - FX16_CONST(-0.169450291233968), FX16_CONST(-0.9855387353121761), - FX16_CONST(-0.17096188876030097), FX16_CONST(-0.9852776423889413), - FX16_CONST(-0.17247308399679587), FX16_CONST(-0.9850142310122398), - FX16_CONST(-0.17398387338746388), FX16_CONST(-0.9847485018019042), - FX16_CONST(-0.1754942533772712), FX16_CONST(-0.9844804553832209), - FX16_CONST(-0.1770042204121487), FX16_CONST(-0.9842100923869291), - FX16_CONST(-0.17851377093899717), FX16_CONST(-0.9839374134492189), - FX16_CONST(-0.18002290140569935), FX16_CONST(-0.9836624192117303), - FX16_CONST(-0.18153160826112497), FX16_CONST(-0.9833851103215512), - FX16_CONST(-0.18303988795514065), FX16_CONST(-0.9831054874312164), - FX16_CONST(-0.18454773693861948), FX16_CONST(-0.9828235511987053), - FX16_CONST(-0.18605515166344666), FX16_CONST(-0.9825393022874412), - FX16_CONST(-0.18756212858252932), FX16_CONST(-0.9822527413662895), - FX16_CONST(-0.1890686641498061), FX16_CONST(-0.9819638691095552), - FX16_CONST(-0.19057475482025282), FX16_CONST(-0.9816726861969831), - FX16_CONST(-0.19208039704989222), FX16_CONST(-0.9813791933137547), - FX16_CONST(-0.19358558729580355), FX16_CONST(-0.9810833911504867), - FX16_CONST(-0.19509032201612836), FX16_CONST(-0.9807852804032304), - FX16_CONST(-0.19659459767008003), FX16_CONST(-0.9804848617734694), - FX16_CONST(-0.19809841071795356), FX16_CONST(-0.9801821359681174), - FX16_CONST(-0.19960175762113067), FX16_CONST(-0.9798771036995177), - FX16_CONST(-0.20110463484209176), FX16_CONST(-0.9795697656854405), - FX16_CONST(-0.20260703884442113), FX16_CONST(-0.979260122649082), - FX16_CONST(-0.20410896609281662), FX16_CONST(-0.9789481753190622), - FX16_CONST(-0.20561041305309916), FX16_CONST(-0.9786339244294232), - FX16_CONST(-0.2071113761922186), FX16_CONST(-0.9783173707196277), - FX16_CONST(-0.20861185197826326), FX16_CONST(-0.9779985149345571), - FX16_CONST(-0.21011183688046955), FX16_CONST(-0.97767735782451), - FX16_CONST(-0.21161132736922766), FX16_CONST(-0.9773539001452), - FX16_CONST(-0.2131103199160912), FX16_CONST(-0.9770281426577544), - FX16_CONST(-0.21460881099378673), FX16_CONST(-0.9767000861287118), - FX16_CONST(-0.21610679707621921), FX16_CONST(-0.9763697313300213), - FX16_CONST(-0.21760427463848347), FX16_CONST(-0.9760370790390391), - FX16_CONST(-0.2191012401568698), FX16_CONST(-0.9757021300385286), - FX16_CONST(-0.22059769010887326), FX16_CONST(-0.975364885116657), - FX16_CONST(-0.22209362097320343), FX16_CONST(-0.9750253450669941), - FX16_CONST(-0.22358902922979004), FX16_CONST(-0.9746835106885107), - FX16_CONST(-0.2250839113597926), FX16_CONST(-0.9743393827855759), - FX16_CONST(-0.22657826384560992), FX16_CONST(-0.973992962167956), - FX16_CONST(-0.22807208317088581), FX16_CONST(-0.9736442496508119), - FX16_CONST(-0.2295653658205187), FX16_CONST(-0.9732932460546982), - FX16_CONST(-0.23105810828067108), FX16_CONST(-0.9729399522055602), - FX16_CONST(-0.23255030703877494), FX16_CONST(-0.9725843689347323), - FX16_CONST(-0.23404195858354326), FX16_CONST(-0.9722264970789364), - FX16_CONST(-0.23553305940497551), FX16_CONST(-0.9718663374802794), - FX16_CONST(-0.23702360599436695), FX16_CONST(-0.9715038909862519), - FX16_CONST(-0.2385135948443183), FX16_CONST(-0.9711391584497252), - FX16_CONST(-0.24000302244874153), FX16_CONST(-0.9707721407289502), - FX16_CONST(-0.2414918853028691), FX16_CONST(-0.9704028386875555), - FX16_CONST(-0.24298017990326382), FX16_CONST(-0.970031253194544), - FX16_CONST(-0.24446790274782426), FX16_CONST(-0.9696573851242924), - FX16_CONST(-0.24595505033579443), FX16_CONST(-0.9692812353565485), - FX16_CONST(-0.24744161916777327), FX16_CONST(-0.9689028047764289), - FX16_CONST(-0.24892760574571987), FX16_CONST(-0.9685220942744174), - FX16_CONST(-0.2504130065729651), FX16_CONST(-0.9681391047463624), - FX16_CONST(-0.25189781815421697), FX16_CONST(-0.9677538370934755), - FX16_CONST(-0.2533820369955699), FX16_CONST(-0.9673662922223286), - FX16_CONST(-0.25486565960451446), FX16_CONST(-0.9669764710448522), - FX16_CONST(-0.2563486824899429), FX16_CONST(-0.9665843744783331), - FX16_CONST(-0.25783110216215877), FX16_CONST(-0.9661900034454126), - FX16_CONST(-0.2593129151328862), FX16_CONST(-0.9657933588740837), - FX16_CONST(-0.2607941179152756), FX16_CONST(-0.9653944416976894), - FX16_CONST(-0.2622747070239134), FX16_CONST(-0.9649932528549204), - FX16_CONST(-0.26375467897483135), FX16_CONST(-0.9645897932898128), - FX16_CONST(-0.2652340302855115), FX16_CONST(-0.9641840639517458), - FX16_CONST(-0.26671275747489825), FX16_CONST(-0.96377606579544), - FX16_CONST(-0.2681908570634032), FX16_CONST(-0.963365799780954), - FX16_CONST(-0.2696683255729148), FX16_CONST(-0.962953266873684), - FX16_CONST(-0.2711451595268079), FX16_CONST(-0.9625384680443592), - FX16_CONST(-0.27262135544994903), FX16_CONST(-0.9621214042690416), - FX16_CONST(-0.27409690986870616), FX16_CONST(-0.9617020765291227), - FX16_CONST(-0.2755718193109581), FX16_CONST(-0.9612804858113206), - FX16_CONST(-0.2770460803061), FX16_CONST(-0.9608566331076795), - FX16_CONST(-0.2785196893850529), FX16_CONST(-0.9604305194155659), - FX16_CONST(-0.2799926430802732), FX16_CONST(-0.960002145737666), - FX16_CONST(-0.28146493792575766), FX16_CONST(-0.9595715130819846), - FX16_CONST(-0.28293657045705517), FX16_CONST(-0.959138622461842), - FX16_CONST(-0.2844075372112718), FX16_CONST(-0.9587034748958716), - FX16_CONST(-0.28587783472708034), FX16_CONST(-0.9582660714080178), - FX16_CONST(-0.2873474595447294), FX16_CONST(-0.9578264130275329), - FX16_CONST(-0.28881640820604954), FX16_CONST(-0.9573845007889759), - FX16_CONST(-0.2902846772544621), FX16_CONST(-0.9569403357322089), - FX16_CONST(-0.2917522632349892), FX16_CONST(-0.9564939189023951), - FX16_CONST(-0.29321916269425874), FX16_CONST(-0.9560452513499964), - FX16_CONST(-0.29468537218051416), FX16_CONST(-0.9555943341307711), - FX16_CONST(-0.2961508882436238), FX16_CONST(-0.9551411683057708), - FX16_CONST(-0.2976157074350859), FX16_CONST(-0.9546857549413384), - FX16_CONST(-0.2990798263080403), FX16_CONST(-0.9542280951091057), - FX16_CONST(-0.30054324141727345), FX16_CONST(-0.9537681898859903), - FX16_CONST(-0.3020059493192278), FX16_CONST(-0.953306040354194), - FX16_CONST(-0.3034679465720112), FX16_CONST(-0.9528416476011987), - FX16_CONST(-0.30492922973540243), FX16_CONST(-0.9523750127197659), - FX16_CONST(-0.3063897953708607), FX16_CONST(-0.9519061368079323), - FX16_CONST(-0.3078496400415348), FX16_CONST(-0.9514350209690083), - FX16_CONST(-0.3093087603122688), FX16_CONST(-0.9509616663115751), - FX16_CONST(-0.3107671527496113), FX16_CONST(-0.9504860739494818), - FX16_CONST(-0.3122248139218249), FX16_CONST(-0.950008245001843), - FX16_CONST(-0.3136817403988912), FX16_CONST(-0.9495281805930368), - FX16_CONST(-0.3151379287525222), FX16_CONST(-0.9490458818527007), - FX16_CONST(-0.31659337555616585), FX16_CONST(-0.9485613499157303), - FX16_CONST(-0.31804807738501467), FX16_CONST(-0.9480745859222763), - FX16_CONST(-0.3195020308160156), FX16_CONST(-0.9475855910177412), - FX16_CONST(-0.32095523242787527), FX16_CONST(-0.9470943663527772), - FX16_CONST(-0.32240767880106963), FX16_CONST(-0.9466009130832836), - FX16_CONST(-0.3238593665178528), FX16_CONST(-0.9461052323704034), - FX16_CONST(-0.325310292162263), FX16_CONST(-0.9456073253805213), - FX16_CONST(-0.32676045232013157), FX16_CONST(-0.9451071932852606), - FX16_CONST(-0.3282098435790925), FX16_CONST(-0.9446048372614803), - FX16_CONST(-0.3296584625285872), FX16_CONST(-0.9441002584912728), - FX16_CONST(-0.33110630575987626), FX16_CONST(-0.9435934581619604), - FX16_CONST(-0.3325533698660442), FX16_CONST(-0.9430844374660935), - FX16_CONST(-0.3339996514420091), FX16_CONST(-0.942573197601447), - FX16_CONST(-0.3354451470845315), FX16_CONST(-0.9420597397710174), - FX16_CONST(-0.3368898533922201), FX16_CONST(-0.9415440651830208), - FX16_CONST(-0.3383337669655409), FX16_CONST(-0.9410261750508894), - FX16_CONST(-0.3397768844068268), FX16_CONST(-0.9405060705932684), - FX16_CONST(-0.34121920232028247), FX16_CONST(-0.9399837530340139), - FX16_CONST(-0.3426607173119942), FX16_CONST(-0.93945922360219), - FX16_CONST(-0.3441014259899388), FX16_CONST(-0.9389324835320646), - FX16_CONST(-0.34554132496398876), FX16_CONST(-0.9384035340631083), - FX16_CONST(-0.3469804108459235), FX16_CONST(-0.9378723764399899), - FX16_CONST(-0.34841868024943456), FX16_CONST(-0.937339011912575), - FX16_CONST(-0.34985612979013464), FX16_CONST(-0.9368034417359217), - FX16_CONST(-0.351292756085567), FX16_CONST(-0.9362656671702783), - FX16_CONST(-0.3527285557552107), FX16_CONST(-0.9357256894810804), - FX16_CONST(-0.3541635254204901), FX16_CONST(-0.9351835099389477), - FX16_CONST(-0.3555976617047838), FX16_CONST(-0.9346391298196808), - FX16_CONST(-0.3570309612334301), FX16_CONST(-0.9340925504042589), - FX16_CONST(-0.3584634206337364), FX16_CONST(-0.9335437729788363), - FX16_CONST(-0.3598950365349881), FX16_CONST(-0.932992798834739), - FX16_CONST(-0.36132580556845395), FX16_CONST(-0.9324396292684625), - FX16_CONST(-0.36275572436739706), FX16_CONST(-0.9318842655816681), - FX16_CONST(-0.3641847895670799), FX16_CONST(-0.9313267090811804), - FX16_CONST(-0.3656129978047736), FX16_CONST(-0.9307669610789838), - FX16_CONST(-0.36704034571976707), FX16_CONST(-0.9302050228922191), - FX16_CONST(-0.3684668299533724), FX16_CONST(-0.9296408958431812), - FX16_CONST(-0.3698924471489339), FX16_CONST(-0.9290745812593159), - FX16_CONST(-0.37131719395183743), FX16_CONST(-0.9285060804732156), - FX16_CONST(-0.37274106700951587), FX16_CONST(-0.9279353948226178), - FX16_CONST(-0.3741640629714578), FX16_CONST(-0.9273625256504011), - FX16_CONST(-0.37558617848921716), FX16_CONST(-0.9267874743045819), - FX16_CONST(-0.3770074102164179), FX16_CONST(-0.9262102421383115), - FX16_CONST(-0.3784277548087654), FX16_CONST(-0.9256308305098728), - FX16_CONST(-0.37984720892405116), FX16_CONST(-0.9250492407826776), - FX16_CONST(-0.3812657692221621), FX16_CONST(-0.9244654743252627), - FX16_CONST(-0.38268343236508967), FX16_CONST(-0.9238795325112868), - FX16_CONST(-0.3841001950169351), FX16_CONST(-0.9232914167195276), - FX16_CONST(-0.3855160538439186), FX16_CONST(-0.9227011283338786), - FX16_CONST(-0.3869310055143885), FX16_CONST(-0.9221086687433452), - FX16_CONST(-0.38834504669882636), FX16_CONST(-0.9215140393420419), - FX16_CONST(-0.38975817406985624), FX16_CONST(-0.9209172415291895), - FX16_CONST(-0.3911703843022538), FX16_CONST(-0.9203182767091106), - FX16_CONST(-0.3925816740729512), FX16_CONST(-0.9197171462912275), - FX16_CONST(-0.39399204006104793), FX16_CONST(-0.9191138516900578), - FX16_CONST(-0.3954014789478163), FX16_CONST(-0.9185083943252123), - FX16_CONST(-0.39680998741671003), FX16_CONST(-0.9179007756213906), - FX16_CONST(-0.39821756215337345), FX16_CONST(-0.917290997008378), - FX16_CONST(-0.39962419984564684), FX16_CONST(-0.9166790599210427), - FX16_CONST(-0.4010298971835754), FX16_CONST(-0.9160649657993318), - FX16_CONST(-0.4024346508594184), FX16_CONST(-0.9154487160882678), - FX16_CONST(-0.4038384575676542), FX16_CONST(-0.9148303122379461), - FX16_CONST(-0.4052413140049897), FX16_CONST(-0.9142097557035307), - FX16_CONST(-0.406643216870369), FX16_CONST(-0.9135870479452508), - FX16_CONST(-0.40804416286497835), FX16_CONST(-0.9129621904283983), - FX16_CONST(-0.4094441486922574), FX16_CONST(-0.9123351846233229), - FX16_CONST(-0.4108431710579039), FX16_CONST(-0.9117060320054299), - FX16_CONST(-0.4122412266698826), FX16_CONST(-0.9110747340551765), - FX16_CONST(-0.4136383122384344), FX16_CONST(-0.9104412922580672), - FX16_CONST(-0.41503442447608163), FX16_CONST(-0.9098057081046522), - FX16_CONST(-0.41642956009763693), FX16_CONST(-0.9091679830905225), - FX16_CONST(-0.4178237158202122), FX16_CONST(-0.9085281187163061), - FX16_CONST(-0.419216888363224), FX16_CONST(-0.9078861164876662), - FX16_CONST(-0.42060907444840234), FX16_CONST(-0.9072419779152959), - FX16_CONST(-0.4220002707997996), FX16_CONST(-0.9065957045149154), - FX16_CONST(-0.4233904741437957), FX16_CONST(-0.9059472978072686), - FX16_CONST(-0.42477968120910864), FX16_CONST(-0.9052967593181188), - FX16_CONST(-0.4261678887267996), FX16_CONST(-0.9046440905782462), - FX16_CONST(-0.4275550934302818), FX16_CONST(-0.9039892931234434), - FX16_CONST(-0.4289412920553294), FX16_CONST(-0.9033323684945119), - FX16_CONST(-0.43032648134008267), FX16_CONST(-0.9026733182372588), - FX16_CONST(-0.43171065802505704), FX16_CONST(-0.9020121439024933), - FX16_CONST(-0.43309381885315185), FX16_CONST(-0.901348847046022), - FX16_CONST(-0.43447596056965576), FX16_CONST(-0.9006834292286469), - FX16_CONST(-0.4358570799222553), FX16_CONST(-0.9000158920161603), - FX16_CONST(-0.43723717366104403), FX16_CONST(-0.8993462369793416), - FX16_CONST(-0.4386162385385273), FX16_CONST(-0.898674465693954), - FX16_CONST(-0.4399942713096331), FX16_CONST(-0.8980005797407399), - FX16_CONST(-0.44137126873171667), FX16_CONST(-0.8973245807054183), - FX16_CONST(-0.44274722756456975), FX16_CONST(-0.8966464701786804), - FX16_CONST(-0.4441221445704291), FX16_CONST(-0.8959662497561852), - FX16_CONST(-0.44549601651398174), FX16_CONST(-0.8952839210385575), - FX16_CONST(-0.44686884016237394), FX16_CONST(-0.8945994856313828), - FX16_CONST(-0.44824061228521983), FX16_CONST(-0.8939129451452033), - FX16_CONST(-0.44961132965460665), FX16_CONST(-0.8932243011955153), - FX16_CONST(-0.45098098904510364), FX16_CONST(-0.8925335554027647), - FX16_CONST(-0.45234958723377083), FX16_CONST(-0.8918407093923427), - FX16_CONST(-0.45371712100016354), FX16_CONST(-0.8911457647945834), - FX16_CONST(-0.45508358712634367), FX16_CONST(-0.890448723244758), - FX16_CONST(-0.4564489823968839), FX16_CONST(-0.8897495863830728), - FX16_CONST(-0.45781330359887695), FX16_CONST(-0.8890483558546647), - FX16_CONST(-0.459176547521944), FX16_CONST(-0.8883450333095964), - FX16_CONST(-0.46053871095824006), FX16_CONST(-0.8876396204028539), - FX16_CONST(-0.4618997907024625), FX16_CONST(-0.8869321187943423), - FX16_CONST(-0.4632597835518601), FX16_CONST(-0.8862225301488806), - FX16_CONST(-0.46461868630623787), FX16_CONST(-0.8855108561362), - FX16_CONST(-0.46597649576796596), FX16_CONST(-0.8847970984309379), - FX16_CONST(-0.46733320874198836), FX16_CONST(-0.884081258712635), - FX16_CONST(-0.4686888220358276), FX16_CONST(-0.8833633386657318), - FX16_CONST(-0.47004333245959545), FX16_CONST(-0.8826433399795629), - FX16_CONST(-0.47139673682599764), FX16_CONST(-0.881921264348355), - FX16_CONST(-0.4727490319503425), FX16_CONST(-0.8811971134712222), - FX16_CONST(-0.47410021465054986), FX16_CONST(-0.8804708890521609), - FX16_CONST(-0.47545028174715587), FX16_CONST(-0.8797425928000474), - FX16_CONST(-0.47679923006332187), FX16_CONST(-0.8790122264286336), - FX16_CONST(-0.47814705642484295), FX16_CONST(-0.8782797916565416), - FX16_CONST(-0.47949375766015306), FX16_CONST(-0.8775452902072612), - FX16_CONST(-0.48083933060033374), FX16_CONST(-0.8768087238091458), - FX16_CONST(-0.48218377207912266), FX16_CONST(-0.8760700941954066), - FX16_CONST(-0.4835270789329184), FX16_CONST(-0.875329403104111), - FX16_CONST(-0.48486924800079095), FX16_CONST(-0.8745866522781762), - FX16_CONST(-0.48621027612448636), FX16_CONST(-0.8738418434653669), - FX16_CONST(-0.48755016014843566), FX16_CONST(-0.8730949784182902), - FX16_CONST(-0.48888889691976306), FX16_CONST(-0.8723460588943915), - FX16_CONST(-0.49022648328829116), FX16_CONST(-0.8715950866559511), - FX16_CONST(-0.4915629161065497), FX16_CONST(-0.8708420634700791), - FX16_CONST(-0.4928981922297839), FX16_CONST(-0.8700869911087115), - FX16_CONST(-0.4942323085159598), FX16_CONST(-0.8693298713486067), - FX16_CONST(-0.4955652618257723), FX16_CONST(-0.868570705971341), - FX16_CONST(-0.49689704902265447), FX16_CONST(-0.8678094967633033), - FX16_CONST(-0.49822766697278154), FX16_CONST(-0.8670462455156929), - FX16_CONST(-0.4995571125450817), FX16_CONST(-0.8662809540245131), - FX16_CONST(-0.5008853826112407), FX16_CONST(-0.8655136240905691), - FX16_CONST(-0.5022124740457106), FX16_CONST(-0.8647442575194625), - FX16_CONST(-0.5035383837257175), FX16_CONST(-0.8639728561215868), - FX16_CONST(-0.5048631085312676), FX16_CONST(-0.8631994217121242), - FX16_CONST(-0.506186645345155), FX16_CONST(-0.8624239561110407), - FX16_CONST(-0.5075089910529708), FX16_CONST(-0.8616464611430814), - FX16_CONST(-0.5088301425431071), FX16_CONST(-0.8608669386377673), - FX16_CONST(-0.5101500967067666), FX16_CONST(-0.8600853904293903), - FX16_CONST(-0.5114688504379703), FX16_CONST(-0.8593018183570085), - FX16_CONST(-0.5127864006335627), FX16_CONST(-0.858516224264443), - FX16_CONST(-0.5141027441932216), FX16_CONST(-0.8577286100002721), - FX16_CONST(-0.5154178780194629), FX16_CONST(-0.8569389774178288), - FX16_CONST(-0.5167317990176497), FX16_CONST(-0.8561473283751947), - FX16_CONST(-0.5180445040959992), FX16_CONST(-0.8553536647351961), - FX16_CONST(-0.5193559901655895), FX16_CONST(-0.8545579883654005), - FX16_CONST(-0.5206662541403669), FX16_CONST(-0.8537603011381115), - FX16_CONST(-0.5219752929371543), FX16_CONST(-0.8529606049303637), - FX16_CONST(-0.5232831034756564), FX16_CONST(-0.8521589016239198), - FX16_CONST(-0.5245896826784687), FX16_CONST(-0.8513551931052653), - FX16_CONST(-0.5258950274710846), FX16_CONST(-0.8505494812656035), - FX16_CONST(-0.5271991347819011), FX16_CONST(-0.8497417680008527), - FX16_CONST(-0.5285020015422283), FX16_CONST(-0.8489320552116397), - FX16_CONST(-0.5298036246862946), FX16_CONST(-0.8481203448032972), - FX16_CONST(-0.5311040011512547), FX16_CONST(-0.8473066386858585), - FX16_CONST(-0.5324031278771978), FX16_CONST(-0.8464909387740521), - FX16_CONST(-0.533701001807153), FX16_CONST(-0.8456732469872991), - FX16_CONST(-0.5349976198870969), FX16_CONST(-0.8448535652497072), - FX16_CONST(-0.5362929790659631), FX16_CONST(-0.8440318954900665), - FX16_CONST(-0.5375870762956455), FX16_CONST(-0.8432082396418454), - FX16_CONST(-0.5388799085310082), FX16_CONST(-0.842382599643186), - FX16_CONST(-0.5401714727298929), FX16_CONST(-0.8415549774368984), - FX16_CONST(-0.5414617658531232), FX16_CONST(-0.8407253749704582), - FX16_CONST(-0.5427507848645158), FX16_CONST(-0.8398937941959996), - FX16_CONST(-0.5440385267308838), FX16_CONST(-0.8390602370703127), - FX16_CONST(-0.5453249884220461), FX16_CONST(-0.8382247055548382), - FX16_CONST(-0.5466101669108347), FX16_CONST(-0.837387201615662), - FX16_CONST(-0.5478940591731002), FX16_CONST(-0.836547727223512), - FX16_CONST(-0.5491766621877194), FX16_CONST(-0.8357062843537527), - FX16_CONST(-0.5504579729366047), FX16_CONST(-0.8348628749863801), - FX16_CONST(-0.5517379884047074), FX16_CONST(-0.8340175011060181), - FX16_CONST(-0.5530167055800274), FX16_CONST(-0.8331701647019133), - FX16_CONST(-0.55429412145362), FX16_CONST(-0.8323208677679297), - FX16_CONST(-0.555570233019602), FX16_CONST(-0.8314696123025455), - FX16_CONST(-0.5568450372751599), FX16_CONST(-0.8306164003088464), - FX16_CONST(-0.5581185312205561), FX16_CONST(-0.829761233794523), - FX16_CONST(-0.5593907118591358), FX16_CONST(-0.8289041147718651), - FX16_CONST(-0.5606615761973359), FX16_CONST(-0.8280450452577559), - FX16_CONST(-0.5619311212446894), FX16_CONST(-0.8271840272736691), - FX16_CONST(-0.5631993440138339), FX16_CONST(-0.8263210628456636), - FX16_CONST(-0.5644662415205194), FX16_CONST(-0.8254561540043776), - FX16_CONST(-0.5657318107836132), FX16_CONST(-0.8245893027850253), - FX16_CONST(-0.5669960488251085), FX16_CONST(-0.8237205112273915), - FX16_CONST(-0.5682589526701315), FX16_CONST(-0.8228497813758264), - FX16_CONST(-0.5695205193469473), FX16_CONST(-0.8219771152792416), - FX16_CONST(-0.5707807458869671), FX16_CONST(-0.8211025149911048), - FX16_CONST(-0.572039629324757), FX16_CONST(-0.8202259825694347), - FX16_CONST(-0.573297166698042), FX16_CONST(-0.8193475200767971), - FX16_CONST(-0.5745533550477157), FX16_CONST(-0.8184671295802988), - FX16_CONST(-0.5758081914178453), FX16_CONST(-0.8175848131515837), - FX16_CONST(-0.5770616728556793), FX16_CONST(-0.816700572866828), - FX16_CONST(-0.5783137964116555), FX16_CONST(-0.8158144108067339), - FX16_CONST(-0.5795645591394057), FX16_CONST(-0.8149263290565266), - FX16_CONST(-0.5808139580957643), FX16_CONST(-0.8140363297059485), - FX16_CONST(-0.5820619903407754), FX16_CONST(-0.8131444148492536), - FX16_CONST(-0.5833086529376983), FX16_CONST(-0.8122505865852039), - FX16_CONST(-0.5845539429530151), FX16_CONST(-0.8113548470170638), - FX16_CONST(-0.5857978574564389), FX16_CONST(-0.8104571982525949), - FX16_CONST(-0.5870403935209177), FX16_CONST(-0.8095576424040515), - FX16_CONST(-0.5882815482226451), FX16_CONST(-0.8086561815881751), - FX16_CONST(-0.5895213186410639), FX16_CONST(-0.8077528179261904), - FX16_CONST(-0.5907597018588739), FX16_CONST(-0.8068475535437994), - FX16_CONST(-0.5919966949620409), FX16_CONST(-0.8059403905711764), - FX16_CONST(-0.5932322950397998), FX16_CONST(-0.8050313311429635), - FX16_CONST(-0.5944664991846642), FX16_CONST(-0.8041203773982659), - FX16_CONST(-0.5956993044924332), FX16_CONST(-0.8032075314806449), - FX16_CONST(-0.5969307080621965), FX16_CONST(-0.8022927955381157), - FX16_CONST(-0.5981607069963422), FX16_CONST(-0.8013761717231404), - FX16_CONST(-0.5993892984005645), FX16_CONST(-0.8004576621926228), - FX16_CONST(-0.6006164793838686), FX16_CONST(-0.7995372691079052), - FX16_CONST(-0.6018422470585799), FX16_CONST(-0.7986149946347609), - FX16_CONST(-0.6030665985403482), FX16_CONST(-0.7976908409433912), - FX16_CONST(-0.6042895309481559), FX16_CONST(-0.7967648102084189), - FX16_CONST(-0.6055110414043254), FX16_CONST(-0.7958369046088836), - FX16_CONST(-0.6067311270345245), FX16_CONST(-0.794907126328237), - FX16_CONST(-0.6079497849677735), FX16_CONST(-0.7939754775543373), - FX16_CONST(-0.6091670123364531), FX16_CONST(-0.7930419604794438), - FX16_CONST(-0.6103828062763095), FX16_CONST(-0.7921065773002123), - FX16_CONST(-0.6115971639264618), FX16_CONST(-0.7911693302176903), - FX16_CONST(-0.6128100824294097), FX16_CONST(-0.79023022143731), - FX16_CONST(-0.6140215589310382), FX16_CONST(-0.7892892531688859), - FX16_CONST(-0.6152315905806267), FX16_CONST(-0.7883464276266063), - FX16_CONST(-0.6164401745308536), FX16_CONST(-0.7874017470290314), - FX16_CONST(-0.6176473079378038), FX16_CONST(-0.7864552135990859), - FX16_CONST(-0.6188529879609762), FX16_CONST(-0.785506829564054), - FX16_CONST(-0.6200572117632892), FX16_CONST(-0.7845565971555752), - FX16_CONST(-0.6212599765110874), FX16_CONST(-0.7836045186096384), - FX16_CONST(-0.6224612793741499), FX16_CONST(-0.7826505961665758), - FX16_CONST(-0.6236611175256946), FX16_CONST(-0.7816948320710594), - FX16_CONST(-0.6248594881423862), FX16_CONST(-0.7807372285720946), - FX16_CONST(-0.6260563884043435), FX16_CONST(-0.7797777879230146), - FX16_CONST(-0.6272518154951439), FX16_CONST(-0.7788165123814762), - FX16_CONST(-0.6284457666018326), FX16_CONST(-0.7778534042094533), - FX16_CONST(-0.629638238914927), FX16_CONST(-0.7768884656732324), - FX16_CONST(-0.6308292296284242), FX16_CONST(-0.7759216990434078), - FX16_CONST(-0.632018735939809), FX16_CONST(-0.7749531065948739), - FX16_CONST(-0.6332067550500573), FX16_CONST(-0.7739826906068228), - FX16_CONST(-0.6343932841636453), FX16_CONST(-0.7730104533627371), - FX16_CONST(-0.6355783204885561), FX16_CONST(-0.7720363971503845), - FX16_CONST(-0.6367618612362843), FX16_CONST(-0.7710605242618137), - FX16_CONST(-0.6379439036218439), FX16_CONST(-0.7700828369933481), - FX16_CONST(-0.6391244448637757), FX16_CONST(-0.7691033376455797), - FX16_CONST(-0.6403034821841515), FX16_CONST(-0.7681220285233656), - FX16_CONST(-0.641481012808583), FX16_CONST(-0.7671389119358205), - FX16_CONST(-0.6426570339662269), FX16_CONST(-0.7661539901963129), - FX16_CONST(-0.6438315428897913), FX16_CONST(-0.7651672656224591), - FX16_CONST(-0.6450045368155438), FX16_CONST(-0.7641787405361168), - FX16_CONST(-0.6461760129833164), FX16_CONST(-0.7631884172633813), - FX16_CONST(-0.6473459686365118), FX16_CONST(-0.7621962981345791), - FX16_CONST(-0.6485144010221123), FX16_CONST(-0.7612023854842619), - FX16_CONST(-0.6496813073906832), FX16_CONST(-0.7602066816512024), - FX16_CONST(-0.6508466849963808), FX16_CONST(-0.7592091889783882), - FX16_CONST(-0.6520105310969595), FX16_CONST(-0.7582099098130154), - FX16_CONST(-0.6531728429537765), FX16_CONST(-0.7572088465064848), - FX16_CONST(-0.6543336178318003), FX16_CONST(-0.7562060014143946), - FX16_CONST(-0.6554928529996153), FX16_CONST(-0.7552013768965365), - FX16_CONST(-0.6566505457294288), FX16_CONST(-0.7541949753168894), - FX16_CONST(-0.6578066932970785), FX16_CONST(-0.7531867990436125), - FX16_CONST(-0.6589612929820373), FX16_CONST(-0.7521768504490427), - FX16_CONST(-0.6601143420674203), FX16_CONST(-0.7511651319096866), - FX16_CONST(-0.6612658378399922), FX16_CONST(-0.7501516458062151), - FX16_CONST(-0.6624157775901718), FX16_CONST(-0.7491363945234593), - FX16_CONST(-0.6635641586120397), FX16_CONST(-0.7481193804504037), - FX16_CONST(-0.6647109782033448), FX16_CONST(-0.7471006059801802), - FX16_CONST(-0.6658562336655094), FX16_CONST(-0.746080073510064), - FX16_CONST(-0.6669999223036374), FX16_CONST(-0.7450577854414661), - FX16_CONST(-0.6681420414265185), FX16_CONST(-0.7440337441799293), - FX16_CONST(-0.6692825883466358), FX16_CONST(-0.7430079521351219), - FX16_CONST(-0.670421560380173), FX16_CONST(-0.7419804117208311), - FX16_CONST(-0.6715589548470184), FX16_CONST(-0.7409511253549591), - FX16_CONST(-0.6726947690707727), FX16_CONST(-0.7399200954595163), - FX16_CONST(-0.6738290003787559), FX16_CONST(-0.7388873244606152), - FX16_CONST(-0.674961646102012), FX16_CONST(-0.737852814788466), - FX16_CONST(-0.6760927035753158), FX16_CONST(-0.73681656887737), - FX16_CONST(-0.6772221701371803), FX16_CONST(-0.7357785891657136), - FX16_CONST(-0.6783500431298612), FX16_CONST(-0.7347388780959637), - FX16_CONST(-0.6794763198993649), FX16_CONST(-0.7336974381146604), - FX16_CONST(-0.680600997795453), FX16_CONST(-0.7326542716724128), - FX16_CONST(-0.6817240741716496), FX16_CONST(-0.7316093812238927), - FX16_CONST(-0.682845546385248), FX16_CONST(-0.7305627692278277), - FX16_CONST(-0.6839654117973154), FX16_CONST(-0.729514438146997), - FX16_CONST(-0.6850836677727001), FX16_CONST(-0.7284643904482254), - FX16_CONST(-0.6862003116800385), FX16_CONST(-0.7274126286023759), - FX16_CONST(-0.6873153408917592), FX16_CONST(-0.7263591550843459), - FX16_CONST(-0.6884287527840903), FX16_CONST(-0.7253039723730609), - FX16_CONST(-0.6895405447370668), FX16_CONST(-0.724247082951467), - FX16_CONST(-0.6906507141345344), FX16_CONST(-0.7231884893065277), - FX16_CONST(-0.6917592583641576), FX16_CONST(-0.7221281939292155), - FX16_CONST(-0.6928661748174246), FX16_CONST(-0.7210661993145081), - FX16_CONST(-0.6939714608896538), FX16_CONST(-0.7200025079613819), - FX16_CONST(-0.6950751139800008), FX16_CONST(-0.7189371223728045), - FX16_CONST(-0.696177131491463), FX16_CONST(-0.7178700450557317), - FX16_CONST(-0.6972775108308864), FX16_CONST(-0.7168012785210996), - FX16_CONST(-0.6983762494089728), FX16_CONST(-0.7157308252838187), - FX16_CONST(-0.6994733446402839), FX16_CONST(-0.714658687862769), - FX16_CONST(-0.7005687939432482), FX16_CONST(-0.7135848687807937), - FX16_CONST(-0.7016625947401685), FX16_CONST(-0.7125093705646924), - FX16_CONST(-0.7027547444572251), FX16_CONST(-0.7114321957452167), - FX16_CONST(-0.7038452405244848), FX16_CONST(-0.7103533468570625), - FX16_CONST(-0.7049340803759049), FX16_CONST(-0.7092728264388657), - FX16_CONST(-0.7060212614493395), FX16_CONST(-0.7081906370331955), - FX16_CONST(-0.7071067811865475), FX16_CONST(-0.7071067811865477), - FX16_CONST(-0.7081906370331953), FX16_CONST(-0.7060212614493397), - FX16_CONST(-0.7092728264388655), FX16_CONST(-0.7049340803759051), - FX16_CONST(-0.7103533468570623), FX16_CONST(-0.703845240524485), - FX16_CONST(-0.7114321957452164), FX16_CONST(-0.7027547444572253), - FX16_CONST(-0.7125093705646922), FX16_CONST(-0.7016625947401687), - FX16_CONST(-0.7135848687807935), FX16_CONST(-0.7005687939432484), - FX16_CONST(-0.7146586878627688), FX16_CONST(-0.6994733446402841), - FX16_CONST(-0.7157308252838185), FX16_CONST(-0.698376249408973), - FX16_CONST(-0.7168012785210994), FX16_CONST(-0.6972775108308866), - FX16_CONST(-0.7178700450557315), FX16_CONST(-0.6961771314914632), - FX16_CONST(-0.7189371223728044), FX16_CONST(-0.695075113980001), - FX16_CONST(-0.7200025079613817), FX16_CONST(-0.693971460889654), - FX16_CONST(-0.7210661993145079), FX16_CONST(-0.6928661748174249), - FX16_CONST(-0.7221281939292152), FX16_CONST(-0.6917592583641579), - FX16_CONST(-0.7231884893065275), FX16_CONST(-0.6906507141345346), - FX16_CONST(-0.7242470829514668), FX16_CONST(-0.689540544737067), - FX16_CONST(-0.7253039723730607), FX16_CONST(-0.6884287527840905), - FX16_CONST(-0.7263591550843458), FX16_CONST(-0.6873153408917594), - FX16_CONST(-0.7274126286023757), FX16_CONST(-0.6862003116800387), - FX16_CONST(-0.7284643904482252), FX16_CONST(-0.6850836677727004), - FX16_CONST(-0.7295144381469968), FX16_CONST(-0.6839654117973156), - FX16_CONST(-0.7305627692278275), FX16_CONST(-0.6828455463852482), - FX16_CONST(-0.7316093812238925), FX16_CONST(-0.6817240741716498), - FX16_CONST(-0.7326542716724127), FX16_CONST(-0.6806009977954532), - FX16_CONST(-0.7336974381146601), FX16_CONST(-0.6794763198993651), - FX16_CONST(-0.7347388780959635), FX16_CONST(-0.6783500431298615), - FX16_CONST(-0.7357785891657134), FX16_CONST(-0.6772221701371806), - FX16_CONST(-0.7368165688773698), FX16_CONST(-0.676092703575316), - FX16_CONST(-0.7378528147884658), FX16_CONST(-0.6749616461020123), - FX16_CONST(-0.738887324460615), FX16_CONST(-0.6738290003787561), - FX16_CONST(-0.7399200954595161), FX16_CONST(-0.672694769070773), - FX16_CONST(-0.7409511253549589), FX16_CONST(-0.6715589548470187), - FX16_CONST(-0.741980411720831), FX16_CONST(-0.6704215603801732), - FX16_CONST(-0.7430079521351217), FX16_CONST(-0.669282588346636), - FX16_CONST(-0.7440337441799291), FX16_CONST(-0.6681420414265187), - FX16_CONST(-0.7450577854414658), FX16_CONST(-0.6669999223036376), - FX16_CONST(-0.7460800735100638), FX16_CONST(-0.6658562336655096), - FX16_CONST(-0.7471006059801799), FX16_CONST(-0.664710978203345), - FX16_CONST(-0.7481193804504035), FX16_CONST(-0.6635641586120399), - FX16_CONST(-0.749136394523459), FX16_CONST(-0.662415777590172), - FX16_CONST(-0.750151645806215), FX16_CONST(-0.6612658378399924), - FX16_CONST(-0.7511651319096864), FX16_CONST(-0.6601143420674205), - FX16_CONST(-0.7521768504490425), FX16_CONST(-0.6589612929820375), - FX16_CONST(-0.7531867990436124), FX16_CONST(-0.6578066932970787), - FX16_CONST(-0.7541949753168892), FX16_CONST(-0.656650545729429), - FX16_CONST(-0.7552013768965363), FX16_CONST(-0.6554928529996156), - FX16_CONST(-0.7562060014143944), FX16_CONST(-0.6543336178318007), - FX16_CONST(-0.7572088465064842), FX16_CONST(-0.6531728429537771), - FX16_CONST(-0.7582099098130151), FX16_CONST(-0.6520105310969597), - FX16_CONST(-0.759209188978388), FX16_CONST(-0.650846684996381), - FX16_CONST(-0.7602066816512024), FX16_CONST(-0.6496813073906831), - FX16_CONST(-0.761202385484262), FX16_CONST(-0.6485144010221122), - FX16_CONST(-0.7621962981345786), FX16_CONST(-0.6473459686365125), - FX16_CONST(-0.763188417263381), FX16_CONST(-0.6461760129833166), - FX16_CONST(-0.7641787405361166), FX16_CONST(-0.6450045368155441), - FX16_CONST(-0.765167265622459), FX16_CONST(-0.6438315428897915), - FX16_CONST(-0.766153990196313), FX16_CONST(-0.6426570339662268), - FX16_CONST(-0.7671389119358201), FX16_CONST(-0.6414810128085836), - FX16_CONST(-0.7681220285233652), FX16_CONST(-0.640303482184152), - FX16_CONST(-0.7691033376455795), FX16_CONST(-0.639124444863776), - FX16_CONST(-0.7700828369933479), FX16_CONST(-0.6379439036218442), - FX16_CONST(-0.7710605242618138), FX16_CONST(-0.6367618612362842), - FX16_CONST(-0.7720363971503846), FX16_CONST(-0.635578320488556), - FX16_CONST(-0.7730104533627367), FX16_CONST(-0.6343932841636459), - FX16_CONST(-0.7739826906068226), FX16_CONST(-0.6332067550500575), - FX16_CONST(-0.7749531065948738), FX16_CONST(-0.6320187359398092), - FX16_CONST(-0.7759216990434076), FX16_CONST(-0.6308292296284246), - FX16_CONST(-0.7768884656732326), FX16_CONST(-0.6296382389149269), - FX16_CONST(-0.7778534042094527), FX16_CONST(-0.6284457666018332), - FX16_CONST(-0.7788165123814756), FX16_CONST(-0.6272518154951444), - FX16_CONST(-0.7797777879230143), FX16_CONST(-0.6260563884043437), - FX16_CONST(-0.7807372285720944), FX16_CONST(-0.6248594881423865), - FX16_CONST(-0.7816948320710595), FX16_CONST(-0.6236611175256945), - FX16_CONST(-0.7826505961665758), FX16_CONST(-0.6224612793741497), - FX16_CONST(-0.7836045186096379), FX16_CONST(-0.621259976511088), - FX16_CONST(-0.784556597155575), FX16_CONST(-0.6200572117632894), - FX16_CONST(-0.7855068295640538), FX16_CONST(-0.6188529879609764), - FX16_CONST(-0.7864552135990858), FX16_CONST(-0.617647307937804), - FX16_CONST(-0.7874017470290315), FX16_CONST(-0.6164401745308535), - FX16_CONST(-0.7883464276266059), FX16_CONST(-0.6152315905806273), - FX16_CONST(-0.7892892531688854), FX16_CONST(-0.6140215589310387), - FX16_CONST(-0.7902302214373099), FX16_CONST(-0.6128100824294099), - FX16_CONST(-0.7911693302176901), FX16_CONST(-0.611597163926462), - FX16_CONST(-0.7921065773002124), FX16_CONST(-0.6103828062763094), - FX16_CONST(-0.7930419604794439), FX16_CONST(-0.609167012336453), - FX16_CONST(-0.7939754775543368), FX16_CONST(-0.6079497849677741), - FX16_CONST(-0.7949071263282368), FX16_CONST(-0.6067311270345248), - FX16_CONST(-0.7958369046088835), FX16_CONST(-0.6055110414043257), - FX16_CONST(-0.7967648102084187), FX16_CONST(-0.6042895309481561), - FX16_CONST(-0.7976908409433912), FX16_CONST(-0.603066598540348), - FX16_CONST(-0.7986149946347605), FX16_CONST(-0.6018422470585805), - FX16_CONST(-0.7995372691079048), FX16_CONST(-0.6006164793838693), - FX16_CONST(-0.8004576621926226), FX16_CONST(-0.5993892984005648), - FX16_CONST(-0.8013761717231401), FX16_CONST(-0.5981607069963424), - FX16_CONST(-0.8022927955381157), FX16_CONST(-0.5969307080621964), - FX16_CONST(-0.803207531480645), FX16_CONST(-0.5956993044924331), - FX16_CONST(-0.8041203773982655), FX16_CONST(-0.5944664991846649), - FX16_CONST(-0.8050313311429634), FX16_CONST(-0.5932322950398001), - FX16_CONST(-0.8059403905711762), FX16_CONST(-0.5919966949620411), - FX16_CONST(-0.8068475535437992), FX16_CONST(-0.5907597018588743), - FX16_CONST(-0.8077528179261905), FX16_CONST(-0.5895213186410638), - FX16_CONST(-0.8086561815881746), FX16_CONST(-0.5882815482226458), - FX16_CONST(-0.809557642404051), FX16_CONST(-0.5870403935209183), - FX16_CONST(-0.8104571982525947), FX16_CONST(-0.5857978574564391), - FX16_CONST(-0.8113548470170637), FX16_CONST(-0.5845539429530153), - FX16_CONST(-0.812250586585204), FX16_CONST(-0.5833086529376983), - FX16_CONST(-0.8131444148492537), FX16_CONST(-0.5820619903407753), - FX16_CONST(-0.8140363297059481), FX16_CONST(-0.580813958095765), - FX16_CONST(-0.8149263290565264), FX16_CONST(-0.579564559139406), - FX16_CONST(-0.8158144108067337), FX16_CONST(-0.5783137964116557), - FX16_CONST(-0.8167005728668278), FX16_CONST(-0.5770616728556796), - FX16_CONST(-0.8175848131515838), FX16_CONST(-0.5758081914178452), - FX16_CONST(-0.8184671295802983), FX16_CONST(-0.5745533550477163), - FX16_CONST(-0.8193475200767967), FX16_CONST(-0.5732971666980425), - FX16_CONST(-0.8202259825694345), FX16_CONST(-0.5720396293247573), - FX16_CONST(-0.8211025149911046), FX16_CONST(-0.5707807458869674), - FX16_CONST(-0.8219771152792416), FX16_CONST(-0.5695205193469471), - FX16_CONST(-0.8228497813758264), FX16_CONST(-0.5682589526701314), - FX16_CONST(-0.8237205112273911), FX16_CONST(-0.566996048825109), - FX16_CONST(-0.8245893027850251), FX16_CONST(-0.5657318107836135), - FX16_CONST(-0.8254561540043774), FX16_CONST(-0.5644662415205196), - FX16_CONST(-0.8263210628456634), FX16_CONST(-0.5631993440138341), - FX16_CONST(-0.8271840272736692), FX16_CONST(-0.5619311212446892), - FX16_CONST(-0.8280450452577555), FX16_CONST(-0.5606615761973365), - FX16_CONST(-0.8289041147718647), FX16_CONST(-0.5593907118591365), - FX16_CONST(-0.8297612337945229), FX16_CONST(-0.5581185312205563), - FX16_CONST(-0.8306164003088462), FX16_CONST(-0.5568450372751601), - FX16_CONST(-0.8314696123025452), FX16_CONST(-0.5555702330196022), - FX16_CONST(-0.8323208677679298), FX16_CONST(-0.5542941214536199), - FX16_CONST(-0.8331701647019129), FX16_CONST(-0.5530167055800279), - FX16_CONST(-0.8340175011060179), FX16_CONST(-0.5517379884047077), - FX16_CONST(-0.8348628749863799), FX16_CONST(-0.5504579729366049), - FX16_CONST(-0.8357062843537526), FX16_CONST(-0.5491766621877198), - FX16_CONST(-0.8365477272235121), FX16_CONST(-0.5478940591731001), - FX16_CONST(-0.8373872016156616), FX16_CONST(-0.5466101669108354), - FX16_CONST(-0.8382247055548379), FX16_CONST(-0.5453249884220468), - FX16_CONST(-0.8390602370703125), FX16_CONST(-0.5440385267308842), - FX16_CONST(-0.8398937941959994), FX16_CONST(-0.542750784864516), - FX16_CONST(-0.8407253749704581), FX16_CONST(-0.5414617658531234), - FX16_CONST(-0.8415549774368986), FX16_CONST(-0.5401714727298927), - FX16_CONST(-0.8423825996431856), FX16_CONST(-0.5388799085310089), - FX16_CONST(-0.8432082396418452), FX16_CONST(-0.5375870762956457), - FX16_CONST(-0.8440318954900663), FX16_CONST(-0.5362929790659633), - FX16_CONST(-0.8448535652497071), FX16_CONST(-0.5349976198870973), - FX16_CONST(-0.8456732469872992), FX16_CONST(-0.5337010018071529), - FX16_CONST(-0.8464909387740518), FX16_CONST(-0.5324031278771985), - FX16_CONST(-0.8473066386858581), FX16_CONST(-0.5311040011512553), - FX16_CONST(-0.8481203448032971), FX16_CONST(-0.5298036246862949), - FX16_CONST(-0.8489320552116396), FX16_CONST(-0.5285020015422286), - FX16_CONST(-0.8497417680008525), FX16_CONST(-0.5271991347819013), - FX16_CONST(-0.8505494812656036), FX16_CONST(-0.5258950274710845), - FX16_CONST(-0.8513551931052649), FX16_CONST(-0.5245896826784693), - FX16_CONST(-0.8521589016239196), FX16_CONST(-0.5232831034756568), - FX16_CONST(-0.8529606049303635), FX16_CONST(-0.5219752929371545), - FX16_CONST(-0.8537603011381114), FX16_CONST(-0.5206662541403672), - FX16_CONST(-0.8545579883654005), FX16_CONST(-0.5193559901655894), - FX16_CONST(-0.8553536647351957), FX16_CONST(-0.5180445040959999), - FX16_CONST(-0.8561473283751942), FX16_CONST(-0.5167317990176502), - FX16_CONST(-0.8569389774178287), FX16_CONST(-0.5154178780194633), - FX16_CONST(-0.857728610000272), FX16_CONST(-0.5141027441932218), - FX16_CONST(-0.8585162242644429), FX16_CONST(-0.512786400633563), - FX16_CONST(-0.8593018183570085), FX16_CONST(-0.5114688504379702), - FX16_CONST(-0.8600853904293899), FX16_CONST(-0.5101500967067673), - FX16_CONST(-0.8608669386377671), FX16_CONST(-0.5088301425431073), - FX16_CONST(-0.8616464611430812), FX16_CONST(-0.507508991052971), - FX16_CONST(-0.8624239561110405), FX16_CONST(-0.5061866453451553), - FX16_CONST(-0.8631994217121243), FX16_CONST(-0.5048631085312674), - FX16_CONST(-0.8639728561215865), FX16_CONST(-0.503538383725718), - FX16_CONST(-0.8647442575194622), FX16_CONST(-0.5022124740457111), - FX16_CONST(-0.865513624090569), FX16_CONST(-0.500885382611241), - FX16_CONST(-0.8662809540245129), FX16_CONST(-0.49955711254508195), - FX16_CONST(-0.8670462455156926), FX16_CONST(-0.4982276669727818), - FX16_CONST(-0.8678094967633033), FX16_CONST(-0.49689704902265436), - FX16_CONST(-0.8685707059713407), FX16_CONST(-0.495565261825773), - FX16_CONST(-0.8693298713486066), FX16_CONST(-0.49423230851596), - FX16_CONST(-0.8700869911087113), FX16_CONST(-0.4928981922297842), - FX16_CONST(-0.8708420634700789), FX16_CONST(-0.49156291610654995), - FX16_CONST(-0.8715950866559511), FX16_CONST(-0.49022648328829105), - FX16_CONST(-0.8723460588943912), FX16_CONST(-0.48888889691976367), - FX16_CONST(-0.8730949784182899), FX16_CONST(-0.48755016014843633), - FX16_CONST(-0.8738418434653666), FX16_CONST(-0.48621027612448664), - FX16_CONST(-0.8745866522781761), FX16_CONST(-0.4848692480007912), - FX16_CONST(-0.8753294031041109), FX16_CONST(-0.4835270789329187), - FX16_CONST(-0.8760700941954067), FX16_CONST(-0.48218377207912255), - FX16_CONST(-0.8768087238091454), FX16_CONST(-0.4808393306003344), - FX16_CONST(-0.8775452902072611), FX16_CONST(-0.47949375766015334), - FX16_CONST(-0.8782797916565415), FX16_CONST(-0.47814705642484323), - FX16_CONST(-0.8790122264286334), FX16_CONST(-0.47679923006332214), - FX16_CONST(-0.8797425928000475), FX16_CONST(-0.47545028174715576), - FX16_CONST(-0.8804708890521605), FX16_CONST(-0.4741002146505505), - FX16_CONST(-0.8811971134712219), FX16_CONST(-0.4727490319503432), - FX16_CONST(-0.8819212643483549), FX16_CONST(-0.47139673682599786), - FX16_CONST(-0.8826433399795628), FX16_CONST(-0.47004333245959573), - FX16_CONST(-0.8833633386657316), FX16_CONST(-0.4686888220358279), - FX16_CONST(-0.8840812587126351), FX16_CONST(-0.46733320874198825), - FX16_CONST(-0.8847970984309376), FX16_CONST(-0.4659764957679666), - FX16_CONST(-0.8855108561361997), FX16_CONST(-0.46461868630623815), - FX16_CONST(-0.8862225301488805), FX16_CONST(-0.46325978355186037), - FX16_CONST(-0.8869321187943422), FX16_CONST(-0.4618997907024628), - FX16_CONST(-0.887639620402854), FX16_CONST(-0.4605387109582399), - FX16_CONST(-0.888345033309596), FX16_CONST(-0.45917654752194464), - FX16_CONST(-0.8890483558546644), FX16_CONST(-0.4578133035988776), - FX16_CONST(-0.8897495863830727), FX16_CONST(-0.4564489823968842), - FX16_CONST(-0.8904487232447579), FX16_CONST(-0.45508358712634395), - FX16_CONST(-0.8911457647945833), FX16_CONST(-0.4537171210001638), - FX16_CONST(-0.8918407093923428), FX16_CONST(-0.45234958723377067), - FX16_CONST(-0.8925335554027644), FX16_CONST(-0.4509809890451043), - FX16_CONST(-0.8932243011955152), FX16_CONST(-0.44961132965460693), - FX16_CONST(-0.8939129451452031), FX16_CONST(-0.4482406122852201), - FX16_CONST(-0.8945994856313827), FX16_CONST(-0.4468688401623742), - FX16_CONST(-0.8952839210385576), FX16_CONST(-0.44549601651398163), - FX16_CONST(-0.8959662497561849), FX16_CONST(-0.44412214457042976), - FX16_CONST(-0.89664647017868), FX16_CONST(-0.4427472275645704), - FX16_CONST(-0.8973245807054182), FX16_CONST(-0.44137126873171695), - FX16_CONST(-0.8980005797407398), FX16_CONST(-0.43999427130963337), - FX16_CONST(-0.8986744656939538), FX16_CONST(-0.4386162385385276), - FX16_CONST(-0.8993462369793417), FX16_CONST(-0.4372371736610439), - FX16_CONST(-0.90001589201616), FX16_CONST(-0.435857079922256), - FX16_CONST(-0.9006834292286467), FX16_CONST(-0.43447596056965604), - FX16_CONST(-0.9013488470460219), FX16_CONST(-0.4330938188531521), - FX16_CONST(-0.9020121439024932), FX16_CONST(-0.4317106580250573), - FX16_CONST(-0.9026733182372588), FX16_CONST(-0.4303264813400825), - FX16_CONST(-0.9033323684945116), FX16_CONST(-0.42894129205533005), - FX16_CONST(-0.9039892931234431), FX16_CONST(-0.4275550934302825), - FX16_CONST(-0.9046440905782461), FX16_CONST(-0.4261678887267999), - FX16_CONST(-0.9052967593181187), FX16_CONST(-0.4247796812091089), - FX16_CONST(-0.9059472978072685), FX16_CONST(-0.423390474143796), - FX16_CONST(-0.9065957045149154), FX16_CONST(-0.4220002707997995), - FX16_CONST(-0.9072419779152956), FX16_CONST(-0.420609074448403), - FX16_CONST(-0.907886116487666), FX16_CONST(-0.4192168883632243), - FX16_CONST(-0.908528118716306), FX16_CONST(-0.4178237158202125), - FX16_CONST(-0.9091679830905224), FX16_CONST(-0.4164295600976372), - FX16_CONST(-0.9098057081046523), FX16_CONST(-0.4150344244760815), - FX16_CONST(-0.9104412922580669), FX16_CONST(-0.4136383122384351), - FX16_CONST(-0.9110747340551761), FX16_CONST(-0.4122412266698833), - FX16_CONST(-0.9117060320054298), FX16_CONST(-0.4108431710579042), - FX16_CONST(-0.9123351846233227), FX16_CONST(-0.40944414869225776), - FX16_CONST(-0.9129621904283982), FX16_CONST(-0.40804416286497863), - FX16_CONST(-0.9135870479452509), FX16_CONST(-0.40664321687036886), - FX16_CONST(-0.9142097557035305), FX16_CONST(-0.40524131400499036), - FX16_CONST(-0.914830312237946), FX16_CONST(-0.40383845756765446), - FX16_CONST(-0.9154487160882677), FX16_CONST(-0.40243465085941865), - FX16_CONST(-0.9160649657993317), FX16_CONST(-0.4010298971835757), - FX16_CONST(-0.9166790599210427), FX16_CONST(-0.39962419984564673), - FX16_CONST(-0.9172909970083777), FX16_CONST(-0.39821756215337417), - FX16_CONST(-0.9179007756213903), FX16_CONST(-0.39680998741671075), - FX16_CONST(-0.9185083943252121), FX16_CONST(-0.3954014789478166), - FX16_CONST(-0.9191138516900577), FX16_CONST(-0.3939920400610482), - FX16_CONST(-0.9197171462912274), FX16_CONST(-0.39258167407295147), - FX16_CONST(-0.9203182767091106), FX16_CONST(-0.3911703843022537), - FX16_CONST(-0.9209172415291893), FX16_CONST(-0.38975817406985697), - FX16_CONST(-0.9215140393420418), FX16_CONST(-0.38834504669882663), - FX16_CONST(-0.9221086687433451), FX16_CONST(-0.3869310055143888), - FX16_CONST(-0.9227011283338785), FX16_CONST(-0.3855160538439189), - FX16_CONST(-0.9232914167195276), FX16_CONST(-0.38410019501693493), - FX16_CONST(-0.9238795325112865), FX16_CONST(-0.38268343236509034), - FX16_CONST(-0.9244654743252625), FX16_CONST(-0.38126576922216276), - FX16_CONST(-0.9250492407826775), FX16_CONST(-0.37984720892405144), - FX16_CONST(-0.9256308305098727), FX16_CONST(-0.3784277548087657), - FX16_CONST(-0.9262102421383114), FX16_CONST(-0.3770074102164182), - FX16_CONST(-0.9267874743045819), FX16_CONST(-0.37558617848921705), - FX16_CONST(-0.9273625256504009), FX16_CONST(-0.3741640629714585), - FX16_CONST(-0.9279353948226177), FX16_CONST(-0.37274106700951615), - FX16_CONST(-0.9285060804732155), FX16_CONST(-0.37131719395183777), - FX16_CONST(-0.9290745812593157), FX16_CONST(-0.36989244714893416), - FX16_CONST(-0.9296408958431813), FX16_CONST(-0.3684668299533722), - FX16_CONST(-0.9302050228922192), FX16_CONST(-0.36704034571976696), - FX16_CONST(-0.9307669610789836), FX16_CONST(-0.3656129978047743), - FX16_CONST(-0.9313267090811803), FX16_CONST(-0.36418478956708017), - FX16_CONST(-0.931884265581668), FX16_CONST(-0.36275572436739734), - FX16_CONST(-0.9324396292684624), FX16_CONST(-0.36132580556845423), - FX16_CONST(-0.932992798834739), FX16_CONST(-0.35989503653498794), - FX16_CONST(-0.933543772978836), FX16_CONST(-0.35846342063373704), - FX16_CONST(-0.9340925504042588), FX16_CONST(-0.35703096123343037), - FX16_CONST(-0.9346391298196807), FX16_CONST(-0.3555976617047841), - FX16_CONST(-0.9351835099389476), FX16_CONST(-0.35416352542049045), - FX16_CONST(-0.9357256894810804), FX16_CONST(-0.3527285557552106), - FX16_CONST(-0.9362656671702784), FX16_CONST(-0.35129275608556687), - FX16_CONST(-0.9368034417359214), FX16_CONST(-0.34985612979013536), - FX16_CONST(-0.9373390119125748), FX16_CONST(-0.34841868024943484), - FX16_CONST(-0.9378723764399898), FX16_CONST(-0.3469804108459238), - FX16_CONST(-0.9384035340631082), FX16_CONST(-0.34554132496398904), - FX16_CONST(-0.9389324835320646), FX16_CONST(-0.34410142598993865), - FX16_CONST(-0.9394592236021897), FX16_CONST(-0.3426607173119949), - FX16_CONST(-0.9399837530340138), FX16_CONST(-0.34121920232028274), - FX16_CONST(-0.9405060705932683), FX16_CONST(-0.3397768844068271), - FX16_CONST(-0.9410261750508893), FX16_CONST(-0.33833376696554124), - FX16_CONST(-0.9415440651830208), FX16_CONST(-0.33688985339221994), - FX16_CONST(-0.9420597397710174), FX16_CONST(-0.3354451470845314), - FX16_CONST(-0.9425731976014468), FX16_CONST(-0.3339996514420098), - FX16_CONST(-0.9430844374660934), FX16_CONST(-0.3325533698660445), - FX16_CONST(-0.9435934581619603), FX16_CONST(-0.33110630575987654), - FX16_CONST(-0.9441002584912727), FX16_CONST(-0.3296584625285875), - FX16_CONST(-0.9446048372614804), FX16_CONST(-0.32820984357909233), - FX16_CONST(-0.9451071932852604), FX16_CONST(-0.3267604523201323), - FX16_CONST(-0.9456073253805212), FX16_CONST(-0.3253102921622633), - FX16_CONST(-0.9461052323704033), FX16_CONST(-0.3238593665178531), - FX16_CONST(-0.9466009130832835), FX16_CONST(-0.3224076788010699), - FX16_CONST(-0.9470943663527772), FX16_CONST(-0.32095523242787516), - FX16_CONST(-0.9475855910177412), FX16_CONST(-0.3195020308160154), - FX16_CONST(-0.9480745859222761), FX16_CONST(-0.3180480773850154), - FX16_CONST(-0.9485613499157302), FX16_CONST(-0.3165933755561662), - FX16_CONST(-0.9490458818527006), FX16_CONST(-0.31513792875252256), - FX16_CONST(-0.9495281805930367), FX16_CONST(-0.31368174039889146), - FX16_CONST(-0.9500082450018431), FX16_CONST(-0.3122248139218248), - FX16_CONST(-0.9504860739494816), FX16_CONST(-0.31076715274961203), - FX16_CONST(-0.950961666311575), FX16_CONST(-0.30930876031226906), - FX16_CONST(-0.9514350209690083), FX16_CONST(-0.3078496400415351), - FX16_CONST(-0.9519061368079323), FX16_CONST(-0.306389795370861), - FX16_CONST(-0.9523750127197659), FX16_CONST(-0.3049292297354023), - FX16_CONST(-0.9528416476011987), FX16_CONST(-0.30346794657201104), - FX16_CONST(-0.9533060403541936), FX16_CONST(-0.30200594931922853), - FX16_CONST(-0.9537681898859902), FX16_CONST(-0.30054324141727373), - FX16_CONST(-0.9542280951091056), FX16_CONST(-0.2990798263080406), - FX16_CONST(-0.9546857549413383), FX16_CONST(-0.2976157074350862), - FX16_CONST(-0.9551411683057708), FX16_CONST(-0.2961508882436237), - FX16_CONST(-0.9555943341307709), FX16_CONST(-0.2946853721805149), - FX16_CONST(-0.9560452513499963), FX16_CONST(-0.293219162694259), - FX16_CONST(-0.956493918902395), FX16_CONST(-0.2917522632349895), - FX16_CONST(-0.9569403357322088), FX16_CONST(-0.29028467725446244), - FX16_CONST(-0.957384500788976), FX16_CONST(-0.28881640820604937), - FX16_CONST(-0.957826413027533), FX16_CONST(-0.2873474595447293), - FX16_CONST(-0.9582660714080176), FX16_CONST(-0.28587783472708106), - FX16_CONST(-0.9587034748958715), FX16_CONST(-0.28440753721127215), - FX16_CONST(-0.9591386224618419), FX16_CONST(-0.2829365704570555), - FX16_CONST(-0.9595715130819845), FX16_CONST(-0.28146493792575794), - FX16_CONST(-0.960002145737666), FX16_CONST(-0.27999264308027305), - FX16_CONST(-0.9604305194155657), FX16_CONST(-0.2785196893850536), - FX16_CONST(-0.9608566331076795), FX16_CONST(-0.2770460803061003), - FX16_CONST(-0.9612804858113205), FX16_CONST(-0.27557181931095837), - FX16_CONST(-0.9617020765291225), FX16_CONST(-0.27409690986870644), - FX16_CONST(-0.9621214042690416), FX16_CONST(-0.27262135544994887), - FX16_CONST(-0.9625384680443593), FX16_CONST(-0.2711451595268078), - FX16_CONST(-0.9629532668736838), FX16_CONST(-0.26966832557291553), - FX16_CONST(-0.9633657997809539), FX16_CONST(-0.2681908570634035), - FX16_CONST(-0.9637760657954398), FX16_CONST(-0.26671275747489853), - FX16_CONST(-0.9641840639517458), FX16_CONST(-0.2652340302855118), - FX16_CONST(-0.9645897932898128), FX16_CONST(-0.26375467897483124), - FX16_CONST(-0.9649932528549202), FX16_CONST(-0.26227470702391414), - FX16_CONST(-0.9653944416976893), FX16_CONST(-0.2607941179152759), - FX16_CONST(-0.9657933588740836), FX16_CONST(-0.25931291513288646), - FX16_CONST(-0.9661900034454125), FX16_CONST(-0.25783110216215904), - FX16_CONST(-0.9665843744783331), FX16_CONST(-0.2563486824899428), - FX16_CONST(-0.9669764710448522), FX16_CONST(-0.25486565960451435), - FX16_CONST(-0.9673662922223284), FX16_CONST(-0.2533820369955706), - FX16_CONST(-0.9677538370934754), FX16_CONST(-0.25189781815421725), - FX16_CONST(-0.9681391047463623), FX16_CONST(-0.2504130065729654), - FX16_CONST(-0.9685220942744173), FX16_CONST(-0.24892760574572015), - FX16_CONST(-0.9689028047764289), FX16_CONST(-0.24744161916777313), - FX16_CONST(-0.9692812353565483), FX16_CONST(-0.24595505033579515), - FX16_CONST(-0.9696573851242923), FX16_CONST(-0.24446790274782454), - FX16_CONST(-0.970031253194544), FX16_CONST(-0.24298017990326412), - FX16_CONST(-0.9704028386875555), FX16_CONST(-0.2414918853028694), - FX16_CONST(-0.9707721407289504), FX16_CONST(-0.2400030224487414), - FX16_CONST(-0.9711391584497252), FX16_CONST(-0.2385135948443182), - FX16_CONST(-0.9715038909862517), FX16_CONST(-0.23702360599436767), - FX16_CONST(-0.9718663374802793), FX16_CONST(-0.2355330594049758), - FX16_CONST(-0.9722264970789363), FX16_CONST(-0.23404195858354357), - FX16_CONST(-0.9725843689347322), FX16_CONST(-0.23255030703877522), - FX16_CONST(-0.9729399522055602), FX16_CONST(-0.23105810828067094), - FX16_CONST(-0.9732932460546981), FX16_CONST(-0.22956536582051942), - FX16_CONST(-0.9736442496508119), FX16_CONST(-0.22807208317088612), - FX16_CONST(-0.9739929621679558), FX16_CONST(-0.22657826384561022), - FX16_CONST(-0.9743393827855759), FX16_CONST(-0.22508391135979292), - FX16_CONST(-0.9746835106885107), FX16_CONST(-0.2235890292297899), - FX16_CONST(-0.9750253450669942), FX16_CONST(-0.2220936209732033), - FX16_CONST(-0.9753648851166569), FX16_CONST(-0.22059769010887398), - FX16_CONST(-0.9757021300385285), FX16_CONST(-0.2191012401568701), - FX16_CONST(-0.976037079039039), FX16_CONST(-0.21760427463848378), - FX16_CONST(-0.9763697313300211), FX16_CONST(-0.2161067970762195), - FX16_CONST(-0.9767000861287118), FX16_CONST(-0.2146088109937866), - FX16_CONST(-0.9770281426577543), FX16_CONST(-0.21311031991609192), - FX16_CONST(-0.9773539001452), FX16_CONST(-0.21161132736922797), - FX16_CONST(-0.9776773578245099), FX16_CONST(-0.21011183688046986), - FX16_CONST(-0.977998514934557), FX16_CONST(-0.20861185197826357), - FX16_CONST(-0.9783173707196277), FX16_CONST(-0.20711137619221848), - FX16_CONST(-0.9786339244294232), FX16_CONST(-0.20561041305309902), - FX16_CONST(-0.9789481753190621), FX16_CONST(-0.20410896609281734), - FX16_CONST(-0.979260122649082), FX16_CONST(-0.20260703884442144), - FX16_CONST(-0.9795697656854405), FX16_CONST(-0.20110463484209207), - FX16_CONST(-0.9798771036995176), FX16_CONST(-0.19960175762113097), - FX16_CONST(-0.9801821359681174), FX16_CONST(-0.19809841071795342), - FX16_CONST(-0.9804848617734693), FX16_CONST(-0.19659459767008078), - FX16_CONST(-0.9807852804032303), FX16_CONST(-0.19509032201612866), - FX16_CONST(-0.9810833911504866), FX16_CONST(-0.19358558729580386), - FX16_CONST(-0.9813791933137546), FX16_CONST(-0.19208039704989252), - FX16_CONST(-0.9816726861969831), FX16_CONST(-0.19057475482025268), - FX16_CONST(-0.9819638691095554), FX16_CONST(-0.18906866414980597), - FX16_CONST(-0.9822527413662894), FX16_CONST(-0.18756212858253007), - FX16_CONST(-0.9825393022874412), FX16_CONST(-0.18605515166344697), - FX16_CONST(-0.9828235511987052), FX16_CONST(-0.18454773693861978), - FX16_CONST(-0.9831054874312163), FX16_CONST(-0.18303988795514095), - FX16_CONST(-0.9833851103215513), FX16_CONST(-0.18153160826112483), - FX16_CONST(-0.9836624192117301), FX16_CONST(-0.18002290140570007), - FX16_CONST(-0.9839374134492188), FX16_CONST(-0.17851377093899792), - FX16_CONST(-0.984210092386929), FX16_CONST(-0.177004220412149), - FX16_CONST(-0.9844804553832209), FX16_CONST(-0.1754942533772715), - FX16_CONST(-0.9847485018019042), FX16_CONST(-0.17398387338746374), - FX16_CONST(-0.9850142310122398), FX16_CONST(-0.17247308399679573), - FX16_CONST(-0.9852776423889411), FX16_CONST(-0.1709618887603017), - FX16_CONST(-0.9855387353121761), FX16_CONST(-0.1694502912339683), - FX16_CONST(-0.9857975091675674), FX16_CONST(-0.16793829497473134), - FX16_CONST(-0.9860539633461954), FX16_CONST(-0.1664259035404641), - FX16_CONST(-0.9863080972445987), FX16_CONST(-0.16491312048996976), - FX16_CONST(-0.9865599102647754), FX16_CONST(-0.16339994938297378), - FX16_CONST(-0.9868094018141854), FX16_CONST(-0.16188639378011224), - FX16_CONST(-0.987056571305751), FX16_CONST(-0.1603724572429285), - FX16_CONST(-0.9873014181578583), FX16_CONST(-0.15885814333386153), - FX16_CONST(-0.9875439417943593), FX16_CONST(-0.1573434556162382), - FX16_CONST(-0.9877841416445722), FX16_CONST(-0.15582839765426498), - FX16_CONST(-0.9880220171432835), FX16_CONST(-0.15431297301302058), - FX16_CONST(-0.9882575677307495), FX16_CONST(-0.15279718525844374), - FX16_CONST(-0.9884907928526966), FX16_CONST(-0.15128103795733036), - FX16_CONST(-0.9887216919603238), FX16_CONST(-0.1497645346773215), - FX16_CONST(-0.988950264510303), FX16_CONST(-0.1482476789868959), - FX16_CONST(-0.9891765099647809), FX16_CONST(-0.1467304744553623), - FX16_CONST(-0.9894004277913803), FX16_CONST(-0.14521292465284785), - FX16_CONST(-0.9896220174632008), FX16_CONST(-0.1436950331502947), - FX16_CONST(-0.9898412784588205), FX16_CONST(-0.14217680351944814), - FX16_CONST(-0.9900582102622971), FX16_CONST(-0.14065823933284916), - FX16_CONST(-0.9902728123631691), FX16_CONST(-0.13913934416382598), - FX16_CONST(-0.990485084256457), FX16_CONST(-0.13762012158648654), - FX16_CONST(-0.9906950254426646), FX16_CONST(-0.13610057517570653), - FX16_CONST(-0.99090263542778), FX16_CONST(-0.13458070850712636), - FX16_CONST(-0.9911079137232769), FX16_CONST(-0.13306052515713906), - FX16_CONST(-0.9913108598461154), FX16_CONST(-0.13154002870288295), - FX16_CONST(-0.9915114733187439), FX16_CONST(-0.13001922272223393), - FX16_CONST(-0.9917097536690995), FX16_CONST(-0.12849811079379359), - FX16_CONST(-0.9919057004306093), FX16_CONST(-0.12697669649688612), - FX16_CONST(-0.9920993131421918), FX16_CONST(-0.12545498341154632), - FX16_CONST(-0.9922905913482574), FX16_CONST(-0.12393297511851209), - FX16_CONST(-0.9924795345987101), FX16_CONST(-0.12241067519921596), - FX16_CONST(-0.9926661424489479), FX16_CONST(-0.12088808723577757), - FX16_CONST(-0.9928504144598651), FX16_CONST(-0.11936521481099169), - FX16_CONST(-0.9930323501978514), FX16_CONST(-0.11784206150832514), - FX16_CONST(-0.9932119492347945), FX16_CONST(-0.11631863091190477), - FX16_CONST(-0.9933892111480807), FX16_CONST(-0.11479492660650993), - FX16_CONST(-0.9935641355205953), FX16_CONST(-0.11327095217756492), - FX16_CONST(-0.9937367219407246), FX16_CONST(-0.111746711211127), - FX16_CONST(-0.9939069700023561), FX16_CONST(-0.11022220729388331), - FX16_CONST(-0.9940748793048794), FX16_CONST(-0.1086974440131388), - FX16_CONST(-0.9942404494531879), FX16_CONST(-0.10717242495680877), - FX16_CONST(-0.9944036800576791), FX16_CONST(-0.10564715371341038), - FX16_CONST(-0.9945645707342554), FX16_CONST(-0.10412163387205507), - FX16_CONST(-0.9947231211043257), FX16_CONST(-0.10259586902243661), - FX16_CONST(-0.9948793307948056), FX16_CONST(-0.10106986275482799), - FX16_CONST(-0.9950331994381186), FX16_CONST(-0.09954361866006935), - FX16_CONST(-0.9951847266721969), FX16_CONST(-0.09801714032956045), - FX16_CONST(-0.9953339121404822), FX16_CONST(-0.09649043135525316), - FX16_CONST(-0.9954807554919269), FX16_CONST(-0.09496349532963941), - FX16_CONST(-0.9956252563809943), FX16_CONST(-0.09343633584574804), - FX16_CONST(-0.9957674144676598), FX16_CONST(-0.09190895649713282), - FX16_CONST(-0.9959072294174117), FX16_CONST(-0.09038136087786491), - FX16_CONST(-0.996044700901252), FX16_CONST(-0.08885355258252436), - FX16_CONST(-0.9961798285956969), FX16_CONST(-0.08732553520619256), - FX16_CONST(-0.996312612182778), FX16_CONST(-0.08579731234444023), - FX16_CONST(-0.9964430513500426), FX16_CONST(-0.08426888759332424), - FX16_CONST(-0.9965711457905548), FX16_CONST(-0.0827402645493757), - FX16_CONST(-0.9966968952028961), FX16_CONST(-0.08121144680959229), - FX16_CONST(-0.9968202992911657), FX16_CONST(-0.0796824379714307), - FX16_CONST(-0.996941357764982), FX16_CONST(-0.07815324163279465), - FX16_CONST(-0.997060070339483), FX16_CONST(-0.07662386139203174), - FX16_CONST(-0.9971764367353261), FX16_CONST(-0.0750943008479214), - FX16_CONST(-0.9972904566786902), FX16_CONST(-0.07356456359966736), - FX16_CONST(-0.9974021299012753), FX16_CONST(-0.0720346532468891), - FX16_CONST(-0.9975114561403035), FX16_CONST(-0.07050457338961436), - FX16_CONST(-0.9976184351385196), FX16_CONST(-0.06897432762826708), - FX16_CONST(-0.9977230666441916), FX16_CONST(-0.06744391956366423), - FX16_CONST(-0.9978253504111116), FX16_CONST(-0.06591335279700383), - FX16_CONST(-0.997925286198596), FX16_CONST(-0.06438263092985731), - FX16_CONST(-0.9980228737714861), FX16_CONST(-0.06285175756416199), - FX16_CONST(-0.9981181129001492), FX16_CONST(-0.061320736302208995), - FX16_CONST(-0.9982110033604782), FX16_CONST(-0.05978957074664013), - FX16_CONST(-0.9983015449338928), FX16_CONST(-0.058258264500435857), - FX16_CONST(-0.9983897374073402), FX16_CONST(-0.056726821166907686), - FX16_CONST(-0.9984755805732948), FX16_CONST(-0.05519524434968971), - FX16_CONST(-0.9985590742297593), FX16_CONST(-0.053663537652731026), - FX16_CONST(-0.9986402181802652), FX16_CONST(-0.05213170468028366), - FX16_CONST(-0.9987190122338729), FX16_CONST(-0.050599749036899455), - FX16_CONST(-0.9987954562051724), FX16_CONST(-0.04906767432741803), - FX16_CONST(-0.9988695499142836), FX16_CONST(-0.04753548415695916), - FX16_CONST(-0.9989412931868569), FX16_CONST(-0.046003182130915206), - FX16_CONST(-0.9990106858540733), FX16_CONST(-0.044470771854939084), - FX16_CONST(-0.9990777277526454), FX16_CONST(-0.042938256934941084), - FX16_CONST(-0.9991424187248169), FX16_CONST(-0.04140564097707684), - FX16_CONST(-0.9992047586183639), FX16_CONST(-0.03987292758773975), - FX16_CONST(-0.9992647472865944), FX16_CONST(-0.03834012037355247), - FX16_CONST(-0.9993223845883494), FX16_CONST(-0.03680722294135933), - FX16_CONST(-0.9993776703880028), FX16_CONST(-0.035274238898214294), - FX16_CONST(-0.9994306045554617), FX16_CONST(-0.03374117185137776), - FX16_CONST(-0.999481186966167), FX16_CONST(-0.0322080254083046), - FX16_CONST(-0.9995294175010931), FX16_CONST(-0.030674803176636484), - FX16_CONST(-0.9995752960467492), FX16_CONST(-0.02914150876419431), - FX16_CONST(-0.9996188224951786), FX16_CONST(-0.027608145778966163), - FX16_CONST(-0.9996599967439592), FX16_CONST(-0.02607471782910416), - FX16_CONST(-0.9996988186962042), FX16_CONST(-0.02454122852291239), - FX16_CONST(-0.9997352882605617), FX16_CONST(-0.02300768146883931), - FX16_CONST(-0.9997694053512153), FX16_CONST(-0.021474080275469286), - FX16_CONST(-0.9998011698878843), FX16_CONST(-0.019940428551514944), - FX16_CONST(-0.9998305817958234), FX16_CONST(-0.018406729905805164), - FX16_CONST(-0.9998576410058239), FX16_CONST(-0.016872987947281894), - FX16_CONST(-0.9998823474542126), FX16_CONST(-0.015339206284988121), - FX16_CONST(-0.9999047010828529), FX16_CONST(-0.01380538852806025), - FX16_CONST(-0.9999247018391445), FX16_CONST(-0.012271538285720512), - FX16_CONST(-0.9999423496760239), FX16_CONST(-0.010737659167264916), - FX16_CONST(-0.9999576445519639), FX16_CONST(-0.009203754782060083), - FX16_CONST(-0.9999705864309741), FX16_CONST(-0.007669828739531199), - FX16_CONST(-0.9999811752826011), FX16_CONST(-0.006135884649154416), - FX16_CONST(-0.9999894110819284), FX16_CONST(-0.00460192612044835), - FX16_CONST(-0.9999952938095762), FX16_CONST(-0.0030679567629664827), - FX16_CONST(-0.9999988234517019), FX16_CONST(-0.0015339801862851105), - FX16_CONST(-1.0), FX16_CONST(-1.8369701987210297e-16), - FX16_CONST(-0.9999988234517019), FX16_CONST(0.0015339801862847432), - FX16_CONST(-0.9999952938095762), FX16_CONST(0.003067956762966115), - FX16_CONST(-0.9999894110819284), FX16_CONST(0.004601926120447982), - FX16_CONST(-0.9999811752826011), FX16_CONST(0.0061358846491540485), - FX16_CONST(-0.9999705864309741), FX16_CONST(0.007669828739530832), - FX16_CONST(-0.9999576445519639), FX16_CONST(0.009203754782059715), - FX16_CONST(-0.9999423496760239), FX16_CONST(0.010737659167264548), - FX16_CONST(-0.9999247018391445), FX16_CONST(0.012271538285720144), - FX16_CONST(-0.9999047010828529), FX16_CONST(0.013805388528059882), - FX16_CONST(-0.9998823474542126), FX16_CONST(0.015339206284987753), - FX16_CONST(-0.9998576410058239), FX16_CONST(0.016872987947281527), - FX16_CONST(-0.9998305817958234), FX16_CONST(0.018406729905804796), - FX16_CONST(-0.9998011698878843), FX16_CONST(0.019940428551514577), - FX16_CONST(-0.9997694053512153), FX16_CONST(0.021474080275468918), - FX16_CONST(-0.9997352882605617), FX16_CONST(0.023007681468838945), - FX16_CONST(-0.9996988186962042), FX16_CONST(0.02454122852291202), - FX16_CONST(-0.9996599967439592), FX16_CONST(0.026074717829103793), - FX16_CONST(-0.9996188224951786), FX16_CONST(0.027608145778965795), - FX16_CONST(-0.9995752960467492), FX16_CONST(0.02914150876419394), - FX16_CONST(-0.9995294175010931), FX16_CONST(0.030674803176636116), - FX16_CONST(-0.999481186966167), FX16_CONST(0.03220802540830423), - FX16_CONST(-0.9994306045554617), FX16_CONST(0.0337411718513774), - FX16_CONST(-0.9993776703880028), FX16_CONST(0.035274238898213926), - FX16_CONST(-0.9993223845883495), FX16_CONST(0.036807222941358964), - FX16_CONST(-0.9992647472865945), FX16_CONST(0.038340120373552104), - FX16_CONST(-0.9992047586183639), FX16_CONST(0.03987292758773938), - FX16_CONST(-0.9991424187248169), FX16_CONST(0.04140564097707647), - FX16_CONST(-0.9990777277526454), FX16_CONST(0.042938256934940716), - FX16_CONST(-0.9990106858540734), FX16_CONST(0.044470771854938716), - FX16_CONST(-0.9989412931868569), FX16_CONST(0.046003182130914845), - FX16_CONST(-0.9988695499142836), FX16_CONST(0.04753548415695879), - FX16_CONST(-0.9987954562051724), FX16_CONST(0.04906767432741766), - FX16_CONST(-0.9987190122338729), FX16_CONST(0.05059974903689909), - FX16_CONST(-0.9986402181802653), FX16_CONST(0.05213170468028329), - FX16_CONST(-0.9985590742297593), FX16_CONST(0.05366353765273066), - FX16_CONST(-0.9984755805732948), FX16_CONST(0.055195244349689344), - FX16_CONST(-0.9983897374073402), FX16_CONST(0.05672682116690732), - FX16_CONST(-0.9983015449338929), FX16_CONST(0.05825826450043549), - FX16_CONST(-0.9982110033604782), FX16_CONST(0.059789570746639764), - FX16_CONST(-0.9981181129001492), FX16_CONST(0.06132073630220863), - FX16_CONST(-0.9980228737714862), FX16_CONST(0.06285175756416163), - FX16_CONST(-0.997925286198596), FX16_CONST(0.06438263092985695), - FX16_CONST(-0.9978253504111116), FX16_CONST(0.06591335279700346), - FX16_CONST(-0.9977230666441916), FX16_CONST(0.06744391956366387), - FX16_CONST(-0.9976184351385196), FX16_CONST(0.06897432762826672), - FX16_CONST(-0.9975114561403035), FX16_CONST(0.070504573389614), - FX16_CONST(-0.9974021299012753), FX16_CONST(0.07203465324688872), - FX16_CONST(-0.9972904566786902), FX16_CONST(0.07356456359966698), - FX16_CONST(-0.9971764367353262), FX16_CONST(0.07509430084792104), - FX16_CONST(-0.997060070339483), FX16_CONST(0.07662386139203138), - FX16_CONST(-0.9969413577649822), FX16_CONST(0.07815324163279429), - FX16_CONST(-0.9968202992911657), FX16_CONST(0.07968243797143033), - FX16_CONST(-0.9966968952028961), FX16_CONST(0.08121144680959191), - FX16_CONST(-0.9965711457905548), FX16_CONST(0.08274026454937533), - FX16_CONST(-0.9964430513500426), FX16_CONST(0.08426888759332388), - FX16_CONST(-0.996312612182778), FX16_CONST(0.08579731234443985), - FX16_CONST(-0.9961798285956969), FX16_CONST(0.0873255352061922), - FX16_CONST(-0.9960447009012521), FX16_CONST(0.088853552582524), - FX16_CONST(-0.9959072294174117), FX16_CONST(0.09038136087786454), - FX16_CONST(-0.9957674144676598), FX16_CONST(0.09190895649713245), - FX16_CONST(-0.9956252563809943), FX16_CONST(0.09343633584574766), - FX16_CONST(-0.9954807554919269), FX16_CONST(0.09496349532963905), - FX16_CONST(-0.9953339121404823), FX16_CONST(0.0964904313552528), - FX16_CONST(-0.9951847266721969), FX16_CONST(0.09801714032956009), - FX16_CONST(-0.9950331994381186), FX16_CONST(0.09954361866006897), - FX16_CONST(-0.9948793307948056), FX16_CONST(0.10106986275482763), - FX16_CONST(-0.9947231211043257), FX16_CONST(0.10259586902243625), - FX16_CONST(-0.9945645707342554), FX16_CONST(0.1041216338720547), - FX16_CONST(-0.9944036800576791), FX16_CONST(0.10564715371341002), - FX16_CONST(-0.994240449453188), FX16_CONST(0.10717242495680841), - FX16_CONST(-0.9940748793048795), FX16_CONST(0.10869744401313844), - FX16_CONST(-0.9939069700023561), FX16_CONST(0.11022220729388293), - FX16_CONST(-0.9937367219407246), FX16_CONST(0.11174671121112664), - FX16_CONST(-0.9935641355205953), FX16_CONST(0.11327095217756455), - FX16_CONST(-0.9933892111480808), FX16_CONST(0.11479492660650957), - FX16_CONST(-0.9932119492347946), FX16_CONST(0.1163186309119044), - FX16_CONST(-0.9930323501978514), FX16_CONST(0.11784206150832478), - FX16_CONST(-0.9928504144598651), FX16_CONST(0.11936521481099133), - FX16_CONST(-0.992666142448948), FX16_CONST(0.1208880872357772), - FX16_CONST(-0.9924795345987101), FX16_CONST(0.1224106751992156), - FX16_CONST(-0.9922905913482574), FX16_CONST(0.12393297511851173), - FX16_CONST(-0.9920993131421918), FX16_CONST(0.12545498341154596), - FX16_CONST(-0.9919057004306093), FX16_CONST(0.12697669649688575), - FX16_CONST(-0.9917097536690995), FX16_CONST(0.12849811079379322), - FX16_CONST(-0.9915114733187439), FX16_CONST(0.13001922272223354), - FX16_CONST(-0.9913108598461154), FX16_CONST(0.1315400287028826), - FX16_CONST(-0.9911079137232769), FX16_CONST(0.1330605251571387), - FX16_CONST(-0.99090263542778), FX16_CONST(0.13458070850712597), - FX16_CONST(-0.9906950254426646), FX16_CONST(0.13610057517570617), - FX16_CONST(-0.990485084256457), FX16_CONST(0.13762012158648618), - FX16_CONST(-0.9902728123631692), FX16_CONST(0.13913934416382562), - FX16_CONST(-0.9900582102622971), FX16_CONST(0.1406582393328488), - FX16_CONST(-0.9898412784588205), FX16_CONST(0.14217680351944778), - FX16_CONST(-0.9896220174632009), FX16_CONST(0.14369503315029433), - FX16_CONST(-0.9894004277913804), FX16_CONST(0.1452129246528475), - FX16_CONST(-0.9891765099647809), FX16_CONST(0.14673047445536194), - FX16_CONST(-0.9889502645103031), FX16_CONST(0.14824767898689553), - FX16_CONST(-0.9887216919603238), FX16_CONST(0.14976453467732115), - FX16_CONST(-0.9884907928526967), FX16_CONST(0.15128103795733), - FX16_CONST(-0.9882575677307495), FX16_CONST(0.15279718525844338), - FX16_CONST(-0.9880220171432835), FX16_CONST(0.15431297301302022), - FX16_CONST(-0.9877841416445723), FX16_CONST(0.15582839765426462), - FX16_CONST(-0.9875439417943593), FX16_CONST(0.1573434556162378), - FX16_CONST(-0.9873014181578584), FX16_CONST(0.15885814333386117), - FX16_CONST(-0.9870565713057511), FX16_CONST(0.16037245724292815), - FX16_CONST(-0.9868094018141854), FX16_CONST(0.16188639378011188), - FX16_CONST(-0.9865599102647754), FX16_CONST(0.16339994938297342), - FX16_CONST(-0.9863080972445988), FX16_CONST(0.1649131204899694), - FX16_CONST(-0.9860539633461955), FX16_CONST(0.16642590354046374), - FX16_CONST(-0.9857975091675675), FX16_CONST(0.16793829497473098), - FX16_CONST(-0.9855387353121761), FX16_CONST(0.16945029123396793), - FX16_CONST(-0.9852776423889412), FX16_CONST(0.17096188876030133), - FX16_CONST(-0.98501423101224), FX16_CONST(0.17247308399679537), - FX16_CONST(-0.9847485018019043), FX16_CONST(0.17398387338746338), - FX16_CONST(-0.9844804553832209), FX16_CONST(0.17549425337727115), - FX16_CONST(-0.9842100923869291), FX16_CONST(0.17700422041214864), - FX16_CONST(-0.9839374134492189), FX16_CONST(0.17851377093899756), - FX16_CONST(-0.9836624192117303), FX16_CONST(0.1800229014056997), - FX16_CONST(-0.9833851103215513), FX16_CONST(0.18153160826112447), - FX16_CONST(-0.9831054874312164), FX16_CONST(0.1830398879551406), - FX16_CONST(-0.9828235511987053), FX16_CONST(0.1845477369386194), - FX16_CONST(-0.9825393022874412), FX16_CONST(0.1860551516634466), - FX16_CONST(-0.9822527413662894), FX16_CONST(0.1875621285825297), - FX16_CONST(-0.9819638691095554), FX16_CONST(0.1890686641498056), - FX16_CONST(-0.9816726861969832), FX16_CONST(0.19057475482025232), - FX16_CONST(-0.9813791933137547), FX16_CONST(0.19208039704989216), - FX16_CONST(-0.9810833911504867), FX16_CONST(0.1935855872958035), - FX16_CONST(-0.9807852804032304), FX16_CONST(0.1950903220161283), - FX16_CONST(-0.9804848617734693), FX16_CONST(0.19659459767008042), - FX16_CONST(-0.9801821359681175), FX16_CONST(0.19809841071795306), - FX16_CONST(-0.9798771036995177), FX16_CONST(0.1996017576211306), - FX16_CONST(-0.9795697656854406), FX16_CONST(0.2011046348420917), - FX16_CONST(-0.979260122649082), FX16_CONST(0.20260703884442108), - FX16_CONST(-0.9789481753190622), FX16_CONST(0.20410896609281698), - FX16_CONST(-0.9786339244294233), FX16_CONST(0.20561041305309866), - FX16_CONST(-0.9783173707196278), FX16_CONST(0.20711137619221812), - FX16_CONST(-0.9779985149345571), FX16_CONST(0.2086118519782632), - FX16_CONST(-0.97767735782451), FX16_CONST(0.2101118368804695), - FX16_CONST(-0.9773539001452), FX16_CONST(0.2116113273692276), - FX16_CONST(-0.9770281426577543), FX16_CONST(0.21311031991609156), - FX16_CONST(-0.976700086128712), FX16_CONST(0.21460881099378626), - FX16_CONST(-0.9763697313300213), FX16_CONST(0.21610679707621913), - FX16_CONST(-0.9760370790390391), FX16_CONST(0.21760427463848342), - FX16_CONST(-0.9757021300385286), FX16_CONST(0.21910124015686974), - FX16_CONST(-0.975364885116657), FX16_CONST(0.22059769010887362), - FX16_CONST(-0.9750253450669942), FX16_CONST(0.22209362097320293), - FX16_CONST(-0.9746835106885108), FX16_CONST(0.22358902922978954), - FX16_CONST(-0.974339382785576), FX16_CONST(0.22508391135979255), - FX16_CONST(-0.973992962167956), FX16_CONST(0.22657826384560986), - FX16_CONST(-0.9736442496508119), FX16_CONST(0.22807208317088576), - FX16_CONST(-0.9732932460546981), FX16_CONST(0.22956536582051906), - FX16_CONST(-0.9729399522055603), FX16_CONST(0.23105810828067058), - FX16_CONST(-0.9725843689347323), FX16_CONST(0.23255030703877488), - FX16_CONST(-0.9722264970789364), FX16_CONST(0.2340419585835432), - FX16_CONST(-0.9718663374802794), FX16_CONST(0.23553305940497546), - FX16_CONST(-0.9715038909862518), FX16_CONST(0.2370236059943673), - FX16_CONST(-0.9711391584497253), FX16_CONST(0.23851359484431783), - FX16_CONST(-0.9707721407289505), FX16_CONST(0.24000302244874103), - FX16_CONST(-0.9704028386875555), FX16_CONST(0.24149188530286905), - FX16_CONST(-0.970031253194544), FX16_CONST(0.24298017990326376), - FX16_CONST(-0.9696573851242924), FX16_CONST(0.24446790274782418), - FX16_CONST(-0.9692812353565484), FX16_CONST(0.2459550503357948), - FX16_CONST(-0.968902804776429), FX16_CONST(0.24744161916777277), - FX16_CONST(-0.9685220942744174), FX16_CONST(0.2489276057457198), - FX16_CONST(-0.9681391047463624), FX16_CONST(0.25041300657296506), - FX16_CONST(-0.9677538370934755), FX16_CONST(0.2518978181542169), - FX16_CONST(-0.9673662922223285), FX16_CONST(0.25338203699557027), - FX16_CONST(-0.9669764710448523), FX16_CONST(0.25486565960451396), - FX16_CONST(-0.9665843744783332), FX16_CONST(0.25634868248994247), - FX16_CONST(-0.9661900034454126), FX16_CONST(0.2578311021621587), - FX16_CONST(-0.9657933588740837), FX16_CONST(0.2593129151328861), - FX16_CONST(-0.9653944416976894), FX16_CONST(0.2607941179152755), - FX16_CONST(-0.9649932528549203), FX16_CONST(0.2622747070239138), - FX16_CONST(-0.9645897932898129), FX16_CONST(0.26375467897483085), - FX16_CONST(-0.9641840639517459), FX16_CONST(0.26523403028551146), - FX16_CONST(-0.96377606579544), FX16_CONST(0.2667127574748982), - FX16_CONST(-0.963365799780954), FX16_CONST(0.2681908570634031), - FX16_CONST(-0.9629532668736839), FX16_CONST(0.2696683255729152), - FX16_CONST(-0.9625384680443594), FX16_CONST(0.2711451595268074), - FX16_CONST(-0.9621214042690417), FX16_CONST(0.27262135544994853), - FX16_CONST(-0.9617020765291227), FX16_CONST(0.2740969098687061), - FX16_CONST(-0.9612804858113206), FX16_CONST(0.27557181931095803), - FX16_CONST(-0.9608566331076797), FX16_CONST(0.27704608030609995), - FX16_CONST(-0.9604305194155658), FX16_CONST(0.2785196893850533), - FX16_CONST(-0.9600021457376661), FX16_CONST(0.2799926430802727), - FX16_CONST(-0.9595715130819846), FX16_CONST(0.2814649379257576), - FX16_CONST(-0.959138622461842), FX16_CONST(0.2829365704570551), - FX16_CONST(-0.9587034748958716), FX16_CONST(0.28440753721127177), - FX16_CONST(-0.9582660714080177), FX16_CONST(0.28587783472708067), - FX16_CONST(-0.957826413027533), FX16_CONST(0.2873474595447289), - FX16_CONST(-0.9573845007889761), FX16_CONST(0.28881640820604904), - FX16_CONST(-0.9569403357322089), FX16_CONST(0.29028467725446205), - FX16_CONST(-0.9564939189023951), FX16_CONST(0.29175226323498915), - FX16_CONST(-0.9560452513499964), FX16_CONST(0.2932191626942587), - FX16_CONST(-0.955594334130771), FX16_CONST(0.2946853721805145), - FX16_CONST(-0.9551411683057709), FX16_CONST(0.2961508882436233), - FX16_CONST(-0.9546857549413384), FX16_CONST(0.29761570743508586), - FX16_CONST(-0.9542280951091057), FX16_CONST(0.29907982630804025), - FX16_CONST(-0.9537681898859903), FX16_CONST(0.3005432414172734), - FX16_CONST(-0.9533060403541939), FX16_CONST(0.30200594931922814), - FX16_CONST(-0.9528416476011988), FX16_CONST(0.3034679465720107), - FX16_CONST(-0.952375012719766), FX16_CONST(0.304929229735402), - FX16_CONST(-0.9519061368079325), FX16_CONST(0.30638979537086064), - FX16_CONST(-0.9514350209690084), FX16_CONST(0.30784964004153476), - FX16_CONST(-0.9509616663115751), FX16_CONST(0.3093087603122687), - FX16_CONST(-0.9504860739494817), FX16_CONST(0.31076715274961164), - FX16_CONST(-0.9500082450018432), FX16_CONST(0.3122248139218244), - FX16_CONST(-0.9495281805930368), FX16_CONST(0.31368174039889113), - FX16_CONST(-0.9490458818527007), FX16_CONST(0.31513792875252217), - FX16_CONST(-0.9485613499157303), FX16_CONST(0.3165933755561658), - FX16_CONST(-0.9480745859222762), FX16_CONST(0.318048077385015), - FX16_CONST(-0.9475855910177413), FX16_CONST(0.3195020308160151), - FX16_CONST(-0.9470943663527773), FX16_CONST(0.32095523242787477), - FX16_CONST(-0.9466009130832836), FX16_CONST(0.3224076788010696), - FX16_CONST(-0.9461052323704034), FX16_CONST(0.32385936651785274), - FX16_CONST(-0.9456073253805213), FX16_CONST(0.3253102921622629), - FX16_CONST(-0.9451071932852605), FX16_CONST(0.32676045232013196), - FX16_CONST(-0.9446048372614805), FX16_CONST(0.328209843579092), - FX16_CONST(-0.9441002584912728), FX16_CONST(0.32965846252858716), - FX16_CONST(-0.9435934581619604), FX16_CONST(0.3311063057598762), - FX16_CONST(-0.9430844374660935), FX16_CONST(0.33255336986604417), - FX16_CONST(-0.9425731976014469), FX16_CONST(0.3339996514420095), - FX16_CONST(-0.9420597397710175), FX16_CONST(0.33544514708453105), - FX16_CONST(-0.9415440651830209), FX16_CONST(0.3368898533922196), - FX16_CONST(-0.9410261750508894), FX16_CONST(0.33833376696554085), - FX16_CONST(-0.9405060705932684), FX16_CONST(0.33977688440682674), - FX16_CONST(-0.9399837530340139), FX16_CONST(0.3412192023202824), - FX16_CONST(-0.9394592236021898), FX16_CONST(0.34266071731199454), - FX16_CONST(-0.9389324835320647), FX16_CONST(0.3441014259899383), - FX16_CONST(-0.9384035340631083), FX16_CONST(0.3455413249639887), - FX16_CONST(-0.9378723764399899), FX16_CONST(0.34698041084592346), - FX16_CONST(-0.937339011912575), FX16_CONST(0.3484186802494345), - FX16_CONST(-0.9368034417359216), FX16_CONST(0.34985612979013503), - FX16_CONST(-0.9362656671702785), FX16_CONST(0.35129275608556654), - FX16_CONST(-0.9357256894810805), FX16_CONST(0.3527285557552103), - FX16_CONST(-0.9351835099389477), FX16_CONST(0.35416352542049007), - FX16_CONST(-0.9346391298196808), FX16_CONST(0.35559766170478374), - FX16_CONST(-0.9340925504042589), FX16_CONST(0.35703096123343003), - FX16_CONST(-0.9335437729788362), FX16_CONST(0.3584634206337367), - FX16_CONST(-0.9329927988347391), FX16_CONST(0.3598950365349876), - FX16_CONST(-0.9324396292684626), FX16_CONST(0.3613258055684539), - FX16_CONST(-0.9318842655816681), FX16_CONST(0.362755724367397), - FX16_CONST(-0.9313267090811805), FX16_CONST(0.36418478956707984), - FX16_CONST(-0.9307669610789837), FX16_CONST(0.36561299780477396), - FX16_CONST(-0.9302050228922193), FX16_CONST(0.36704034571976657), - FX16_CONST(-0.9296408958431814), FX16_CONST(0.3684668299533719), - FX16_CONST(-0.9290745812593159), FX16_CONST(0.3698924471489338), - FX16_CONST(-0.9285060804732156), FX16_CONST(0.3713171939518374), - FX16_CONST(-0.9279353948226179), FX16_CONST(0.3727410670095158), - FX16_CONST(-0.927362525650401), FX16_CONST(0.37416406297145816), - FX16_CONST(-0.926787474304582), FX16_CONST(0.3755861784892167), - FX16_CONST(-0.9262102421383115), FX16_CONST(0.37700741021641787), - FX16_CONST(-0.9256308305098728), FX16_CONST(0.37842775480876534), - FX16_CONST(-0.9250492407826776), FX16_CONST(0.3798472089240511), - FX16_CONST(-0.9244654743252626), FX16_CONST(0.38126576922216243), - FX16_CONST(-0.9238795325112866), FX16_CONST(0.38268343236509), - FX16_CONST(-0.9232914167195279), FX16_CONST(0.3841001950169346), - FX16_CONST(-0.9227011283338787), FX16_CONST(0.38551605384391857), - FX16_CONST(-0.9221086687433452), FX16_CONST(0.38693100551438847), - FX16_CONST(-0.9215140393420419), FX16_CONST(0.3883450466988263), - FX16_CONST(-0.9209172415291894), FX16_CONST(0.38975817406985663), - FX16_CONST(-0.9203182767091108), FX16_CONST(0.39117038430225337), - FX16_CONST(-0.9197171462912275), FX16_CONST(0.39258167407295114), - FX16_CONST(-0.9191138516900579), FX16_CONST(0.3939920400610479), - FX16_CONST(-0.9185083943252123), FX16_CONST(0.39540147894781624), - FX16_CONST(-0.9179007756213904), FX16_CONST(0.3968099874167104), - FX16_CONST(-0.9172909970083778), FX16_CONST(0.39821756215337384), - FX16_CONST(-0.9166790599210428), FX16_CONST(0.3996241998456464), - FX16_CONST(-0.9160649657993318), FX16_CONST(0.40102989718357535), - FX16_CONST(-0.9154487160882678), FX16_CONST(0.4024346508594183), - FX16_CONST(-0.9148303122379462), FX16_CONST(0.40383845756765413), - FX16_CONST(-0.9142097557035306), FX16_CONST(0.40524131400499), - FX16_CONST(-0.913587047945251), FX16_CONST(0.4066432168703685), - FX16_CONST(-0.9129621904283983), FX16_CONST(0.4080441628649783), - FX16_CONST(-0.9123351846233229), FX16_CONST(0.40944414869225737), - FX16_CONST(-0.9117060320054299), FX16_CONST(0.41084317105790386), - FX16_CONST(-0.9110747340551762), FX16_CONST(0.41224122666988294), - FX16_CONST(-0.9104412922580671), FX16_CONST(0.4136383122384348), - FX16_CONST(-0.9098057081046524), FX16_CONST(0.4150344244760812), - FX16_CONST(-0.9091679830905225), FX16_CONST(0.4164295600976369), - FX16_CONST(-0.9085281187163062), FX16_CONST(0.41782371582021216), - FX16_CONST(-0.9078861164876663), FX16_CONST(0.41921688836322396), - FX16_CONST(-0.9072419779152958), FX16_CONST(0.4206090744484027), - FX16_CONST(-0.9065957045149156), FX16_CONST(0.4220002707997992), - FX16_CONST(-0.9059472978072687), FX16_CONST(0.42339047414379566), - FX16_CONST(-0.9052967593181189), FX16_CONST(0.4247796812091086), - FX16_CONST(-0.9046440905782462), FX16_CONST(0.42616788872679956), - FX16_CONST(-0.9039892931234433), FX16_CONST(0.42755509343028214), - FX16_CONST(-0.9033323684945117), FX16_CONST(0.4289412920553297), - FX16_CONST(-0.902673318237259), FX16_CONST(0.43032648134008217), - FX16_CONST(-0.9020121439024933), FX16_CONST(0.431710658025057), - FX16_CONST(-0.9013488470460221), FX16_CONST(0.4330938188531518), - FX16_CONST(-0.9006834292286469), FX16_CONST(0.4344759605696557), - FX16_CONST(-0.9000158920161602), FX16_CONST(0.43585707992225564), - FX16_CONST(-0.8993462369793418), FX16_CONST(0.4372371736610436), - FX16_CONST(-0.898674465693954), FX16_CONST(0.43861623853852727), - FX16_CONST(-0.89800057974074), FX16_CONST(0.43999427130963303), - FX16_CONST(-0.8973245807054183), FX16_CONST(0.4413712687317166), - FX16_CONST(-0.8966464701786802), FX16_CONST(0.4427472275645701), - FX16_CONST(-0.895966249756185), FX16_CONST(0.4441221445704294), - FX16_CONST(-0.8952839210385577), FX16_CONST(0.4454960165139813), - FX16_CONST(-0.8945994856313828), FX16_CONST(0.4468688401623739), - FX16_CONST(-0.8939129451452034), FX16_CONST(0.4482406122852198), - FX16_CONST(-0.8932243011955153), FX16_CONST(0.4496113296546066), - FX16_CONST(-0.8925335554027646), FX16_CONST(0.45098098904510403), - FX16_CONST(-0.891840709392343), FX16_CONST(0.4523495872337704), - FX16_CONST(-0.8911457647945834), FX16_CONST(0.4537171210001635), - FX16_CONST(-0.890448723244758), FX16_CONST(0.4550835871263436), - FX16_CONST(-0.8897495863830729), FX16_CONST(0.45644898239688386), - FX16_CONST(-0.8890483558546646), FX16_CONST(0.4578133035988773), - FX16_CONST(-0.8883450333095962), FX16_CONST(0.45917654752194437), - FX16_CONST(-0.8876396204028542), FX16_CONST(0.46053871095823956), - FX16_CONST(-0.8869321187943423), FX16_CONST(0.46189979070246245), - FX16_CONST(-0.8862225301488807), FX16_CONST(0.46325978355186004), - FX16_CONST(-0.8855108561362), FX16_CONST(0.4646186863062378), - FX16_CONST(-0.8847970984309377), FX16_CONST(0.4659764957679663), - FX16_CONST(-0.8840812587126353), FX16_CONST(0.4673332087419879), - FX16_CONST(-0.8833633386657318), FX16_CONST(0.46868882203582757), - FX16_CONST(-0.8826433399795629), FX16_CONST(0.4700433324595954), - FX16_CONST(-0.881921264348355), FX16_CONST(0.4713967368259976), - FX16_CONST(-0.881197113471222), FX16_CONST(0.47274903195034285), - FX16_CONST(-0.8804708890521606), FX16_CONST(0.4741002146505502), - FX16_CONST(-0.8797425928000476), FX16_CONST(0.4754502817471554), - FX16_CONST(-0.8790122264286336), FX16_CONST(0.4767992300633218), - FX16_CONST(-0.8782797916565416), FX16_CONST(0.4781470564248429), - FX16_CONST(-0.8775452902072612), FX16_CONST(0.479493757660153), - FX16_CONST(-0.8768087238091457), FX16_CONST(0.48083933060033407), - FX16_CONST(-0.8760700941954069), FX16_CONST(0.4821837720791222), - FX16_CONST(-0.875329403104111), FX16_CONST(0.48352707893291835), - FX16_CONST(-0.8745866522781762), FX16_CONST(0.4848692480007909), - FX16_CONST(-0.8738418434653669), FX16_CONST(0.4862102761244863), - FX16_CONST(-0.8730949784182901), FX16_CONST(0.487550160148436), - FX16_CONST(-0.8723460588943914), FX16_CONST(0.4888888969197634), - FX16_CONST(-0.8715950866559513), FX16_CONST(0.4902264832882907), - FX16_CONST(-0.8708420634700791), FX16_CONST(0.4915629161065497), - FX16_CONST(-0.8700869911087115), FX16_CONST(0.49289819222978387), - FX16_CONST(-0.8693298713486067), FX16_CONST(0.49423230851595973), - FX16_CONST(-0.8685707059713408), FX16_CONST(0.49556526182577265), - FX16_CONST(-0.8678094967633035), FX16_CONST(0.496897049022654), - FX16_CONST(-0.8670462455156929), FX16_CONST(0.4982276669727815), - FX16_CONST(-0.8662809540245131), FX16_CONST(0.49955711254508167), - FX16_CONST(-0.8655136240905691), FX16_CONST(0.5008853826112407), - FX16_CONST(-0.8647442575194624), FX16_CONST(0.5022124740457108), - FX16_CONST(-0.8639728561215866), FX16_CONST(0.5035383837257178), - FX16_CONST(-0.8631994217121244), FX16_CONST(0.5048631085312671), - FX16_CONST(-0.8624239561110407), FX16_CONST(0.506186645345155), - FX16_CONST(-0.8616464611430814), FX16_CONST(0.5075089910529706), - FX16_CONST(-0.8608669386377673), FX16_CONST(0.508830142543107), - FX16_CONST(-0.8600853904293901), FX16_CONST(0.5101500967067669), - FX16_CONST(-0.8593018183570087), FX16_CONST(0.5114688504379699), - FX16_CONST(-0.858516224264443), FX16_CONST(0.5127864006335626), - FX16_CONST(-0.8577286100002722), FX16_CONST(0.5141027441932216), - FX16_CONST(-0.8569389774178288), FX16_CONST(0.5154178780194629), - FX16_CONST(-0.8561473283751945), FX16_CONST(0.5167317990176499), - FX16_CONST(-0.8553536647351959), FX16_CONST(0.5180445040959996), - FX16_CONST(-0.8545579883654008), FX16_CONST(0.5193559901655892), - FX16_CONST(-0.8537603011381115), FX16_CONST(0.5206662541403668), - FX16_CONST(-0.8529606049303637), FX16_CONST(0.5219752929371542), - FX16_CONST(-0.8521589016239198), FX16_CONST(0.5232831034756564), - FX16_CONST(-0.8513551931052651), FX16_CONST(0.5245896826784691), - FX16_CONST(-0.8505494812656038), FX16_CONST(0.5258950274710842), - FX16_CONST(-0.8497417680008528), FX16_CONST(0.527199134781901), - FX16_CONST(-0.8489320552116397), FX16_CONST(0.5285020015422283), - FX16_CONST(-0.8481203448032973), FX16_CONST(0.5298036246862946), - FX16_CONST(-0.8473066386858583), FX16_CONST(0.531104001151255), - FX16_CONST(-0.8464909387740519), FX16_CONST(0.5324031278771981), - FX16_CONST(-0.8456732469872993), FX16_CONST(0.5337010018071525), - FX16_CONST(-0.8448535652497072), FX16_CONST(0.5349976198870969), - FX16_CONST(-0.8440318954900665), FX16_CONST(0.536292979065963), - FX16_CONST(-0.8432082396418454), FX16_CONST(0.5375870762956455), - FX16_CONST(-0.8423825996431858), FX16_CONST(0.5388799085310085), - FX16_CONST(-0.8415549774368988), FX16_CONST(0.5401714727298924), - FX16_CONST(-0.8407253749704583), FX16_CONST(0.5414617658531231), - FX16_CONST(-0.8398937941959996), FX16_CONST(0.5427507848645157), - FX16_CONST(-0.8390602370703127), FX16_CONST(0.5440385267308838), - FX16_CONST(-0.838224705554838), FX16_CONST(0.5453249884220465), - FX16_CONST(-0.8373872016156618), FX16_CONST(0.5466101669108351), - FX16_CONST(-0.8365477272235122), FX16_CONST(0.5478940591730997), - FX16_CONST(-0.8357062843537528), FX16_CONST(0.5491766621877194), - FX16_CONST(-0.8348628749863801), FX16_CONST(0.5504579729366046), - FX16_CONST(-0.8340175011060181), FX16_CONST(0.5517379884047073), - FX16_CONST(-0.8331701647019131), FX16_CONST(0.5530167055800277), - FX16_CONST(-0.83232086776793), FX16_CONST(0.5542941214536197), - FX16_CONST(-0.8314696123025455), FX16_CONST(0.5555702330196018), - FX16_CONST(-0.8306164003088464), FX16_CONST(0.5568450372751599), - FX16_CONST(-0.8297612337945232), FX16_CONST(0.558118531220556), - FX16_CONST(-0.8289041147718649), FX16_CONST(0.5593907118591361), - FX16_CONST(-0.8280450452577557), FX16_CONST(0.5606615761973361), - FX16_CONST(-0.8271840272736694), FX16_CONST(0.561931121244689), - FX16_CONST(-0.8263210628456636), FX16_CONST(0.5631993440138339), - FX16_CONST(-0.8254561540043777), FX16_CONST(0.5644662415205193), - FX16_CONST(-0.8245893027850253), FX16_CONST(0.5657318107836131), - FX16_CONST(-0.8237205112273913), FX16_CONST(0.5669960488251088), - FX16_CONST(-0.8228497813758266), FX16_CONST(0.568258952670131), - FX16_CONST(-0.8219771152792418), FX16_CONST(0.5695205193469468), - FX16_CONST(-0.8211025149911049), FX16_CONST(0.570780745886967), - FX16_CONST(-0.8202259825694347), FX16_CONST(0.5720396293247569), - FX16_CONST(-0.8193475200767969), FX16_CONST(0.5732971666980422), - FX16_CONST(-0.8184671295802985), FX16_CONST(0.574553355047716), - FX16_CONST(-0.8175848131515839), FX16_CONST(0.5758081914178449), - FX16_CONST(-0.816700572866828), FX16_CONST(0.5770616728556792), - FX16_CONST(-0.8158144108067339), FX16_CONST(0.5783137964116554), - FX16_CONST(-0.8149263290565266), FX16_CONST(0.5795645591394057), - FX16_CONST(-0.8140363297059483), FX16_CONST(0.5808139580957646), - FX16_CONST(-0.8131444148492539), FX16_CONST(0.5820619903407751), - FX16_CONST(-0.8122505865852042), FX16_CONST(0.583308652937698), - FX16_CONST(-0.811354847017064), FX16_CONST(0.5845539429530151), - FX16_CONST(-0.8104571982525949), FX16_CONST(0.5857978574564388), - FX16_CONST(-0.8095576424040513), FX16_CONST(0.5870403935209181), - FX16_CONST(-0.8086561815881749), FX16_CONST(0.5882815482226454), - FX16_CONST(-0.8077528179261906), FX16_CONST(0.5895213186410635), - FX16_CONST(-0.8068475535437994), FX16_CONST(0.5907597018588739), - FX16_CONST(-0.8059403905711764), FX16_CONST(0.5919966949620408), - FX16_CONST(-0.8050313311429637), FX16_CONST(0.5932322950397998), - FX16_CONST(-0.8041203773982657), FX16_CONST(0.5944664991846645), - FX16_CONST(-0.8032075314806453), FX16_CONST(0.5956993044924328), - FX16_CONST(-0.8022927955381159), FX16_CONST(0.5969307080621962), - FX16_CONST(-0.8013761717231404), FX16_CONST(0.598160706996342), - FX16_CONST(-0.8004576621926228), FX16_CONST(0.5993892984005644), - FX16_CONST(-0.799537269107905), FX16_CONST(0.600616479383869), - FX16_CONST(-0.7986149946347607), FX16_CONST(0.6018422470585802), - FX16_CONST(-0.7976908409433914), FX16_CONST(0.6030665985403478), - FX16_CONST(-0.7967648102084189), FX16_CONST(0.6042895309481557), - FX16_CONST(-0.7958369046088837), FX16_CONST(0.6055110414043253), - FX16_CONST(-0.794907126328237), FX16_CONST(0.6067311270345245), - FX16_CONST(-0.7939754775543371), FX16_CONST(0.6079497849677737), - FX16_CONST(-0.7930419604794441), FX16_CONST(0.6091670123364527), - FX16_CONST(-0.7921065773002126), FX16_CONST(0.6103828062763091), - FX16_CONST(-0.7911693302176903), FX16_CONST(0.6115971639264617), - FX16_CONST(-0.7902302214373101), FX16_CONST(0.6128100824294096), - FX16_CONST(-0.7892892531688857), FX16_CONST(0.6140215589310385), - FX16_CONST(-0.7883464276266061), FX16_CONST(0.615231590580627), - FX16_CONST(-0.7874017470290317), FX16_CONST(0.6164401745308532), - FX16_CONST(-0.786455213599086), FX16_CONST(0.6176473079378036), - FX16_CONST(-0.785506829564054), FX16_CONST(0.6188529879609762), - FX16_CONST(-0.7845565971555752), FX16_CONST(0.6200572117632892), - FX16_CONST(-0.7836045186096382), FX16_CONST(0.6212599765110877), - FX16_CONST(-0.7826505961665761), FX16_CONST(0.6224612793741495), - FX16_CONST(-0.7816948320710597), FX16_CONST(0.6236611175256942), - FX16_CONST(-0.7807372285720947), FX16_CONST(0.6248594881423861), - FX16_CONST(-0.7797777879230146), FX16_CONST(0.6260563884043434), - FX16_CONST(-0.7788165123814759), FX16_CONST(0.6272518154951442), - FX16_CONST(-0.7778534042094529), FX16_CONST(0.6284457666018328), - FX16_CONST(-0.7768884656732328), FX16_CONST(0.6296382389149267), - FX16_CONST(-0.7759216990434078), FX16_CONST(0.6308292296284242), - FX16_CONST(-0.774953106594874), FX16_CONST(0.6320187359398088), - FX16_CONST(-0.7739826906068228), FX16_CONST(0.6332067550500572), - FX16_CONST(-0.7730104533627369), FX16_CONST(0.6343932841636456), - FX16_CONST(-0.7720363971503849), FX16_CONST(0.6355783204885557), - FX16_CONST(-0.771060524261814), FX16_CONST(0.6367618612362839), - FX16_CONST(-0.7700828369933481), FX16_CONST(0.6379439036218438), - FX16_CONST(-0.7691033376455797), FX16_CONST(0.6391244448637756), - FX16_CONST(-0.7681220285233654), FX16_CONST(0.6403034821841517), - FX16_CONST(-0.7671389119358203), FX16_CONST(0.6414810128085833), - FX16_CONST(-0.7661539901963133), FX16_CONST(0.6426570339662265), - FX16_CONST(-0.7651672656224592), FX16_CONST(0.6438315428897912), - FX16_CONST(-0.7641787405361168), FX16_CONST(0.6450045368155438), - FX16_CONST(-0.7631884172633813), FX16_CONST(0.6461760129833163), - FX16_CONST(-0.7621962981345789), FX16_CONST(0.6473459686365122), - FX16_CONST(-0.7612023854842622), FX16_CONST(0.648514401022112), - FX16_CONST(-0.7602066816512026), FX16_CONST(0.6496813073906829), - FX16_CONST(-0.7592091889783882), FX16_CONST(0.6508466849963808), - FX16_CONST(-0.7582099098130154), FX16_CONST(0.6520105310969595), - FX16_CONST(-0.7572088465064846), FX16_CONST(0.6531728429537768), - FX16_CONST(-0.7562060014143943), FX16_CONST(0.6543336178318007), - FX16_CONST(-0.7552013768965369), FX16_CONST(0.655492852999615), - FX16_CONST(-0.7541949753168894), FX16_CONST(0.6566505457294287), - FX16_CONST(-0.7531867990436126), FX16_CONST(0.6578066932970785), - FX16_CONST(-0.7521768504490427), FX16_CONST(0.6589612929820373), - FX16_CONST(-0.7511651319096864), FX16_CONST(0.6601143420674206), - FX16_CONST(-0.7501516458062154), FX16_CONST(0.6612658378399917), - FX16_CONST(-0.7491363945234596), FX16_CONST(0.6624157775901715), - FX16_CONST(-0.7481193804504037), FX16_CONST(0.6635641586120395), - FX16_CONST(-0.7471006059801802), FX16_CONST(0.6647109782033448), - FX16_CONST(-0.7460800735100638), FX16_CONST(0.6658562336655097), - FX16_CONST(-0.7450577854414658), FX16_CONST(0.6669999223036377), - FX16_CONST(-0.7440337441799296), FX16_CONST(0.6681420414265181), - FX16_CONST(-0.7430079521351219), FX16_CONST(0.6692825883466358), - FX16_CONST(-0.7419804117208312), FX16_CONST(0.670421560380173), - FX16_CONST(-0.7409511253549591), FX16_CONST(0.6715589548470183), - FX16_CONST(-0.7399200954595161), FX16_CONST(0.672694769070773), - FX16_CONST(-0.7388873244606156), FX16_CONST(0.6738290003787556), - FX16_CONST(-0.7378528147884663), FX16_CONST(0.6749616461020117), - FX16_CONST(-0.7368165688773701), FX16_CONST(0.6760927035753157), - FX16_CONST(-0.7357785891657136), FX16_CONST(0.6772221701371803), - FX16_CONST(-0.7347388780959634), FX16_CONST(0.6783500431298615), - FX16_CONST(-0.7336974381146601), FX16_CONST(0.6794763198993652), - FX16_CONST(-0.7326542716724131), FX16_CONST(0.6806009977954527), - FX16_CONST(-0.7316093812238929), FX16_CONST(0.6817240741716495), - FX16_CONST(-0.7305627692278277), FX16_CONST(0.6828455463852479), - FX16_CONST(-0.729514438146997), FX16_CONST(0.6839654117973154), - FX16_CONST(-0.7284643904482251), FX16_CONST(0.6850836677727005), - FX16_CONST(-0.7274126286023762), FX16_CONST(0.6862003116800381), - FX16_CONST(-0.7263591550843463), FX16_CONST(0.6873153408917587), - FX16_CONST(-0.725303972373061), FX16_CONST(0.6884287527840902), - FX16_CONST(-0.724247082951467), FX16_CONST(0.6895405447370668), - FX16_CONST(-0.7231884893065273), FX16_CONST(0.6906507141345346), - FX16_CONST(-0.7221281939292151), FX16_CONST(0.6917592583641579), - FX16_CONST(-0.7210661993145084), FX16_CONST(0.6928661748174243), - FX16_CONST(-0.7200025079613819), FX16_CONST(0.6939714608896537), - FX16_CONST(-0.7189371223728046), FX16_CONST(0.6950751139800007), - FX16_CONST(-0.7178700450557318), FX16_CONST(0.6961771314914629), - FX16_CONST(-0.7168012785210994), FX16_CONST(0.6972775108308866), - FX16_CONST(-0.715730825283819), FX16_CONST(0.6983762494089724), - FX16_CONST(-0.7146586878627694), FX16_CONST(0.6994733446402834), - FX16_CONST(-0.7135848687807937), FX16_CONST(0.7005687939432481), - FX16_CONST(-0.7125093705646924), FX16_CONST(0.7016625947401685), - FX16_CONST(-0.7114321957452164), FX16_CONST(0.7027547444572253), - FX16_CONST(-0.7103533468570622), FX16_CONST(0.703845240524485), - FX16_CONST(-0.709272826438866), FX16_CONST(0.7049340803759045), - FX16_CONST(-0.7081906370331956), FX16_CONST(0.7060212614493395), - FX16_CONST(-0.7071067811865477), FX16_CONST(0.7071067811865474), - FX16_CONST(-0.7060212614493399), FX16_CONST(0.7081906370331953), - FX16_CONST(-0.7049340803759048), FX16_CONST(0.7092728264388657), - FX16_CONST(-0.7038452405244854), FX16_CONST(0.7103533468570619), - FX16_CONST(-0.7027547444572256), FX16_CONST(0.7114321957452161), - FX16_CONST(-0.7016625947401687), FX16_CONST(0.7125093705646921), - FX16_CONST(-0.7005687939432484), FX16_CONST(0.7135848687807935), - FX16_CONST(-0.6994733446402838), FX16_CONST(0.7146586878627691), - FX16_CONST(-0.6983762494089727), FX16_CONST(0.7157308252838188), - FX16_CONST(-0.697277510830887), FX16_CONST(0.7168012785210991), - FX16_CONST(-0.6961771314914632), FX16_CONST(0.7178700450557315), - FX16_CONST(-0.695075113980001), FX16_CONST(0.7189371223728043), - FX16_CONST(-0.693971460889654), FX16_CONST(0.7200025079613817), - FX16_CONST(-0.6928661748174246), FX16_CONST(0.7210661993145082), - FX16_CONST(-0.6917592583641582), FX16_CONST(0.7221281939292149), - FX16_CONST(-0.6906507141345349), FX16_CONST(0.7231884893065271), - FX16_CONST(-0.6895405447370672), FX16_CONST(0.7242470829514667), - FX16_CONST(-0.6884287527840905), FX16_CONST(0.7253039723730607), - FX16_CONST(-0.687315340891759), FX16_CONST(0.726359155084346), - FX16_CONST(-0.6862003116800385), FX16_CONST(0.7274126286023759), - FX16_CONST(-0.6850836677727008), FX16_CONST(0.7284643904482249), - FX16_CONST(-0.6839654117973157), FX16_CONST(0.7295144381469967), - FX16_CONST(-0.6828455463852482), FX16_CONST(0.7305627692278274), - FX16_CONST(-0.6817240741716498), FX16_CONST(0.7316093812238925), - FX16_CONST(-0.680600997795453), FX16_CONST(0.7326542716724129), - FX16_CONST(-0.6794763198993655), FX16_CONST(0.7336974381146598), - FX16_CONST(-0.6783500431298618), FX16_CONST(0.7347388780959632), - FX16_CONST(-0.6772221701371807), FX16_CONST(0.7357785891657133), - FX16_CONST(-0.676092703575316), FX16_CONST(0.7368165688773698), - FX16_CONST(-0.674961646102012), FX16_CONST(0.737852814788466), - FX16_CONST(-0.6738290003787559), FX16_CONST(0.7388873244606152), - FX16_CONST(-0.6726947690707733), FX16_CONST(0.7399200954595158), - FX16_CONST(-0.6715589548470187), FX16_CONST(0.7409511253549589), - FX16_CONST(-0.6704215603801733), FX16_CONST(0.7419804117208308), - FX16_CONST(-0.6692825883466361), FX16_CONST(0.7430079521351216), - FX16_CONST(-0.6681420414265185), FX16_CONST(0.7440337441799294), - FX16_CONST(-0.666999922303638), FX16_CONST(0.7450577854414656), - FX16_CONST(-0.6658562336655101), FX16_CONST(0.7460800735100634), - FX16_CONST(-0.6647109782033451), FX16_CONST(0.7471006059801799), - FX16_CONST(-0.6635641586120399), FX16_CONST(0.7481193804504035), - FX16_CONST(-0.6624157775901718), FX16_CONST(0.7491363945234594), - FX16_CONST(-0.661265837839992), FX16_CONST(0.7501516458062152), - FX16_CONST(-0.6601143420674209), FX16_CONST(0.751165131909686), - FX16_CONST(-0.6589612929820376), FX16_CONST(0.7521768504490425), - FX16_CONST(-0.6578066932970789), FX16_CONST(0.7531867990436123), - FX16_CONST(-0.656650545729429), FX16_CONST(0.7541949753168892), - FX16_CONST(-0.6554928529996153), FX16_CONST(0.7552013768965365), - FX16_CONST(-0.654333617831801), FX16_CONST(0.7562060014143941), - FX16_CONST(-0.6531728429537771), FX16_CONST(0.7572088465064842), - FX16_CONST(-0.6520105310969597), FX16_CONST(0.7582099098130151), - FX16_CONST(-0.650846684996381), FX16_CONST(0.759209188978388), - FX16_CONST(-0.6496813073906832), FX16_CONST(0.7602066816512024), - FX16_CONST(-0.6485144010221123), FX16_CONST(0.7612023854842619), - FX16_CONST(-0.6473459686365125), FX16_CONST(0.7621962981345786), - FX16_CONST(-0.6461760129833166), FX16_CONST(0.763188417263381), - FX16_CONST(-0.6450045368155441), FX16_CONST(0.7641787405361166), - FX16_CONST(-0.6438315428897915), FX16_CONST(0.7651672656224588), - FX16_CONST(-0.6426570339662268), FX16_CONST(0.7661539901963129), - FX16_CONST(-0.6414810128085836), FX16_CONST(0.76713891193582), - FX16_CONST(-0.640303482184152), FX16_CONST(0.7681220285233651), - FX16_CONST(-0.639124444863776), FX16_CONST(0.7691033376455795), - FX16_CONST(-0.6379439036218442), FX16_CONST(0.7700828369933479), - FX16_CONST(-0.6367618612362842), FX16_CONST(0.7710605242618138), - FX16_CONST(-0.635578320488556), FX16_CONST(0.7720363971503846), - FX16_CONST(-0.6343932841636459), FX16_CONST(0.7730104533627365), - FX16_CONST(-0.6332067550500575), FX16_CONST(0.7739826906068226), - FX16_CONST(-0.6320187359398092), FX16_CONST(0.7749531065948737), - FX16_CONST(-0.6308292296284246), FX16_CONST(0.7759216990434076), - FX16_CONST(-0.629638238914927), FX16_CONST(0.7768884656732326), - FX16_CONST(-0.6284457666018332), FX16_CONST(0.7778534042094527), - FX16_CONST(-0.6272518154951445), FX16_CONST(0.7788165123814756), - FX16_CONST(-0.6260563884043437), FX16_CONST(0.7797777879230143), - FX16_CONST(-0.6248594881423865), FX16_CONST(0.7807372285720944), - FX16_CONST(-0.6236611175256945), FX16_CONST(0.7816948320710594), - FX16_CONST(-0.6224612793741499), FX16_CONST(0.7826505961665758), - FX16_CONST(-0.621259976511088), FX16_CONST(0.7836045186096379), - FX16_CONST(-0.6200572117632894), FX16_CONST(0.784556597155575), - FX16_CONST(-0.6188529879609765), FX16_CONST(0.7855068295640538), - FX16_CONST(-0.617647307937804), FX16_CONST(0.7864552135990857), - FX16_CONST(-0.6164401745308535), FX16_CONST(0.7874017470290314), - FX16_CONST(-0.6152315905806274), FX16_CONST(0.7883464276266059), - FX16_CONST(-0.6140215589310388), FX16_CONST(0.7892892531688854), - FX16_CONST(-0.6128100824294099), FX16_CONST(0.7902302214373098), - FX16_CONST(-0.611597163926462), FX16_CONST(0.7911693302176901), - FX16_CONST(-0.6103828062763095), FX16_CONST(0.7921065773002124), - FX16_CONST(-0.6091670123364531), FX16_CONST(0.7930419604794438), - FX16_CONST(-0.6079497849677741), FX16_CONST(0.7939754775543368), - FX16_CONST(-0.6067311270345248), FX16_CONST(0.7949071263282368), - FX16_CONST(-0.6055110414043257), FX16_CONST(0.7958369046088833), - FX16_CONST(-0.6042895309481561), FX16_CONST(0.7967648102084187), - FX16_CONST(-0.6030665985403482), FX16_CONST(0.7976908409433912), - FX16_CONST(-0.6018422470585806), FX16_CONST(0.7986149946347605), - FX16_CONST(-0.6006164793838693), FX16_CONST(0.7995372691079048), - FX16_CONST(-0.5993892984005648), FX16_CONST(0.8004576621926226), - FX16_CONST(-0.5981607069963424), FX16_CONST(0.8013761717231401), - FX16_CONST(-0.5969307080621965), FX16_CONST(0.8022927955381157), - FX16_CONST(-0.5956993044924332), FX16_CONST(0.803207531480645), - FX16_CONST(-0.5944664991846649), FX16_CONST(0.8041203773982655), - FX16_CONST(-0.5932322950398001), FX16_CONST(0.8050313311429633), - FX16_CONST(-0.5919966949620411), FX16_CONST(0.8059403905711762), - FX16_CONST(-0.5907597018588743), FX16_CONST(0.8068475535437992), - FX16_CONST(-0.5895213186410638), FX16_CONST(0.8077528179261904), - FX16_CONST(-0.5882815482226458), FX16_CONST(0.8086561815881746), - FX16_CONST(-0.5870403935209184), FX16_CONST(0.8095576424040509), - FX16_CONST(-0.5857978574564391), FX16_CONST(0.8104571982525945), - FX16_CONST(-0.5845539429530154), FX16_CONST(0.8113548470170636), - FX16_CONST(-0.5833086529376983), FX16_CONST(0.8122505865852039), - FX16_CONST(-0.5820619903407754), FX16_CONST(0.8131444148492536), - FX16_CONST(-0.580813958095765), FX16_CONST(0.8140363297059481), - FX16_CONST(-0.5795645591394061), FX16_CONST(0.8149263290565264), - FX16_CONST(-0.5783137964116558), FX16_CONST(0.8158144108067337), - FX16_CONST(-0.5770616728556796), FX16_CONST(0.8167005728668277), - FX16_CONST(-0.5758081914178452), FX16_CONST(0.8175848131515837), - FX16_CONST(-0.5745533550477163), FX16_CONST(0.8184671295802983), - FX16_CONST(-0.5732971666980426), FX16_CONST(0.8193475200767967), - FX16_CONST(-0.5720396293247574), FX16_CONST(0.8202259825694345), - FX16_CONST(-0.5707807458869674), FX16_CONST(0.8211025149911046), - FX16_CONST(-0.5695205193469471), FX16_CONST(0.8219771152792416), - FX16_CONST(-0.5682589526701314), FX16_CONST(0.8228497813758264), - FX16_CONST(-0.5669960488251091), FX16_CONST(0.8237205112273911), - FX16_CONST(-0.5657318107836136), FX16_CONST(0.8245893027850251), - FX16_CONST(-0.5644662415205196), FX16_CONST(0.8254561540043773), - FX16_CONST(-0.5631993440138342), FX16_CONST(0.8263210628456634), - FX16_CONST(-0.5619311212446894), FX16_CONST(0.8271840272736691), - FX16_CONST(-0.5606615761973366), FX16_CONST(0.8280450452577554), - FX16_CONST(-0.5593907118591365), FX16_CONST(0.8289041147718647), - FX16_CONST(-0.5581185312205563), FX16_CONST(0.8297612337945228), - FX16_CONST(-0.5568450372751602), FX16_CONST(0.8306164003088462), - FX16_CONST(-0.5555702330196022), FX16_CONST(0.8314696123025452), - FX16_CONST(-0.55429412145362), FX16_CONST(0.8323208677679297), - FX16_CONST(-0.553016705580028), FX16_CONST(0.8331701647019129), - FX16_CONST(-0.5517379884047078), FX16_CONST(0.8340175011060179), - FX16_CONST(-0.550457972936605), FX16_CONST(0.8348628749863799), - FX16_CONST(-0.5491766621877198), FX16_CONST(0.8357062843537525), - FX16_CONST(-0.5478940591731001), FX16_CONST(0.836547727223512), - FX16_CONST(-0.5466101669108354), FX16_CONST(0.8373872016156616), - FX16_CONST(-0.5453249884220468), FX16_CONST(0.8382247055548377), - FX16_CONST(-0.5440385267308842), FX16_CONST(0.8390602370703125), - FX16_CONST(-0.542750784864516), FX16_CONST(0.8398937941959994), - FX16_CONST(-0.5414617658531234), FX16_CONST(0.8407253749704581), - FX16_CONST(-0.5401714727298927), FX16_CONST(0.8415549774368986), - FX16_CONST(-0.5388799085310089), FX16_CONST(0.8423825996431855), - FX16_CONST(-0.5375870762956458), FX16_CONST(0.8432082396418452), - FX16_CONST(-0.5362929790659634), FX16_CONST(0.8440318954900663), - FX16_CONST(-0.5349976198870973), FX16_CONST(0.844853565249707), - FX16_CONST(-0.5337010018071529), FX16_CONST(0.8456732469872991), - FX16_CONST(-0.5324031278771986), FX16_CONST(0.8464909387740517), - FX16_CONST(-0.5311040011512553), FX16_CONST(0.8473066386858581), - FX16_CONST(-0.5298036246862949), FX16_CONST(0.8481203448032971), - FX16_CONST(-0.5285020015422286), FX16_CONST(0.8489320552116395), - FX16_CONST(-0.5271991347819014), FX16_CONST(0.8497417680008524), - FX16_CONST(-0.5258950274710845), FX16_CONST(0.8505494812656035), - FX16_CONST(-0.5245896826784694), FX16_CONST(0.8513551931052649), - FX16_CONST(-0.5232831034756568), FX16_CONST(0.8521589016239196), - FX16_CONST(-0.5219752929371545), FX16_CONST(0.8529606049303635), - FX16_CONST(-0.5206662541403673), FX16_CONST(0.8537603011381113), - FX16_CONST(-0.5193559901655895), FX16_CONST(0.8545579883654005), - FX16_CONST(-0.5180445040959999), FX16_CONST(0.8553536647351957), - FX16_CONST(-0.5167317990176503), FX16_CONST(0.8561473283751942), - FX16_CONST(-0.5154178780194633), FX16_CONST(0.8569389774178285), - FX16_CONST(-0.5141027441932219), FX16_CONST(0.857728610000272), - FX16_CONST(-0.512786400633563), FX16_CONST(0.8585162242644427), - FX16_CONST(-0.5114688504379703), FX16_CONST(0.8593018183570085), - FX16_CONST(-0.5101500967067673), FX16_CONST(0.8600853904293899), - FX16_CONST(-0.5088301425431074), FX16_CONST(0.8608669386377671), - FX16_CONST(-0.5075089910529711), FX16_CONST(0.8616464611430812), - FX16_CONST(-0.5061866453451553), FX16_CONST(0.8624239561110405), - FX16_CONST(-0.5048631085312675), FX16_CONST(0.8631994217121242), - FX16_CONST(-0.5035383837257181), FX16_CONST(0.8639728561215864), - FX16_CONST(-0.5022124740457112), FX16_CONST(0.8647442575194622), - FX16_CONST(-0.500885382611241), FX16_CONST(0.8655136240905689), - FX16_CONST(-0.499557112545082), FX16_CONST(0.8662809540245129), - FX16_CONST(-0.49822766697278187), FX16_CONST(0.8670462455156926), - FX16_CONST(-0.4968970490226544), FX16_CONST(0.8678094967633033), - FX16_CONST(-0.49556526182577304), FX16_CONST(0.8685707059713406), - FX16_CONST(-0.49423230851596006), FX16_CONST(0.8693298713486066), - FX16_CONST(-0.49289819222978426), FX16_CONST(0.8700869911087113), - FX16_CONST(-0.49156291610655), FX16_CONST(0.8708420634700789), - FX16_CONST(-0.4902264832882911), FX16_CONST(0.8715950866559511), - FX16_CONST(-0.4888888969197637), FX16_CONST(0.8723460588943912), - FX16_CONST(-0.4875501601484364), FX16_CONST(0.8730949784182899), - FX16_CONST(-0.4862102761244867), FX16_CONST(0.8738418434653666), - FX16_CONST(-0.48486924800079123), FX16_CONST(0.874586652278176), - FX16_CONST(-0.48352707893291874), FX16_CONST(0.8753294031041108), - FX16_CONST(-0.4821837720791226), FX16_CONST(0.8760700941954067), - FX16_CONST(-0.48083933060033446), FX16_CONST(0.8768087238091454), - FX16_CONST(-0.4794937576601534), FX16_CONST(0.8775452902072611), - FX16_CONST(-0.4781470564248433), FX16_CONST(0.8782797916565414), - FX16_CONST(-0.4767992300633222), FX16_CONST(0.8790122264286334), - FX16_CONST(-0.4754502817471558), FX16_CONST(0.8797425928000475), - FX16_CONST(-0.4741002146505506), FX16_CONST(0.8804708890521604), - FX16_CONST(-0.47274903195034323), FX16_CONST(0.8811971134712218), - FX16_CONST(-0.4713967368259979), FX16_CONST(0.8819212643483548), - FX16_CONST(-0.4700433324595958), FX16_CONST(0.8826433399795627), - FX16_CONST(-0.46868882203582796), FX16_CONST(0.8833633386657316), - FX16_CONST(-0.4673332087419883), FX16_CONST(0.8840812587126351), - FX16_CONST(-0.4659764957679667), FX16_CONST(0.8847970984309375), - FX16_CONST(-0.4646186863062382), FX16_CONST(0.8855108561361997), - FX16_CONST(-0.4632597835518604), FX16_CONST(0.8862225301488805), - FX16_CONST(-0.46189979070246284), FX16_CONST(0.8869321187943421), - FX16_CONST(-0.46053871095823995), FX16_CONST(0.8876396204028539), - FX16_CONST(-0.4591765475219447), FX16_CONST(0.888345033309596), - FX16_CONST(-0.4578133035988777), FX16_CONST(0.8890483558546644), - FX16_CONST(-0.45644898239688425), FX16_CONST(0.8897495863830727), - FX16_CONST(-0.455083587126344), FX16_CONST(0.8904487232447578), - FX16_CONST(-0.45371712100016387), FX16_CONST(0.8911457647945832), - FX16_CONST(-0.4523495872337707), FX16_CONST(0.8918407093923428), - FX16_CONST(-0.45098098904510436), FX16_CONST(0.8925335554027644), - FX16_CONST(-0.449611329654607), FX16_CONST(0.8932243011955151), - FX16_CONST(-0.44824061228522016), FX16_CONST(0.8939129451452031), - FX16_CONST(-0.44686884016237427), FX16_CONST(0.8945994856313826), - FX16_CONST(-0.4454960165139817), FX16_CONST(0.8952839210385576), - FX16_CONST(-0.4441221445704298), FX16_CONST(0.8959662497561849), - FX16_CONST(-0.44274722756457047), FX16_CONST(0.8966464701786799), - FX16_CONST(-0.441371268731717), FX16_CONST(0.8973245807054181), - FX16_CONST(-0.4399942713096334), FX16_CONST(0.8980005797407398), - FX16_CONST(-0.43861623853852766), FX16_CONST(0.8986744656939538), - FX16_CONST(-0.437237173661044), FX16_CONST(0.8993462369793416), - FX16_CONST(-0.43585707992225603), FX16_CONST(0.90001589201616), - FX16_CONST(-0.4344759605696561), FX16_CONST(0.9006834292286467), - FX16_CONST(-0.4330938188531522), FX16_CONST(0.9013488470460219), - FX16_CONST(-0.43171065802505737), FX16_CONST(0.9020121439024932), - FX16_CONST(-0.43032648134008256), FX16_CONST(0.9026733182372588), - FX16_CONST(-0.4289412920553301), FX16_CONST(0.9033323684945116), - FX16_CONST(-0.42755509343028253), FX16_CONST(0.9039892931234431), - FX16_CONST(-0.42616788872679995), FX16_CONST(0.904644090578246), - FX16_CONST(-0.42477968120910903), FX16_CONST(0.9052967593181187), - FX16_CONST(-0.42339047414379605), FX16_CONST(0.9059472978072685), - FX16_CONST(-0.42200027079979957), FX16_CONST(0.9065957045149154), - FX16_CONST(-0.42060907444840306), FX16_CONST(0.9072419779152956), - FX16_CONST(-0.41921688836322435), FX16_CONST(0.907886116487666), - FX16_CONST(-0.41782371582021255), FX16_CONST(0.908528118716306), - FX16_CONST(-0.41642956009763726), FX16_CONST(0.9091679830905224), - FX16_CONST(-0.4150344244760816), FX16_CONST(0.9098057081046522), - FX16_CONST(-0.41363831223843517), FX16_CONST(0.9104412922580669), - FX16_CONST(-0.41224122666988333), FX16_CONST(0.9110747340551761), - FX16_CONST(-0.41084317105790424), FX16_CONST(0.9117060320054297), - FX16_CONST(-0.40944414869225776), FX16_CONST(0.9123351846233226), - FX16_CONST(-0.4080441628649787), FX16_CONST(0.9129621904283981), - FX16_CONST(-0.40664321687036886), FX16_CONST(0.9135870479452509), - FX16_CONST(-0.4052413140049904), FX16_CONST(0.9142097557035305), - FX16_CONST(-0.4038384575676545), FX16_CONST(0.914830312237946), - FX16_CONST(-0.4024346508594187), FX16_CONST(0.9154487160882677), - FX16_CONST(-0.40102989718357573), FX16_CONST(0.9160649657993316), - FX16_CONST(-0.3996241998456468), FX16_CONST(0.9166790599210427), - FX16_CONST(-0.3982175621533742), FX16_CONST(0.9172909970083777), - FX16_CONST(-0.3968099874167108), FX16_CONST(0.9179007756213903), - FX16_CONST(-0.39540147894781663), FX16_CONST(0.918508394325212), - FX16_CONST(-0.39399204006104827), FX16_CONST(0.9191138516900577), - FX16_CONST(-0.3925816740729515), FX16_CONST(0.9197171462912274), - FX16_CONST(-0.39117038430225376), FX16_CONST(0.9203182767091106), - FX16_CONST(-0.389758174069857), FX16_CONST(0.9209172415291892), - FX16_CONST(-0.3883450466988267), FX16_CONST(0.9215140393420418), - FX16_CONST(-0.38693100551438886), FX16_CONST(0.9221086687433451), - FX16_CONST(-0.38551605384391896), FX16_CONST(0.9227011283338785), - FX16_CONST(-0.384100195016935), FX16_CONST(0.9232914167195276), - FX16_CONST(-0.3826834323650904), FX16_CONST(0.9238795325112865), - FX16_CONST(-0.3812657692221628), FX16_CONST(0.9244654743252624), - FX16_CONST(-0.3798472089240515), FX16_CONST(0.9250492407826775), - FX16_CONST(-0.3784277548087658), FX16_CONST(0.9256308305098727), - FX16_CONST(-0.37700741021641826), FX16_CONST(0.9262102421383114), - FX16_CONST(-0.3755861784892171), FX16_CONST(0.9267874743045819), - FX16_CONST(-0.37416406297145854), FX16_CONST(0.9273625256504009), - FX16_CONST(-0.3727410670095162), FX16_CONST(0.9279353948226177), - FX16_CONST(-0.3713171939518378), FX16_CONST(0.9285060804732155), - FX16_CONST(-0.3698924471489342), FX16_CONST(0.9290745812593157), - FX16_CONST(-0.36846682995337227), FX16_CONST(0.9296408958431813), - FX16_CONST(-0.367040345719767), FX16_CONST(0.9302050228922192), - FX16_CONST(-0.36561299780477435), FX16_CONST(0.9307669610789835), - FX16_CONST(-0.3641847895670802), FX16_CONST(0.9313267090811803), - FX16_CONST(-0.3627557243673974), FX16_CONST(0.931884265581668), - FX16_CONST(-0.3613258055684543), FX16_CONST(0.9324396292684624), - FX16_CONST(-0.359895036534988), FX16_CONST(0.932992798834739), - FX16_CONST(-0.3584634206337371), FX16_CONST(0.933543772978836), - FX16_CONST(-0.3570309612334304), FX16_CONST(0.9340925504042588), - FX16_CONST(-0.35559766170478413), FX16_CONST(0.9346391298196807), - FX16_CONST(-0.3541635254204905), FX16_CONST(0.9351835099389475), - FX16_CONST(-0.35272855575521067), FX16_CONST(0.9357256894810804), - FX16_CONST(-0.3512927560855669), FX16_CONST(0.9362656671702784), - FX16_CONST(-0.3498561297901354), FX16_CONST(0.9368034417359214), - FX16_CONST(-0.3484186802494349), FX16_CONST(0.9373390119125748), - FX16_CONST(-0.34698041084592385), FX16_CONST(0.9378723764399898), - FX16_CONST(-0.3455413249639891), FX16_CONST(0.9384035340631081), - FX16_CONST(-0.34410142598993876), FX16_CONST(0.9389324835320646), - FX16_CONST(-0.34266071731199493), FX16_CONST(0.9394592236021897), - FX16_CONST(-0.3412192023202828), FX16_CONST(0.9399837530340138), - FX16_CONST(-0.33977688440682713), FX16_CONST(0.9405060705932682), - FX16_CONST(-0.3383337669655413), FX16_CONST(0.9410261750508893), - FX16_CONST(-0.33688985339222), FX16_CONST(0.9415440651830208), - FX16_CONST(-0.33544514708453144), FX16_CONST(0.9420597397710174), - FX16_CONST(-0.3339996514420099), FX16_CONST(0.9425731976014468), - FX16_CONST(-0.33255336986604456), FX16_CONST(0.9430844374660934), - FX16_CONST(-0.3311063057598766), FX16_CONST(0.9435934581619603), - FX16_CONST(-0.32965846252858755), FX16_CONST(0.9441002584912727), - FX16_CONST(-0.3282098435790924), FX16_CONST(0.9446048372614803), - FX16_CONST(-0.32676045232013234), FX16_CONST(0.9451071932852604), - FX16_CONST(-0.32531029216226337), FX16_CONST(0.9456073253805212), - FX16_CONST(-0.32385936651785313), FX16_CONST(0.9461052323704033), - FX16_CONST(-0.32240767880106996), FX16_CONST(0.9466009130832835), - FX16_CONST(-0.3209552324278752), FX16_CONST(0.9470943663527772), - FX16_CONST(-0.31950203081601547), FX16_CONST(0.9475855910177412), - FX16_CONST(-0.31804807738501545), FX16_CONST(0.9480745859222761), - FX16_CONST(-0.31659337555616623), FX16_CONST(0.9485613499157302), - FX16_CONST(-0.3151379287525226), FX16_CONST(0.9490458818527006), - FX16_CONST(-0.3136817403988915), FX16_CONST(0.9495281805930367), - FX16_CONST(-0.31222481392182483), FX16_CONST(0.9500082450018431), - FX16_CONST(-0.3107671527496121), FX16_CONST(0.9504860739494815), - FX16_CONST(-0.30930876031226917), FX16_CONST(0.950961666311575), - FX16_CONST(-0.30784964004153514), FX16_CONST(0.9514350209690082), - FX16_CONST(-0.3063897953708611), FX16_CONST(0.9519061368079322), - FX16_CONST(-0.3049292297354024), FX16_CONST(0.9523750127197659), - FX16_CONST(-0.3034679465720111), FX16_CONST(0.9528416476011987), - FX16_CONST(-0.3020059493192286), FX16_CONST(0.9533060403541936), - FX16_CONST(-0.3005432414172738), FX16_CONST(0.9537681898859902), - FX16_CONST(-0.29907982630804064), FX16_CONST(0.9542280951091056), - FX16_CONST(-0.29761570743508625), FX16_CONST(0.9546857549413383), - FX16_CONST(-0.29615088824362373), FX16_CONST(0.9551411683057708), - FX16_CONST(-0.29468537218051494), FX16_CONST(0.9555943341307709), - FX16_CONST(-0.2932191626942591), FX16_CONST(0.9560452513499963), - FX16_CONST(-0.29175226323498954), FX16_CONST(0.956493918902395), - FX16_CONST(-0.2902846772544625), FX16_CONST(0.9569403357322088), - FX16_CONST(-0.2888164082060494), FX16_CONST(0.957384500788976), - FX16_CONST(-0.28734745954472934), FX16_CONST(0.9578264130275329), - FX16_CONST(-0.2858778347270811), FX16_CONST(0.9582660714080176), - FX16_CONST(-0.2844075372112722), FX16_CONST(0.9587034748958715), - FX16_CONST(-0.28293657045705556), FX16_CONST(0.9591386224618419), - FX16_CONST(-0.28146493792575805), FX16_CONST(0.9595715130819845), - FX16_CONST(-0.2799926430802731), FX16_CONST(0.960002145737666), - FX16_CONST(-0.27851968938505367), FX16_CONST(0.9604305194155657), - FX16_CONST(-0.27704608030610034), FX16_CONST(0.9608566331076795), - FX16_CONST(-0.2755718193109584), FX16_CONST(0.9612804858113205), - FX16_CONST(-0.2740969098687065), FX16_CONST(0.9617020765291225), - FX16_CONST(-0.2726213554499489), FX16_CONST(0.9621214042690416), - FX16_CONST(-0.27114515952680784), FX16_CONST(0.9625384680443592), - FX16_CONST(-0.2696683255729156), FX16_CONST(0.9629532668736838), - FX16_CONST(-0.26819085706340356), FX16_CONST(0.9633657997809539), - FX16_CONST(-0.2667127574748986), FX16_CONST(0.9637760657954398), - FX16_CONST(-0.26523403028551185), FX16_CONST(0.9641840639517458), - FX16_CONST(-0.2637546789748313), FX16_CONST(0.9645897932898128), - FX16_CONST(-0.2622747070239142), FX16_CONST(0.9649932528549202), - FX16_CONST(-0.26079411791527596), FX16_CONST(0.9653944416976893), - FX16_CONST(-0.2593129151328865), FX16_CONST(0.9657933588740836), - FX16_CONST(-0.25783110216215915), FX16_CONST(0.9661900034454125), - FX16_CONST(-0.25634868248994286), FX16_CONST(0.9665843744783331), - FX16_CONST(-0.2548656596045144), FX16_CONST(0.9669764710448522), - FX16_CONST(-0.25338203699557066), FX16_CONST(0.9673662922223284), - FX16_CONST(-0.2518978181542173), FX16_CONST(0.9677538370934754), - FX16_CONST(-0.25041300657296545), FX16_CONST(0.9681391047463623), - FX16_CONST(-0.2489276057457202), FX16_CONST(0.9685220942744173), - FX16_CONST(-0.24744161916777319), FX16_CONST(0.9689028047764289), - FX16_CONST(-0.2459550503357952), FX16_CONST(0.9692812353565483), - FX16_CONST(-0.2444679027478246), FX16_CONST(0.9696573851242923), - FX16_CONST(-0.24298017990326418), FX16_CONST(0.970031253194544), - FX16_CONST(-0.24149188530286947), FX16_CONST(0.9704028386875554), - FX16_CONST(-0.24000302244874144), FX16_CONST(0.9707721407289504), - FX16_CONST(-0.23851359484431825), FX16_CONST(0.9711391584497252), - FX16_CONST(-0.23702360599436773), FX16_CONST(0.9715038909862517), - FX16_CONST(-0.23553305940497588), FX16_CONST(0.9718663374802793), - FX16_CONST(-0.23404195858354362), FX16_CONST(0.9722264970789363), - FX16_CONST(-0.2325503070387753), FX16_CONST(0.9725843689347322), - FX16_CONST(-0.231058108280671), FX16_CONST(0.9729399522055602), - FX16_CONST(-0.22956536582051948), FX16_CONST(0.9732932460546981), - FX16_CONST(-0.22807208317088618), FX16_CONST(0.9736442496508119), - FX16_CONST(-0.22657826384561028), FX16_CONST(0.9739929621679558), - FX16_CONST(-0.22508391135979297), FX16_CONST(0.9743393827855759), - FX16_CONST(-0.22358902922978996), FX16_CONST(0.9746835106885107), - FX16_CONST(-0.22209362097320334), FX16_CONST(0.9750253450669942), - FX16_CONST(-0.22059769010887406), FX16_CONST(0.9753648851166569), - FX16_CONST(-0.21910124015687016), FX16_CONST(0.9757021300385285), - FX16_CONST(-0.21760427463848384), FX16_CONST(0.976037079039039), - FX16_CONST(-0.21610679707621955), FX16_CONST(0.9763697313300211), - FX16_CONST(-0.21460881099378668), FX16_CONST(0.9767000861287118), - FX16_CONST(-0.21311031991609197), FX16_CONST(0.9770281426577542), - FX16_CONST(-0.21161132736922802), FX16_CONST(0.9773539001452), - FX16_CONST(-0.21011183688046992), FX16_CONST(0.9776773578245099), - FX16_CONST(-0.20861185197826362), FX16_CONST(0.977998514934557), - FX16_CONST(-0.20711137619221853), FX16_CONST(0.9783173707196277), - FX16_CONST(-0.20561041305309907), FX16_CONST(0.9786339244294232), - FX16_CONST(-0.2041089660928174), FX16_CONST(0.9789481753190621), - FX16_CONST(-0.2026070388444215), FX16_CONST(0.979260122649082), - FX16_CONST(-0.20110463484209212), FX16_CONST(0.9795697656854405), - FX16_CONST(-0.19960175762113103), FX16_CONST(0.9798771036995176), - FX16_CONST(-0.19809841071795348), FX16_CONST(0.9801821359681174), - FX16_CONST(-0.19659459767008083), FX16_CONST(0.9804848617734693), - FX16_CONST(-0.19509032201612872), FX16_CONST(0.9807852804032303), - FX16_CONST(-0.1935855872958039), FX16_CONST(0.9810833911504866), - FX16_CONST(-0.19208039704989258), FX16_CONST(0.9813791933137546), - FX16_CONST(-0.19057475482025274), FX16_CONST(0.9816726861969831), - FX16_CONST(-0.18906866414980603), FX16_CONST(0.9819638691095554), - FX16_CONST(-0.18756212858253013), FX16_CONST(0.9822527413662893), - FX16_CONST(-0.18605515166344702), FX16_CONST(0.9825393022874411), - FX16_CONST(-0.18454773693861984), FX16_CONST(0.9828235511987052), - FX16_CONST(-0.183039887955141), FX16_CONST(0.9831054874312163), - FX16_CONST(-0.18153160826112488), FX16_CONST(0.9833851103215512), - FX16_CONST(-0.18002290140570013), FX16_CONST(0.9836624192117301), - FX16_CONST(-0.17851377093899798), FX16_CONST(0.9839374134492188), - FX16_CONST(-0.17700422041214905), FX16_CONST(0.984210092386929), - FX16_CONST(-0.17549425337727156), FX16_CONST(0.9844804553832209), - FX16_CONST(-0.1739838733874638), FX16_CONST(0.9847485018019042), - FX16_CONST(-0.17247308399679578), FX16_CONST(0.9850142310122398), - FX16_CONST(-0.17096188876030177), FX16_CONST(0.9852776423889411), - FX16_CONST(-0.16945029123396835), FX16_CONST(0.985538735312176), - FX16_CONST(-0.1679382949747314), FX16_CONST(0.9857975091675674), - FX16_CONST(-0.1664259035404642), FX16_CONST(0.9860539633461954), - FX16_CONST(-0.1649131204899698), FX16_CONST(0.9863080972445987), - FX16_CONST(-0.16339994938297386), FX16_CONST(0.9865599102647753), - FX16_CONST(-0.1618863937801123), FX16_CONST(0.9868094018141854), - FX16_CONST(-0.16037245724292856), FX16_CONST(0.987056571305751), - FX16_CONST(-0.15885814333386158), FX16_CONST(0.9873014181578583), - FX16_CONST(-0.15734345561623825), FX16_CONST(0.9875439417943592), - FX16_CONST(-0.15582839765426507), FX16_CONST(0.9877841416445722), - FX16_CONST(-0.15431297301302063), FX16_CONST(0.9880220171432835), - FX16_CONST(-0.1527971852584438), FX16_CONST(0.9882575677307495), - FX16_CONST(-0.15128103795733044), FX16_CONST(0.9884907928526966), - FX16_CONST(-0.1497645346773216), FX16_CONST(0.9887216919603238), - FX16_CONST(-0.14824767898689595), FX16_CONST(0.988950264510303), - FX16_CONST(-0.1467304744553624), FX16_CONST(0.9891765099647809), - FX16_CONST(-0.14521292465284794), FX16_CONST(0.9894004277913803), - FX16_CONST(-0.14369503315029475), FX16_CONST(0.9896220174632008), - FX16_CONST(-0.1421768035194482), FX16_CONST(0.9898412784588205), - FX16_CONST(-0.1406582393328492), FX16_CONST(0.9900582102622971), - FX16_CONST(-0.13913934416382603), FX16_CONST(0.9902728123631691), - FX16_CONST(-0.1376201215864866), FX16_CONST(0.990485084256457), - FX16_CONST(-0.1361005751757066), FX16_CONST(0.9906950254426646), - FX16_CONST(-0.13458070850712642), FX16_CONST(0.99090263542778), - FX16_CONST(-0.13306052515713912), FX16_CONST(0.9911079137232768), - FX16_CONST(-0.131540028702883), FX16_CONST(0.9913108598461154), - FX16_CONST(-0.13001922272223398), FX16_CONST(0.9915114733187439), - FX16_CONST(-0.12849811079379364), FX16_CONST(0.9917097536690994), - FX16_CONST(-0.12697669649688617), FX16_CONST(0.9919057004306093), - FX16_CONST(-0.12545498341154637), FX16_CONST(0.9920993131421917), - FX16_CONST(-0.12393297511851216), FX16_CONST(0.9922905913482574), - FX16_CONST(-0.12241067519921603), FX16_CONST(0.99247953459871), - FX16_CONST(-0.12088808723577762), FX16_CONST(0.9926661424489479), - FX16_CONST(-0.11936521481099176), FX16_CONST(0.992850414459865), - FX16_CONST(-0.1178420615083252), FX16_CONST(0.9930323501978514), - FX16_CONST(-0.11631863091190484), FX16_CONST(0.9932119492347945), - FX16_CONST(-0.11479492660650999), FX16_CONST(0.9933892111480807), - FX16_CONST(-0.11327095217756497), FX16_CONST(0.9935641355205953), - FX16_CONST(-0.11174671121112706), FX16_CONST(0.9937367219407246), - FX16_CONST(-0.11022220729388336), FX16_CONST(0.9939069700023561), - FX16_CONST(-0.10869744401313887), FX16_CONST(0.9940748793048794), - FX16_CONST(-0.10717242495680884), FX16_CONST(0.9942404494531879), - FX16_CONST(-0.10564715371341044), FX16_CONST(0.9944036800576791), - FX16_CONST(-0.10412163387205513), FX16_CONST(0.9945645707342554), - FX16_CONST(-0.10259586902243668), FX16_CONST(0.9947231211043257), - FX16_CONST(-0.10106986275482806), FX16_CONST(0.9948793307948056), - FX16_CONST(-0.0995436186600694), FX16_CONST(0.9950331994381186), - FX16_CONST(-0.0980171403295605), FX16_CONST(0.9951847266721969), - FX16_CONST(-0.09649043135525323), FX16_CONST(0.9953339121404822), - FX16_CONST(-0.09496349532963948), FX16_CONST(0.9954807554919269), - FX16_CONST(-0.09343633584574809), FX16_CONST(0.9956252563809943), - FX16_CONST(-0.09190895649713288), FX16_CONST(0.9957674144676598), - FX16_CONST(-0.09038136087786497), FX16_CONST(0.9959072294174117), - FX16_CONST(-0.08885355258252442), FX16_CONST(0.996044700901252), - FX16_CONST(-0.08732553520619263), FX16_CONST(0.9961798285956969), - FX16_CONST(-0.08579731234444028), FX16_CONST(0.996312612182778), - FX16_CONST(-0.08426888759332431), FX16_CONST(0.9964430513500426), - FX16_CONST(-0.08274026454937576), FX16_CONST(0.9965711457905548), - FX16_CONST(-0.08121144680959234), FX16_CONST(0.9966968952028961), - FX16_CONST(-0.07968243797143075), FX16_CONST(0.9968202992911657), - FX16_CONST(-0.07815324163279472), FX16_CONST(0.996941357764982), - FX16_CONST(-0.07662386139203181), FX16_CONST(0.997060070339483), - FX16_CONST(-0.07509430084792147), FX16_CONST(0.9971764367353261), - FX16_CONST(-0.07356456359966741), FX16_CONST(0.9972904566786902), - FX16_CONST(-0.07203465324688915), FX16_CONST(0.9974021299012753), - FX16_CONST(-0.07050457338961442), FX16_CONST(0.9975114561403035), - FX16_CONST(-0.06897432762826713), FX16_CONST(0.9976184351385196), - FX16_CONST(-0.06744391956366429), FX16_CONST(0.9977230666441916), - FX16_CONST(-0.06591335279700389), FX16_CONST(0.9978253504111116), - FX16_CONST(-0.06438263092985737), FX16_CONST(0.997925286198596), - FX16_CONST(-0.06285175756416206), FX16_CONST(0.9980228737714861), - FX16_CONST(-0.06132073630220906), FX16_CONST(0.9981181129001492), - FX16_CONST(-0.05978957074664019), FX16_CONST(0.9982110033604782), - FX16_CONST(-0.05825826450043591), FX16_CONST(0.9983015449338928), - FX16_CONST(-0.05672682116690774), FX16_CONST(0.9983897374073402), - FX16_CONST(-0.055195244349689775), FX16_CONST(0.9984755805732948), - FX16_CONST(-0.05366353765273108), FX16_CONST(0.9985590742297593), - FX16_CONST(-0.05213170468028372), FX16_CONST(0.9986402181802652), - FX16_CONST(-0.05059974903689952), FX16_CONST(0.9987190122338729), - FX16_CONST(-0.04906767432741809), FX16_CONST(0.9987954562051724), - FX16_CONST(-0.04753548415695922), FX16_CONST(0.9988695499142836), - FX16_CONST(-0.04600318213091527), FX16_CONST(0.9989412931868569), - FX16_CONST(-0.044470771854939146), FX16_CONST(0.9990106858540733), - FX16_CONST(-0.04293825693494114), FX16_CONST(0.9990777277526454), - FX16_CONST(-0.0414056409770769), FX16_CONST(0.9991424187248169), - FX16_CONST(-0.03987292758773981), FX16_CONST(0.9992047586183639), - FX16_CONST(-0.038340120373552534), FX16_CONST(0.9992647472865944), - FX16_CONST(-0.036807222941359394), FX16_CONST(0.9993223845883494), - FX16_CONST(-0.03527423889821435), FX16_CONST(0.9993776703880028), - FX16_CONST(-0.03374117185137782), FX16_CONST(0.9994306045554617), - FX16_CONST(-0.03220802540830466), FX16_CONST(0.999481186966167), - FX16_CONST(-0.030674803176636543), FX16_CONST(0.9995294175010931), - FX16_CONST(-0.029141508764194368), FX16_CONST(0.9995752960467492), - FX16_CONST(-0.027608145778966225), FX16_CONST(0.9996188224951786), - FX16_CONST(-0.02607471782910422), FX16_CONST(0.9996599967439592), - FX16_CONST(-0.024541228522912448), FX16_CONST(0.9996988186962042), - FX16_CONST(-0.023007681468839372), FX16_CONST(0.9997352882605617), - FX16_CONST(-0.021474080275469345), FX16_CONST(0.9997694053512153), - FX16_CONST(-0.019940428551515003), FX16_CONST(0.9998011698878843), - FX16_CONST(-0.018406729905805226), FX16_CONST(0.9998305817958234), - FX16_CONST(-0.016872987947281957), FX16_CONST(0.9998576410058239), - FX16_CONST(-0.015339206284988182), FX16_CONST(0.9998823474542126), - FX16_CONST(-0.01380538852806031), FX16_CONST(0.9999047010828529), - FX16_CONST(-0.012271538285720572), FX16_CONST(0.9999247018391445), - FX16_CONST(-0.010737659167264976), FX16_CONST(0.9999423496760239), - FX16_CONST(-0.009203754782060144), FX16_CONST(0.9999576445519639), - FX16_CONST(-0.007669828739531261), FX16_CONST(0.9999705864309741), - FX16_CONST(-0.006135884649154477), FX16_CONST(0.9999811752826011), - FX16_CONST(-0.004601926120448411), FX16_CONST(0.9999894110819284), - FX16_CONST(-0.003067956762966544), FX16_CONST(0.9999952938095762), - FX16_CONST(-0.0015339801862851719), FX16_CONST(0.9999988234517019) -}; diff --git a/arm9/lib/src/FX_vec.c b/arm9/lib/src/FX_vec.c deleted file mode 100644 index 005872ac..00000000 --- a/arm9/lib/src/FX_vec.c +++ /dev/null @@ -1,109 +0,0 @@ -#include "fx.h" - -#include "global.h" -#include "registers.h" - -ARM_FUNC void VEC_Add(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ - dst->x = a->x + b->x; - dst->y = a->y + b->y; - dst->z = a->z + b->z; -} - -ARM_FUNC void VEC_Subtract(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ - dst->x = a->x - b->x; - dst->y = a->y - b->y; - dst->z = a->z - b->z; -} - -ARM_FUNC void VEC_Fx16Add(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst){ - dst->x = (s16)(a->x + b->x); - dst->y = (s16)(a->y + b->y); - dst->z = (s16)(a->z + b->z); -} - -ARM_FUNC fx32 VEC_DotProduct(struct Vecx32 *a, struct Vecx32 *b){ - return (fx32)(((fx64)a->x * b->x + (fx64)a->y * b->y + (fx64)a->z * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); -} - -ARM_FUNC fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b){ - fx32 temp1, temp2; - temp1 = (a->x * b->x) + (a->y * b->y); - temp2 = (a->z * b->z) + (1 << (FX64_INT_SHIFT - 1)); - return (fx32)(((fx64)temp1 + temp2) >> FX64_INT_SHIFT); -} - -ARM_FUNC void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ - fx32 x, y, z; - x = (fx32)(((fx64)a->y * b->z - (fx64)a->z * b->y + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - y = (fx32)(((fx64)a->z * b->x - (fx64)a->x * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - z = (fx32)(((fx64)a->x * b->y - (fx64)a->y * b->x + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - dst->x = x; - dst->y = y; - dst->z = z; -} - -ARM_FUNC void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst){ - fx32 x, y, z; - x = ((a->y * b->z - a->z * b->y + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - y = ((a->z * b->x - a->x * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - z = ((a->x * b->y - a->y * b->x + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT); - dst->x = (fx16)x; - dst->y = (fx16)y; - dst->z = (fx16)z; -} - -ARM_FUNC fx32 VEC_Mag(struct Vecx32 *a){ - fx64 l2 = (fx64)a->x * a->x; - l2 += (fx64)a->y * a->y; - l2 += (fx64)a->z * a->z; - reg_CP_SQRTCNT = 0x1; - reg_CP_SQRT_PARAM = (u64)(l2 * 4); - while (reg_CP_SQRTCNT & 0x8000) {} //wait for coprocessor to finish - return ((fx32)reg_CP_SQRT_RESULT + 1) >> 1; -} - -ARM_FUNC void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst){ - fx64 l2 = (fx64)a->x * a->x; - l2 += (fx64)a->y * a->y; - l2 += (fx64)a->z * a->z; - //1/sqrt(l) is computed by calculating sqrt(l)*(1/l) - reg_CP_DIVCNT = 0x2; - reg_CP_DIV_NUMER = 0x0100000000000000; - reg_CP_DIV_DENOM = (u64)l2; - reg_CP_SQRTCNT = 0x1; - reg_CP_SQRT_PARAM = (u64)(l2 * 4); - while (reg_CP_SQRTCNT & 0x8000) {} //wait for sqrt to finish - fx32 sqrtresult = (fx32)reg_CP_SQRT_RESULT; - while (reg_CP_DIVCNT & 0x8000) {} //wait for division to finish - l2 = (fx64)reg_CP_DIV_RESULT; - l2 = sqrtresult * l2; - dst->x = (fx32)((l2 * a->x + (1LL << (0x2D - 1))) >> 0x2D); - dst->y = (fx32)((l2 * a->y + (1LL << (0x2D - 1))) >> 0x2D); - dst->z = (fx32)((l2 * a->z + (1LL << (0x2D - 1))) >> 0x2D); -} - -ARM_FUNC void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst){ - fx64 l2 = a->x * a->x; - l2 += a->y * a->y; - l2 += a->z * a->z; - //1/sqrt(l) is computed by calculating sqrt(l)*(1/l) - reg_CP_DIVCNT = 0x2; - reg_CP_DIV_NUMER = 0x0100000000000000; - reg_CP_DIV_DENOM = (u64)l2; - reg_CP_SQRTCNT = 0x1; - reg_CP_SQRT_PARAM = (u64)(l2 * 4); - while (reg_CP_SQRTCNT & 0x8000) {} //wait for sqrt to finish - fx32 sqrtresult = (fx32)reg_CP_SQRT_RESULT; - while (reg_CP_DIVCNT & 0x8000) {} //wait for division to finish - l2 = (fx64)reg_CP_DIV_RESULT; - l2 = sqrtresult * l2; - dst->x = (fx16)((l2 * a->x + (1LL << (0x2D - 1))) >> 0x2D); - dst->y = (fx16)((l2 * a->y + (1LL << (0x2D - 1))) >> 0x2D); - dst->z = (fx16)((l2 * a->z + (1LL << (0x2D - 1))) >> 0x2D); -} - -ARM_FUNC void VEC_MultAdd(fx32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){ - dst->x = (fx32)(((fx64)factor * a->x) >> FX32_INT_SHIFT) + b->x; - dst->y = (fx32)(((fx64)factor * a->y) >> FX32_INT_SHIFT) + b->y; - dst->z = (fx32)(((fx64)factor * a->z) >> FX32_INT_SHIFT) + b->z; -} diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c deleted file mode 100644 index f47c0131..00000000 --- a/arm9/lib/src/GX.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "gx.h" - -#include "global.h" -#include "OS_spinLock.h" -#include "OS_terminate_proc.h" - -u32 GXi_DmaId = 3; -vu16 GXi_VRamLockId = 0; - -static u16 sDispMode = 0; -static u16 sIsDispOn = TRUE; - -#define _powcnt_init_mask (REG_GX_POWCNT_E2DGB_MASK | REG_GX_POWCNT_E2DG_MASK | REG_GX_POWCNT_RE_MASK | REG_GX_POWCNT_GE_MASK) - -ARM_FUNC void GX_Init(){ - reg_GX_POWCNT |= REG_GX_POWCNT_DSEL_MASK; - reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~_powcnt_init_mask) | _powcnt_init_mask); - reg_GX_POWCNT = (u16)(reg_GX_POWCNT | REG_GX_POWCNT_LCD_MASK); - GX_InitGXState(); - s32 temp; - while (GXi_VRamLockId == 0) - { - temp = OS_GetLockID(); - if (temp == OS_LOCK_ID_ERROR) - { - OS_Terminate(); - } - GXi_VRamLockId = (vu16)temp; - } - reg_GX_DISPSTAT = 0x0; - reg_GX_DISPCNT = 0x0; - if (GXi_DmaId != -1) - { - MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); - reg_GX_MASTER_BRIGHT = 0x0; - MI_DmaFill32(GXi_DmaId, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); - } - else - { - MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); - reg_GX_MASTER_BRIGHT = 0x0; - MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); - } - reg_G2_BG2PA = 0x100; - reg_G2_BG2PD = 0x100; - reg_G2_BG3PA = 0x100; - reg_G2_BG3PD = 0x100; - reg_G2S_DB_BG2PA = 0x100; - reg_G2S_DB_BG2PD = 0x100; - reg_G2S_DB_BG3PA = 0x100; - reg_G2S_DB_BG3PD = 0x100; -} - -ARM_FUNC u32 GX_HBlankIntr(u32 enable){ - u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_HBI_MASK); - if (enable) - { - reg_GX_DISPSTAT |= REG_GX_DISPSTAT_HBI_MASK; - } - else - { - reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_HBI_MASK; - } - return temp; -} - -ARM_FUNC u32 GX_VBlankIntr(u32 enable){ - u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_VBI_MASK); - if (enable) - { - reg_GX_DISPSTAT |= REG_GX_DISPSTAT_VBI_MASK; - } - else - { - reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_VBI_MASK; - } - return temp; -} - -ARM_FUNC void GX_DispOff(){ - u32 temp = reg_GX_DISPCNT; - sIsDispOn = FALSE; - sDispMode = (u16)((temp & REG_GX_DISPCNT_MODE_MASK) >> REG_GX_DISPCNT_MODE_SHIFT); - reg_GX_DISPCNT = temp & ~REG_GX_DISPCNT_MODE_MASK; -} - -ARM_FUNC void GX_DispOn(){ - sIsDispOn = TRUE; - if (sDispMode) - { - reg_GX_DISPCNT = (reg_GX_DISPCNT & ~REG_GX_DISPCNT_MODE_MASK) | (sDispMode << REG_GX_DISPCNT_MODE_SHIFT); - } - else - { - reg_GX_DISPCNT = reg_GX_DISPCNT | (GX_DISPMODE_GRAPHICS << REG_GX_DISPCNT_MODE_SHIFT); - } -} - -ARM_FUNC void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d){ - u32 temp2 = reg_GX_DISPCNT; - sDispMode = (u16)dispMode; - if (!sIsDispOn) - dispMode = 0; - reg_GX_DISPCNT = ((bgMode << REG_GX_DISPCNT_BGMODE_SHIFT) | ((temp2 & ~(REG_GX_DISPCNT_BGMODE_MASK | REG_GX_DISPCNT_MODE_MASK | REG_GX_DISPCNT_BG02D3D_MASK | REG_GX_DISPCNT_VRAM_MASK)) | (dispMode << REG_GX_DISPCNT_MODE_SHIFT))) | (bg0_2d3d << REG_GX_DISPCNT_BG02D3D_SHIFT); - if (!sDispMode) - sIsDispOn = FALSE; -} - -ARM_FUNC void GXS_SetGraphicsMode(GXBGMode mode){ - reg_GXS_DB_DISPCNT = (reg_GXS_DB_DISPCNT & ~REG_GXS_DB_DISPCNT_BGMODE_MASK) | mode; -} - -ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ - if (!brightness) - { - *dst = 0x0; - } - else if (brightness > 0) - { - *dst = (u16)((1 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | brightness); - } - else - { - *dst = (u16)((2 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | -brightness); - } -} diff --git a/arm9/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c deleted file mode 100644 index 1eb0a011..00000000 --- a/arm9/lib/src/GX_asm.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -//looks like asm and says asm on the tin... -ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){ - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - bx lr -} diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c deleted file mode 100644 index 91a67655..00000000 --- a/arm9/lib/src/GX_bgcnt.c +++ /dev/null @@ -1,194 +0,0 @@ -#include "global.h" -#include "gx.h" - -ARM_FUNC void *G2_GetBG0ScrPtr(){ - u32 temp = (u32)(((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); -} - -ARM_FUNC void *G2S_GetBG0ScrPtr(){ - return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x1F00) >> 0x8) << 0xB)); -} - -ARM_FUNC void *G2_GetBG1ScrPtr(){ - u32 temp = (u32)(((reg_G2_BG1CNT & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); -} - -ARM_FUNC void *G2S_GetBG1ScrPtr(){ - return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x1F00) >> 0x8) << 0xB)); -} - -ARM_FUNC void *G2_GetBG2ScrPtr(){ - u32 temp12 = (reg_GX_DISPCNT & 0x7); - u32 temp3 = reg_G2_BG2CNT; - u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); - u32 temp1 = ((temp3 & 0x1F00) >> 0x8); - switch (temp12) - { - case 0: - case 1: - case 2: - case 3: - case 4: - return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); - case 5: - if (temp3 & 0x80) - return (void *)(0x6000000 + (temp1 << 0xE)); - else - return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); - case 6: - return (void *)0x6000000; - default: - return NULL; - } -} - -ARM_FUNC void *G2S_GetBG2ScrPtr(){ - u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); - u32 temp3 = reg_G2S_DB_BG2CNT; - u32 temp1 = ((temp3 & 0x1F00) >> 0x8); - switch (temp12) - { - case 0: - case 1: - case 2: - case 3: - case 4: - return (void *)(0x6200000 + (temp1 << 0xB)); - case 5: - if (temp3 & 0x80) - return (void *)(0x6200000 + (temp1 << 0xE)); - else - return (void *)(0x6200000 + (temp1 << 0xB)); - case 6: - return NULL; - default: - return NULL; - } -} - -ARM_FUNC void *G2_GetBG3ScrPtr(){ - u32 temp12 = (reg_GX_DISPCNT & 0x7); - u32 temp3 = reg_G2_BG3CNT; - u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); - u32 temp1 = ((temp3 & 0x1F00) >> 0x8); - switch (temp12) - { - case 0: - case 1: - case 2: - return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); - case 3: - case 4: - case 5: - if (temp3 & 0x80) - return (void *)(0x6000000 + (temp1 << 0xE)); - else - return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); - case 6: - return NULL; - default: - return NULL; - } -} - -ARM_FUNC void *G2S_GetBG3ScrPtr(){ - u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); - u32 temp3 = reg_G2S_DB_BG3CNT; - u32 temp1 = ((temp3 & 0x1F00) >> 0x8); - switch (temp12) - { - case 0: - case 1: - case 2: - return (void *)(0x6200000 + (temp1 << 0xB)); - case 3: - case 4: - case 5: - if (temp3 & 0x80) - return (void *)(0x6200000 + (temp1 << 0xE)); - else - return (void *)(0x6200000 + (temp1 << 0xB)); - case 6: - return NULL; - default: - return NULL; - } -} - -ARM_FUNC void *G2_GetBG0CharPtr(){ - u32 temp = (u32)(((reg_G2_BG0CNT & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); -} - -ARM_FUNC void *G2S_GetBG0CharPtr(){ - return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x3C) >> 0x2) << 0xE)); -} - -ARM_FUNC void *G2_GetBG1CharPtr(){ - u32 temp = (u32)(((reg_G2_BG1CNT & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); -} - -ARM_FUNC void *G2S_GetBG1CharPtr(){ - return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x3C) >> 0x2) << 0xE)); -} - -ARM_FUNC void *G2_GetBG2CharPtr(){ - s32 temp1 = (s32)(reg_GX_DISPCNT & 0x7); - u32 temp = reg_G2_BG2CNT; - if (temp1 < 5 || !(temp & 0x80)) - { - u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); - u32 temp2 = (temp & 0x3C) >> 2; - return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); - } - else - { - return NULL; - } -} - -ARM_FUNC void *G2S_GetBG2CharPtr(){ - s32 temp1 = (s32)(reg_GXS_DB_DISPCNT & 0x7); - u32 temp = reg_G2S_DB_BG2CNT; - if (temp1 < 5 || !(temp & 0x80)) - { - u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; - return (void *)(0x6200000 + temp2); - } - else - { - return NULL; - } -} - -ARM_FUNC void *G2_GetBG3CharPtr(){ - s32 temp1 = (s32)(reg_GX_DISPCNT & 0x7); - u32 temp = reg_G2_BG3CNT; - if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) - { - u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); - u32 temp2 = (temp & 0x3C) >> 2; - return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); - } - else - { - return NULL; - } -} - -ARM_FUNC void *G2S_GetBG3CharPtr(){ - s32 temp1 = (s32)(reg_GXS_DB_DISPCNT & 0x7); - u32 temp = reg_G2S_DB_BG3CNT; - if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) - { - u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; - return (void *)(0x6200000 + temp2); - } - else - { - return NULL; - } -} diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c deleted file mode 100644 index 39b8bff4..00000000 --- a/arm9/lib/src/GX_g2.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "global.h" -#include "gx.h" - -ARM_FUNC void G2x_SetBGyAffine_(u32 ptr, const struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ - fx32 temp0, temp1, temp2, temp3; - *((vu32 *)ptr + 0) = (u32)((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); - *((vu32 *)ptr + 1) = (u32)((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); - temp0 = c - a; - temp1 = d - b; - temp2 = mtx->_[0] * temp0 + mtx->_[1] * temp1 + (a << 0xC); - temp3 = mtx->_[2] * temp0 + mtx->_[3] * temp1 + (b << 0xC); - *((vu32 *)ptr + 2) = (u32)(temp2 >> 4); - *((vu32 *)ptr + 3) = (u32)(temp3 >> 4); -} - -ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ - *ptr = (u32)(((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10)); -} - -ARM_FUNC void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ - if (brightness < 0) - { - ptr[0] = (u16)(a | 0xC0); - ptr[2] = (u16)(-brightness); - } - else - { - ptr[0] = (u16)(a | 0x80); - ptr[2] = (u16)brightness; - } -} - -ARM_FUNC void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ - ptr[1] = (u16)(c | (d << 0x8)); - if (brightness < 0) - { - ptr[0] = (u16)(0xC0 | a | (b << 0x8)); - ptr[2] = (u16)(-brightness); - } - else - { - ptr[0] = (u16)(0x80 | a | (b << 0x8)); - ptr[2] = (u16)brightness; - } -} - -ARM_FUNC void G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ - u32 temp = *ptr; - if (brightness < 0) - { - if ((temp & 0xC0) == 0x80) - { - ptr[0] = (u16)((temp & ~0xC0) | 0xC0); - } - ptr[2] = (u16)(-brightness); - } - else - { - if ((temp & 0xC0) == 0xC0) - { - ptr[0] = (u16)((temp & ~0xC0) | 0x80); - } - ptr[2] = (u16)brightness; - } -} diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c deleted file mode 100644 index 45b6b11b..00000000 --- a/arm9/lib/src/GX_g3.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "global.h" -#include "gx.h" - - -ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){ - displaylist->length = r2; - displaylist->bottom = r1; - displaylist->curr_cmd = r1; - displaylist->curr_param = (u32 *)r1 + 1; - displaylist->param0_cmd_flg = 0x0; -} - -ARM_FUNC s32 G3_EndMakeDL(struct GXDLInfo *displaylist){ - if (displaylist->bottom == (u32 *)displaylist->curr_cmd) - return 0; - //pads the buffer with 0 to 4byte alignment if needed - switch((u32)displaylist->curr_cmd & 0x3) - { - case 0: - return displaylist->curr_cmd - (u8 *)displaylist->bottom; - case 1: - *displaylist->curr_cmd++ = 0x0; - case 2: - *displaylist->curr_cmd++ = 0x0; - case 3: - *displaylist->curr_cmd++ = 0x0; - } - if (displaylist->param0_cmd_flg) - { - *displaylist->curr_param++ = 0x0; - displaylist->param0_cmd_flg = 0x0; - } - displaylist->curr_cmd = (u8 *)displaylist->curr_param; - return displaylist->curr_cmd - (u8 *)displaylist->bottom; -} diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c deleted file mode 100644 index e647f1c7..00000000 --- a/arm9/lib/src/GX_g3_util.c +++ /dev/null @@ -1,259 +0,0 @@ -#include "global.h" -#include "gx.h" - - -ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ - fx32 fovcot, temp1, temp2; - fx64c temp0; - vu32 *reg_ptr; - - fovcot = FX_Div(fovcos, fovsin); - if (scale != 0x1000) //!= 1.0 - fovcot = (fovcot * scale) / 0x1000; - reg_CP_DIV_NUMER = (u64)((s64)fovcot << 0x20); - reg_CP_DIV_DENOM = (u32)ratio; - if (load) - { - reg_G3_MTX_MODE = 0x0; - reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; - } - if (mtx) - { - mtx->_[1] = 0x0; - mtx->_[2] = 0x0; - mtx->_[3] = 0x0; - mtx->_[4] = 0x0; - mtx->_[6] = 0x0; - mtx->_[7] = 0x0; - mtx->_[8] = 0x0; - mtx->_[9] = 0x0; - mtx->_[11] = -scale; - mtx->_[12] = 0x0; - mtx->_[13] = 0x0; - mtx->_[15] = 0x0; - } - temp1 = FX_GetDivResult(); - reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; - reg_CP_DIV_DENOM = (u32)(near - far); - if (load) - { - *reg_ptr = (vu32)temp1; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = (vu32)fovcot; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - } - if (mtx) - { - mtx->_[0] = temp1; - mtx->_[5] = fovcot; - } - temp0 = FX_GetDivResultFx64c(); - if (scale != 0x1000) - temp0 = (temp0 * scale) / 0x1000; - temp1 = (fx32)(((far + near) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - temp2 = (fx32)((((fx32)(((fx64)(near << 1) * far + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - if (load) - { - *reg_ptr = (vu32)temp1; - *reg_ptr = (vu32)(-scale); - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = (vu32)temp2; - *reg_ptr = 0x0; - } - if (mtx) - { - mtx->_[10] = temp1; - mtx->_[14] = temp2; - } -} - -ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ - fx64c temp1, temp2, temp3; - fx32 temp0, temp4, temp5; - vu32 *reg_ptr; - - FX_InvAsync(right - left); - if (load) - { - reg_G3_MTX_MODE = 0x0; - reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; - } - if (mtx) - { - mtx->_[1] = 0x0; - mtx->_[2] = 0x0; - mtx->_[3] = 0x0; - mtx->_[4] = 0x0; - mtx->_[6] = 0x0; - mtx->_[7] = 0x0; - mtx->_[8] = 0x0; - mtx->_[9] = 0x0; - mtx->_[11] = 0x0; - mtx->_[15] = scale; - } - temp1 = FX_GetDivResultFx64c(); - reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; - reg_CP_DIV_DENOM = (u32)(top - bottom); - if (scale != 0x1000) - temp1 = (temp1 * scale) / 0x1000; - temp0 = (fx32)((0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - if (load) - { - *reg_ptr = (vu32)temp0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - } - if (mtx) - { - mtx->_[0] = temp0; - } - temp2 = FX_GetDivResultFx64c(); - reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; - reg_CP_DIV_DENOM = (u32)(near - far); - if (scale != 0x1000) - temp2 = (temp2 * scale) / 0x1000; - temp0 = (fx32)((0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - if (load) - { - *reg_ptr = (vu32)temp0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - } - if (mtx) - { - mtx->_[5] = temp0; - } - temp3 = FX_GetDivResultFx64c(); - if (scale != 0x1000) - temp3 = (temp3 * scale) / 0x1000; - temp0 = (fx32)((0x2000 * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - if (load) - { - *reg_ptr = (vu32)temp0; - *reg_ptr = 0x0; - } - if (mtx) - { - mtx->_[10] = temp0; - } - temp0 = (fx32)(((-(right + left)) * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - temp4 = (fx32)(((-(top + bottom)) * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - temp5 = (fx32)(((far + near) * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT); - if (load) - { - *reg_ptr = (vu32)temp0; - *reg_ptr = (vu32)temp4; - *reg_ptr = (vu32)temp5; - *reg_ptr = (vu32)scale; - } - if (mtx) - { - mtx->_[12] = temp0; - mtx->_[13] = temp4; - mtx->_[14] = temp5; - } -} - -ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ - struct Vecx32 temp, temp1, temp2; - fx32 c1, c2, c3; - vu32 *reg_ptr; - temp.x = a->x - c->x; - temp.y = a->y - c->y; - temp.z = a->z - c->z; - VEC_Normalize(&temp, &temp); - VEC_CrossProduct(b, &temp, &temp1); - VEC_Normalize(&temp1, &temp1); - VEC_CrossProduct(&temp, &temp1, &temp2); - if (load) - { - reg_G3_MTX_MODE = 0x2; - reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x3; - *reg_ptr = (vu32)temp1.x; - *reg_ptr = (vu32)temp2.x; - *reg_ptr = (vu32)temp.x; - *reg_ptr = (vu32)temp1.y; - *reg_ptr = (vu32)temp2.y; - *reg_ptr = (vu32)temp.y; - *reg_ptr = (vu32)temp1.z; - *reg_ptr = (vu32)temp2.z; - *reg_ptr = (vu32)temp.z; - } - c1 = -VEC_DotProduct(a, &temp1); - c2 = -VEC_DotProduct(a, &temp2); - c3 = -VEC_DotProduct(a, &temp); - if (load) - { - *reg_ptr = (vu32)c1; - *reg_ptr = (vu32)c2; - *reg_ptr = (vu32)c3; - } - if (mtx) - { - mtx->_[0] = temp1.x; - mtx->_[1] = temp2.x; - mtx->_[2] = temp.x; - mtx->_[3] = temp1.y; - mtx->_[4] = temp2.y; - mtx->_[5] = temp.y; - mtx->_[6] = temp1.z; - mtx->_[7] = temp2.z; - mtx->_[8] = temp.z; - mtx->_[9] = c1; - mtx->_[10] = c2; - mtx->_[11] = c3; - } -} - -ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ - vu32 *reg_ptr; - reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; - *reg_ptr = 0x1000; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = (vu32)cosphi; - *reg_ptr = (vu32)sinphi; - *reg_ptr = 0x0; - *reg_ptr = (vu32)(-sinphi); - *reg_ptr = (vu32)cosphi; -} - -ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ - vu32 *reg_ptr; - reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; - *reg_ptr = (vu32)cosphi; - *reg_ptr = 0x0; - *reg_ptr = (vu32)(-sinphi); - *reg_ptr = 0x0; - *reg_ptr = 0x1000; - *reg_ptr = 0x0; - *reg_ptr = (vu32)sinphi; - *reg_ptr = 0x0; - *reg_ptr = (vu32)cosphi; -} - -ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ - vu32 *reg_ptr; - reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; - *reg_ptr = (vu32)cosphi; - *reg_ptr = (vu32)sinphi; - *reg_ptr = 0x0; - *reg_ptr = (vu32)(-sinphi); - *reg_ptr = (vu32)cosphi; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x0; - *reg_ptr = 0x1000; -} diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c deleted file mode 100644 index a3b96a0b..00000000 --- a/arm9/lib/src/GX_g3b.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "global.h" -#include "gx.h" - - -ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ - *(u32 *)displaylist->curr_cmd = 0x16; - MI_Copy64B(mtx, displaylist->curr_param); -} - -ARM_FUNC void G3B_PushMtx(struct GXDLInfo *displaylist){ - *(u32 *)displaylist->curr_cmd = 0x11; - displaylist->curr_cmd = (u8 *)displaylist->curr_param; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx){ - *(u32 *)displaylist->curr_cmd = 0x12; - *displaylist->curr_param = (u32)mtx; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ - G3BS_LoadMtx44(displaylist, mtx); - displaylist->curr_cmd = (u8 *)displaylist->curr_param + sizeof(struct Mtx44); - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -//color format is RGB555, stored in the lower bits -ARM_FUNC void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col){ - *(u32 *)displaylist->curr_cmd = 0x20; - *displaylist->curr_param = vtx_col; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -/* -Only feed normalized Vectors -only the fractional part and the sign, which is in the first nonfraction bit -since the vector is assumed to be normalized, are used -*/ -ARM_FUNC void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z){ - *(u32 *)displaylist->curr_cmd = 0x21; - *displaylist->curr_param = (u32)(((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14)); - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z){ - *(u32 *)displaylist->curr_cmd = 0x23; - displaylist->curr_param[0] = (u32)(u16)x | (u32)(u16)y << 0x10; - displaylist->curr_param[1] = (u32)(u16)z; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x8; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -//TODO: name arguments -ARM_FUNC void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ - *(u32 *)displaylist->curr_cmd = 0x29; - *displaylist->curr_param = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ - *(u32 *)displaylist->curr_cmd = 0x30; - u32 replace_vtx_color_with_diffuse; - if (replace) - replace_vtx_color_with_diffuse = TRUE; - else - replace_vtx_color_with_diffuse = FALSE; - *displaylist->curr_param = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ - *(u32 *)displaylist->curr_cmd = 0x31; - u32 enable_shininess_table; - if (shiny_table) - enable_shininess_table = TRUE; - else - enable_shininess_table = FALSE; - *displaylist->curr_param = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -/* -Only feed normalized Vectors -only the fractional part and the sign, which is in the first nonfraction bit -since the vector is assumed to be normalized, are used -*/ -ARM_FUNC void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ - *(u32 *)displaylist->curr_cmd = 0x32; - *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col){ - *(u32 *)displaylist->curr_cmd = 0x33; - *displaylist->curr_param = col | light_num << 0x1E; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_Begin(struct GXDLInfo * displaylist, u32 type){ - *(u32 *)displaylist->curr_cmd = 0x40; - *displaylist->curr_param = type; - displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} - -ARM_FUNC void G3B_End(struct GXDLInfo * displaylist){ - *(u32 *)displaylist->curr_cmd = 0x41; - displaylist->curr_cmd = (u8 *)displaylist->curr_param; - displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; -} diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c deleted file mode 100644 index 1798338e..00000000 --- a/arm9/lib/src/GX_g3imm.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "global.h" -#include "gx.h" - -ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ - reg_G3X_GXFIFO = 0x17; - GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); -} - -ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ - reg_G3X_GXFIFO = 0x19; - GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); -} - -ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ - reg_G3X_GXFIFO = 0x1A; - MI_Copy36B(mtx, (void *)®_G3X_GXFIFO); -} diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c deleted file mode 100644 index 9954c4cb..00000000 --- a/arm9/lib/src/GX_g3x.c +++ /dev/null @@ -1,235 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -extern u32 GXi_DmaId; - -ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - mov r12, #0x0 - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - bx lr -} - -ARM_FUNC void G3X_Init(){ - G3X_ClearFifo(); - reg_G3_END_VTXS = 0x0; - while (reg_G3X_GXSTAT & 0x8000000) {} //wait for geometry engine to not be busy - reg_G3X_DISP3DCNT = 0x0; - reg_G3X_GXSTAT = 0x0; - reg_G2_BG0OFS = 0x0; - reg_G3X_DISP3DCNT |= 0x2000; - reg_G3X_DISP3DCNT |= 0x1000; - reg_G3X_DISP3DCNT &= ~0x3002; - reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT & ~0x3000) | 0x10); - reg_G3X_DISP3DCNT = (u16)(reg_G3X_DISP3DCNT & (u16)~0x3004); - reg_G3X_GXSTAT |= 0x8000; - reg_G3X_GXSTAT = (reg_G3X_GXSTAT & ~0xC0000000) | 0x80000000; - G3X_InitMtxStack(); - reg_G3X_CLEAR_COLOR = 0x0; - reg_G3X_CLEAR_DEPTH = 0x7FFF; - reg_G3X_CLRIMAGE_OFFSET = 0x0; - reg_G3X_FOG_COLOR = 0x0; - reg_G3X_FOG_OFFSET = 0x0; - reg_G2_BG0CNT &= ~0x3; - G3X_InitTable(); - reg_G3_POLYGON_ATTR = 0x1F0080; - reg_G3_TEXIMAGE_PARAM = 0x0; - reg_G3_TEXPLTT_BASE = 0x0; -} - -ARM_FUNC void G3X_ResetMtxStack(){ - while (reg_G3X_GXSTAT & 0x8000000) {} - reg_G3X_GXSTAT |= 0x8000; - reg_G3X_DISP3DCNT |= 0x2000; - reg_G3X_DISP3DCNT |= 0x1000; - G3X_ResetMtxStack_2(); - reg_G3_POLYGON_ATTR = 0x1F0080; - reg_G3_TEXIMAGE_PARAM = 0x0; - reg_G3_TEXPLTT_BASE = 0x0; -} - -ARM_FUNC void G3X_ClearFifo(){ - GXi_NopClearFifo128_((void *)®_G3X_GXFIFO); - while (reg_G3X_GXSTAT & 0x8000000) {} -} - -ARM_FUNC void G3X_InitMtxStack(){ - u32 PV_level, PJ_level; - reg_G3X_GXSTAT |= 0x8000; - while (G3X_GetMtxStackLevelPV(&PV_level)) {} - while (G3X_GetMtxStackLevelPJ(&PJ_level)) {} - reg_G3_MTX_MODE = 0x3; - reg_G3_MTX_IDENTITY = 0x0; - reg_G3_MTX_MODE = 0x0; - if (PJ_level) - { - reg_G3_MTX_POP = PJ_level; - } - reg_G3_MTX_IDENTITY = 0x0; - reg_G3_MTX_MODE = 0x2; - reg_G3_MTX_POP = PV_level; - reg_G3_MTX_IDENTITY = 0x0; -} - -ARM_FUNC void G3X_ResetMtxStack_2(){ - u32 PV_level, PJ_level; - reg_G3X_GXSTAT |= 0x8000; - while (G3X_GetMtxStackLevelPV(&PV_level)) {} - while (G3X_GetMtxStackLevelPJ(&PJ_level)) {} - reg_G3_MTX_MODE = 0x3; - reg_G3_MTX_IDENTITY = 0x0; - reg_G3_MTX_MODE = 0x0; - if (PJ_level) - { - reg_G3_MTX_POP = PJ_level; - } - - reg_G3_MTX_MODE = 0x2; - reg_G3_MTX_POP = PV_level; - reg_G3_MTX_IDENTITY = 0x0; - -} - -ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ - if (enable) - { - reg_G3X_FOG_OFFSET = (u16)offset; - reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); - - } - else - { - reg_G3X_DISP3DCNT = (u16)(reg_G3X_DISP3DCNT & (u16)~0x3080); - } -} - -ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ - if (reg_G3X_GXSTAT & 0x8000000) - { - return (u32)-1; - } - else - { - MI_Copy64B((void *)®_G3X_CLIPMTX_RESULT_0, dst); - return 0; - } -} - -ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ - if (reg_G3X_GXSTAT & 0x8000000) - { - return (u32)-1; - } - else - { - MI_Copy36B((void *)®_G3X_VECMTX_RESULT_0, dst); - return 0; - } -} - -ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ - MIi_CpuCopy16(tbl_ptr, (void *)®_G3X_EDGE_COLOR_0, 0x10); -} - -ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ - MI_Copy32B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); -} - -ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ - u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); - if (enable_fog) - temp |= 0x8000; - reg_G3X_CLEAR_COLOR = temp; - reg_G3X_CLEAR_DEPTH = (u16)depth; -} - -ARM_FUNC void G3X_InitTable(){ - if (GXi_DmaId != -1) - { - MI_DmaFill32Async(GXi_DmaId, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(GXi_DmaId, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); - } - else - { - MIi_CpuClear32(0x0, (void *)®_G3X_EDGE_COLOR_0, 0x10); - MIi_CpuClear32(0x0, (void *)®_G3X_FOG_TABLE_0, 0x60); - } - for (int i = 0; i < 0x20; i++) - { - reg_G3_SHININESS = 0x0; - } -} - -ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ - if (reg_G3X_GXSTAT & 0x4000) - { - return (u32)-1; - } - else - { - *level = (reg_G3X_GXSTAT & 0x1F00) >> 0x8; - return 0; - } -} - -ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ - if (reg_G3X_GXSTAT & 0x4000) - { - return (u32)-1; - } - else - { - *level = (reg_G3X_GXSTAT & 0x2000) >> 0xD; - return 0; - } -} - -ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ - if (reg_G3X_GXSTAT & 0x1) - { - return (u32)-1; - } - else - { - *result = (reg_G3X_GXSTAT & 0x2); - return 0; - } -} - -ARM_FUNC void G3X_SetHOffset(u32 offset){ - reg_G2_BG0OFS = offset; -} diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c deleted file mode 100644 index 6bff54be..00000000 --- a/arm9/lib/src/GX_load2d.c +++ /dev/null @@ -1,223 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -extern u32 GXi_DmaId; - -static s32 sBGExtPltt = 0; -static u32 sBGExtPlttLCDCBlk = 0; -static u32 sBGExtPlttLCDCOffset = 0; -static s32 sOBJExtPltt = 0; -static u32 sOBJExtPlttLCDCBlk = 0; -static s32 sSubBGExtPltt = 0; -static s32 sSubOBJExtPltt = 0; - - -static inline void *_GX_OBJ_PTR(){ - return (void *)0x6400000; -} -static inline void *_GXS_OBJ_PTR(){ - return (void *)0x6600000; -} - -ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size); -} - -ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size); -} - -ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size); -} - -ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size); -} - -ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ - GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size); -} - -ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ - GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000400 + offset), size); -} - -ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ - u32 base = (u32)_GX_OBJ_PTR(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ - u32 base = (u32)_GXS_OBJ_PTR(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG0ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG0ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG1ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG1ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG2ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG2ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG3ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG3ScrPtr(); - GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG0CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG0CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG1CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG1CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG2CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG2CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2_GetBG3CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ - u32 base = (u32)G2S_GetBG3CharPtr(); - GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); -} - -ARM_FUNC void GX_BeginLoadBGExtPltt(){ - sBGExtPltt = (s32)GX_ResetBankForBGExtPltt(); - switch (sBGExtPltt) - { - case 0: //needed to match - break; - case 0x10: - sBGExtPlttLCDCBlk = 0x06880000; - sBGExtPlttLCDCOffset = 0x0; - break; - case 0x40: - sBGExtPlttLCDCBlk = 0x06894000; - sBGExtPlttLCDCOffset = 0x4000; - break; - case 0x20: - case 0x60: - sBGExtPlttLCDCBlk = 0x06890000; - sBGExtPlttLCDCOffset = 0x0; - break; - } -} - -ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL); -} - -ARM_FUNC void GX_EndLoadBGExtPltt(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForBGExtPltt(sBGExtPltt); - sBGExtPltt = 0x0; - sBGExtPlttLCDCBlk = 0x0; - sBGExtPlttLCDCOffset = 0x0; -} - -ARM_FUNC void GX_BeginLoadOBJExtPltt(){ - sOBJExtPltt = (s32)GX_ResetBankForOBJExtPltt(); - switch (sOBJExtPltt) - { - case 0: //needed to match - break; - case 0x40: - sOBJExtPlttLCDCBlk = 0x06894000; - break; - case 0x20: - sOBJExtPlttLCDCBlk = 0x06890000; - break; - } -} - -ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL); -} - -ARM_FUNC void GX_EndLoadOBJExtPltt(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForOBJExtPltt(sOBJExtPltt); - sOBJExtPltt = 0x0; - sOBJExtPlttLCDCBlk = 0x0; -} - -ARM_FUNC void GXS_BeginLoadBGExtPltt(){ - sSubBGExtPltt = (s32)GX_ResetBankForSubBGExtPltt(); -} - -ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL); -} - -ARM_FUNC void GXS_EndLoadBGExtPltt(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForSubBGExtPltt(sSubBGExtPltt); - sSubBGExtPltt = 0x0; -} - -ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ - sSubOBJExtPltt = (s32)GX_ResetBankForSubOBJExtPltt(); -} - -ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL); -} - -ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForSubOBJExtPltt(sSubOBJExtPltt); - sSubOBJExtPltt = 0x0; -} diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c deleted file mode 100644 index ae15f32e..00000000 --- a/arm9/lib/src/GX_load3d.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -extern u32 GXi_DmaId; - -static u32 sTexLCDCBlk1 = 0; -static u32 sSzTexBlk1 = 0; -static u32 sTexLCDCBlk2 = 0; -static s32 sTex = 0; - -static const struct -{ - u16 blk1; // 12 bit shift - u16 blk2; // 12 bit shift - u16 szBlk1; // 12 bit shift -} sTexStartAddrTable[16] = { - {0, 0, 0}, - {0x06800000 >> 12, 0, 0}, - {0x06820000 >> 12, 0, 0}, - {0x06800000 >> 12, 0, 0}, - {0x06840000 >> 12, 0, 0}, - {0x06800000 >> 12, 0x06840000 >> 12, 0x00020000 >> 12}, - {0x06820000 >> 12, 0, 0}, - {0x06800000 >> 12, 0, 0}, - {0x06860000 >> 12, 0, 0}, - {0x06800000 >> 12, 0x06860000 >> 12, 0x00020000 >> 12}, - {0x06820000 >> 12, 0x06860000 >> 12, 0x00020000 >> 12}, - {0x06800000 >> 12, 0x06860000 >> 12, 0x00040000 >> 12}, - {0x06840000 >> 12, 0, 0}, - {0x06800000 >> 12, 0x06840000 >> 12, 0x00020000 >> 12}, - {0x06820000 >> 12, 0, 0}, - {0x06800000 >> 12, 0, 0}, -}; - -static s32 sTexPltt = 0; -static u32 sTexPlttLCDCBlk = 0; - -static const u16 sTexPlttStartAddrTable[8] = { - 0, - 0x06880000 >> 12, - 0x06890000 >> 12, - 0x06880000 >> 12, - 0x06894000 >> 12, - 0, - 0x06890000 >> 12, - 0x06880000 >> 12 -}; - -static s32 sClrImg = 0; -static u32 sClrImgLCDCBlk = 0; - -ARM_FUNC void GX_BeginLoadTex(){ - u32 temp = GX_ResetBankForTex(); - sTex = (s32)temp; - sTexLCDCBlk1 = (u32)(sTexStartAddrTable[temp].blk1 << 0xC); - sTexLCDCBlk2 = (u32)(sTexStartAddrTable[temp].blk2 << 0xC); - sSzTexBlk1 = (u32)(sTexStartAddrTable[temp].szBlk1 << 0xC); -} - -ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ - void *temp; - if (!sTexLCDCBlk2) - { - temp = (void *)(sTexLCDCBlk1 + offset); - } - else - { - if ((offset + size) < sSzTexBlk1) - { - temp = (void *)(sTexLCDCBlk1 + offset); - } - else if (offset >= sSzTexBlk1) - { - temp = (void *)(sTexLCDCBlk2 + offset - sSzTexBlk1); - } - else - { - void *temp2 = (void *)sTexLCDCBlk2; - u32 temp1 = sSzTexBlk1 - offset; - temp = (void *)(sTexLCDCBlk1 + offset); - GXi_DmaCopy32(GXi_DmaId, src, temp, temp1); - GXi_DmaCopy32Async(GXi_DmaId, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); - return; - } - } - GXi_DmaCopy32Async(GXi_DmaId, src, temp, size, NULL, NULL); -} - -ARM_FUNC void GX_EndLoadTex(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForTex(sTex); - sSzTexBlk1 = 0x0; - sTexLCDCBlk2 = 0x0; - sTexLCDCBlk1 = 0x0; - sTex = 0x0; -} - -ARM_FUNC void GX_BeginLoadTexPltt(){ - s32 temp = (s32)GX_ResetBankForTexPltt(); - sTexPltt = temp; - sTexPlttLCDCBlk = (u32)(sTexPlttStartAddrTable[temp >> 4] << 0xC); -} - -ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sTexPlttLCDCBlk + offset), size, NULL, NULL); -} - -ARM_FUNC void GX_EndLoadTexPltt(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForTexPltt(sTexPltt); - sTexPltt = 0x0; - sTexPlttLCDCBlk = 0x0; -} - -ARM_FUNC void GX_BeginLoadClearImage(){ - u32 temp = GX_ResetBankForClearImage(); - sClrImg = (s32)temp; - switch (temp) - { - case 2: - case 3: - sClrImgLCDCBlk = 0x6800000; - return; - case 8: - case 12: - sClrImgLCDCBlk = 0x6840000; - return; - case 1: - sClrImgLCDCBlk = 0x67E0000; - return; - case 4: - sClrImgLCDCBlk = 0x6820000; - } -} - -ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk), size, NULL, NULL); -} - -ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ - GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk + 0x20000), size, NULL, NULL); -} - -ARM_FUNC void GX_EndLoadClearImage(){ - GXi_WaitDma(GXi_DmaId); - GX_SetBankForClearImage(sClrImg); - sClrImg = 0x0; - sClrImgLCDCBlk = 0x0; -} diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c deleted file mode 100644 index 003e42b5..00000000 --- a/arm9/lib/src/GX_state.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "global.h" -#include "gx.h" - -struct GX_State gGXState; - -ARM_FUNC void GX_InitGXState(){ - gGXState.lcdc = 0x0; - gGXState.bg = 0x0; - gGXState.obj = 0x0; - gGXState.arm7 = 0x0; - gGXState.tex = 0x0; - gGXState.texPltt = 0x0; - gGXState.clrImg = 0x0; - gGXState.bgExtPltt = 0x0; - gGXState.objExtPltt = 0x0; - gGXState.sub_bg = 0x0; - gGXState.sub_obj = 0x0; - gGXState.sub_bgExtPltt = 0x0; - gGXState.sub_objExtPltt = 0x0; - reg_GX_VRAMCNT = 0x0; - reg_GX_VRAMCNT_E = 0x0; - reg_GX_VRAMCNT_F = 0x0; - reg_GX_VRAMCNT_G = 0x0; - reg_GX_VRAM_HI_CNT = 0x0; -} diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c deleted file mode 100644 index abfcd77e..00000000 --- a/arm9/lib/src/GX_vramcnt.c +++ /dev/null @@ -1,578 +0,0 @@ -#include "global.h" -#include "gx.h" - -extern u16 GXi_VRamLockId; -extern struct GX_State gGXState; - -ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ - if (mask & (0x1 << 0)) - reg_GX_VRAMCNT_A = 0x80; - if (mask & (0x1 << 1)) - reg_GX_VRAMCNT_B = 0x80; - if (mask & (0x1 << 2)) - reg_GX_VRAMCNT_C = 0x80; - if (mask & (0x1 << 3)) - reg_GX_VRAMCNT_D = 0x80; - if (mask & (0x1 << 4)) - reg_GX_VRAMCNT_E = 0x80; - if (mask & (0x1 << 5)) - reg_GX_VRAMCNT_F = 0x80; - if (mask & (0x1 << 6)) - reg_GX_VRAMCNT_G = 0x80; - if (mask & (0x1 << 7)) - reg_GX_VRAMCNT_H = 0x80; - if (mask & (0x1 << 8)) - reg_GX_VRAMCNT_I = 0x80; -} - -ARM_FUNC void GX_SetBankForBG(s32 bg){ - gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg)); - gGXState.bg = (u16)bg; - switch (bg) - { - case 8: - reg_GX_VRAMCNT_D = 0x81; - break; - case 12: - reg_GX_VRAMCNT_D = 0x89; - case 4: - reg_GX_VRAMCNT_C = 0x81; - break; - case 14: - reg_GX_VRAMCNT_D = 0x91; - case 6: - reg_GX_VRAMCNT_C = 0x89; - case 2: - reg_GX_VRAMCNT_B = 0x81; - break; - case 15: - reg_GX_VRAMCNT_D = 0x99; - case 7: - reg_GX_VRAMCNT_C = 0x91; - case 3: - reg_GX_VRAMCNT_B = 0x89; - case 1: - reg_GX_VRAMCNT_A = 0x81; - break; - case 11: - reg_GX_VRAMCNT_A = 0x81; - reg_GX_VRAMCNT_B = 0x89; - reg_GX_VRAMCNT_D = 0x91; - break; - case 13: - reg_GX_VRAMCNT_D = 0x91; - case 5: - reg_GX_VRAMCNT_A = 0x81; - reg_GX_VRAMCNT_C = 0x89; - break; - case 9: - reg_GX_VRAMCNT_A = 0x81; - reg_GX_VRAMCNT_D = 0x89; - break; - case 10: - reg_GX_VRAMCNT_B = 0x81; - reg_GX_VRAMCNT_D = 0x89; - break; - case 112: - reg_GX_VRAMCNT_G = 0x99; - case 48: - reg_GX_VRAMCNT_F = 0x91; - case 16: - reg_GX_VRAMCNT_E = 0x81; - break; - case 80: - reg_GX_VRAMCNT_G = 0x91; - reg_GX_VRAMCNT_E = 0x81; - break; - case 96: - reg_GX_VRAMCNT_G = 0x89; - case 32: - reg_GX_VRAMCNT_F = 0x81; - break; - case 64: - reg_GX_VRAMCNT_G = 0x81; - break; - default: - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForOBJ(s32 obj){ - gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj)); - gGXState.obj = (u16)obj; - switch (obj) - { - case 3: - reg_GX_VRAMCNT_B = 0x8A; - case 1: - reg_GX_VRAMCNT_A = 0x82; - case 0: //needed to match - break; - case 2: - reg_GX_VRAMCNT_B = 0x82; - break; - case 112: - reg_GX_VRAMCNT_G = 0x9A; - case 48: - reg_GX_VRAMCNT_F = 0x92; - case 16: - reg_GX_VRAMCNT_E = 0x82; - break; - case 80: - reg_GX_VRAMCNT_G = 0x92; - reg_GX_VRAMCNT_E = 0x82; - break; - case 96: - reg_GX_VRAMCNT_G = 0x8A; - case 32: - reg_GX_VRAMCNT_F = 0x82; - break; - case 64: - reg_GX_VRAMCNT_G = 0x82; - break; - default: - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ - gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt)); - gGXState.bgExtPltt = (u16)bgextpltt; - switch (bgextpltt) - { - case 0x10: - reg_GX_DISPCNT |= 0x40000000; - reg_GX_VRAMCNT_E = 0x84; - break; - case 0x40: - reg_GX_DISPCNT |= 0x40000000; - reg_GX_VRAMCNT_G = 0x8C; - break; - case 0x60: - reg_GX_VRAMCNT_G = 0x8C; - case 0x20: - reg_GX_VRAMCNT_F = 0x84; - reg_GX_DISPCNT |= 0x40000000; - break; - case 0: - reg_GX_DISPCNT &= ~0x40000000; - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ - gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt)); - gGXState.objExtPltt = (u16)objextpltt; - switch (objextpltt) - { - case 32: - reg_GX_DISPCNT |= 0x80000000; - reg_GX_VRAMCNT_F = 0x85; - break; - case 64: - reg_GX_DISPCNT |= 0x80000000; - reg_GX_VRAMCNT_G = 0x85; - break; - case 0: - reg_GX_DISPCNT &= ~0x80000000; - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForTex(s32 tex){ - gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex)); - gGXState.tex = (u16)tex; - if (tex == 0) - { - reg_G3X_DISP3DCNT &= 0x0000CFFE; - } - else - { - reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT & ~0x3000) | 0x1); - switch (tex) - { - case 5: - reg_GX_VRAMCNT_A = 0x83; - reg_GX_VRAMCNT_C = 0x8B; - break; - case 9: - reg_GX_VRAMCNT_A = 0x83; - reg_GX_VRAMCNT_D = 0x8B; - break; - case 10: - reg_GX_VRAMCNT_B = 0x83; - reg_GX_VRAMCNT_D = 0x8B; - break; - case 11: - reg_GX_VRAMCNT_A = 0x83; - reg_GX_VRAMCNT_B = 0x8B; - reg_GX_VRAMCNT_D = 0x93; - break; - case 13: - reg_GX_VRAMCNT_A = 0x83; - reg_GX_VRAMCNT_C = 0x8B; - reg_GX_VRAMCNT_D = 0x93; - break; - case 8: - reg_GX_VRAMCNT_D = 0x83; - break; - case 12: - reg_GX_VRAMCNT_D = 0x8B; - case 4: - reg_GX_VRAMCNT_C = 0x83; - break; - case 14: - reg_GX_VRAMCNT_D = 0x93; - case 6: - reg_GX_VRAMCNT_C = 0x8B; - case 2: - reg_GX_VRAMCNT_B = 0x83; - break; - case 15: - reg_GX_VRAMCNT_D = 0x9B; - case 7: - reg_GX_VRAMCNT_C = 0x93; - case 3: - reg_GX_VRAMCNT_B = 0x8B; - case 1: - reg_GX_VRAMCNT_A = 0x83; - break; - } - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ - gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt)); - gGXState.texPltt = (u16)texpltt; - switch (texpltt) - { - case 0: //needed to match - break; - case 96: - reg_GX_VRAMCNT_G = 0x8B; - case 32: - reg_GX_VRAMCNT_F = 0x83; - break; - case 112: - reg_GX_VRAMCNT_G = 0x9B; - case 48: - reg_GX_VRAMCNT_F = 0x93; - case 16: - reg_GX_VRAMCNT_E = 0x83; - break; - case 64: - reg_GX_VRAMCNT_G = 0x83; - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ - gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg)); - gGXState.clrImg = (u16)clearimage; - switch (clearimage) - { - case 3: - reg_GX_VRAMCNT_A = 0x93; - case 2: - reg_GX_VRAMCNT_B = 0x9B; - reg_G3X_DISP3DCNT |= 0x4000; - break; - case 12: - reg_GX_VRAMCNT_C = 0x93; - case 8: - reg_GX_VRAMCNT_D = 0x9B; - reg_G3X_DISP3DCNT |= 0x4000; - break; - case 0: - reg_G3X_DISP3DCNT &= ~0x4000; - break; - case 1: - reg_GX_VRAMCNT_A = 0x9B; - reg_G3X_DISP3DCNT |= 0x4000; - break; - case 4: - reg_GX_VRAMCNT_C = 0x9B; - reg_G3X_DISP3DCNT |= 0x4000; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForARM7(s32 arm7){ - gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7)); - gGXState.arm7 = (u16)arm7; - switch (arm7) - { - case 0: //needed to match - break; - case 12: - reg_GX_VRAMCNT_D = 0x8A; - reg_GX_VRAMCNT_C = 0x82; - break; - case 4: - reg_GX_VRAMCNT_C = 0x82; - break; - case 8: - reg_GX_VRAMCNT_D = 0x82; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ - gGXState.lcdc |= lcdc; - GX_VRAMCNT_SetLCDC_((u32)lcdc); -} - -ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ - gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg)); - gGXState.sub_bg = (u16)subbg; - switch (subbg) - { - case 0: //needed to match - break; - case 4: - reg_GX_VRAMCNT_C = 0x84; - break; - case 384: - reg_GX_VRAMCNT_I = 0x81; - case 128: - reg_GX_VRAMCNT_H = 0x81; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - - -ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ - gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj)); - gGXState.sub_obj = (u16)subobj; - switch (subobj) - { - case 8: - reg_GX_VRAMCNT_D = 0x84; - break; - case 256: - reg_GX_VRAMCNT_I = 0x82; - break; - case 0: //needed to match - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ - gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt)); - gGXState.sub_bgExtPltt = (u16)subbgextpltt; - switch (subbgextpltt) - { - case 128: - reg_GXS_DB_DISPCNT |= 0x40000000; - reg_GX_VRAMCNT_H = 0x82; - break; - case 0: - reg_GXS_DB_DISPCNT &= ~0x40000000; - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ - gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt)); - gGXState.sub_objExtPltt = (u16)subobjextpltt; - switch (subobjextpltt) - { - case 256: - reg_GXS_DB_DISPCNT |= 0x80000000; - reg_GX_VRAMCNT_I = 0x83; - break; - case 0: - reg_GXS_DB_DISPCNT &= ~0x80000000; - break; - } - GX_VRAMCNT_SetLCDC_(gGXState.lcdc); -} - -ARM_FUNC u32 resetBankForX_(u16 *ptr){ - u16 temp = *ptr; - *ptr = 0; - gGXState.lcdc |= temp; - GX_VRAMCNT_SetLCDC_(temp); - return temp; -} - -ARM_FUNC u32 GX_ResetBankForBG(){ - return resetBankForX_(&gGXState.bg); -} - -ARM_FUNC u32 GX_ResetBankForOBJ(){ - return resetBankForX_(&gGXState.obj); -} - -ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ - reg_GX_DISPCNT &= ~0x40000000; - return resetBankForX_(&gGXState.bgExtPltt); -} - -ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ - reg_GX_DISPCNT &= ~0x80000000; - return resetBankForX_(&gGXState.objExtPltt); -} - -ARM_FUNC u32 GX_ResetBankForTex(){ - return resetBankForX_(&gGXState.tex); -} - -ARM_FUNC u32 GX_ResetBankForTexPltt(){ - return resetBankForX_(&gGXState.texPltt); -} - -ARM_FUNC u32 GX_ResetBankForClearImage(){ - return resetBankForX_(&gGXState.clrImg); -} - -ARM_FUNC u32 GX_ResetBankForSubBG(){ - return resetBankForX_(&gGXState.sub_bg); -} - -ARM_FUNC u32 GX_ResetBankForSubOBJ(){ - return resetBankForX_(&gGXState.sub_obj); -} - -ARM_FUNC u32 GX_ResetBankForSubBGExtPltt(){ - reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_BG_MASK; - return resetBankForX_(&gGXState.sub_bgExtPltt); -} - -ARM_FUNC u32 GX_ResetBankForSubOBJExtPltt(){ - reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_O_MASK; - return resetBankForX_(&gGXState.sub_objExtPltt); -} - -ARM_FUNC u32 disableBankForX_(u16 *ptr){ - u32 temp = *ptr; - *ptr = 0; - if (temp & (0x1 << 0)) - reg_GX_VRAMCNT_A = 0x0; - if (temp & (0x1 << 1)) - reg_GX_VRAMCNT_B = 0x0; - if (temp & (0x1 << 2)) - reg_GX_VRAMCNT_C = 0x0; - if (temp & (0x1 << 3)) - reg_GX_VRAMCNT_D = 0x0; - if (temp & (0x1 << 4)) - reg_GX_VRAMCNT_E = 0x0; - if (temp & (0x1 << 5)) - reg_GX_VRAMCNT_F = 0x0; - if (temp & (0x1 << 6)) - reg_GX_VRAMCNT_G = 0x0; - if (temp & (0x1 << 7)) - reg_GX_VRAMCNT_H = 0x0; - if (temp & (0x1 << 8)) - reg_GX_VRAMCNT_I = 0x0; - OSi_UnlockVram((u16)temp, GXi_VRamLockId); - return temp; -} - -ARM_FUNC u32 GX_DisableBankForBG(){ - return disableBankForX_(&gGXState.bg); -} - -ARM_FUNC u32 GX_DisableBankForOBJ(){ - return disableBankForX_(&gGXState.obj); -} - -ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ - reg_GX_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; - return disableBankForX_(&gGXState.bgExtPltt); -} - -ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ - reg_GX_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; - return disableBankForX_(&gGXState.objExtPltt); -} - -ARM_FUNC u32 GX_DisableBankForTex(){ - return disableBankForX_(&gGXState.tex); -} - -ARM_FUNC u32 GX_DisableBankForTexPltt(){ - return disableBankForX_(&gGXState.texPltt); -} - -ARM_FUNC u32 GX_DisableBankForClearImage(){ - return disableBankForX_(&gGXState.clrImg); -} - -ARM_FUNC u32 GX_DisableBankForARM7(){ - return disableBankForX_(&gGXState.arm7); -} - -ARM_FUNC u32 GX_DisableBankForLCDC(){ - return disableBankForX_(&gGXState.lcdc); -} - -ARM_FUNC u32 GX_DisableBankForSubBG(){ - return disableBankForX_(&gGXState.sub_bg); -} - -ARM_FUNC u32 GX_DisableBankForSubOBJ(){ - return disableBankForX_(&gGXState.sub_obj); -} - -ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ - reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; - return disableBankForX_(&gGXState.sub_bgExtPltt); -} - -ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ - reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; - return disableBankForX_(&gGXState.sub_objExtPltt); -} - -ARM_FUNC u32 GX_GetBankForBG(){ - return gGXState.bg; -} - -ARM_FUNC u32 GX_GetBankForOBJ(){ - return gGXState.obj; -} - -ARM_FUNC u32 GX_GetBankForBGExtPltt(){ - return gGXState.bgExtPltt; -} - -ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ - return gGXState.objExtPltt; -} - -ARM_FUNC u32 GX_GetBankForTex(){ - return gGXState.tex; -} - -ARM_FUNC u32 GX_GetBankForTexPltt(){ - return gGXState.texPltt; -} - -ARM_FUNC u32 GX_GetBankForLCDC(){ - return gGXState.lcdc; -} - -ARM_FUNC u32 GX_GetBankForSubBG(){ - return gGXState.sub_bg; -} - -ARM_FUNC u32 GX_GetBankForSubOBJ(){ - return gGXState.sub_obj; -} - -ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ - return gGXState.sub_bgExtPltt; -} - -ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ - return gGXState.sub_objExtPltt; -} diff --git a/arm9/lib/src/MATH_crc.c b/arm9/lib/src/MATH_crc.c deleted file mode 100644 index cf8cc64c..00000000 --- a/arm9/lib/src/MATH_crc.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "global.h" -#include "MATH_crc.h" - -ARM_FUNC void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly) { - u32 r, i, j; - u8 *t = table->table; - - for (i = 0; i < 256; i++) { - r = i; - for (j = 0; j < 8; j++) { - if (r & 0x80) { - r = (r << 1) ^ poly; - } - else { - r <<= 1; - } - } - t[i] = (u8)r; - } -} - -ARM_FUNC void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length) { - u32 r, i; - const u8* t = table->table; - u8* data = (u8*)input; - - r = *context; - for (i = 0; i < length; i++) { - r = t[(r ^ *data) & 0xff]; - data++; - } - *context = (MATHCRC8Context)r; -} - -ARM_FUNC void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly) { - u32 r, i, j; - u16 *t = table->table; - - for (i = 0; i < 256; i++) { - r = i << 8; - for (j = 0; j < 8; j++) { - if (r & 0x8000) { - r = (r << 1) ^ poly; - } - else { - r <<= 1; - } - } - t[i] = (u16)r; - } -} - -ARM_FUNC void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly) { - u32 r, i, j; - u16 *t = table->table; - - for (i = 0; i < 256; i++) { - r = i; - for (j = 0; j < 8; j++) { - if (r & 1) { - r = (r >> 1) ^ poly; - } - else { - r >>= 1; - } - } - t[i] = (u16)r; - } -} - -ARM_FUNC void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { - u32 r, i; - const u16* t = table->table; - u8* data = (u8*)input; - - r = *context; - for (i = 0; i < length; i++) { - r = (r << 8) ^ t[((r >> 8) ^ *data) & 0xff]; - data++; - } - *context = (MATHCRC16Context)r; -} - -ARM_FUNC void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { - u32 r, i; - const u16* t = table->table; - u8* data = (u8*)input; - - r = *context; - for (i = 0; i < length; i++) { - r = (r >> 8) ^ t[(r ^ *data) & 0xff]; - data++; - } - *context = (MATHCRC16Context)r; -} - -ARM_FUNC void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly) { - u32 r, i, j; - u32 *t = table->table; - - for (i = 0; i < 256; i++) { - r = i; - for (j = 0; j < 8; j++) { - if (r & 1) { - r = (r >> 1) ^ poly; - } - else { - r >>= 1; - } - } - t[i] = r; - } -} - -ARM_FUNC void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length) { - u32 r, i; - const u32* t = table->table; - u8* data = (u8*)input; - - r = *context; - for (i = 0; i < length; i++) { - r = (r >> 8) ^ t[(r ^ *data) & 0xff]; - data++; - } - *context = r; -} - -ARM_FUNC u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength) { - MATHCRC8Context ctx = 0; - MATHi_CRC8Update(table, &ctx, data, dataLength); - return ctx; -} - -ARM_FUNC u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { - MATHCRC16Context ctx = 0; - MATHi_CRC16UpdateRev(table, &ctx, data, dataLength); - return ctx; -} - -ARM_FUNC u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { - MATHCRC16Context ctx = 0xffff; - MATHi_CRC16Update(table, &ctx, data, dataLength); - return ctx; -} - -ARM_FUNC u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength) { - MATHCRC32Context ctx = (MATHCRC32Context)(~0); - MATHi_CRC32UpdateRev(table, &ctx, data, dataLength); - return ~ctx; -} diff --git a/arm9/lib/src/MATH_dgt.c b/arm9/lib/src/MATH_dgt.c deleted file mode 100644 index 6bb90d99..00000000 --- a/arm9/lib/src/MATH_dgt.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "global.h" -#include "MATH_dgt.h" - -ARM_FUNC void MATH_CalcMD5(void *digest, const void *data, u32 dataLength) { - MATHMD5Context context; - MATH_MD5Init(&context); - MATH_MD5Update(&context, data, dataLength); - MATH_MD5GetHash(&context, digest); -} - -ARM_FUNC void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { - MATHSHA1Context context; - MATH_SHA1Init(&context); - MATH_SHA1Update(&context, data, dataLength); - MATH_SHA1GetHash(&context, digest); -} diff --git a/arm9/lib/src/MATH_pop.c b/arm9/lib/src/MATH_pop.c deleted file mode 100644 index 18582494..00000000 --- a/arm9/lib/src/MATH_pop.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" -#include "MATH_pop.h" - -ARM_FUNC u8 MATH_CountPopulation(u32 x) { - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x += x >> 4; - x &= 0x0f0f0f0f; - x += x >> 8; - x += x >> 16; - return (u8)x; -} diff --git a/arm9/lib/src/MI_dma.c b/arm9/lib/src/MI_dma.c deleted file mode 100644 index f322f87f..00000000 --- a/arm9/lib/src/MI_dma.c +++ /dev/null @@ -1,307 +0,0 @@ -#include "MI_dma.h" -#include "function_target.h" -#include "OS_interrupt.h" -#include "OS_terminate_proc.h" -#include "sections.h" - -#pragma section ITCM begin -ARM_FUNC void MIi_DmaSetParams(u32 dmaNo, u32 src, u32 dest, u32 ctrl) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)src; - *(p + 1) = (vu32)dest; - *(p + 2) = (vu32)ctrl; - (void)OS_RestoreInterrupts(lastIntrMode); -} - -ARM_FUNC void MIi_DmaSetParams_wait(u32 dmaNo, u32 src, u32 dest, u32 ctrl) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)src; - *(p + 1) = (vu32)dest; - *(p + 2) = (vu32)ctrl; - - //delay cycles - { - u32 delay = reg_MI_DMA0SAD; - } - { - u32 delay = reg_MI_DMA0SAD; - } - - if (!dmaNo) - { - *p = (vu32)0; - *(p + 1) = (vu32)0; - *(p + 2) = (vu32)0x81400001; - } - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void MIi_DmaSetParams_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl) -{ - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)src; - *(p + 1) = (vu32)dest; - *(p + 2) = (vu32)ctrl; -} - -ARM_FUNC void MIi_DmaSetParams_wait_noInt(u32 dmaNo, u32 src, u32 dest, u32 ctrl) -{ - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)src; - *(p + 1) = (vu32)dest; - *(p + 2) = (vu32)ctrl; - - //delay cycles - { - u32 delay = reg_MI_DMA0SAD; - } - { - u32 delay = reg_MI_DMA0SAD; - } - - if (!dmaNo) - { - *p = (vu32)0; - *(p + 1) = (vu32)0; - *(p + 2) = (vu32)0x81400001; - } - - //delay cycles - { - u32 delay = reg_MI_DMA0SAD; - } - { - u32 delay = reg_MI_DMA0SAD; - } -} -#pragma section ITCM end - -ARM_FUNC void MI_DmaFill32(u32 dmaNo, void *dest, u32 data, u32 size) -{ - vu32 *dmaCntp; - if (!size) - { - return; - } - - do - { - dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - while (*dmaCntp & 0x80000000) {} - } while(0); - - MIi_DmaSetParams_wait_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32(size)); - - do - { - while (*dmaCntp & 0x80000000) {} - } while(0); -} - -ARM_FUNC void MI_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) -{ - vu32 *dmaCntp; - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); - - if (!size) - { - return; - } - - do - { - dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - while (*dmaCntp & 0x80000000) {} - } while(0); - - MIi_DmaSetParams_wait(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32(size)); - - do - { - while (*dmaCntp & 0x80000000) {} - } while(0); -} - -ARM_FUNC void MI_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) -{ - vu32 *dmaCntp; - - if (!size) - { - return; - } - - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); - - do - { - dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - while (*dmaCntp & 0x80000000) {} - } while(0); - - MIi_DmaSetParams_wait(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY16(size)); - - do - { - while (*dmaCntp & 0x80000000) {} - } while(0); -} - -ARM_FUNC void MI_DmaFill32Async(u32 dmaNo, void *dest, u32 data, u32 size, MIDmaCallback callback, void *arg) -{ - if (!size) - { - MIi_CallCallback(callback, arg); - } - else - { - MI_WaitDma(dmaNo); - - if (callback) - { - OSi_EnterDmaCallback(dmaNo, callback, arg); - MIi_DmaSetParams_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32_IF(size)); - } - else - { - MIi_DmaSetParams_src32(dmaNo, data, (u32)dest, MI_CNT_CLEAR32(size)); - } - } -} - -ARM_FUNC void MI_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, MIDmaCallback callback, void *arg) -{ - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, DMA_SRC_INC); - - if (!size) - { - MIi_CallCallback(callback, arg); - } - else - { - MI_WaitDma(dmaNo); - - if (callback) - { - OSi_EnterDmaCallback(dmaNo, callback, arg); - MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32_IF(size)); - } - else - { - MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_COPY32(size)); - } - } -} - -ARM_FUNC void MI_WaitDma(u32 dmaNo) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - vu32 *dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - - while (*dmaCntp & 0x80000000) {} - - if (!dmaNo) - { - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)0; - *(p + 1) = (vu32)0; - *(p + 2) = (vu32)0x81400001; - } - - (void)OS_RestoreInterrupts(lastIntrMode); -} - -ARM_FUNC void MI_StopDma(u32 dmaNo) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - vu16 *dmaCntp = &((vu16 *)REG_ADDR_DMA0SAD)[dmaNo * 6 + 5]; - - *dmaCntp &= ~0x3a00; - *dmaCntp &= ~0x8000; - - //delay cycles - { - s32 delay = dmaCntp[0]; - } - { - s32 delay = dmaCntp[0]; - } - - if (!dmaNo) - { - vu32 *p = (vu32 *)((u32)REG_ADDR_DMA0SAD + dmaNo * 12); - *p = (vu32)0; - *(p + 1) = (vu32)0; - *(p + 2) = (vu32)0x81400001; - } - - (void)OS_RestoreInterrupts(lastIntrMode); -} - -ARM_FUNC void MIi_CheckAnotherAutoDMA(u32 dmaNo, u32 dmaType) -{ - u32 dmaCnt; - u32 timing; - for (int i = 0; i < 3; i++) - { - if (i == dmaNo) continue; - - dmaCnt = *(REGType32v *)(REG_ADDR_DMA0CNT + i * 12); - - if (!(dmaCnt & 0x80000000)) continue; - - timing = dmaCnt & 0x38000000; - - if (timing == dmaType - || (timing == 0x8000000 && dmaType == MI_DMA_TIMING_H_BLANK) - || (timing == MI_DMA_TIMING_H_BLANK && dmaType == 0x8000000)) - { - continue; - } - - if (timing == 0x18000000 - || timing == 0x20000000 - || timing == 0x28000000 - || timing == 0x30000000 - || timing == 0x38000000 - || timing == 0x8000000 - || timing == 0x10000000) - { - OS_Terminate(); - } - } -} - -ARM_FUNC void MIi_CheckDma0SourceAddress(u32 dmaNo, u32 src, u32 size, u32 dir) -{ - if (!dmaNo) - { - u32 addStart = src & 0xff000000; - u32 addEnd; - - switch (dir) - { - case 0: //dma_src_inc - addEnd = src + size; - break; - case 0x800000: //dma_src_dec - addEnd = src - size; - break; - default: - addEnd = src; - break; - } - addEnd &= 0xff000000; - - if (addStart == 0x04000000 || addStart >= 0x08000000 || - addEnd == 0x04000000 || addEnd >= 0x08000000) - { - OS_Terminate(); - } - } -} diff --git a/arm9/lib/src/MI_dma_card.c b/arm9/lib/src/MI_dma_card.c deleted file mode 100644 index c3b8b897..00000000 --- a/arm9/lib/src/MI_dma_card.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "MI_dma_card.h" -#include "MI_dma.h" -#include "function_target.h" - -ARM_FUNC void MIi_CardDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) -{ - MIi_CheckAnotherAutoDMA(dmaNo, MIi_DMA_TIMING_ANY); - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_FIX); - - if (size == 0) - { - return; - } - - vu32 *dmaCntp; - - do - { - dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - while (*dmaCntp & 0x80000000) {} - } while(0); - - MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0xaf000001)); -} diff --git a/arm9/lib/src/MI_dma_gxcommand.c b/arm9/lib/src/MI_dma_gxcommand.c deleted file mode 100644 index 26231999..00000000 --- a/arm9/lib/src/MI_dma_gxcommand.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "MI_dma_gxcommand.h" -#include "function_target.h" -#include "OS_interrupt.h" -#include "OS_reset.h" -#include "sections.h" - -static MIiGXDmaParams MIi_GXDmaParams = { FALSE }; - -static void MIi_FIFOCallback(void); -static void MIi_DMACallback(void *arg); -static void MIi_DMAFastCallback(void *arg); - -#pragma section ITCM begin -ARM_FUNC void MI_SendGXCommand(u32 dmaNo, const void *src, u32 commandLength) -{ - vu32 *dmaCntp; - u32 leftLength = commandLength; - u32 currentSrc = (u32)src; - if (!leftLength) - { - return; - } - - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); - - do - { - dmaCntp = &((vu32 *)REG_ADDR_DMA0SAD)[dmaNo * 3 + 2]; - while (*dmaCntp & 0x80000000) {} - } while(0); - - while (leftLength > 0) - { - u32 length = (leftLength > MIi_GX_LENGTH_ONCE) ? MIi_GX_LENGTH_ONCE : leftLength; - MIi_DmaSetParams(dmaNo, currentSrc, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32(length)); - leftLength -= length; - currentSrc += length; - } - - do - { - while (*dmaCntp & 0x80000000) {} - } while(0); -} -#pragma section ITCM end - -ARM_FUNC void MI_SendGXCommandAsync(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg) -{ - if (!commandLength) - { - MIi_CallCallback(callback, arg); - return; - } - - while (MIi_GXDmaParams.isBusy) {} - - while (!(G3X_GetCommandFifoStatus() & GX_FIFOSTAT_UNDERHALF)) {} - - MIi_GXDmaParams.isBusy = TRUE; - MIi_GXDmaParams.dmaNo = dmaNo; - MIi_GXDmaParams.src = (u32)src; - MIi_GXDmaParams.length = commandLength; - MIi_GXDmaParams.callback = callback; - MIi_GXDmaParams.arg = arg; - - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); - - MI_WaitDma(dmaNo); - { - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - - MIi_GXDmaParams.fifoCond = (GXFifoIntrCond)((reg_G3X_GXSTAT & 0xc0000000) >> 30); - MIi_GXDmaParams.fifoFunc = OS_GetIrqFunction(OS_IE_GXFIFO); - - G3X_SetFifoIntrCond(GX_FIFOINTR_COND_UNDERHALF); - OS_SetIrqFunction(OS_IE_GXFIFO, MIi_FIFOCallback); - (void)OS_EnableIrqMask(OS_IE_GXFIFO); - - MIi_FIFOCallback(); - - (void)OS_RestoreInterrupts(lastIntrMode); - } -} - -ARM_FUNC static void MIi_FIFOCallback(void) -{ - if (!MIi_GXDmaParams.length) - { - return; - } - - u32 length = (MIi_GXDmaParams.length >= MIi_GX_LENGTH_ONCE) ? MIi_GX_LENGTH_ONCE : MIi_GXDmaParams.length; - u32 src = MIi_GXDmaParams.src; - - MIi_GXDmaParams.length -= length; - MIi_GXDmaParams.src += length; - - if (!MIi_GXDmaParams.length) - { - OSi_EnterDmaCallback(MIi_GXDmaParams.dmaNo, MIi_DMACallback, NULL); - MIi_DmaSetParams(MIi_GXDmaParams.dmaNo, src, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32_IF(length)); - (void)OS_ResetRequestIrqMask(OS_IE_GXFIFO); - } - else - { - MIi_DmaSetParams(MIi_GXDmaParams.dmaNo, src, (u32)REG_GXFIFO_ADDR, MI_CNT_SEND32(length)); - (void)OS_ResetRequestIrqMask(OS_IE_GXFIFO); - } -} - -ARM_FUNC static void MIi_DMACallback(void *arg) -{ -#pragma unused(arg) - (void)OS_DisableIrqMask(OS_IE_GXFIFO); - - G3X_SetFifoIntrCond(MIi_GXDmaParams.fifoCond); - OS_SetIrqFunction(OS_IE_GXFIFO, MIi_GXDmaParams.fifoFunc); - - MIi_GXDmaParams.isBusy = FALSE; - - MIi_CallCallback(MIi_GXDmaParams.callback, MIi_GXDmaParams.arg); -} - -ARM_FUNC void MI_SendGXCommandAsyncFast(u32 dmaNo, const void *src, u32 commandLength, MIDmaCallback callback, void *arg) -{ - if (!commandLength) - { - MIi_CallCallback(callback, arg); - return; - } - - while (MIi_GXDmaParams.isBusy) {} - - MIi_GXDmaParams.isBusy = TRUE; - MIi_GXDmaParams.dmaNo = dmaNo; - MIi_GXDmaParams.callback = callback; - MIi_GXDmaParams.arg = arg; - - MIi_CheckAnotherAutoDMA(dmaNo, 0x38000000); - - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, commandLength, DMA_SRC_INC); - - MI_WaitDma(dmaNo); - - OSi_EnterDmaCallback(dmaNo, MIi_DMAFastCallback, NULL); - MIi_DmaSetParams(dmaNo, (u32)src, (u32)REG_GXFIFO_ADDR, MI_CNT_GXCOPY_IF(commandLength)); -} - -ARM_FUNC static void MIi_DMAFastCallback(void *arg) -{ -#pragma unused(arg) - MIi_GXDmaParams.isBusy = FALSE; - - MIi_CallCallback(MIi_GXDmaParams.callback, MIi_GXDmaParams.arg); -} diff --git a/arm9/lib/src/MI_dma_hblank.c b/arm9/lib/src/MI_dma_hblank.c deleted file mode 100644 index 67e579fe..00000000 --- a/arm9/lib/src/MI_dma_hblank.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "MI_dma_hblank.h" -#include "MI_dma.h" -#include "function_target.h" - -ARM_FUNC void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) -{ - MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK); - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC); - - if (size == 0) - { - return; - } - - MI_WaitDma(dmaNo); - MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x96600000 | (size / 4))); -} - -ARM_FUNC void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) -{ - MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK); - MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC); - - if (size == 0) - { - return; - } - - MI_WaitDma(dmaNo); - MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x92600000 | (size / 2))); -} diff --git a/arm9/lib/src/MI_init.c b/arm9/lib/src/MI_init.c deleted file mode 100644 index 4c861286..00000000 --- a/arm9/lib/src/MI_init.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "MI_init.h" -#include "nitro/types.h" -#include "function_target.h" -#include "MI_dma.h" -#include "MI_wram.h" - -ARM_FUNC void MI_Init(void) -{ - MI_SetWramBank(MI_WRAM_ARM7_ALL); - MI_StopDma(0); -} diff --git a/arm9/lib/src/MI_memory.c b/arm9/lib/src/MI_memory.c deleted file mode 100644 index a97ff167..00000000 --- a/arm9/lib/src/MI_memory.c +++ /dev/null @@ -1,339 +0,0 @@ -#include "MI_memory.h" -#include "function_target.h" - -ARM_FUNC asm void MIi_CpuClear16(register u16 data, register void *destp, register u32 size) -{ - mov r3, #0 - -_020CE1CC: - cmp r3, r2 - strlth r0, [r1, r3] - addlt r3, r3, #2 - blt _020CE1CC - - bx lr -} - -ARM_FUNC asm void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size) -{ - mov r12, #0 - -_020CE1CC: - cmp r12, r2 - ldrlth r3, [r0, r12] - strlth r3, [r1, r12] - addlt r12, r12, #2 - blt _020CE1CC - - bx lr -} - -ARM_FUNC asm void MIi_CpuClear32(register u32 data, register void *destp, register u32 size) -{ - add r12, r1, r2 - -_020CE200: - cmp r1, r12 - stmltia r1!, {r0} - blt _020CE200 - bx lr -} - -ARM_FUNC asm void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size) -{ - add r12, r1, r2 - -_020CE214: - cmp r1, r12 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE214 - bx lr -} - -ARM_FUNC asm void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size) -{ - add r12, r0, r2 - -_020CE22C: - cmp r0, r12 - ldmltia r0!, {r2} - strlt r2, [r1] - blt _020CE22C - - bx lr -} - -ARM_FUNC asm void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size) -{ - stmfd sp!, {r4-r9} - - add r9, r1, r2 - mov r12, r2, lsr #5 - add r12, r1, r12, lsl #5 - - mov r2, r0 - mov r3, r2 - mov r4, r2 - mov r5, r2 - mov r6, r2 - mov r7, r2 - mov r8, r2 - -_020CE26C: - cmp r1, r12 - stmltia r1!, {r0, r2-r8} - blt _020CE26C -_020CE278: - cmp r1, r9 - stmltia r1!, {r0} - blt _020CE278 - - ldmfd sp!, {r4-r9} - bx lr -} - -ARM_FUNC asm void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size) -{ - stmfd sp!, {r4-r10} - - add r10, r1, r2 - mov r12, r2, lsr #5 - add r12, r1, r12, lsl #5 - -_020CE29C: - cmp r1, r12 - ldmltia r0!, {r2-r9} - stmltia r1!, {r2-r9} - blt _020CE29C -_020CE2AC: - cmp r1, r10 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE2AC - - ldmfd sp!, {r4-r10} - bx lr -} - -ARM_FUNC asm void MI_Copy32B(register const void *pSrc, register void *pDest) -{ - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3} - stmia r1!, {r2, r3} - - bx lr -} - -ARM_FUNC asm void MI_Copy36B(register const void *pSrc, register void *pDest) -{ - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - - bx lr -} - -ARM_FUNC asm void MI_Copy48B(register const void *pSrc, register void *pDest) -{ - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - - bx lr -} - -ARM_FUNC asm void MI_Copy64B(register const void *pSrc, register void *pDest) -{ - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0!, {r2, r3, r12} - stmia r1!, {r2, r3, r12} - ldmia r0, {r0, r2, r3, r12} - stmia r1!, {r0, r2, r3, r12} - - bx lr -} - -ARM_FUNC asm void MI_CpuFill8(register void *dstp, register u8 data, register u32 size) -{ - cmp r2, #0 - bxeq lr - - tst r0, #1 - beq _020CE378 - ldrh r12, [r0, #-1] - and r12, r12, #0x00ff - orr r3, r12, r1, lsl #8 - strh r3, [r0, #-1] - add r0, r0, #1 - subs r2, r2, #1 - bxeq lr - -_020CE378: - cmp r2, #2 - bcc _020CE3C0 - orr r1, r1, r1, lsl #8 - tst r0, #2 - beq _020CE398 - strh r1, [r0], #2 - subs r2, r2, #2 - bxeq lr - -_020CE398: - orr r1, r1, r1, lsl #16 - bics r3, r2, #3 - beq _020CE3B8 - sub r2, r2, r3 - add r12, r3, r0 - -_020CE3AC: - str r1, [r0], #4 - cmp r0, r12 - bcc _020CE3AC - -_020CE3B8: - tst r2, #2 - strneh r1, [r0], #2 - -_020CE3C0: - tst r2, #1 - bxeq lr - ldrh r3, [r0] - and r3, r3, #0xff00 - and r1, r1, #0x00ff - orr r1, r1, r3 - strh r1, [r0] - bx lr -} - -ARM_FUNC asm void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size) -{ - cmp r2, #0 - bxeq lr - - tst r1, #1 - beq _020CE420 - ldrh r12, [r1, #-1] - and r12, r12, #0x00ff - tst r0, #1 - ldrneh r3, [r0, #-1] - movne r3, r3, lsr #8 - ldreqh r3, [r0] - orr r3, r12, r3, lsl #8 - strh r3, [r1, #-1] - add r0, r0, #1 - add r1, r1, #1 - subs r2, r2, #1 - bxeq lr - -_020CE420: - eor r12, r1, r0 - tst r12, #1 - beq _020CE474 - - bic r0, r0, #1 - ldrh r12, [r0], #2 - mov r3, r12, lsr #8 - subs r2, r2, #2 - bcc _020CE458 - -_020CE440: - ldrh r12, [r0], #2 - orr r12, r3, r12, lsl #8 - strh r12, [r1], #2 - mov r3, r12, lsr #16 - subs r2, r2, #2 - bcs _020CE440 - -_020CE458: - tst r2, #1 - bxeq lr - ldrh r12, [r1] - and r12, r12, #0xff00 - orr r12, r12, r3 - strh r12, [r1] - bx lr - -_020CE474: - tst r12, #2 - beq _020CE4A0 - - bics r3, r2, #1 - beq _020CE4EC - sub r2, r2, r3 - add r12, r3, r1 - -_020CE48C: - ldrh r3, [r0], #2 - strh r3, [r1], #2 - cmp r1, r12 - bcc _020CE48C - b _020CE4EC - -_020CE4A0: - cmp r2, #2 - bcc _020CE4EC - tst r1, #2 - beq _020CE4C0 - ldrh r3, [r0], #2 - strh r3, [r1], #2 - subs r2, r2, #2 - bxeq lr - -_020CE4C0: - bics r3, r2, #3 - beq _020CE4E0 - sub r2, r2, r3 - add r12, r3, r1 - -_020CE4D0: - ldr r3, [r0], #4 - str r3, [r1], #4 - cmp r1, r12 - bcc _020CE4D0 - -_020CE4E0: - tst r2, #2 - ldrneh r3, [r0], #2 - strneh r3, [r1], #2 - -_020CE4EC: - tst r2, #1 - bxeq lr - ldrh r2, [r1] - ldrh r0, [r0] - and r2, r2, #0xff00 - and r0, r0, #0x00ff - orr r0, r2, r0 - strh r0, [r1] - - bx lr -} - -THUMB_FUNC asm void MI_Zero36B(register void *pDest) -{ - mov r1, #0 - mov r2, #0 - mov r3, #0 - stmia r0!, {r1, r2, r3} - stmia r0!, {r1, r2, r3} - stmia r0!, {r1, r2, r3} - - bx lr -} diff --git a/arm9/lib/src/MI_swap.c b/arm9/lib/src/MI_swap.c deleted file mode 100644 index b72e1386..00000000 --- a/arm9/lib/src/MI_swap.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "global.h" -#include "MI_swap.h" - -/* - * Exchange 32 bits of data between register and memory. - * - * The SDK also defines an 8-bit version of this routine, - * but it is not linked in pokediamond. - */ - -asm -u32 MI_SwapWord(register u32 setData, register vu32 * destp) -{ - swp setData, setData, [destp] - bx lr -} diff --git a/arm9/lib/src/MI_uncompress.c b/arm9/lib/src/MI_uncompress.c deleted file mode 100644 index c6ad7e4e..00000000 --- a/arm9/lib/src/MI_uncompress.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "function_target.h" -#include "MI_uncompress.h" - -ARM_FUNC asm void MI_UncompressLZ8(register const void *srcp, register void *destp) -{ - stmfd sp!, {r4-r6, lr} - - ldr r5, [r0], #4 - mov r2, r5, lsr #8 - -_020CE534: - cmp r2, #0 - ble _020CE5B4 - - ldrb lr, [r0], #1 - mov r4, #8 - -_020CE544: - subs r4, r4, #1 - blt _020CE534 - - tst lr, #0x80 - bne _020CE568 - - ldrb r6, [r0], #1 - swpb r6, r6, [r1] - add r1, r1, #1 - sub r2, r2, #1 - b _020CE5A4 - -_020CE568: - ldrb r5, [r0, #0] - mov r6, #3 - add r3, r6, r5, asr #4 - ldrb r6, [r0], #1 - and r5, r6, #0xf - mov r12, r5, lsl #8 - ldrb r6, [r0], #1 - orr r5, r6, r12 - add r12, r5, #1 - sub r2, r2, r3 - -_020CE590: - ldrb r5, [r1, -r12] - swpb r5, r5, [r1] - add r1, r1, #1 - subs r3, r3, #1 - bgt _020CE590 - -_020CE5A4: - cmp r2, #0 - movgt lr, lr, lsl #1 - bgt _020CE544 - b _020CE534 - -_020CE5B4: - ldmfd sp!, {r4-r6, lr} - bx lr -} diff --git a/arm9/lib/src/MI_wram.c b/arm9/lib/src/MI_wram.c deleted file mode 100644 index c1433f07..00000000 --- a/arm9/lib/src/MI_wram.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "MI_wram.h" - -#include "global.h" -#include "registers.h" - -ARM_FUNC void MI_SetWramBank(MIWram cnt) -{ - reg_GX_VRAMCNT_WRAM = (u8)cnt; -} diff --git a/arm9/lib/src/MSL_Common_arith.c b/arm9/lib/src/MSL_Common_arith.c deleted file mode 100644 index d4a2e834..00000000 --- a/arm9/lib/src/MSL_Common_arith.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "MSL_Common_arith.h" -#include "function_target.h" - -ARM_FUNC s32 abs(s32 val) -{ - return val < 0 ? -val : val; -} diff --git a/arm9/lib/src/OS_alarm.c b/arm9/lib/src/OS_alarm.c deleted file mode 100644 index a8c1fedd..00000000 --- a/arm9/lib/src/OS_alarm.c +++ /dev/null @@ -1,254 +0,0 @@ -#include "function_target.h" -#include "consts.h" -#include "OS_alarm.h" -#include "OS_interrupt.h" -#include "OS_irqTable.h" -#include "OS_terminate_proc.h" -#include "OS_system.h" - -static struct OSiAlarmQueue OSi_AlarmQueue; - -static u16 OSi_UseAlarm = FALSE; - -static void OSi_SetTimer(OSAlarm *alarm); -static void OSi_InsertAlarm(OSAlarm *alarm, OSTick fire); -static void OSi_ArrangeTimer(void); - -ARM_FUNC static void OSi_SetTimer(OSAlarm *alarm) -{ - OSTick tick = OS_GetTick(); - - OS_SetTimerControl(OS_TIMER_1, 0); - - s64 delta = (s64)(alarm->fire - tick); - - OSi_EnterTimerCallback(OS_TIMER_1, OSi_AlarmHandler, NULL); - - u16 timerCount; - if (delta < 0) - { - timerCount = (u16)~1; - } - else if (delta < 0x10000) - { - timerCount = (u16)(~delta); - } - else - { - timerCount = 0; - } - - OS_SetTimerCount((OSTimer)OS_TIMER_1, timerCount); - OS_SetTimerControl(OS_TIMER_1, (u16)OSi_TICK_TIMERCONTROL); - - (void)OS_EnableIrqMask(OS_IE_TIMER1); -} - -ARM_FUNC void OS_InitAlarm(void) -{ - if (!OSi_UseAlarm) - { - OSi_UseAlarm = TRUE; - - OSi_SetTimerReserved(OS_TIMER_1); - - OSi_AlarmQueue.head = NULL; - OSi_AlarmQueue.tail = NULL; - - (void)OS_DisableIrqMask(OS_IE_TIMER1); - } -} - -ARM_FUNC BOOL OS_IsAlarmAvailable(void) -{ - return OSi_UseAlarm; -} - -ARM_FUNC void OS_CreateAlarm(OSAlarm *alarm) -{ - alarm->handler = 0; - alarm->tag = 0; -} - -ARM_FUNC static void OSi_InsertAlarm(OSAlarm *alarm, OSTick fire) -{ - if (alarm->period > 0) - { - OSTick tick = OS_GetTick(); - - fire = alarm->start; - if (alarm->start < tick) - { - fire += alarm->period * ((tick - alarm->start) / alarm->period + 1); - } - } - - alarm->fire = fire; - - OSAlarm *prev; - OSAlarm *next; - - for (next = OSi_AlarmQueue.head; next; next = next->next) - { - if ((s64)(fire - next->fire) >= 0) - { - continue; - } - - alarm->prev = next->prev; - next->prev = alarm; - alarm->next = next; - prev = alarm->prev; - if (prev) - { - prev->next = alarm; - } - else - { - OSi_AlarmQueue.head = alarm; - OSi_SetTimer(alarm); - } - - return; - } - - alarm->next = 0; - prev = OSi_AlarmQueue.tail; - OSi_AlarmQueue.tail = alarm; - alarm->prev = prev; - if (prev) - { - prev->next = alarm; - } - else - { - OSi_AlarmQueue.head = OSi_AlarmQueue.tail = alarm; - OSi_SetTimer(alarm); - } -} - -ARM_FUNC void OS_SetAlarm(OSAlarm * alarm, OSTick tick, OSAlarmHandler handler, void *arg) -{ - if (!alarm || alarm->handler) - { - OS_Terminate(); - } - - OSIntrMode enabled = OS_DisableInterrupts(); - - alarm->period = 0; - - alarm->handler = handler; - alarm->arg = arg; - - OSi_InsertAlarm(alarm, OS_GetTick() + tick); - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void OS_CancelAlarm(OSAlarm *alarm) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (!alarm->handler) - { - (void)OS_RestoreInterrupts(enabled); - return; - } - - OSAlarm *next = alarm->next; - - if (!next) - { - OSi_AlarmQueue.tail = alarm->prev; - } - else - { - next->prev = alarm->prev; - } - - if (alarm->prev) - { - alarm->prev->next = next; - } - else - { - OSi_AlarmQueue.head = next; - if (next) - { - OSi_SetTimer(next); - } - } - - alarm->handler = NULL; - alarm->period = 0; - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC asm void OSi_AlarmHandler(void *arg) -{ - stmfd sp!, {r0, lr} - bl OSi_ArrangeTimer - ldmfd sp!, {r0, lr} - bx lr -} - -ARM_FUNC static void OSi_ArrangeTimer(void) -{ - OS_SetTimerControl(OS_TIMER_1, 0); - - (void)OS_DisableIrqMask(OS_IE_TIMER1); - - OS_SetIrqCheckFlag(OS_IE_TIMER1); - - OSTick tick = OS_GetTick(); - - OSAlarm *alarm = OSi_AlarmQueue.head; - - if (!alarm) - { - return; - } - - if (tick < alarm->fire) - { - OSi_SetTimer(alarm); - return; - } - - OSAlarm *next = alarm->next; - OSi_AlarmQueue.head = next; - - if (!next) - { - OSi_AlarmQueue.tail = NULL; - } - else - { - next->prev = NULL; - } - - OSAlarmHandler handler = alarm->handler; - - if (!alarm->period) - { - alarm->handler = NULL; - } - - if (handler) - { - (handler)(alarm->arg); - } - - if (alarm->period > 0) - { - alarm->handler = handler; - OSi_InsertAlarm(alarm, 0); - } - - if (OSi_AlarmQueue.head) - { - OSi_SetTimer(OSi_AlarmQueue.head); - } -} diff --git a/arm9/lib/src/OS_alloc.c b/arm9/lib/src/OS_alloc.c deleted file mode 100644 index 00028d3c..00000000 --- a/arm9/lib/src/OS_alloc.c +++ /dev/null @@ -1,167 +0,0 @@ -// -// Created by mart on 4/23/20. -// -#include "function_target.h" -#include "OS_alloc.h" -#include "consts.h" -#include "OS_system.h" - -void* OSiHeapInfo[OS_ARENA_MAX]; - -ARM_FUNC Cell* DLAddFront(Cell* list, Cell* cell) -{ - cell->next = list; - cell->prev = NULL; - - if (list != NULL) - list->prev = cell; - return cell; -} - -ARM_FUNC Cell* DLExtract(Cell* list, Cell* cell) -{ - if (cell->next) { - cell->next->prev = cell->prev; - } - if (cell->prev == NULL) { - list = cell->next; - } else { - cell->prev->next = cell->next; - } - return list; -} - -ARM_FUNC Cell *DLInsert(Cell *original, Cell *inserted) -{ - Cell *prevCell = NULL; - Cell *nextCell = original; - - - for (nextCell = original, prevCell = NULL; nextCell; prevCell = nextCell, nextCell = nextCell->next) - { - if (inserted <= nextCell) - break; - } - - inserted->next = nextCell; - inserted->prev = prevCell; - - if (nextCell != NULL) - { - nextCell->prev = inserted; - Cell * temp = (Cell *)((char *)inserted + inserted->size); - if (temp == nextCell) - { - inserted->size += nextCell->size; - nextCell = nextCell->next; - inserted->next = nextCell; - if (nextCell != NULL) - nextCell->prev = inserted; - } - } - - if (prevCell != NULL) - { - prevCell->next = inserted; - Cell * temp = (Cell *)((char *)prevCell + prevCell->size); - - if (temp != inserted) - return original; - - prevCell->size += inserted->size; - prevCell->next = nextCell; - if (nextCell != NULL) - nextCell->prev = prevCell; - - return original; - } - - return inserted; -} - -#define HEADERSIZE OSi_ROUND(sizeof(Cell), 32) -#define MINOBJSIZE (HEADERSIZE+32) - -ARM_FUNC void* OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size) { - OSHeapInfo* heapInfo; - HeapDesc* hd; - Cell* cell; - Cell* newCell; - long leftoverSize; - - OSIntrMode enabled = OS_DisableInterrupts(); - heapInfo = OSiHeapInfo[id]; - if (!heapInfo) { - (void)OS_RestoreInterrupts(enabled); - return NULL; - } - - if (heap < 0) { - heap = heapInfo->currentHeap; - } - - hd = &heapInfo->heapArray[heap]; - - size += HEADERSIZE; - size = OSi_ROUND(size, 32); - - for (cell = hd->free; cell != NULL; cell = cell->next) { - if ((long)size <= cell->size) { - break; - } - } - - if (cell == NULL) { - (void)OS_RestoreInterrupts(enabled); - return NULL; - } - - leftoverSize = cell->size - (long)size; - if (leftoverSize < MINOBJSIZE) { - hd->free = DLExtract(hd->free, cell); - } else { - cell->size = (long)size; - - newCell = (Cell *) ((char *)cell + size); - newCell->size = leftoverSize; - - newCell->prev = cell->prev; - newCell->next = cell->next; - - if (newCell->next != NULL) { - newCell->next->prev = newCell; - } - - if (newCell->prev != NULL) { - newCell->prev->next = newCell; - } else { - hd->free = newCell; - } - } - - hd->allocated = DLAddFront(hd->allocated, cell); - - (void)OS_RestoreInterrupts(enabled); - return (void *)((char *)cell + HEADERSIZE); -} - -ARM_FUNC void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void* ptr) { - OSHeapInfo *heapInfo; - HeapDesc *hd; - Cell *cell; - - OSIntrMode enabled = OS_DisableInterrupts(); - heapInfo = OSiHeapInfo[id]; - - if (heap < 0) { - heap = heapInfo->currentHeap; - } - - cell = (Cell *) ((char *)ptr - HEADERSIZE); - hd = &heapInfo->heapArray[heap]; - - hd->allocated = DLExtract(hd->allocated, cell); - hd->free = DLInsert(hd->free, cell); - - (void)OS_RestoreInterrupts(enabled); -} diff --git a/arm9/lib/src/OS_arena.c b/arm9/lib/src/OS_arena.c deleted file mode 100644 index de7cb9fe..00000000 --- a/arm9/lib/src/OS_arena.c +++ /dev/null @@ -1,168 +0,0 @@ -#include "OS_arena.h" - -#include "global.h" -#include "OS_protectionRegion.h" -#include "OS_emulator.h" -#include "mmap.h" - -static BOOL OSi_Initialized = FALSE; -static BOOL OSi_MainExArenaEnabled = FALSE; - -void SDK_MAIN_ARENA_LO(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_EX_START(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_ITCM_START(); // TODO: technically this should be defined in the lcf -extern void SDK_SECTION_ARENA_DTCM_START(); // TODO: technically this should be defined in the lcf -extern void SDK_IRQ_STACKSIZE(); // TODO: technically this should be defined in the lcf -extern void SDK_SYS_STACKSIZE(); // TODO: technically this should be defined in the lcf - -ARM_FUNC void OS_InitArena(void) { - if (OSi_Initialized) { - return; - } - OSi_Initialized = TRUE; - - OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); - OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); - - OS_SetArenaLo(OS_ARENA_MAINEX, (void *)0); - OS_SetArenaHi(OS_ARENA_MAINEX, (void *)0); - - OS_SetArenaHi(OS_ARENA_ITCM, OS_GetInitArenaHi(OS_ARENA_ITCM)); - OS_SetArenaLo(OS_ARENA_ITCM, OS_GetInitArenaLo(OS_ARENA_ITCM)); - - OS_SetArenaHi(OS_ARENA_DTCM, OS_GetInitArenaHi(OS_ARENA_DTCM)); - OS_SetArenaLo(OS_ARENA_DTCM, OS_GetInitArenaLo(OS_ARENA_DTCM)); - - OS_SetArenaHi(OS_ARENA_SHARED, OS_GetInitArenaHi(OS_ARENA_SHARED)); - OS_SetArenaLo(OS_ARENA_SHARED, OS_GetInitArenaLo(OS_ARENA_SHARED)); - - OS_SetArenaHi(OS_ARENA_WRAM_MAIN, OS_GetInitArenaHi(OS_ARENA_WRAM_MAIN)); - OS_SetArenaLo(OS_ARENA_WRAM_MAIN, OS_GetInitArenaLo(OS_ARENA_WRAM_MAIN)); -} - -ARM_FUNC void OS_InitArenaEx(void) { - OS_SetArenaHi(OS_ARENA_MAINEX, OS_GetInitArenaHi(OS_ARENA_MAINEX)); - OS_SetArenaLo(OS_ARENA_MAINEX, OS_GetInitArenaLo(OS_ARENA_MAINEX)); - - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - OS_SetProtectionRegion(1, HW_MAIN_MEM, 4MB); - OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 128KB); - } -} - -ARM_FUNC void* OS_GetArenaHi(OSArenaId id) { - return OSi_GetArenaInfo().hi[id]; -} - -ARM_FUNC void* OS_GetArenaLo(OSArenaId id) { - return OSi_GetArenaInfo().lo[id]; -} - -ARM_FUNC void* OS_GetInitArenaHi(OSArenaId id) { - switch (id) { - case OS_ARENA_MAIN: - return (void *)OSi_MAIN_ARENA_HI_DEFAULT; - case OS_ARENA_MAINEX: - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - return (void *)0; - } else { - return (void *)OSi_MAINEX_ARENA_HI_DEFAULT; - } - case OS_ARENA_ITCM: - return (void *)HW_ITCM_ARENA_HI_DEFAULT; - case OS_ARENA_DTCM: - { - u32 irqStackLo = (u32) HW_DTCM_IRQ_STACK_END - (s32) SDK_IRQ_STACKSIZE; - u32 sysStackLo; - - if (!(s32) SDK_SYS_STACKSIZE) { - sysStackLo = HW_DTCM; - if (sysStackLo < (u32) SDK_SECTION_ARENA_DTCM_START) { - sysStackLo = (u32) SDK_SECTION_ARENA_DTCM_START; - } - } else if ((s32) SDK_SYS_STACKSIZE < 0) { - sysStackLo = (u32) SDK_SECTION_ARENA_DTCM_START - (s32) SDK_SYS_STACKSIZE; - } else { - sysStackLo = irqStackLo - (s32) SDK_SYS_STACKSIZE; - } - return (void *) sysStackLo; - } - case OS_ARENA_SHARED: - return (void *)HW_SHARED_ARENA_HI_DEFAULT; - case OS_ARENA_WRAM_MAIN: - return (void *)OSi_WRAM_MAIN_ARENA_HI_DEFAULT; - default: - return NULL; - } -} - -ARM_FUNC void* OS_GetInitArenaLo(OSArenaId id) { - switch (id) { - case OS_ARENA_MAIN: - return (void *)SDK_MAIN_ARENA_LO; - case OS_ARENA_MAINEX: - if (!OSi_MainExArenaEnabled || (OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB) { - return NULL; - } else { - return (void *)SDK_SECTION_ARENA_EX_START; - } - case OS_ARENA_ITCM: - return (void *)SDK_SECTION_ARENA_ITCM_START; - case OS_ARENA_DTCM: - return (void *)SDK_SECTION_ARENA_DTCM_START; - case OS_ARENA_SHARED: - return (void *)HW_SHARED_ARENA_LO_DEFAULT; - case OS_ARENA_WRAM_MAIN: - return (void *)OSi_WRAM_MAIN_ARENA_LO_DEFAULT; - default: - return NULL; - } -} - -ARM_FUNC void OS_SetArenaHi(OSArenaId id, void* newHi) { - OSi_GetArenaInfo().hi[id] = newHi; -} - -ARM_FUNC void OS_SetArenaLo(OSArenaId id, void* newLo) { - OSi_GetArenaInfo().lo[id] = newLo; -} - -ARM_FUNC void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align) { - void* ptr; - u8* arenaLo; - ptr = OS_GetArenaLo(id); - if (!ptr) { - return NULL; - } - arenaLo = ptr = (void *)OSi_ROUND(ptr, align); - arenaLo += size; - arenaLo = (u8 *)OSi_ROUND(arenaLo, align); - if (arenaLo > (u8*)OS_GetArenaHi(id)) { - return NULL; - } - OS_SetArenaLo(id, arenaLo); - - return ptr; -} - -ARM_FUNC void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align) { - void* ptr; - u8* arenaHi; - - arenaHi = OS_GetArenaHi(id); - if (!arenaHi) { - return NULL; - } - - arenaHi = (u8 *)OSi_TRUNC(arenaHi, align); - arenaHi -= size; - arenaHi = ptr = (void *)OSi_TRUNC(arenaHi, align); - - if (arenaHi < (u8*)OS_GetArenaLo(id)) { - return NULL; - } - - OS_SetArenaHi(id, arenaHi); - - return ptr; -} diff --git a/arm9/lib/src/OS_cache.c b/arm9/lib/src/OS_cache.c deleted file mode 100644 index 8b202fda..00000000 --- a/arm9/lib/src/OS_cache.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "OS_cache.h" -#include "nitro/types.h" -#include "function_target.h" - -ARM_FUNC asm void DC_InvalidateAll(void) -{ - mov r0, #0 - mcr p15, 0, r0, c7, c6, 0 //Invalidate Entire Data Cache - bx lr -} - -ARM_FUNC asm void DC_StoreAll(void) -{ - mov r1, #0 - -_020CC0C8: - mov r0, #0 - -_020CC0CC: - orr r2, r1, r0 - mcr p15, 0, r2, c7, c10, 2 //Clean Data Cache Line Set/Index - add r0, r0, #32 - cmp r0, #0x400 - blt _020CC0CC - - add r1, r1, #0x40000000 - cmp r1, #0 - bne _020CC0C8 - - bx lr -} - -ARM_FUNC asm void DC_FlushAll(void) -{ - mov r12, #0 - mov r1, #0 - -_020CC0F8: - mov r0, #0 - -_020CC0FC: - orr r2, r1, r0 - mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer - mcr p15, 0, r2, c7, c14, 2 //Clean and Invalidate Data Cache Line Set/Index - add r0, r0, #32 - cmp r0, #0x400 - blt _020CC0FC - - add r1, r1, #0x40000000 - cmp r1, #0 - bne _020CC0F8 - - bx lr -} - -ARM_FUNC asm void DC_InvalidateRange(register void *startAddr, register u32 nBytes) -{ - add r1, r1, r0 - bic r0, r0, #31 - -_020CC12C: - mcr p15, 0, r0, c7, c6, 1 //Invalidated Data Cache Line Virtual Address - add r0, r0, #32 - cmp r0, r1 - blt _020CC12C - - bx lr -} - -ARM_FUNC asm void DC_StoreRange(register void *startAddr, register u32 nBytes) -{ - add r1, r1, r0 - bic r0, r0, #31 - -_020CC148: - mcr p15, 0, r0, c7, c10, 1 //Clean Data Cache Line Virtual Address - add r0, r0, #32 - cmp r0, r1 - blt _020CC148 - - bx lr -} - -ARM_FUNC asm void DC_FlushRange(register const void *startAddr, register u32 nBytes) -{ - mov r12, #0 - add r1, r1, r0 - bic r0, r0, #31 - -_020CC168: - mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer - mcr p15, 0, r0, c7, c14, 1 //Clean and Invalidate Data Cache Line Virtual Address - add r0, r0, #32 - cmp r0, r1 - blt _020CC168 - - bx lr -} - -ARM_FUNC asm void DC_WaitWriteBufferEmpty(void) -{ - mov r0, #0 - mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer - bx lr -} - -ARM_FUNC asm void IC_InvalidateAll(void) -{ - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 //Invalidate Entire Instruction Cache - bx lr -} - -ARM_FUNC asm void IC_InvalidateRange(register void *startAddr, register u32 nBytes) -{ - add r1, r1, r0 - bic r0, r0, #31 - -_020CC1A0: - mcr p15, 0, r0, c7, c5, 1 //Invalidate Instruction Cache Line Virtual Address - add r0, r0, #32 - cmp r0, r1 - blt _020CC1A0 - - bx lr -} diff --git a/arm9/lib/src/OS_context.c b/arm9/lib/src/OS_context.c deleted file mode 100644 index 38b722ba..00000000 --- a/arm9/lib/src/OS_context.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "OS_context.h" -#include "consts.h" -#include "function_target.h" - -ARM_FUNC asm void OS_InitContext(register OSContext *context, register u32 newpc, register u32 newsp) -{ - add newpc, newpc, #4 - str newpc, [context, #0x40] - - str newsp, [context, #0x44] - sub newsp, newsp, #HW_SVC_STACK_SIZE - - tst newsp, #4 - subne newsp, newsp, #4 - str newsp, [context, #0x38] - - ands r1, newpc, #1 - movne r1, #0x3f - moveq r1, #0x1f - str r1, [context] - - mov r1, #0 - str r1, [context, #0x4] - str r1, [context, #0x8] - str r1, [context, #0xc] - str r1, [context, #0x10] - str r1, [context, #0x14] - str r1, [context, #0x18] - str r1, [context, #0x1c] - str r1, [context, #0x20] - str r1, [context, #0x24] - str r1, [context, #0x28] - str r1, [context, #0x2c] - str r1, [context, #0x30] - str r1, [context, #0x34] - str r1, [context, #0x3c] - - bx lr -} - -ARM_FUNC asm BOOL OS_SaveContext(register OSContext* context) -{ - stmfd sp!, {lr, r0} - add r0, r0, #0x48 - ldr r1, =CP_SaveContext - blx r1 - ldmfd sp!, {lr, r0} - - add r1, r0, #0 - - mrs r2, cpsr - str r2, [r1], #0x4 - - mov r0, #0xd3 - msr cpsr_c, r0 - str sp, [r1, #0x40] - msr cpsr_c, r2 - - mov r0, #1 - stmia r1, {r0-r14} - add r0, pc, #8 - str r0, [r1, #0x3c] - - mov r0, #0 - bx lr -} - -ARM_FUNC asm void OS_LoadContext(register OSContext* context) -{ - stmfd sp!, {lr, r0} - add r0, r0, #0x48 - - ldr r1, =CPi_RestoreContext - blx r1 - ldmfd sp!, {lr, r0} - - mrs r1, cpsr - bic r1, r1, #HW_PSR_CPU_MODE_MASK - orr r1, r1, #0xd3 - msr cpsr_c, r1 - - ldr r1, [r0], #0x4 - msr spsr_fsxc, r1 - - ldr sp, [r0, #0x40] - - ldr lr, [r0, #0x3c] - ldmia r0, {r0-r14}^ - nop - - subs pc, lr, #4 -} diff --git a/arm9/lib/src/OS_emulator.c b/arm9/lib/src/OS_emulator.c deleted file mode 100644 index e92a7d9d..00000000 --- a/arm9/lib/src/OS_emulator.c +++ /dev/null @@ -1,18 +0,0 @@ -// -// Created by red031000 on 2020-05-05. -// - -#include "OS_emulator.h" -#include "function_target.h" - -u32 OSi_ConsoleTypeCache = -1u; - -ARM_FUNC BOOL OS_IsRunOnEmulator(void) { - return FALSE; -} - -ARM_FUNC u32 OS_GetConsoleType(void) { - OSi_ConsoleTypeCache = OS_CONSOLE_NITRO | OS_CONSOLE_DEV_CARD | OS_CONSOLE_SIZE_4MB; - - return OSi_ConsoleTypeCache; -} diff --git a/arm9/lib/src/OS_entropy.c b/arm9/lib/src/OS_entropy.c deleted file mode 100644 index 5d466f82..00000000 --- a/arm9/lib/src/OS_entropy.c +++ /dev/null @@ -1,25 +0,0 @@ -// -// Created by red031000 on 2020-05-03. -// - -#include "OS_entropy.h" - -#include "global.h" -#include "registers.h" -#include "systemWork.h" -#include "userInfo.h" - -ARM_FUNC void OS_GetLowEntropyData(u32 * arr) -{ - const OSSystemWork* work = OS_GetSystemWork(); - const u8 * macAddress = (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~3)); - arr[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo()); - arr[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter); - arr[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount; - arr[2] ^= reg_G3X_GXSTAT; - arr[3] = *(u32 *)(&work->real_time_clock[0]); - arr[4] = *(u32 *)(&work->real_time_clock[4]); - arr[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address; - arr[6] = (u32) ((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2])); - arr[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF)); -} diff --git a/arm9/lib/src/OS_exception.c b/arm9/lib/src/OS_exception.c deleted file mode 100644 index 63cd6d58..00000000 --- a/arm9/lib/src/OS_exception.c +++ /dev/null @@ -1,164 +0,0 @@ -#include "OS_exception.h" - -#include "global.h" -#include "OS_protectionUnit.h" -#include "mmap.h" - -static OSiExContext OSi_ExContext; - -static OSExceptionHandler OSi_UserExceptionHandler; -static void *OSi_UserExceptionHandlerArg; - -static void *OSi_DebuggerHandler = NULL; - -#define HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER 0x027ffd9c - -static void OSi_GetAndDisplayContext(void); -static void OSi_SetExContext(void); -static void OSi_DisplayExContext(void); - -ARM_FUNC void OS_InitException(void) -{ - if (0x2600000 <= *(u32 *)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER - && *(u32 *)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER < 0x2800000) - { - OSi_DebuggerHandler = *(void **)HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER; - } - else - { - OSi_DebuggerHandler = NULL; - } - - if (!OSi_DebuggerHandler) - { - *(u32 *)(HW_EXCEP_VECTOR_BUF_FOR_DEBUGGER) = (u32)OSi_ExceptionHandler; - - *(u32 *)(HW_EXCP_VECTOR_BUF) = (u32)OSi_ExceptionHandler; - } - - OSi_UserExceptionHandler = NULL; -} - -ARM_FUNC asm void OSi_ExceptionHandler(void) -{ - ldr r12, =OSi_DebuggerHandler - ldr r12, [r12] - cmp r12, #0 - movne lr, pc - bxne r12 - - ldr r12, =HW_ITCM_END - stmfd r12!, {r0-r3, sp, lr} - - and r0, sp, #1 - mov sp, r12 - - mrs r1, cpsr - and r1, r1, #0x1f - - teq r1, #0x17 - bne _020CCA38 - bl OSi_GetAndDisplayContext - b _020CCA44 - -_020CCA38: - teq r1, #0x1b - bne _020CCA44 - bl OSi_GetAndDisplayContext - -_020CCA44: - ldr r12, =OSi_DebuggerHandler - ldr r12, [r12] - cmp r12, #0 - -_020CCA50: - beq _020CCA50 - -_020CCA54: - mov r0, r0 - b _020CCA54 - - ldmfd sp!, {r0-r3, r12, lr} - mov sp, r12 - bx lr -} - -ARM_FUNC static asm void OSi_GetAndDisplayContext(void) -{ - stmfd sp!, {r0, lr} - - bl OSi_SetExContext - bl OSi_DisplayExContext - - ldmfd sp!, {r0, lr} - bx lr -} - -ARM_FUNC static asm void OSi_SetExContext(void) -{ - ldr r1, =OSi_ExContext; - - mrs r2, cpsr - str r2, [r1, #OSiExContext.debug[1]] - - str r0, [r1, #OSiExContext.exinfo] - - ldr r0, [r12, #0] - str r0, [r1, #4] - ldr r0, [r12, #4] - str r0, [r1, #8] - ldr r0, [r12, #8] - str r0, [r1, #12] - ldr r0, [r12, #12] - str r0, [r1, #16] - ldr r2, [r12, #16] - bic r2, r2, #1 - - add r0, r1, #20 - stmia r0, {r4-r11} - - str r12, [r1, #OSiExContext.debug[0]] - - ldr r0, [r2, #0] - str r0, [r1, #OSiExContext.cp15] - ldr r3, [r2, #4] - str r3, [r1, #0] - ldr r0, [r2, #8] - str r0, [r1, #52] - ldr r0, [r2, #12] - str r0, [r1, #64] - - mrs r0, cpsr - orr r3, r3, #0x80 - bic r3, r3, #0x20 - msr cpsr_cxsf, r3 - - str sp, [r1, #56] - str lr, [r1, #60] - mrs r2, spsr - - str r2, [r1, #OSiExContext.debug[3]] - - msr cpsr_cxsf, r0 - bx lr -} - -ARM_FUNC static void OSi_DisplayExContext(void) -{ - if (OSi_UserExceptionHandler) - { - asm - { - mov r0, sp - ldr r1, =0x9f - msr CPSR_cxsf, r1 - mov sp, r0 - } - - OS_EnableProtectionUnit(); - - ((void (*)(u32, void *))OSi_UserExceptionHandler)((u32)&OSi_ExContext, OSi_UserExceptionHandlerArg); - - OS_DisableProtectionUnit(); - } -} diff --git a/arm9/lib/src/OS_init.c b/arm9/lib/src/OS_init.c deleted file mode 100644 index d1465625..00000000 --- a/arm9/lib/src/OS_init.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "function_target.h" -#include "OS_init.h" -#include "MI_init.h" -#include "PXI_init.h" -#include "CARD_rom.h" - -extern void CTRDG_Init(void); -extern void PM_Init(void); - -ARM_FUNC void OS_Init(void) { - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - OS_InitException(); - MI_Init(); - OS_InitVAlarm(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - CTRDG_Init(); - CARD_Init(); - PM_Init(); -} diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c deleted file mode 100644 index 699c7929..00000000 --- a/arm9/lib/src/OS_interrupt.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "OS_interrupt.h" - -#include "global.h" -#include "registers.h" -#include "mmap.h" -#include "OS_thread.h" - -#pragma optimize_for_size on - -extern OSThreadQueue OSi_IrqThreadQueue; - -ARM_FUNC void OS_InitIrqTable(void) { - OS_InitThreadQueue(&OSi_IrqThreadQueue); -} - -ARM_FUNC void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function) { - s32 i; - OSIrqCallbackInfo *info; - - for (i = 0; i < 0x16; i++) { - if (intrBit & 1) { - info = NULL; - - if (8 <= i && i <= 11) { - info = &OSi_IrqCallbackInfo[i - 8]; - } - else if (3 <= i && i <= 6) { - info = &OSi_IrqCallbackInfo[i - 3 + 4]; - } - else { - OS_IRQTable[i] = function; - } - - if (info) { - info->func = (void (*)(void *))function; - info->arg = 0; - info->enable = TRUE; - } - } - intrBit >>= 1; - } -} - -ARM_FUNC OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit) { - s32 i = 0; - OSIrqFunction *funcPtr = &OS_IRQTable[0]; - - do { - if (intrBit & 1) - { - if (8 <= i && i <= 11) { - i = i - 8; - return (void (*)(void))OSi_IrqCallbackInfo[i].func; - } - else if (3 <= i && i <= 6) { - i++; - return (void (*)(void))OSi_IrqCallbackInfo[i].func; - } - - return *funcPtr; - } - intrBit >>= 1; - funcPtr++; - i++; - } while (i < 0x16); - return 0; -} - -ARM_FUNC void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg) -{ - OSIrqMask mask = 1UL << (dmaNo + 8); - OSi_IrqCallbackInfo[dmaNo].func = callback; - OSi_IrqCallbackInfo[dmaNo].arg = arg; - - OSi_IrqCallbackInfo[dmaNo].enable = OS_EnableIrqMask(mask) & mask; -} - -ARM_FUNC void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg) -{ - OSIrqMask mask = 1UL << (timerNo + 3); - OSi_IrqCallbackInfo[timerNo + 4].func = callback; - OSi_IrqCallbackInfo[timerNo + 4].arg = arg; - - (void)OS_EnableIrqMask(mask); - OSi_IrqCallbackInfo[timerNo + 4].enable = TRUE; -} - -ARM_FUNC OSIrqMask OS_SetIrqMask(OSIrqMask mask) -{ - u16 regIme = reg_OS_IME; - reg_OS_IME = 0; - OSIrqMask regIe = reg_OS_IE; - reg_OS_IE = mask; - u16 unused = reg_OS_IME; //needed because otherwise it doesn't match - reg_OS_IME = regIme; - return regIe; -} - -ARM_FUNC OSIrqMask OS_EnableIrqMask(OSIrqMask mask) -{ - u16 regIme = reg_OS_IME; - reg_OS_IME = 0; - OSIrqMask regIe = reg_OS_IE; - reg_OS_IE = regIe | mask; - u16 unused = reg_OS_IME; - reg_OS_IME = regIme; - return regIe; -} - -ARM_FUNC OSIrqMask OS_DisableIrqMask(OSIrqMask mask) -{ - u16 regIme = reg_OS_IME; - reg_OS_IME = 0; - OSIrqMask regIe = reg_OS_IE; - reg_OS_IE = regIe & ~mask; - u16 unused = reg_OS_IME; - reg_OS_IME = regIme; - return regIe; -} - -ARM_FUNC OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask) -{ - u16 regIme = reg_OS_IME; - reg_OS_IME = 0; - OSIrqMask regIf = reg_OS_IF; - reg_OS_IF = mask; - u16 unused = reg_OS_IME; - reg_OS_IME = regIme; - return regIf; -} - -extern void SDK_IRQ_STACKSIZE(void); - -#define OSi_IRQ_STACK_TOP (HW_DTCM_SVC_STACK - ((s32)SDK_IRQ_STACKSIZE)) -#define OSi_IRQ_STACK_BOTTOM HW_DTCM_SVC_STACK - -ARM_FUNC void OS_SetIrqStackChecker(void) -{ - *(u32 *)(OSi_IRQ_STACK_BOTTOM - sizeof(u32)) = 0xfddb597dUL; - *(u32 *)(OSi_IRQ_STACK_TOP) = 0x7bf9dd5bUL; -} diff --git a/arm9/lib/src/OS_irqHandler.c b/arm9/lib/src/OS_irqHandler.c deleted file mode 100644 index b4e2d232..00000000 --- a/arm9/lib/src/OS_irqHandler.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "function_target.h" -#include "OS_irqHandler.h" -#include "OS_system.h" -#include "OS_thread.h" -#include "sections.h" -#include "CP_context.h" - -OSThreadQueue OSi_IrqThreadQueue = { NULL, NULL }; - -#pragma section ITCM begin -ARM_FUNC asm void OS_IrqHandler(void) -{ - stmfd sp!, {lr} - mov ip, #0x04000000 - add ip, ip, #0x210 - ldr r1, [ip, #-8] - cmp r1, #0 - ldmeqfd sp!, {pc} - ldmia ip, {r1, r2} - ands r1, r1, r2 - ldmeqfd sp!, {pc} - mov r3, #0x80000000 -_01FF8028: - clz r0, r1 - bics r1, r1, r3, lsr r0 - bne _01FF8028 - mov r1, r3, lsr r0 - str r1, [ip, #0x4] - rsbs r0, r0, #0x1f - ldr r1, =OS_IRQTable - ldr r0, [r1, r0, lsl #2] - ldr lr, =OS_IrqHandler_ThreadSwitch - bx r0 -} - -ARM_FUNC asm void OS_IrqHandler_ThreadSwitch(void) -{ - ldr ip, =OSi_IrqThreadQueue - mov r3, #0x0 - ldr ip, [ip] - mov r2, #0x1 - cmp ip, #0x0 - beq _01FF80A8 -_01FF8070: - str r2, [ip, #0x64] - str r3, [ip, #0x78] - str r3, [ip, #0x7c] - ldr r0, [ip, #0x80] - str r3, [ip, #0x80] - mov ip, r0 - cmp ip, #0x0 - bne _01FF8070 - ldr ip, =OSi_IrqThreadQueue - str r3, [ip] - str r3, [ip, #0x4] - ldr ip, =OSi_ThreadInfo - mov r1, #0x1 - strh r1, [ip] -_01FF80A8: - ldr ip, =OSi_ThreadInfo - ldrh r1, [ip] - cmp r1, #0x0 - ldreq pc, [sp], #0x4 - mov r1, #0x0 - strh r1, [ip] - mov r3, #0xd2 - msr CPSR_c, r3 - add r2, ip, #0x8 - ldr r1, [r2] -_01FF80D0: - cmp r1, #0x0 - ldrneh r0, [r1, #0x64] - cmpne r0, #0x1 - ldrne r1, [r1, #0x68] - bne _01FF80D0 - cmp r1, #0x0 - bne _01FF80F8 -_01FF80EC: - mov r3, #0x92 - msr CPSR_c, r3 - ldr pc, [sp], #0x4 -_01FF80F8: - ldr r0, [ip, #0x4] - cmp r1, r0 - beq _01FF80EC - ldr r3, [ip, #0xC] - cmp r3, #0x0 - beq _01FF8120 - stmdb sp!, {r0, r1, ip} - mov lr, pc - bx r3 - ldmia sp!, {r0, r1, ip} -_01FF8120: - str r1, [ip, #0x4] - mrs r2, SPSR - str r2, [r0, #0x0]! - stmdb sp!, {r0, r1} - add r0, r0, #0x0 - add r0, r0, #0x48 - ldr r1, =CP_SaveContext - blx r1 - ldmia sp!, {r0, r1} - ldmib sp!, {r2, r3} - stmib r0!, {r2, r3} - ldmib sp!, {r2, r3, ip, lr} - stmib r0!, {r2-r14}^ - stmib r0!, {lr} - mov r3, #0xd3 - msr CPSR_c, r3 - stmib r0!, {sp} - stmfd sp!, {r1} - add r0, r1, #0x0 - add r0, r0, #0x48 - ldr r1, =CPi_RestoreContext - blx r1 - ldmfd sp!, {r1} - ldr sp, [r1, #0x44] - mov r3, #0xd2 - msr CPSR_c, r3 - ldr r2, [r1, #0x0]! - msr SPSR_fc, r2 - ldr lr, [r1, #0x40] - ldmib r1!, {r0-r14}^ - nop - stmda sp!, {r0, r1, r2, r3, ip, lr} - ldmfd sp!, {pc} -} -#pragma section ITCM end - -ARM_FUNC void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags) -{ - OSIntrMode lastIntrMode = OS_DisableInterrupts(); - if (clear) - { - OS_ClearIrqCheckFlag(irqFlags); - } - (void)OS_RestoreInterrupts(lastIntrMode); - - while (!(OS_GetIrqCheckFlag() & irqFlags)) - { - OS_SleepThread(&OSi_IrqThreadQueue); - } -} diff --git a/arm9/lib/src/OS_irqTable.c b/arm9/lib/src/OS_irqTable.c deleted file mode 100644 index cc2a3a55..00000000 --- a/arm9/lib/src/OS_irqTable.c +++ /dev/null @@ -1,110 +0,0 @@ -#include "function_target.h" -#include "sections.h" -#include "OS_irqTable.h" - -#pragma section DTCM begin -OSIrqFunction OS_IRQTable[22] = { - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OSi_IrqTimer0, - OSi_IrqTimer1, - OSi_IrqTimer2, - OSi_IrqTimer3, - OS_IrqDummy, - OSi_IrqDma0, - OSi_IrqDma1, - OSi_IrqDma2, - OSi_IrqDma3, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy, - OS_IrqDummy -}; -#pragma section DTCM end - -OSIrqCallbackInfo OSi_IrqCallbackInfo[8] = { - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, - {NULL, 0, 0}, -}; - -static u16 OSi_IrqCallbackInfoIndex[8] = { - 8, 9, 10, 11, 3, 4, 5, 6 -}; - -ARM_FUNC void OS_IrqDummy(void) -{ - //noop -} - -ARM_FUNC void OSi_IrqCallback(s32 index) -{ - OSIrqMask mask = (1UL << OSi_IrqCallbackInfoIndex[index]); - void (*callback)(void *) = OSi_IrqCallbackInfo[index].func; - - OSi_IrqCallbackInfo[index].func = NULL; - - if (callback) - { - (callback)(OSi_IrqCallbackInfo[index].arg); - } - - OS_SetIrqCheckFlag(mask); - - if (!OSi_IrqCallbackInfo[index].enable) - { - (void)OS_DisableIrqMask(mask); - } -} - -ARM_FUNC void OSi_IrqDma0(void) -{ - OSi_IrqCallback(0); -} - -ARM_FUNC void OSi_IrqDma1(void) -{ - OSi_IrqCallback(1); -} - -ARM_FUNC void OSi_IrqDma2(void) -{ - OSi_IrqCallback(2); -} - -ARM_FUNC void OSi_IrqDma3(void) -{ - OSi_IrqCallback(3); -} - -ARM_FUNC void OSi_IrqTimer0(void) -{ - OSi_IrqCallback(4); -} - -ARM_FUNC void OSi_IrqTimer1(void) -{ - OSi_IrqCallback(5); -} - -ARM_FUNC void OSi_IrqTimer2(void) -{ - OSi_IrqCallback(6); -} - -ARM_FUNC void OSi_IrqTimer3(void) -{ - OSi_IrqCallback(7); -} diff --git a/arm9/lib/src/OS_message.c b/arm9/lib/src/OS_message.c deleted file mode 100644 index 3b5c33b0..00000000 --- a/arm9/lib/src/OS_message.c +++ /dev/null @@ -1,124 +0,0 @@ -#include "OS_message.h" -#include "function_target.h" -#include "OS_system.h" -#include "OS_thread.h" - -ARM_FUNC void OS_InitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount) -{ - OS_InitThreadQueue(&mq->queueSend); - OS_InitThreadQueue(&mq->queueReceive); - mq->msgArray = msgArray; - mq->msgCount = msgCount; - mq->firstIndex = 0; - mq->usedCount = 0; -} - -ARM_FUNC BOOL OS_SendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - while (mq->msgCount <= mq->usedCount) - { - if (!(flags & OS_MESSAGE_BLOCK)) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - else - { - OS_SleepThread(&mq->queueSend); - } - } - - s32 lastIndex = (mq->firstIndex + mq->usedCount) % mq->msgCount; - mq->msgArray[lastIndex] = msg; - mq->usedCount++; - - OS_WakeupThread(&mq->queueReceive); - - (void)OS_RestoreInterrupts(enabled); - return TRUE; -} - -ARM_FUNC BOOL OS_ReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - while (mq->usedCount == 0) - { - if (!(flags & OS_MESSAGE_BLOCK)) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - else - { - OS_SleepThread(&mq->queueReceive); - } - } - - if (msg != NULL) - { - *msg = mq->msgArray[mq->firstIndex]; - } - mq->firstIndex = (mq->firstIndex + 1) % mq->msgCount; - mq->usedCount--; - - OS_WakeupThread(&mq->queueSend); - - (void)OS_RestoreInterrupts(enabled); - return TRUE; -} - -ARM_FUNC BOOL OS_JamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - while (mq->msgCount <= mq->usedCount) - { - if (!(flags & OS_MESSAGE_BLOCK)) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - else - { - OS_SleepThread(&mq->queueSend); - } - } - - mq->firstIndex = (mq->firstIndex + mq->msgCount - 1) % mq->msgCount; - mq->msgArray[mq->firstIndex] = msg; - mq->usedCount++; - - OS_WakeupThread(&mq->queueReceive); - - (void)OS_RestoreInterrupts(enabled); - return TRUE; -} - -ARM_FUNC BOOL OS_ReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - while (mq->usedCount == 0) - { - if (!(flags & OS_MESSAGE_BLOCK)) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - else - { - OS_SleepThread(&mq->queueReceive); - } - } - - if (msg != NULL) - { - *msg = mq->msgArray[mq->firstIndex]; - } - - (void)OS_RestoreInterrupts(enabled); - return TRUE; -} diff --git a/arm9/lib/src/OS_mutex.c b/arm9/lib/src/OS_mutex.c deleted file mode 100644 index 5eb999a9..00000000 --- a/arm9/lib/src/OS_mutex.c +++ /dev/null @@ -1,142 +0,0 @@ -#include "nitro/types.h" -#include "function_target.h" -#include "OS_mutex.h" -#include "OS_system.h" - -ARM_FUNC void OS_InitMutex(OSMutex *mutex) -{ - OS_InitThreadQueue(&mutex->queue); - mutex->thread = NULL; - mutex->count = 0; -} - -ARM_FUNC void OS_LockMutex(OSMutex *mutex) -{ - OSIntrMode prevIntrMode = OS_DisableInterrupts(); - OSThread *currentThread = OS_GetCurrentThread(); - - OSThread *ownerThread; - for (;;) - { - ownerThread = ((volatile OSMutex *)mutex)->thread; - - if (ownerThread == NULL) - { - mutex->thread = currentThread; - mutex->count++; - OSi_EnqueueTail(currentThread, mutex); - break; - } - else if (ownerThread == currentThread) - { - mutex->count++; - break; - } - else - { - currentThread->mutex = mutex; - OS_SleepThread(&mutex->queue); - currentThread->mutex = NULL; - } - } - - (void)OS_RestoreInterrupts(prevIntrMode); -} - -ARM_FUNC void OS_UnlockMutex(OSMutex *mutex) -{ - OSIntrMode prevIntrMode = OS_DisableInterrupts(); - OSThread *currentThread = OS_GetCurrentThread(); - - if (mutex->thread == currentThread && --mutex->count == 0) - { - OSi_DequeueItem(currentThread, mutex); - mutex->thread = NULL; - - OS_WakeupThread(&mutex->queue); - } - - (void)OS_RestoreInterrupts(prevIntrMode); -} - -ARM_FUNC void OSi_UnlockAllMutex(OSThread *thread) -{ - OSMutex *mutex; - while (thread->mutexQueue.head) - { - mutex = OSi_RemoveMutexLinkFromQueue(&thread->mutexQueue); - - mutex->count = 0; - mutex->thread = NULL; - OS_WakeupThread(&mutex->queue); - } -} - -ARM_FUNC BOOL OS_TryLockMutex(OSMutex *mutex) -{ - OSIntrMode prevIntrMode = OS_DisableInterrupts(); - OSThread *currentThread = OS_GetCurrentThread(); - BOOL locked; - - if (mutex->thread == NULL) - { - mutex->thread = currentThread; - mutex->count++; - OSi_EnqueueTail(currentThread, mutex); - locked = TRUE; - } - else if (mutex->thread == currentThread) - { - mutex->count++; - locked = TRUE; - } - else - { - locked = FALSE; - } - - (void)OS_RestoreInterrupts(prevIntrMode); - return locked; -} - -ARM_FUNC void OSi_EnqueueTail(OSThread *thread, OSMutex *mutex) -{ - OSMutex *prev = thread->mutexQueue.tail; - - if (!prev) - { - thread->mutexQueue.head = mutex; - } - else - { - prev->link.next = mutex; - } - - mutex->link.prev = prev; - mutex->link.next = NULL; - thread->mutexQueue.tail = mutex; -} - -ARM_FUNC void OSi_DequeueItem(OSThread *thread, OSMutex *mutex) -{ - OSMutex *next = mutex->link.next; - OSMutex *prev = mutex->link.prev; - - if (!next) - { - thread->mutexQueue.tail = prev; - } - else - { - next->link.prev = prev; - } - - if(!prev) - { - thread->mutexQueue.head = next; - } - else - { - prev->link.next = next; - } -} diff --git a/arm9/lib/src/OS_ownerInfo.c b/arm9/lib/src/OS_ownerInfo.c deleted file mode 100644 index 6693f73f..00000000 --- a/arm9/lib/src/OS_ownerInfo.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "OS_ownerInfo.h" - -#include "global.h" -#include "systemWork.h" -#include "MI_memory.h" - -ARM_FUNC void OS_GetMacAddress(u8 *macAddress) -{ - MI_CpuCopy8((void *)0x027FFCF4, macAddress, 0x6); -} - -ARM_FUNC void OS_GetOwnerInfo(OSOwnerInfo* info) -{ - NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo; - info->language = (u8)src->ncd.option.language; - info->favoriteColour = (u8)src->ncd.owner.favouriteColour; - info->birthday.month = (u8)src->ncd.owner.birthday.month; - info->birthday.day = (u8)src->ncd.owner.birthday.day; - info->nickNameLength = (u16)src->ncd.owner.nickname.length; - info->commentLength = (u16)src->ncd.owner.comment.length; - MIi_CpuCopy16(src->ncd.owner.nickname.str, info->nickName, 10 * sizeof(u16)); - MIi_CpuCopy16(src->ncd.owner.comment.str, info->comment, 26 * sizeof(u16)); -} - -ARM_FUNC s64 OS_GetOwnerRtcOffset(void) -{ - NVRAMConfig *src = (NVRAMConfig *)OS_GetSystemWork()->nvramUserInfo; - return src->ncd.option.rtcOffset; -} diff --git a/arm9/lib/src/OS_printf.c b/arm9/lib/src/OS_printf.c deleted file mode 100644 index 414f0db9..00000000 --- a/arm9/lib/src/OS_printf.c +++ /dev/null @@ -1,492 +0,0 @@ -#include "global.h" -#include "OS_printf.h" - -typedef struct printfStr -{ - s32 spaceLeft; - s8 *stringEnd; - s8 *stringStart; -} printfStr; - -void string_put_char(struct printfStr *dest, s8 value); -void string_fill_char(struct printfStr *dest, s8 value, s32 count); -void string_put_string(struct printfStr *dest, const s8 *src, s32 count); - -ARM_FUNC void string_put_char(struct printfStr *dest, s8 value) -{ - if (dest->spaceLeft != 0) - { - dest->stringEnd[0] = value; - dest->spaceLeft--; - } - dest->stringEnd++; -} - -ARM_FUNC void string_fill_char(struct printfStr *dest, s8 value, s32 count) -{ - if (count <= 0) - return; - - u32 written = 0; - u32 spaceLeft = (u32)dest->spaceLeft; - u32 toWrite = spaceLeft > (u32)count ? count : spaceLeft; - - while (written < toWrite) - { - dest->stringEnd[written] = value; - written++; - } - - dest->spaceLeft -= toWrite; - dest->stringEnd += count; // this is wrong but matching... -} - -ARM_FUNC void string_put_string(struct printfStr *dest, const s8 *src, s32 count) -{ - if (count <= 0) - return; - - u32 written = 0; - u32 spaceLeft = (u32)dest->spaceLeft; - u32 toWrite = spaceLeft > (u32)count ? count : spaceLeft; - - while (written < toWrite) - { - dest->stringEnd[written] = src[written]; - written++; - } - - dest->spaceLeft -= toWrite; - dest->stringEnd += count; // this is wrong but matching... -} - -ARM_FUNC s32 OS_SPrintf(s8 *buffer, const s8 *format, ...) -{ - void *args = (void *)((u32 *)((u32)&format & ~0x3) + 1); // hack since mwccarm doesn't have apparently - return OS_VSPrintf(buffer, format, args); -} - -ARM_FUNC s32 OS_VSPrintf(s8 *buffer, const s8 *format, void *args) -{ - return OS_VSNPrintf(buffer, 0x7FFFFFFF, format, args); -} - -ARM_FUNC s32 OS_SNPrintf(s8 *buffer, s32 bufsz, const s8 *format, ...) -{ - void *args = (void *)((u32 *)((u32)&format & ~0x3) + 1); // hack since mwccarm doesn't have apparently - return OS_VSNPrintf(buffer, bufsz, format, args); -} - -#define va_arg(list, ty) *(ty *)((u32 *)(list = (void *)((u32 *)(list) + 1)) - 1) -#define va_arg_64(list, sgn) *((sgn##64 *)(list = (void *)((sgn##64 *)(list) + 1)) - 1) - -ARM_FUNC s32 OS_VSNPrintf(s8 *buffer, s32 bufsz, const s8 *format, void *args) -{ - s8 buf[24]; - s32 n_buf; - s8 prefix[2]; - s32 n_prefix; - - const s8 *s = format; - - printfStr str; - str.spaceLeft = bufsz; - str.stringStart = buffer; - str.stringEnd = buffer; - - while (*s) - { - // matches: - // binary range (hex range) [dec range] - // 1000 0001-1001 1111 (0x81-0x9F) [129-159] - // 1110 0000-1111 1100 (0xE0-0xFC) [224-252] - if ((u32)(((u8)*s ^ 0x20) - 0xa1) < 0x3c) - { - string_put_char(&str, *s++); - if (*s) - { - string_put_char(&str, *s++); - } - } - else if (*s != '%') - { - string_put_char(&str, *s++); - } - else - { - enum { - blank = 000001, - plus = 000002, - sharp = 000004, - minus = 000010, - zero = 000020, - l1 = 000040, - h1 = 000100, - l2 = 000200, - h2 = 000400, - usigned = 010000, - end - }; - s32 flag = 0, width = 0, precision = -1, radix = 10; - s8 hex = 'a' - 10; - const s8 *p_start = s; - for (;;) - { - switch (*++s) - { - case '+': - if (s[-1] != ' ') - break; - flag |= plus; - continue; - case ' ': - flag |= blank; - continue; - case '-': - flag |= minus; - continue; - case '0': - flag |= zero; - continue; - } - break; - } - if (*s == '*') - { - ++s, width = va_arg(args, s32); - if (width < 0) - { - width = -width, flag |= minus; - } - } - else - { - while ((*s >= '0') && (*s <= '9')) - { - width = (width * 10) + *s++ - '0'; - } - } - - if (*s == '.') - { - ++s, precision = 0; - if (*s == '*') - { - ++s, precision = va_arg(args, s32); - if (precision < 0) - { - precision = -1; - } - } - else - { - while ((*s >= '0') && (*s <= '9')) - { - precision = (precision * 10) + *s++ - '0'; - } - } - } - - switch (*s) - { - case 'h': - if (*++s != 'h') { - flag |= h1; - } - else { - ++s, flag |= h2; - } - break; - case 'l': - if (*++s != 'l') { - flag |= l1; - } - else { - ++s, flag |= l2; - } - break; - } - - switch (*s) - { - case 'd': - case 'i': - goto put_int; - case 'o': - radix = 8; - flag |= usigned; - goto put_int; - case 'u': - flag |= usigned; - goto put_int; - case 'X': - hex = 'A' - 10; - goto put_hex; - case 'x': - goto put_hex; - case 'p': - flag |= sharp; - precision = 8; - goto put_hex; - case 'c': - if (precision >= 0) - goto put_invalid; - { - s32 v = va_arg(args, s32); - width -= 1; - if (flag & minus) - { - string_put_char(&str, (s8)v); - string_fill_char(&str, ' ', width); - } - else - { - s8 pad = (s8)((flag & zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - string_put_char(&str, (s8)v); - } - ++s; - } - break; - case 's': - { - s32 n_bufs = 0; - const s8 *p_bufs = va_arg(args, const s8 *); - if (precision < 0) - { - while (p_bufs[n_bufs]) - { - ++n_bufs; - } - } - else - { - while (n_bufs < precision && p_bufs[n_bufs]) - { - ++n_bufs; - } - } - width -= n_bufs; - if (flag & minus) - { - string_put_string(&str, p_bufs, n_bufs); - string_fill_char(&str, ' ', width); - } - else - { - s8 pad = (s8)((flag & zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - string_put_string(&str, p_bufs, n_bufs); - } - ++s; - } - break; - case 'n': - { - s32 count = str.stringEnd - str.stringStart; - if (!(flag & h2)) - { - if (flag & h1) - { - *va_arg(args, s16 *) = (s16)count; - } - else if (flag & l2) - { - *va_arg(args, u64 *) = (u64)count; - } - else - { - *va_arg(args, s32 *) = count; - } - } - } - ++s; - break; - case '%': - if (p_start + 1 != s) - goto put_invalid; - string_put_char(&str, *s++); - break; - - default: - goto put_invalid; - - put_invalid: - string_put_string(&str, p_start, s - p_start); - break; - - put_hex: - radix = 16; - flag |= usigned; - put_int: - { - u64 value = 0; - n_prefix = 0; - if (flag & minus) - { - flag &= ~zero; - } - if (precision < 0) - { - precision = 1; - } - else - { - flag &= ~zero; - } - if (flag & usigned) - { - if (flag & h2) - { - value = va_arg(args, u8); - } - else if (flag & h1) - { - value = va_arg(args, u16); - } - else if (flag & l2) - { - value = va_arg_64(args, u); - } - else - { - value = va_arg(args, u32); - } - flag &= ~(plus | blank); - if (flag & sharp) - { - if (radix == 16) - { - if (value != 0) - { - prefix[0] = (s8)(hex + (10 + 'x' - 'a')); - prefix[1] = '0'; - n_prefix = 2; - } - } - else if (radix == 8) - { - prefix[0] = '0'; - n_prefix = 1; - } - } - } - else { - if (flag & h2) { - value = va_arg(args, s8); - } else if (flag & h1) { - value = va_arg(args, s16); - } else if (flag & l2) { - value = va_arg_64(args, u); - } else { - value = va_arg(args, s32); - } - - if ((value >> 32) & 0x80000000) { - value = ~value + 1; - prefix[0] = '-'; - n_prefix = 1; - } else { - if (value || precision) { - if (flag & plus) { - prefix[0] = '+'; - n_prefix = 1; - } else if (flag & blank) { - prefix[0] = ' '; - n_prefix = 1; - } - } - } - } - n_buf = 0; - switch (radix) { - case 8: - while (value != 0) { - s32 octDig = (s32) (value & 0x7); - value >>= 3; - buf[n_buf++] = (s8) (octDig + '0'); - } - break; - case 10: - if ((value >> 32) == 0) { - u32 v = (u32) value; - while (v) { - u32 div10 = v / 10; - s32 dig = (s32) (v - (div10 * 10)); - v = div10; - buf[n_buf++] = (s8) (dig + '0'); - } - } else { - while (value) { - u64 div10 = value / 10; - s32 dig = (s32) (value - (div10 * 10)); - value = div10; - buf[n_buf++] = (s8) (dig + '0'); - } - } - break; - case 16: - while (value != 0) { - s32 hexDig = (s32) (value & 0xf); - value >>= 4; - buf[n_buf++] = (s8) ((hexDig < 10) ? (hexDig + '0') : (hexDig + hex)); - } - break; - } - if (n_prefix > 0 && prefix[0] == '0') { - n_prefix = 0; - buf[n_buf++] = '0'; - } - } - goto put_to_stream; - - put_to_stream: - { - s32 n_pad = (s32)(precision - n_buf); - if (flag & zero) - { - if (n_pad < width - n_buf - n_prefix) - { - n_pad = (s32)(width - n_buf - n_prefix); - } - } - if (n_pad > 0) - { - width -= n_pad; - } - - width -= n_prefix + n_buf; - if (!(flag & minus)) - { - string_fill_char(&str, ' ', width); - } - while (n_prefix > 0) - { - string_put_char(&str, prefix[--n_prefix]); - } - string_fill_char(&str, '0', n_pad); - while (n_buf > 0) - { - string_put_char(&str, buf[--n_buf]); - } - if (flag & minus) - { - string_fill_char(&str, ' ', width); - } - ++s; - } - break; - } - } - } - - if (str.spaceLeft != 0) - { - *str.stringEnd = '\0'; - } - else if (bufsz != 0) - { - str.stringStart[bufsz - 1] = '\0'; - } - return str.stringEnd - str.stringStart; -} diff --git a/arm9/lib/src/OS_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c deleted file mode 100644 index 4b8d8297..00000000 --- a/arm9/lib/src/OS_protectionRegion.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "function_target.h" -#include "OS_protectionRegion.h" - -ARM_FUNC asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags) -{ - mrc p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region - bic r2, r2, r0 - orr r2, r2, r1 - mcr p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region - bx lr -} - -ARM_FUNC asm void OS_SetProtectionRegion1(u32 param) -{ - mcr p15, 0x0, r0, c6, c1, 0x0 //Protection Unit Data Region 1 - bx lr -} - -ARM_FUNC asm void OS_SetProtectionRegion2(u32 param) -{ - mcr p15, 0x0, r0, c6, c2, 0x0 //Protection Unit Data Region 2 - bx lr -} diff --git a/arm9/lib/src/OS_protectionUnit.c b/arm9/lib/src/OS_protectionUnit.c deleted file mode 100644 index 66811a1e..00000000 --- a/arm9/lib/src/OS_protectionUnit.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "function_target.h" -#include "OS_protectionUnit.h" - -ARM_FUNC asm void OS_EnableProtectionUnit(void) -{ - mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register - orr r0, r0, #0x1 - mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register - bx lr -} - -ARM_FUNC asm void OS_DisableProtectionUnit(void) -{ - mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register - bic r0, r0, #0x1 - mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register - bx lr -} diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c deleted file mode 100644 index 083f2321..00000000 --- a/arm9/lib/src/OS_reset.c +++ /dev/null @@ -1,239 +0,0 @@ -#include "OS_reset.h" - -#include "global.h" -#include "MB_mb.h" -#include "OS_terminate_proc.h" -#include "OS_interrupt.h" -#include "OS_system.h" -#include "OS_spinLock.h" -#include "OS_cache.h" -#include "sections.h" -#include "MI_dma.h" -#include "CARD_common.h" -#include "PXI_init.h" -#include "PXI_fifo.h" - -static u16 OSi_IsInitReset = 0; -vu16 OSi_IsResetOccurred = 0; - -static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); -static void OSi_SendToPxi(u16 data); -static void OSi_DoResetSystem(void); -static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size); -static void OSi_ReloadRomData(void); -static void OSi_ReadCardRom32(u32 src, void *dst, s32 len); - -ARM_FUNC void OS_InitReset(void) { - if (OSi_IsInitReset) { - return; - } - OSi_IsInitReset = TRUE; - PXI_Init(); - while (!PXI_IsCallbackReady(PXI_FIFO_TAG_OS, PXI_PROC_ARM7)) { } - - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_OS, OSi_CommonCallback); -} - -ARM_FUNC static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err) { -#pragma unused(tag, err) //needed because otherwise -W all errors - u16 command = (u16)((data & OS_PXI_COMMAND_MASK) >> OS_PXI_COMMAND_SHIFT); - if (command == OS_PXI_COMMAND_RESET) - { - OSi_IsResetOccurred = TRUE; - return; - } - OS_Terminate(); -} - -ARM_FUNC static void OSi_SendToPxi(u16 data) { - while (PXI_SendWordByFifo(PXI_FIFO_TAG_OS, (u32)data << 0x8, FALSE)) {} -} - -ARM_FUNC void OS_ResetSystem(u32 parameter) { - if (MB_IsMultiBootChild()) { - OS_Terminate(); - } - CARD_LockRom((u16)OS_GetLockID()); - MI_StopDma(0); - MI_StopDma(1); - MI_StopDma(2); - MI_StopDma(3); - (void)OS_SetIrqMask(0x40000); - (void)OS_ResetRequestIrqMask((u32)~0); - *(u32 *)HW_RESET_PARAMETER_BUF = parameter; - OSi_SendToPxi(OS_PXI_COMMAND_RESET); - OSi_DoResetSystem(); -} - -#pragma section ITCM begin -ARM_FUNC static void OSi_DoResetSystem(void) -{ - while (!OSi_IsResetOccurred) { } - - reg_OS_IME = 0; - OSi_ReloadRomData(); - OSi_DoBoot(); -} - -ARM_FUNC asm void OSi_DoBoot(void) -{ - mov ip, #0x04000000 - str ip, [ip, #0x208] - ldr r1, =SDK_AUTOLOAD_DTCM_START - add r1, r1, #0x3fc0 - add r1, r1, #0x3c - mov r0, #0x0 - str r0, [r1] - ldr r1, =REG_SUBPINTF_ADDR -_01FF81D4: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - bne _01FF81D4 - mov r0, #0x100 - strh r0, [r1] - mov r0, #0x0 - ldr r3, =HW_EXCP_VECTOR_MAIN - ldr r4, [r3] - ldr r1, =HW_BIOS_EXCP_STACK_MAIN - mov r2, #0x80 - bl OSi_CpuClear32 - str r4, [r3] - ldr r1, =HW_PXI_SIGNAL_PARAM_ARM9 - mov r2, #0x18 - bl OSi_CpuClear32 - ldr r1, =HW_WM_RSSI_POOL - strh r0, [r1] - ldr r1, =HW_COMPONENT_PARAM - mov r2, #0x64 - bl OSi_CpuClear32 - ldr r1, =REG_SUBPINTF_ADDR -_01FF822C: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - beq _01FF822C - mov r0, #0x0 - strh r0, [r1] - ldr r3, =HW_ROM_HEADER_BUF - ldr ip, [r3, #0x24] - mov lr, ip - ldr r11, =HW_PXI_SIGNAL_PARAM_ARM9 - ldmia r11, {r0-r10} - mov r11, #0x0 - bx ip -} - -ARM_FUNC static asm void OSi_CpuClear32(register u32 data, register void *destp, register u32 size) -{ - add ip, r1, r2 -_01FF8284: - cmp r1, ip - stmltia r1!, {r0} - blt _01FF8284 - bx lr -} - -ARM_FUNC static void OSi_ReloadRomData(void) -{ - u32 header = (u32)HW_ROM_HEADER_BUF; - const u32 rom_base = *(u32 *)HW_ROM_BASE_OFFSET_BUF; - - if (rom_base >= 0x8000) - { - OSi_ReadCardRom32(rom_base, (void *)header, 0x160); - } - - u32 src_arm9 = *(u32 *)(header + 0x20); - u32 dst_arm9 = *(u32 *)(header + 0x28); - u32 len_arm9 = *(u32 *)(header + 0x2c); - u32 src_arm7 = *(u32 *)(header + 0x30); - u32 dst_arm7 = *(u32 *)(header + 0x38); - u32 len_arm7 = *(u32 *)(header + 0x3c); - - OSIntrMode prevIntrMode = OS_DisableInterrupts(); - DC_StoreAll(); - DC_InvalidateAll(); - (void)OS_RestoreInterrupts(prevIntrMode); - - IC_InvalidateAll(); - DC_WaitWriteBufferEmpty(); - - src_arm9 += rom_base; - src_arm7 += rom_base; - - if (src_arm9 < 0x8000) - { - u32 diff = 0x8000 - src_arm9; - src_arm9 = 0x8000; - dst_arm9 += diff; - len_arm9 -= diff; - } - OSi_ReadCardRom32(src_arm9, (void *)dst_arm9, (s32)len_arm9); - - OSi_ReadCardRom32(src_arm7, (void *)dst_arm7, (s32)len_arm7); -} - -enum -{ - CARD_MASTER_SELECT_ROM = 0x0, - CARD_MASTER_ENABLE = 0x80, - CARD_CMD_READ_PAGE = 0xb7, - CARD_CTRL_CMD_MASK = 0x07000000, - CARD_CTRL_CMD_PAGE = 0x01000000, - CARD_CTRL_READ = 0x00000000, - CARD_CTRL_RESET_HI = 0x20000000, - CARD_CTRL_START = 0x80000000, - CARD_CTRL_READY = 0x00800000, - CARD_ENUM_END -}; - -ARM_FUNC static void OSi_ReadCardRom32(u32 src, void *dst, s32 len) -{ - vu32 *const hdr_GAME_BUF = (vu32 *)(HW_ROM_HEADER_BUF + 0x60); - - const u32 ctrl_start = (u32)((*hdr_GAME_BUF &~CARD_CTRL_CMD_MASK) - | (CARD_CTRL_CMD_PAGE | CARD_CTRL_READ - | CARD_CTRL_START | CARD_CTRL_RESET_HI)); - - s32 pos = -(s32)(src & 511); - - while (reg_CARD_CNT & CARD_CTRL_START) {} - reg_CARD_MASTERCNT = (u32)(CARD_MASTER_SELECT_ROM | CARD_MASTER_ENABLE); - - for (src = (u32)(src + pos); pos < len; src += 512) - { - (®_CARD_CMD)[0] = (u8)(CARD_CMD_READ_PAGE); - (®_CARD_CMD)[1] = (u8)(src >> 24); - (®_CARD_CMD)[2] = (u8)(src >> 16); - (®_CARD_CMD)[3] = (u8)(src >> 8); - (®_CARD_CMD)[4] = (u8)(src >> 0); - (®_CARD_CMD)[5] = 0; - (®_CARD_CMD)[6] = 0; - (®_CARD_CMD)[7] = 0; - - reg_CARD_CNT = ctrl_start; - for (;;) - { - u32 ctrl = reg_CARD_CNT; - - if ((ctrl & CARD_CTRL_READY)) - { - const u32 data = reg_CARD_DATA; - - if ((pos >= 0) && (pos < len)) - { - *(u32 *)((u32)dst + pos) = data; - } - - pos += sizeof(u32); - } - - if (!(ctrl & CARD_CTRL_START)) - { - break; - } - } - } -} -#pragma section ITCM end diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c deleted file mode 100644 index 576e03ad..00000000 --- a/arm9/lib/src/OS_spinLock.c +++ /dev/null @@ -1,218 +0,0 @@ -// -// Created by red031000 on 2020-05-21. -// - -#include "OS_spinLock.h" - -#include "OS_system.h" -#include "function_target.h" -#include "mmap.h" -#include "MI_exMemory.h" - -extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names -extern u32 MI_SwapWord(u32 data, volatile u32* destp); - -ARM_FUNC void OS_InitLock(void) -{ - static BOOL isInitialized = FALSE; - - if (isInitialized) - { - return; - } - isInitialized = TRUE; - - OSLockWord* lockp = (OSLockWord *)HW_INIT_LOCK_BUF; - - lockp->lockFlag = 0; - - (void)OS_TryLockByWord(0x7e, lockp, NULL); - - while (lockp->extension) - { - OSi_WaitByLoop(); - } - - ((u32 *)HW_LOCK_ID_FLAG_MAIN)[0] = 0xffffffff; - ((u32 *)HW_LOCK_ID_FLAG_MAIN)[1] = 0xffff0000; - - MIi_CpuClear32(0x0, (void *)HW_SHARED_LOCK_BUF, 0x28); - - MIi_SetCardProcessor(MI_PROCESSOR_ARM7); - - MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7); - - (void)OS_UnlockByWord(0x7e, lockp, NULL); - (void)OS_TryLockByWord(0x7f, lockp, NULL); -} - -ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFiq) -{ - s32 lastLockFlag; - while ((lastLockFlag = OSi_DoTryLockByWord(lockId, lockp, ctrlFuncp, disableFiq)) > 0) { - OSi_WaitByLoop(); - } - - return lastLockFlag; -} - -ARM_FUNC s32 OS_TryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void)) -{ - return OSi_DoLockByWord(lockId, lockp, ctrlFuncp, FALSE); -} - -ARM_FUNC s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFIQ) -{ - if (lockID != lockp->ownerID) - { - return -2; - } - - OSIntrMode lastIntrMode = (disableFIQ) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); - lockp->ownerID = 0; - if (ctrlFuncp) - { - ctrlFuncp(); - } - lockp->lockFlag = 0; - if (disableFIQ) - { - (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); - } - else - { - (void)OS_RestoreInterrupts(lastIntrMode); - } - return 0; -} - -ARM_FUNC s32 OS_UnlockByWord(u16 lockID, OSLockWord* lockp, void (*ctrlFuncp) (void)) -{ - return OSi_DoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE); -} - -ARM_FUNC s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), - BOOL disableFiq) -{ - OSIntrMode lastIntrMode = (disableFiq) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); - - s32 lastLockFlag = (s32)MI_SwapWord(lockID, &lockp->lockFlag); - - if (!lastLockFlag) - { - if (ctrlFuncp) - { - ctrlFuncp(); - } - lockp->ownerID = lockID; - } - - if (disableFiq) - { - (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); - } - else - { - (void)OS_RestoreInterrupts(lastIntrMode); - } - - return lastLockFlag; -} - -ARM_FUNC s32 OS_LockCartridge(u16 lockID) -{ - return OSi_DoLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); -} - -ARM_FUNC s32 OS_UnlockCartridge(u16 lockID) -{ - return OSi_DoUnlockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_FreeCartridgeBus, TRUE); -} - -ARM_FUNC s32 OS_TryLockCartridge(u16 lockID) -{ - return OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); -} - -ARM_FUNC void OSi_AllocateCartridgeBus(void) -{ - MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM9); -} - -ARM_FUNC void OSi_FreeCartridgeBus(void) -{ - MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7); -} - -ARM_FUNC s32 OS_TryLockCard(u16 lockID) -{ - return OS_TryLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_AllocateCardBus); -} - -ARM_FUNC s32 OS_UnlockCard(u16 lockID) -{ - return OS_UnlockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_FreeCardBus); -} - -ARM_FUNC void OSi_AllocateCardBus(void) -{ - MIi_SetCardProcessor(MI_PROCESSOR_ARM9); -} - -ARM_FUNC void OSi_FreeCardBus(void) -{ - MIi_SetCardProcessor(MI_PROCESSOR_ARM7); -} - -ARM_FUNC u16 OS_ReadOwnerOfLockWord(OSLockWord * lock) -{ - return lock->ownerID; -} - -ARM_FUNC asm s32 OS_UnLockCartridge(u16 lockID) -{ - ldr r1, =OS_UnlockCartridge - bx r1 -} - -ARM_FUNC asm s32 OS_GetLockID(void) -{ - ldr r3, =HW_LOCK_ID_FLAG_MAIN - ldr r1, [r3, #0x0] - clz r2, r1 - cmp r2, #0x20 - movne r0, #0x40 - bne _020CA0D4 - add r3, r3, #0x4 - ldr r1, [r3, #0x0] - clz r2, r1 - cmp r2, #0x20 - ldr r0, =0xFFFFFFFD - bxeq lr - mov r0, #0x60 -_020CA0D4: - add r0, r0, r2 - mov r1, #0x80000000 - mov r1, r1, lsr r2 - ldr r2, [r3, #0x0] - bic r2, r2, r1 - str r2, [r3, #0x0] - bx lr -} - -ARM_FUNC asm void OS_ReleaseLockID(register u16 lockID) -{ - ldr r3, =HW_LOCK_ID_FLAG_MAIN - cmp r0, #0x60 - addpl r3, r3, #0x4 - subpl r0, r0, #0x60 - submi r0, r0, #0x40 - mov r1, #0x80000000 - mov r1, r1, lsr r0 - ldr r2, [r3, #0x0] - orr r2, r2, r1 - str r2, [r3, #0x0] - bx lr -} diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c deleted file mode 100644 index f5f5faba..00000000 --- a/arm9/lib/src/OS_system.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "OS_system.h" -#include "OS_irqHandler.h" -#include "syscall.h" - -ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void) -{ - mrs r0, cpsr - bic r1, r0, #HW_PSR_DISABLE_IRQ - msr cpsr_c, r1 - and r0, r0, #HW_PSR_DISABLE_IRQ - bx lr -} - -ARM_FUNC asm OSIntrMode OS_DisableInterrupts(void) -{ - mrs r0, cpsr - orr r1, r0, #HW_PSR_DISABLE_IRQ - msr cpsr_c, r1 - and r0, r0, #HW_PSR_DISABLE_IRQ - bx lr -} - -ARM_FUNC asm OSIntrMode OS_RestoreInterrupts(OSIntrMode state) -{ - mrs r1, cpsr - bic r2, r1, #HW_PSR_DISABLE_IRQ - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_DISABLE_IRQ - bx lr -} - -ARM_FUNC asm OSIntrMode OS_DisableInterrupts_IrqAndFiq(void) -{ - mrs r0, cpsr - orr r1, r0, #HW_PSR_DISABLE_IRQ_FIQ - msr cpsr_c, r1 - and r0, r0, #HW_PSR_DISABLE_IRQ_FIQ - bx lr -} - -ARM_FUNC asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state) -{ - mrs r1, cpsr - bic r2, r1, #HW_PSR_DISABLE_IRQ_FIQ - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_DISABLE_IRQ_FIQ - bx lr -} - -ARM_FUNC asm OSIntrMode OS_GetCpsrIrq(void) -{ - mrs r0, cpsr - and r0, r0, #HW_PSR_DISABLE_IRQ - bx lr -} - -ARM_FUNC asm OSProcMode OS_GetProcMode(void) -{ - mrs r0, cpsr - and r0, r0, #HW_PSR_CPU_MODE_MASK - bx lr -} - -ARM_FUNC asm void OS_SpinWait(u32 cycles) -{ - subs r0, r0, #0x4 - bhs OS_SpinWait - bx lr -} - -ARM_FUNC void OS_WaitVBlankIntr(void) -{ - SVC_WaitByLoop(0x1); - OS_WaitIrq(TRUE, OS_IE_V_BLANK); -} diff --git a/arm9/lib/src/OS_tcm.c b/arm9/lib/src/OS_tcm.c deleted file mode 100644 index 5b6ab552..00000000 --- a/arm9/lib/src/OS_tcm.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "OS_tcm.h" -#include "function_target.h" - -ARM_FUNC asm u32 OS_GetDTCMAddress(void) { - mrc p15, 0x0, r0, c9, c1, 0x0 //Data TCM Base - ldr r1, =OSi_TCM_REGION_BASE_MASK - and r0, r0, r1 - bx lr -} diff --git a/arm9/lib/src/OS_terminate_proc.c b/arm9/lib/src/OS_terminate_proc.c deleted file mode 100644 index fdc4dbff..00000000 --- a/arm9/lib/src/OS_terminate_proc.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "OS_terminate_proc.h" -#include "function_target.h" -#include "OS_system.h" - -ARM_FUNC void OS_Terminate(void) -{ - while (TRUE) - { - (void)OS_DisableInterrupts(); - OS_Halt(); - } -} - -ARM_FUNC asm void OS_Halt(void) -{ - mov r0, #0x0 - mcr p15, 0x0, r0, c7, c0, 0x4 //Wait For Interrupt (Halt) - bx lr -} diff --git a/arm9/lib/src/OS_thread.c b/arm9/lib/src/OS_thread.c deleted file mode 100644 index a52b1f6d..00000000 --- a/arm9/lib/src/OS_thread.c +++ /dev/null @@ -1,734 +0,0 @@ -#include "function_target.h" -#include "MI_memory.h" -#include "OS_thread.h" -#include "OS_mutex.h" -#include "OS_alarm.h" -#include "OS_system.h" -#include "OS_context.h" -#include "OS_terminate_proc.h" -#include "systemWork.h" -#include "mmap.h" - -extern void SDK_SYS_STACKSIZE(void); -extern void SDK_IRQ_STACKSIZE(void); - -extern void SDK_SECTION_ARENA_DTCM_START(void); - -static s32 OSi_ThreadIdCount = 0; - -u32 OSi_RescheduleCount = 0; - -void *OSi_StackForDestructor = NULL; - -BOOL OSi_IsThreadInitialized = FALSE; - -OSThreadInfo OSi_ThreadInfo; - -OSThread **OSi_CurrentThreadPtr = NULL; - -void *OSi_SystemCallbackInSwitchThread = NULL; - -OSThread OSi_LauncherThread; -OSThread OSi_IdleThread; - -u32 OSi_IdleThreadStack[50]; - -static s32 OSi_GetUnusedThreadId(void); -static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread); -static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue); -static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread); -static void OSi_InsertThreadToList(OSThread *thread); -static void OSi_RemoveThreadFromList(OSThread *thread); -static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg); -static void OSi_ExitThread(void *arg); -static void OSi_ExitThread_Destroy(void); -static void OSi_CancelThreadAlarmForSleep(OSThread *thread); -static void OSi_SleepAlarmCallback(void *arg); -static void OSi_IdleThreadProc(void *); - -ARM_FUNC static s32 OSi_GetUnusedThreadId(void) -{ - return ++OSi_ThreadIdCount; -} - -ARM_FUNC static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread) -{ - OSThread *next = queue->head; - - while (next && next->priority <= thread->priority) - { - if (next == thread) - return; - next = next->link.next; - } - - if (!next) - { - OSThread *prev = queue->tail; - - if (!prev) - { - queue->head = thread; - } - else - { - prev->link.next = thread; - } - - thread->link.prev = prev; - thread->link.next = NULL; - queue->tail = thread; - } - else - { - OSThread *prev = next->link.prev; - - if (!prev) - { - queue->head = thread; - } - else - { - prev->link.next = thread; - } - - thread->link.prev = prev; - thread->link.next = next; - next->link.prev = thread; - } -} - -ARM_FUNC static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue) -{ - OSThread *thread = queue->head; - - if (thread) - { - OSThread *next = thread->link.next; - - queue->head = next; - - if (next) - { - next->link.prev = NULL; - } - else - { - queue->tail = NULL; - thread->queue = NULL; - } - } - - return thread; -} - -ARM_FUNC static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread) -{ - OSThread *queueHead = queue->head; - - while (queueHead) - { - OSThread *next = queueHead->link.next; - - if (queueHead == thread) - { - OSThread *prev = queueHead->link.prev; - - if (queue->head == queueHead) - { - queue->head = next; - } - else - { - prev->link.next = next; - } - - if (queue->tail == queueHead) - { - queue->tail = prev; - } - else - { - next->link.prev = prev; - } - - break; - } - - queueHead = next; - } - - return queueHead; -} - -ARM_FUNC OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue) -{ - OSMutex *mutexHead = queue->head; - - if (mutexHead) - { - OSMutex *next = mutexHead->link.next; - - queue->head = next; - - if (next) - { - next->link.prev = NULL; - } - else - { - queue->tail = NULL; - } - } - - return mutexHead; -} - -ARM_FUNC static void OSi_InsertThreadToList(OSThread *thread) -{ - OSThread *t = OSi_ThreadInfo.list; - OSThread *pre = NULL; - - while(t && t->priority < thread->priority) - { - pre = t; - t = t->next; - } - - if (!pre) - { - thread->next = OSi_ThreadInfo.list; - OSi_ThreadInfo.list = thread; - } - else - { - thread->next = pre->next; - pre->next = thread; - } -} - -ARM_FUNC static void OSi_RemoveThreadFromList(OSThread *thread) -{ - OSThread *t = OSi_ThreadInfo.list; - OSThread *pre = NULL; - - while (t && t != thread) - { - pre = t; - t = t-> next; - } - - if (!pre) - { - OSi_ThreadInfo.list = thread->next; - } - else - { - pre->next = thread->next; - } -} - -ARM_FUNC static void OSi_RescheduleThread(void) -{ - if (OSi_RescheduleCount <= 0) - { - OSThreadInfo *info = &OSi_ThreadInfo; - if (info->irqDepth > 0 || OS_GetProcMode() == OS_PROCMODE_IRQ) - { - info->isNeedRescheduling = TRUE; - } - else - { - OSThread *currentThread = OSi_GetCurrentThread(); - OSThread *nextThread = OS_SelectThread(); - - if (currentThread == nextThread || !nextThread) - return; - - if (currentThread->state != OS_THREAD_STATE_TERMINATED - && OS_SaveContext(¤tThread->context)) - return; - - if (OSi_SystemCallbackInSwitchThread) - { - ((OSSwitchThreadCallback)OSi_SystemCallbackInSwitchThread) (currentThread, nextThread); - } - - if (info->switchCallback) - { - ((OSSwitchThreadCallback)info->switchCallback) (currentThread, nextThread); - } - - OS_SetCurrentThread(nextThread); - - OS_LoadContext(&nextThread->context); - } - } -} - -ARM_FUNC void OS_InitThread(void) -{ - if (OSi_IsThreadInitialized) - return; - OSi_IsThreadInitialized = TRUE; - - OSi_CurrentThreadPtr = &(OSi_ThreadInfo.current); - - OSi_LauncherThread.priority = OS_THREAD_LAUNCHER_PRIORITY; - OSi_LauncherThread.id = 0; - OSi_LauncherThread.state = OS_THREAD_STATE_READY; - OSi_LauncherThread.next = NULL; - - OSi_LauncherThread.profiler = NULL; - - OSi_ThreadInfo.list = &OSi_LauncherThread; - - OS_SetCurrentThread(&OSi_LauncherThread); - - void *stackLo = (((s32)SDK_SYS_STACKSIZE) <= 0) ? - (void *)((u32)SDK_SECTION_ARENA_DTCM_START - (s32)SDK_SYS_STACKSIZE) : - (void *)((u32)(HW_DTCM_SVC_STACK - (s32)SDK_IRQ_STACKSIZE) - (s32)SDK_SYS_STACKSIZE); - - OSi_LauncherThread.stackBottom = (u32)(HW_DTCM_SVC_STACK - (s32)SDK_IRQ_STACKSIZE); - OSi_LauncherThread.stackTop = (u32)stackLo; - OSi_LauncherThread.stackWarningOffset = 0; - - //checksums - *(u32 *)(OSi_LauncherThread.stackBottom - sizeof(u32)) = 0xfddb597dUL; - *(u32 *)OSi_LauncherThread.stackTop = 0x7bf9dd5bUL; - - OS_InitThreadQueue(&OSi_LauncherThread.joinQueue); - - OSi_ThreadInfo.isNeedRescheduling = FALSE; - OSi_ThreadInfo.irqDepth = 0; - - OS_GetSystemWork()->threadinfo_mainp = &OSi_ThreadInfo; - - (void)OS_SetSwitchThreadCallback(NULL); - - OS_CreateThread(&OSi_IdleThread, OSi_IdleThreadProc, NULL, - OSi_IdleThreadStack + 50, 200, OS_THREAD_PRIORITY_MAX); - - OSi_IdleThread.priority = OS_THREAD_PRIORITY_MAX + 1; - OSi_IdleThread.state = OS_THREAD_STATE_READY; -} - -ARM_FUNC asm BOOL OS_IsThreadAvailable(void) -{ - ldr r0, =OSi_IsThreadInitialized - ldr r0, [r0, #0] - bx lr -} - -ARM_FUNC void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio) -{ - OSIntrMode enable = OS_DisableInterrupts(); - - s32 index = OSi_GetUnusedThreadId(); - - thread->priority = prio; - thread->id = (u32)index; - thread->state = OS_THREAD_STATE_WAITING; - - thread->profiler = NULL; - - OSi_InsertThreadToList(thread); - - thread->stackBottom = (u32)stack; - thread->stackTop = (u32)stack - stackSize; - thread->stackWarningOffset = 0; - - *(u32 *)(thread->stackBottom - sizeof(u32)) = 0xfddb597dUL; - *(u32 *)thread->stackTop = 0x7bf9dd5bUL; - - OS_InitThreadQueue(&thread->joinQueue); - - OS_InitContext(&thread->context, (u32)func, (u32)stack - 4); - - thread->context.r[0] = (u32)arg; - thread->context.lr = (u32)OS_ExitThread; - - MI_CpuClear32((void *)((u32)stack - stackSize + 4), stackSize - 8); - - thread->mutex = NULL; - thread->mutexQueue.head = NULL; - thread->mutexQueue.tail = NULL; - - OS_SetThreadDestructor(thread, NULL); - - thread->queue = NULL; - thread->link.prev = thread->link.next = NULL; - - MI_CpuClear32(&thread->specific[0], sizeof(void *) * OS_THREAD_SPECIFIC_MAX); - - thread->alarmForSleep = NULL; - - (void)OS_RestoreInterrupts(enable); -} - -ARM_FUNC void OS_ExitThread(void) -{ - (void)OS_DisableInterrupts(); - OSi_ExitThread_ArgSpecified(OS_GetCurrentThread(), 0); -} - -ARM_FUNC static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg) -{ - if (OSi_StackForDestructor) - { - OS_InitContext(&thread->context, (u32)OSi_ExitThread, (u32)OSi_StackForDestructor); - thread->context.r[0] = (u32)arg; - thread->context.cpsr |= HW_PSR_DISABLE_IRQ; - thread->state = OS_THREAD_STATE_READY; - OS_LoadContext(&thread->context); - } - else - { - OSi_ExitThread(arg); - } -} - -ARM_FUNC static void OSi_ExitThread(void *arg) -{ - OSThread *currentThread = OSi_GetCurrentThread(); - OSThreadDestructor destructor = currentThread->destructor; - - if (destructor) - { - currentThread->destructor = NULL; - destructor(arg); - (void)OS_DisableInterrupts(); - } - - OSi_ExitThread_Destroy(); -} - -ARM_FUNC static void OSi_ExitThread_Destroy(void) -{ - OSThread *currentThread = OSi_GetCurrentThread(); - (void)OS_DisableScheduler(); - - OSi_UnlockAllMutex(currentThread); - - if (currentThread->queue) - { - (void)OSi_RemoveSpecifiedLinkFromQueue(currentThread->queue, currentThread); - } - - OSi_RemoveThreadFromList(currentThread); - - currentThread->state = OS_THREAD_STATE_TERMINATED; - - OS_WakeupThread(¤tThread->joinQueue); - - (void)OS_EnableScheduler(); - - OS_RescheduleThread(); - - OS_Terminate(); -} - -ARM_FUNC void OS_DestroyThread(OSThread *thread) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (OS_GetCurrentThread() == thread) - { - OSi_ExitThread_Destroy(); - } - - (void)OS_DisableScheduler(); - - OSi_UnlockAllMutex(thread); - - OSi_CancelThreadAlarmForSleep(thread); - - if (thread->queue) - { - (void)OSi_RemoveSpecifiedLinkFromQueue(thread->queue, thread); - } - - OSi_RemoveThreadFromList(thread); - - thread->state = OS_THREAD_STATE_TERMINATED; - - OS_WakeupThread(&thread->joinQueue); - - (void)OS_EnableScheduler(); - (void)OS_RestoreInterrupts(enabled); - - OS_RescheduleThread(); -} - -ARM_FUNC static void OSi_CancelThreadAlarmForSleep(OSThread *thread) -{ - OSAlarm *alarm = thread->alarmForSleep; - - if (alarm) - { - OS_CancelAlarm(alarm); - } -} - -ARM_FUNC void OS_JoinThread(OSThread *thread) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (thread->state != OS_THREAD_STATE_TERMINATED) - { - OS_SleepThread(&thread->joinQueue); - } - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC BOOL OS_IsThreadTerminated(const OSThread *thread) -{ - return (thread->state == OS_THREAD_STATE_TERMINATED) ? TRUE : FALSE; -} - -ARM_FUNC void OS_SleepThread(OSThreadQueue *queue) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - OSThread *currentThread = OSi_GetCurrentThread(); - - if (queue) - { - currentThread->queue = queue; - OSi_InsertLinkToQueue(queue, currentThread); - } - - currentThread->state = OS_THREAD_STATE_WAITING; - OSi_RescheduleThread(); - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void OS_WakeupThread(OSThreadQueue *queue) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (queue->head) - { - while (queue->head) - { - OSThread *thread = OSi_RemoveLinkFromQueue(queue); - - thread->state = OS_THREAD_STATE_READY; - thread->queue = NULL; - thread->link.prev = thread->link.next = NULL; - } - - OS_InitThreadQueue(queue); - OSi_RescheduleThread(); - } - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void OS_WakeupThreadDirect(OSThread *thread) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - thread->state = OS_THREAD_STATE_READY; - OSi_RescheduleThread(); - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC OSThread *OS_SelectThread(void) -{ - OSThread *thread = OSi_ThreadInfo.list; - - while (thread && !OS_IsThreadRunnable(thread)) - { - thread = thread->next; - } - - return thread; -} - -ARM_FUNC void OS_RescheduleThread(void) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - OSi_RescheduleThread(); - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void OS_YieldThread(void) -{ - OSThread *current = OS_GetCurrentThread(); - OSThread *pre = NULL; - OSThread *lastThread = NULL; - s32 samePriorityThread = 0; - OSIntrMode enabled = OS_DisableInterrupts(); - - OSThread *t = OSi_ThreadInfo.list; - OSThread *tPre = NULL; - - while (t) - { - if (t == current) - { - pre = tPre; - } - - if (current->priority == t->priority) - { - lastThread = t; - samePriorityThread++; - } - - tPre = t; - t = t->next; - } - - if (samePriorityThread <= 1 || lastThread == current) - { - (void)OS_RestoreInterrupts(enabled); - return; - } - - if (!pre) - { - OSi_ThreadInfo.list = current->next; - } - else - { - pre->next = current->next; - } - - current->next = lastThread->next; - lastThread->next = current; - - OSi_RescheduleThread(); - - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC BOOL OS_SetThreadPriority(OSThread *thread, u32 prio) -{ - OSThread *t = OSi_ThreadInfo.list; - OSThread *pre = NULL; - OSIntrMode enabled = OS_DisableInterrupts(); - - while (t && t != thread) - { - pre = t; - t = t->next; - } - - if (!t || t == &OSi_IdleThread) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - - if (t->priority != prio) - { - if (!pre) - { - OSi_ThreadInfo.list = thread->next; - } - else - { - pre->next = thread->next; - } - - thread->priority = prio; - OSi_InsertThreadToList(thread); - - OSi_RescheduleThread(); - } - - (void)OS_RestoreInterrupts(enabled); - - return TRUE; -} - -ARM_FUNC u32 OS_GetThreadPriority(const OSThread *thread) -{ - return thread->priority; -} - -ARM_FUNC void OS_Sleep(u32 msec) -{ - OSAlarm alarm; - - OS_CreateAlarm(&alarm); - OSThread *volatile p_thread = OSi_GetCurrentThread(); - OSIntrMode enabled = OS_DisableInterrupts(); - - p_thread->alarmForSleep = &alarm; - - OS_SetAlarm(&alarm, OS_MilliSecondsToTicks(msec), &OSi_SleepAlarmCallback, - (void*)&p_thread); - while (p_thread != NULL) - { - OS_SleepThread(NULL); - } - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC static void OSi_SleepAlarmCallback(void *arg) -{ - OSThread **pp_thread = (OSThread **)arg; - OSThread *p_thread = *pp_thread; - *pp_thread = NULL; - - p_thread->alarmForSleep = NULL; - - OS_WakeupThreadDirect(p_thread); -} - -ARM_FUNC OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - OSSwitchThreadCallback prev = OSi_ThreadInfo.switchCallback; - OSi_ThreadInfo.switchCallback = callback; - - (void)OS_RestoreInterrupts(enabled); - return prev; -} - -ARM_FUNC static void OSi_IdleThreadProc(void *) -{ - (void)OS_EnableInterrupts(); - while (1) - { - OS_Halt(); - } -} - -ARM_FUNC u32 OS_DisableScheduler(void) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - u32 count; - - if (OSi_RescheduleCount < (u32)-1) - { - count = OSi_RescheduleCount++; - } - (void)OS_RestoreInterrupts(enabled); - - return count; -} - -ARM_FUNC u32 OS_EnableScheduler(void) -{ - OSIntrMode enabled = OS_DisableInterrupts(); - u32 count = 0; - - if (OSi_RescheduleCount > 0) - { - count = OSi_RescheduleCount--; - } - (void)OS_RestoreInterrupts(enabled); - - return count; -} - -ARM_FUNC void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor) -{ - thread->destructor = dtor; -} diff --git a/arm9/lib/src/OS_tick.c b/arm9/lib/src/OS_tick.c deleted file mode 100644 index b0e81054..00000000 --- a/arm9/lib/src/OS_tick.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "function_target.h" -#include "OS_tick.h" -#include "OS_interrupt.h" -#include "OS_timer.h" -#include "OS_system.h" - -static u16 OSi_UseTick = FALSE; -vu64 OSi_TickCounter; -BOOL OSi_NeedResetTimer = FALSE; - -static void OSi_CountUpTick(void); - -ARM_FUNC void OS_InitTick(void) -{ - if (OSi_UseTick) - { - return; - } - OSi_UseTick = 1; - OSi_SetTimerReserved(0); - OSi_TickCounter = 0; - reg_OS_TM0CNT_H = 0; - reg_OS_TM0CNT_L = 0; - reg_OS_TM0CNT_H = 0xc1; - OS_SetIrqFunction(8, OSi_CountUpTick); - (void)OS_EnableIrqMask(8); - OSi_NeedResetTimer = FALSE; -} - -ARM_FUNC BOOL OS_IsTickAvailable(void) -{ - return OSi_UseTick; -} - -ARM_FUNC static void OSi_CountUpTick(void) -{ - OSi_TickCounter++; - - if (OSi_NeedResetTimer) - { - OS_SetTimerControl(OS_TIMER_0, 0); - OS_SetTimerCount(OS_TIMER_0, 0); - OS_SetTimerControl(OS_TIMER_0, OSi_TICK_TIMERCONTROL); - - OSi_NeedResetTimer = FALSE; - } - - OSi_EnterTimerCallback(OS_TIMER_0, (void (*)(void *))OSi_CountUpTick, 0); -} - -ARM_FUNC OSTick OS_GetTick(void) -{ - OSIntrMode prev = OS_DisableInterrupts(); - vu16 countL = *(REGType16 *)((u32)®_OS_TM0CNT_L + OS_TIMER_0 * 4); - vu64 countH = OSi_TickCounter & 0xffffffffffffULL; - - if (reg_OS_IF & OS_IE_TIMER0 && !(countL & 0x8000)) - { - countH++; - } - - (void)OS_RestoreInterrupts(prev); - - return (countH << 16) | countL; -} - -ARM_FUNC u16 OS_GetTickLo(void) -{ - return reg_OS_TM0CNT_L; -} diff --git a/arm9/lib/src/OS_timer.c b/arm9/lib/src/OS_timer.c deleted file mode 100644 index 69a1a6cd..00000000 --- a/arm9/lib/src/OS_timer.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "OS_timer.h" -#include "function_target.h" - -static u16 OSi_TimerReserved = 0; - -ARM_FUNC void OSi_SetTimerReserved(s32 timerNum) -{ - OSi_TimerReserved |= (1 << timerNum); -} diff --git a/arm9/lib/src/OS_valarm.c b/arm9/lib/src/OS_valarm.c deleted file mode 100644 index 37329147..00000000 --- a/arm9/lib/src/OS_valarm.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "OS_valarm.h" -#include "function_target.h" -#include "OS_interrupt.h" - -static struct OSiVAlarmQueue -{ - OSVAlarm *head; - OSVAlarm *tail; -} OSi_VAlarmQueue; - -static u16 OSi_UseVAlarm = FALSE; - -static s32 OSi_VFrameCount; -static s32 OSi_PreviousVCount; - -ARM_FUNC void OS_InitVAlarm(void) -{ - if (!OSi_UseVAlarm) - { - OSi_UseVAlarm = TRUE; - - OSi_VAlarmQueue.head = NULL; - OSi_VAlarmQueue.tail = NULL; - - (void)OS_DisableIrqMask(OS_IE_V_COUNT); - - OSi_VFrameCount = 0; - OSi_PreviousVCount = 0; - } -} diff --git a/arm9/lib/src/OS_vramExclusive.c b/arm9/lib/src/OS_vramExclusive.c deleted file mode 100644 index 5ce10f4a..00000000 --- a/arm9/lib/src/OS_vramExclusive.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "OS_vramExclusive.h" -#include "function_target.h" -#include "OS_system.h" - -static u32 OSi_vramExclusive; -static u16 OSi_vramLockId[9]; - -static u32 OsCountZeroBits(register u32 bitmap); - -ARM_FUNC static asm u32 OsCountZeroBits(register u32 bitmap) -{ - clz r0, r0 - bx lr -} - -ARM_FUNC void OSi_InitVramExclusive(void) -{ - OSi_vramExclusive = 0x0000; - - for (s32 i = 0; i < 9; i++) - { - OSi_vramLockId[i] = 0; - } -} - -ARM_FUNC BOOL OSi_TryLockVram(u16 bank, u16 lockId) -{ - u32 workMap; - s32 zeroBits; - OSIntrMode enabled = OS_DisableInterrupts(); - - workMap = (u32)(bank & OSi_vramExclusive); - while (TRUE) - { - zeroBits = (s32)(31 - OsCountZeroBits(workMap)); - if (zeroBits < 0) - { - break; - } - workMap &= ~(0x00000001 << zeroBits); - if (OSi_vramLockId[zeroBits] != lockId) - { - (void)OS_RestoreInterrupts(enabled); - return FALSE; - } - } - - workMap = (u32)(bank & 0x01ff); - while (TRUE) - { - zeroBits = (s32)(31 - OsCountZeroBits(workMap)); - if (zeroBits < 0) - { - break; - } - workMap &= ~(0x00000001 << zeroBits); - OSi_vramLockId[zeroBits] = lockId; - OSi_vramExclusive |= (0x00000001 << zeroBits); - } - - (void)OS_RestoreInterrupts(enabled); - return TRUE; -} - -ARM_FUNC void OSi_UnlockVram(u16 bank, u16 lockId) -{ - u32 workMap; - s32 zeroBits; - OSIntrMode enabled = OS_DisableInterrupts(); - - workMap = (u32)(bank & OSi_vramExclusive & 0x01ff); - while (TRUE) - { - zeroBits = (s32)(31- OsCountZeroBits((u32)workMap)); - if (zeroBits < 0) - { - break; - } - workMap &= ~(0x00000001 << zeroBits); - if (OSi_vramLockId[zeroBits] == lockId) - { - OSi_vramLockId[zeroBits] = 0; - OSi_vramExclusive &= ~(0x00000001 << zeroBits); - } - } - - (void)OS_RestoreInterrupts(enabled); -} diff --git a/arm9/lib/src/PXI_fifo.c b/arm9/lib/src/PXI_fifo.c deleted file mode 100644 index 35db1c7f..00000000 --- a/arm9/lib/src/PXI_fifo.c +++ /dev/null @@ -1,185 +0,0 @@ -#include "function_target.h" -#include "consts.h" -#include "OS_interrupt.h" -#include "OS_system.h" -#include "PXI_fifo.h" -#include "systemWork.h" - -static u16 FifoCtrlInit = 0; -static PXIFifoCallback FifoRecvCallbackTable[PXI_MAX_FIFO_TAG]; - -static inline PXIFifoStatus PXIi_SetToFifo(u32 data); - -ARM_FUNC void PXI_InitFifo(void) -{ - OSSystemWork *p = OS_GetSystemWork(); - OSIntrMode enabled = OS_DisableInterrupts(); - s32 i; - - if (!FifoCtrlInit) - { - FifoCtrlInit = TRUE; - - p->pxiHandleChecker[PXI_PROC_ARM9] = 0UL; - - for (i = 0; i < PXI_MAX_FIFO_TAG; i++) - { - FifoRecvCallbackTable[i] = NULL; - } - - reg_PXI_SUBP_FIFO_CNT = (REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK - | REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK | REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); - - (void)OS_ResetRequestIrqMask(OS_IE_SPFIFO_RECV); - (void)OS_SetIrqFunction(OS_IE_SPFIFO_RECV, PXIi_HandlerRecvFifoNotEmpty); - (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); - - { - s32 timeout; - s32 c; - - for (i = 0; ; i++) - { - c = reg_PXI_SUBPINTF & 15; - reg_PXI_SUBPINTF = (u16)(c << 8); - - if (c == 0 && i > 4) - { - break; - } - - for (timeout = 1000; (reg_PXI_SUBPINTF & 15) == c; timeout--) - { - if (timeout == 0) - { - i = 0; - break; - } - } - } - } - } - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback) -{ - OSSystemWork *p = OS_GetSystemWork(); - OSIntrMode enabled = OS_DisableInterrupts(); - - FifoRecvCallbackTable[fifotag] = callback; - if (callback) - { - p->pxiHandleChecker[PXI_PROC_ARM9] |= (1UL << fifotag); - } - else - { - p->pxiHandleChecker[PXI_PROC_ARM9] &= ~(1UL << fifotag); - } - (void)OS_RestoreInterrupts(enabled); -} - -ARM_FUNC BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc) -{ - OSSystemWork *p = OS_GetSystemWork(); - - return (p->pxiHandleChecker[proc] & (1UL << fifotag)) ? TRUE : FALSE; -} - -ARM_FUNC s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err) -{ - PXIFifoMessage fifomsg; - - fifomsg.e.tag = (PXIFifoTag)fifotag; - fifomsg.e.err = (u32)err; - fifomsg.e.data = data; - - return PXIi_SetToFifo(fifomsg.raw); -} - -static inline PXIFifoStatus PXIi_SetToFifo(u32 data) -{ - if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) - { - reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); - return PXI_FIFO_FAIL_SEND_ERR; - } - - OSIntrMode enabled = OS_DisableInterrupts(); - if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK) - { - (void)OS_RestoreInterrupts(enabled); - return PXI_FIFO_FAIL_SEND_FULL; - } - - reg_PXI_SEND_FIFO = data; - (void)OS_RestoreInterrupts(enabled); - return PXI_FIFO_SUCCESS; -} - -static inline PXIFifoStatus PXIi_GetFromFifo(u32 *data_buf) -{ - if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK) - { - reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK); - return PXI_FIFO_FAIL_RECV_ERR; - } - - OSIntrMode enabled = OS_DisableInterrupts(); - if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK) - { - (void)OS_RestoreInterrupts(enabled); - return PXI_FIFO_FAIL_RECV_EMPTY; - } - - - *data_buf = reg_PXI_RECV_FIFO; - (void)OS_RestoreInterrupts(enabled); - - return PXI_FIFO_SUCCESS; -} - -ARM_FUNC void PXIi_HandlerRecvFifoNotEmpty(void) -{ - PXIFifoMessage fifomsg; - PXIFifoStatus ret_code; - PXIFifoTag tag; - - while (TRUE) - { - ret_code = PXIi_GetFromFifo(&fifomsg.raw); - - if (ret_code == PXI_FIFO_FAIL_RECV_EMPTY) - { - break; - } - if (ret_code == PXI_FIFO_FAIL_RECV_ERR) - { - continue; - } - - tag = (PXIFifoTag)fifomsg.e.tag; - - if (tag) - { - if (FifoRecvCallbackTable[tag]) - { - (FifoRecvCallbackTable[tag])(tag, fifomsg.e.data, (BOOL)fifomsg.e.err); - } - else - { - if (fifomsg.e.err) - { - } - else - { - fifomsg.e.err = TRUE; - (void)PXIi_SetToFifo(fifomsg.raw); - } - } - } - else - { - } - } -} diff --git a/arm9/lib/src/PXI_init.c b/arm9/lib/src/PXI_init.c deleted file mode 100644 index d70ca3b0..00000000 --- a/arm9/lib/src/PXI_init.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "PXI_init.h" -#include "PXI_fifo.h" -#include "function_target.h" - -ARM_FUNC void PXI_Init(void) -{ - PXI_InitFifo(); -} diff --git a/arm9/lib/src/RTC_convert.c b/arm9/lib/src/RTC_convert.c deleted file mode 100644 index 3d0bb2ce..00000000 --- a/arm9/lib/src/RTC_convert.c +++ /dev/null @@ -1,164 +0,0 @@ -#include "global.h" -#include "RTC_api.h" -#include "RTC_convert.h" - -static s32 sDayOfYear[12] = { - 0, // Jan - 31, // Feb - 59, // Mar - 90, // Apr - 120, // May - 151, // Jun - 181, // Jul - 212, // Aug - 243, // Sep - 273, // Oct - 304, // Nov - 334, // Dec -}; - -static inline BOOL RTCi_IsLeapYear(u32 year) -{ - return !((year & 0x03)); -} - -s32 RTC_ConvertDateToDay(const RTCDate * date) -{ - if (date->year >= 100 - || date->month < 1 - || date->month > 12 - || date->day < 1 - || date->day > 31 - || date->week >= RTC_WEEK_MAX - || date->month < 1 // can't be - || date->month > 12 // too sure - ) - return -1; - s32 dayNum = (s32)(date->day - 1); - dayNum += sDayOfYear[date->month - 1]; - if (date->month >= 3 && RTCi_IsLeapYear(date->year)) - dayNum++; - dayNum += date->year * 365; - dayNum += (date->year + 3) / 4; - return dayNum; -} - -s32 RTCi_ConvertTimeToSecond(const RTCTime * time) -{ - return (s32)((time->hour * 60 + time->minute) * 60 + time->second); -} - -s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time) -{ - s32 day = RTC_ConvertDateToDay(date); - if (day == -1) - return -1; - s32 second = RTCi_ConvertTimeToSecond(time); - if (second == -1) - return -1; - return ((s64)day) * (60 * 60 * 24) + second; -} - -void RTC_ConvertDayToDate(RTCDate * date, s32 day) -{ - u32 year; - s32 month; - - if (day < 0) - { - day = 0; - } - if (day > 36524) // max number of days that can be recorded - { - day = 36524; - } - date->week = (RTCWeek)((day + 6) % 7); - for (year = 0; year < 99; year++) - { - s32 prev = day; - day -= (RTCi_IsLeapYear(year)) ? 366 : 365; - if (day < 0) - { - day = prev; - break; - } - } - if (day > 365) - { - day = 365; - } - date->year = year; - if (RTCi_IsLeapYear(year)) - { - if (day < 31 + 29) - { - if (day < 31) - { - month = 1; - } - else - { - month = 2; - day -= 31; - } - date->month = (u32)month; - date->day = (u32)(day + 1); - return; - } - else - { - day--; - } - } - for (month = 11; month >= 0; month--) - { - if (day >= sDayOfYear[month]) - { - date->month = (u32)(month + 1); - date->day = (u32)(day - sDayOfYear[month] + 1); - return; - } - } - // Internal Error. -} - -void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec) -{ - if (sec < 0) - sec = 0; - if (sec > 86399) - sec = 86399; - time->second = (u32)(sec % 60); - sec /= 60; - time->minute = (u32)(sec % 60); - sec /= 60; - time->hour = (u32)sec; -} - -void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec) -{ - if (sec < 0) - sec = 0; - else if (sec > 3155759999) - sec = 3155759999; - RTCi_ConvertSecondToTime(time, (s32)(sec % 86400)); - RTC_ConvertDayToDate(date, (s32)(sec / 86400)); -} - -RTCWeek RTC_GetDayOfWeek(RTCDate * date) -{ - int cent; - int year = (int)(2000 + date->year); - int month = (int)date->month; - int day = (int)date->day; - - month -= 2; - if (month < 1) - { - month += 12; - --year; - } - cent = year / 100; - year %= 100; - return (RTCWeek)(((26 * month - 2) / 10 + day + year + year / 4 + cent / 4 + 5 * cent) % 7); -} diff --git a/arm9/lib/src/RTC_internal.c b/arm9/lib/src/RTC_internal.c deleted file mode 100644 index e3a132ab..00000000 --- a/arm9/lib/src/RTC_internal.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "function_target.h" -#include "PXI_fifo.h" -#include "RTC_internal.h" - -static BOOL RtcSendPxiCommand(u8 command); - -ARM_FUNC BOOL RTCi_ReadRawDateTimeAsync(void) -{ - return RtcSendPxiCommand(16); -} - -ARM_FUNC BOOL RTCi_ReadRawDateAsync(void) -{ - return RtcSendPxiCommand(17); -} - -ARM_FUNC BOOL RTCi_ReadRawTimeAsync(void) -{ - return RtcSendPxiCommand(18); -} - -ARM_FUNC BOOL RTCi_WriteRawStatus2Async(void) -{ - return RtcSendPxiCommand(39); -} - -ARM_FUNC static BOOL RtcSendPxiCommand(u8 command) -{ - s32 data = command << 8 & 0x7f00; - return PXI_SendWordByFifo(PXI_FIFO_TAG_RTC, (u32)data, FALSE) >= 0; -} diff --git a/arm9/lib/src/SND_alarm.c b/arm9/lib/src/SND_alarm.c deleted file mode 100644 index e216c02c..00000000 --- a/arm9/lib/src/SND_alarm.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "SND_alarm.h" - -struct AlarmCallback { - SNDAlarmCallback cb; - void *data; - u8 id; - u8 padding[3]; -}; - -static struct AlarmCallback sCallbackTable[SND_ALARM_COUNT]; - -ARM_FUNC void SND_AlarmInit(void) { - for (s32 i = 0; i < SND_ALARM_COUNT; i++) { - sCallbackTable[i].cb = NULL; - sCallbackTable[i].data = NULL; - sCallbackTable[i].id = 0; - } -} - -ARM_FUNC void SNDi_IncAlarmId(u32 idx) { - struct AlarmCallback *ac = &sCallbackTable[idx]; - ac->id++; -} - -ARM_FUNC u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data) { - struct AlarmCallback *ac = &sCallbackTable[idx]; - ac->cb = cb; - ac->data = data; - ac->id++; - return ac->id; -} - -ARM_FUNC void SNDi_CallAlarmHandler(s32 idx) { - struct AlarmCallback *ac = &sCallbackTable[idx & 0xFF]; - if (((idx >> 8) & 0xFF) != ac->id) - return; - if (ac->cb == NULL) - return; - ac->cb(ac->data); -} diff --git a/arm9/lib/src/SND_bank.c b/arm9/lib/src/SND_bank.c deleted file mode 100644 index 44075454..00000000 --- a/arm9/lib/src/SND_bank.c +++ /dev/null @@ -1,174 +0,0 @@ -#include "SND_bank.h" -#include "OS_mutex.h" - -void DC_StoreRange(const void *, u32); - -/* - * WaveArc linking seems to work like the following: - * - * Each SNDBankData can have up to 4 WaveArcs assigned. - * To avoid loading the same WaveArc by multiple banks, - * a linked list using WaveArcLinks is chained through all banks - * which use a WaveArc. - * - * That WaveArc has a head pointer, which points to the first - * WaveArcLink in that chain of banks. - */ - -/* - * Set bank's wavearc link at index to specified wavearc - */ -ARM_FUNC void SND_AssignWaveArc(struct SNDBankData *bankData, s32 index, struct SNDWaveArc *waveArc) { - SNDi_LockMutex(); - struct SNDWaveArc *selectedWaveArc = bankData->waveArcLinks[index].waveArc; - if (selectedWaveArc != NULL) { - if (waveArc == selectedWaveArc) { - SNDi_UnlockMutex(); - return; - } - - if (&bankData->waveArcLinks[index] == selectedWaveArc->waveArcLLHead) { - selectedWaveArc->waveArcLLHead = bankData->waveArcLinks[index].waveArcLLnext; - DC_StoreRange(bankData->waveArcLinks[index].waveArc, sizeof(struct SNDWaveArc)); - } else { - struct SNDWaveArcLink *cur; - for (cur = selectedWaveArc->waveArcLLHead; cur != NULL; cur = cur->waveArcLLnext) { - if (&bankData->waveArcLinks[index] == cur->waveArcLLnext) - break; - } - cur->waveArcLLnext = bankData->waveArcLinks[index].waveArcLLnext; - DC_StoreRange(cur, sizeof(*cur)); - } - } - struct SNDWaveArcLink *oldHead = waveArc->waveArcLLHead; - waveArc->waveArcLLHead = &bankData->waveArcLinks[index]; - bankData->waveArcLinks[index].waveArcLLnext = oldHead; - bankData->waveArcLinks[index].waveArc = waveArc; - // BUG: Shouldn't the mutex unlock be after writing to cache? - SNDi_UnlockMutex(); - DC_StoreRange(bankData, sizeof(*bankData)); - DC_StoreRange(waveArc, sizeof(*waveArc)); -} - -ARM_FUNC void SND_DestroyBank(struct SNDBankData *bankData) { - SNDi_LockMutex(); - - for (s32 i = 0; i < SND_BANK_MAX_WAVEARC; i++) { - struct SNDWaveArcLink *curWaveArcLink = &bankData->waveArcLinks[i]; - struct SNDWaveArc *curWaveArc = bankData->waveArcLinks[i].waveArc; - - if (curWaveArc == NULL) - continue; - - if (curWaveArcLink == curWaveArc->waveArcLLHead) { - curWaveArc->waveArcLLHead = bankData->waveArcLinks[i].waveArcLLnext; - DC_StoreRange(curWaveArc, sizeof(*curWaveArc)); - } else { - struct SNDWaveArcLink *cur; - for (cur = curWaveArc->waveArcLLHead; cur != NULL; cur = cur->waveArcLLnext) { - if (&bankData->waveArcLinks[i] == cur->waveArcLLnext) - break; - } - cur->waveArcLLnext = bankData->waveArcLinks[i].waveArcLLnext; - DC_StoreRange(cur, sizeof(*cur)); - } - } - - SNDi_UnlockMutex(); -} - -ARM_FUNC void SND_DestroyWaveArc(struct SNDWaveArc *waveArc) { - SNDi_LockMutex(); - struct SNDWaveArcLink *cur = waveArc->waveArcLLHead; - - while (cur != NULL) { - struct SNDWaveArcLink *newCur = cur->waveArcLLnext; - cur->waveArc = NULL; - cur->waveArcLLnext = NULL; - DC_StoreRange(cur, sizeof(*cur)); - cur = newCur; - } - - SNDi_UnlockMutex(); -} - -ARM_FUNC struct SNDInstPos SND_GetFirstInstDataPos(const struct SNDBankData *bankData) { -#pragma unused (bankData) - struct SNDInstPos retval; - retval.program = 0; - retval.index = 0; - return retval; -} - -ARM_FUNC static inline struct SNDDrumSet *test(const struct SNDBankData *bank, u32 off) { - return (struct SNDDrumSet *)((u8 *)bank + (off >> 8)); -} - -ARM_FUNC BOOL SND_GetNextInstData(const struct SNDBankData *bankData, struct SNDInstData *instData, struct SNDInstPos *instPos) { - while (instPos->program < bankData->instCount) { - struct SNDDrumSet *drums; - struct SNDKeySplit *keySplit; - - u32 instOffset = bankData->instOffsets[instPos->program]; - instData->type = SND_INST_OFFSET_TYPE(instOffset); - - switch (instData->type) { - case SND_INST_PCM: - case SND_INST_PSG: - case SND_INST_NOISE: - case SND_INST_DIRECTPCM: - case SND_INST_DUMMY: - instData->param = *SND_INST_OFFSET_NORMAL(bankData, instOffset); - instPos->program++; - return TRUE; - case SND_INST_DRUM_TABLE: - drums = SND_INST_OFFSET_DRUMS(bankData, instOffset); - // silly programming 101: put a loop in a place that never loops - for (; instPos->index < drums->maxKey - drums->minKey + 1;) { - *instData = drums->instruments[instPos->index]; - instPos->index++; - return TRUE; - } - break; - case SND_INST_KEY_SPLIT: - keySplit = SND_INST_OFFSET_KEYSPL(bankData, instOffset); - for (; instPos->index < SND_INST_MAX_KEYSPLIT;) { - if (keySplit->key[instPos->index] == 0) - break; - *instData = keySplit->instruments[instPos->index]; - instPos->index++; - return TRUE; - } - break; - } - - instPos->program++; - instPos->index = 0; - } - return FALSE; -} - -ARM_FUNC u32 SND_GetWaveDataCount(const struct SNDWaveArc *waveArc) { - return waveArc->waveCount; -} - -ARM_FUNC void SND_SetWaveDataAddress(struct SNDWaveArc *waveArc, s32 index, const struct SNDWaveData *waveData) { - SNDi_LockMutex(); - waveArc->waveOffsets[index] = (u32)waveData; - DC_StoreRange(&waveArc->waveOffsets[index], sizeof(u32)); - SNDi_UnlockMutex(); -} - -ARM_FUNC const struct SNDWaveData *SND_GetWaveDataAddress(const struct SNDWaveArc *waveArc, s32 index) { - SNDi_LockMutex(); - u32 retval = waveArc->waveOffsets[index]; - if (retval != 0) { - // < 0x2000000 aka, not a pointer to main RAM - if (retval < 0x2000000) - retval = (u32)&((u8 *)waveArc)[retval]; - } else { - retval = 0; - } - SNDi_UnlockMutex(); - return (struct SNDWaveData *)retval; -} diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c deleted file mode 100644 index 044d960f..00000000 --- a/arm9/lib/src/SND_command.c +++ /dev/null @@ -1,333 +0,0 @@ -#include "SND_alarm.h" -#include "SND_command.h" -#include "SND_work.h" -#include "OS_emulator.h" -#include "OS_system.h" -#include "OS_cache.h" -#include "PXI_fifo.h" - -#define SND_CMD_WAIT_QUEUE_COUNT 8 - -static struct SNDCommand sCommandArray[SND_CMD_COUNT]; -static struct SNDSharedWork sSharedWork; -static struct SNDCommand *sWaitingCommandListQueue[SND_CMD_WAIT_QUEUE_COUNT + 1]; // not sure why this is one element to large -static struct SNDCommand *sReserveList; -static struct SNDCommand *sReserveListEnd; -static struct SNDCommand *sFreeListEnd; -static s32 sWaitingCommandListQueueRead; -static s32 sWaitingCommandListQueueWrite; -static s32 sWaitingCommandListCount; -static u32 sCurrentTag; -static u32 sFinishedTag; -static struct SNDCommand *sFreeList; - -static void InitPXI(void); -static void RequestCommandProc(void); -static struct SNDCommand *AllocCommand(void); -static BOOL IsCommandAvailable(void); - -ARM_FUNC void SND_CommandInit(void) { - InitPXI(); - sFreeList = sCommandArray; - for (int i = 0; i < SND_CMD_COUNT - 1; i++) { - sCommandArray[i].llNext = &sCommandArray[i+1]; - } - sCommandArray[SND_CMD_COUNT - 1].llNext = NULL; - sFreeListEnd = &sCommandArray[SND_CMD_COUNT - 1]; - sReserveList = NULL; - sReserveListEnd = NULL; - sWaitingCommandListCount = 0; - sWaitingCommandListQueueRead = 0; - sWaitingCommandListQueueWrite = 0; - sCurrentTag = 1; - sFinishedTag = 0; - SNDi_SharedWork = &sSharedWork; - SNDi_InitSharedWork(SNDi_SharedWork); - - struct SNDCommand *cmd = SND_AllocCommand(SND_CMD_FLAG_BLOCK); - if (cmd == NULL) - return; - - cmd->id = SND_CMD_SET_SHARED_WORK; - cmd->arg[0] = (u32)SNDi_SharedWork; - SND_PushCommand(cmd); - (void)SND_FlushCommand(SND_CMD_FLAG_BLOCK); -} - -ARM_FUNC const struct SNDCommand *SND_RecvCommandReply(u32 flags) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - if (flags & SND_CMD_FLAG_BLOCK) { - u32 tag = SNDi_GetFinishedCommandTag(); - while (sFinishedTag == tag) { - (void)OS_RestoreInterrupts(oldirq); - OS_SpinWait(100); - oldirq = OS_DisableInterrupts(); - tag = SNDi_GetFinishedCommandTag(); - } - } else { - u32 tag = SNDi_GetFinishedCommandTag(); - if (sFinishedTag == tag) { - (void)OS_RestoreInterrupts(oldirq); - return NULL; - } - } - - struct SNDCommand *queueRead = sWaitingCommandListQueue[sWaitingCommandListQueueRead]; - - if (++sWaitingCommandListQueueRead > SND_CMD_WAIT_QUEUE_COUNT) - sWaitingCommandListQueueRead = 0; - - struct SNDCommand *cur = queueRead; - while (cur->llNext != NULL) - cur = cur->llNext; - - if (sFreeListEnd != NULL) { - sFreeListEnd->llNext = queueRead; - } else { - sFreeList = queueRead; - } - - sFreeListEnd = cur; - sWaitingCommandListCount--; - sFinishedTag++; - - (void)OS_RestoreInterrupts(oldirq); - return queueRead; -} - -ARM_FUNC struct SNDCommand *SND_AllocCommand(u32 flags) { - struct SNDCommand *cmd; - if (!IsCommandAvailable()) - return NULL; - - cmd = AllocCommand(); - if (cmd != NULL) - return cmd; - - if ((flags & SND_CMD_FLAG_BLOCK) == 0) - return NULL; - - if (SND_CountWaitingCommand() > 0) { - while (SND_RecvCommandReply(SND_CMD_FLAG_NOBLOCK) != NULL) { } - - cmd = AllocCommand(); - if (cmd != NULL) - return cmd; - } else { - (void)SND_FlushCommand(SND_CMD_FLAG_BLOCK); - } - - RequestCommandProc(); - - do { - (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); - cmd = AllocCommand(); - } while (cmd == NULL); - return cmd; -} - -ARM_FUNC void SND_PushCommand(struct SNDCommand *cmd) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - struct SNDCommand *newend = cmd; - if (sReserveListEnd == NULL) { - sReserveList = cmd; - sReserveListEnd = cmd; - } else { - sReserveListEnd->llNext = cmd; - sReserveListEnd = cmd; - } - - cmd->llNext = NULL; - - (void)OS_RestoreInterrupts(oldirq); -} - -ARM_FUNC BOOL SND_FlushCommand(u32 flags) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - if (sReserveList == NULL) { - (void)OS_RestoreInterrupts(oldirq); - return TRUE; - } - - if (sWaitingCommandListCount >= SND_CMD_WAIT_QUEUE_COUNT) { - if ((flags & SND_CMD_FLAG_BLOCK) == 0) { - (void)OS_RestoreInterrupts(oldirq); - return FALSE; - } - - do { - (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); - } while (sWaitingCommandListCount >= SND_CMD_WAIT_QUEUE_COUNT); - } - - DC_FlushRange(sCommandArray, sizeof(sCommandArray)); - - s32 result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); - if (result < 0) { - if ((flags & SND_CMD_FLAG_BLOCK) == 0) { - (void)OS_RestoreInterrupts(oldirq); - return FALSE; - } - - result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); - while (result < 0) { - (void)OS_RestoreInterrupts(oldirq); - OS_SpinWait(100); - oldirq = OS_DisableInterrupts(); - result = PXI_SendWordByFifo(7, (u32)sReserveList, 0); - } - } - - if ((flags & SND_CMD_FLAG_IMMEDIATE) != 0) { - RequestCommandProc(); - } - - sWaitingCommandListQueue[sWaitingCommandListQueueWrite] = sReserveList; - - if (++sWaitingCommandListQueueWrite > SND_CMD_WAIT_QUEUE_COUNT) { - sWaitingCommandListQueueWrite = 0; - } - - sReserveList = NULL; - sReserveListEnd = NULL; - sWaitingCommandListCount++; - sCurrentTag++; - - (void)OS_RestoreInterrupts(oldirq); - return TRUE; -} - -ARM_FUNC void SND_WaitForCommandProc(u32 tag) { - if (SND_IsFinishedCommandTag(tag)) - return; - - while (SND_RecvCommandReply(SND_CMD_FLAG_NOBLOCK) != NULL) { } - - if (SND_IsFinishedCommandTag(tag)) - return; - - RequestCommandProc(); - - if (SND_IsFinishedCommandTag(tag)) - return; - - do { - (void)SND_RecvCommandReply(SND_CMD_FLAG_BLOCK); - } while (SND_IsFinishedCommandTag(tag) == 0); -} - -ARM_FUNC u32 SND_GetCurrentCommandTag(void) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - u32 retval; - if (sReserveList == NULL) - retval = sFinishedTag; - else - retval = sCurrentTag; - - (void)OS_RestoreInterrupts(oldirq); - return retval; -} - -ARM_FUNC BOOL SND_IsFinishedCommandTag(u32 tag) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - BOOL result; - if (tag > sFinishedTag) { - if (tag - sFinishedTag < 0x80000000) - result = FALSE; - else - result = TRUE; - } else { - if (sFinishedTag - tag < 0x80000000) - result = TRUE; - else - result = FALSE; - } - - (void)OS_RestoreInterrupts(oldirq); - return result; -} - -ARM_FUNC s32 SND_CountFreeCommand(void) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - s32 count = 0; - for (struct SNDCommand *cmd = sFreeList; cmd != NULL; cmd = cmd->llNext) - count++; - - (void)OS_RestoreInterrupts(oldirq); - return count; -} - -ARM_FUNC s32 SND_CountReservedCommand(void) { - OSIntrMode oldirq = OS_DisableInterrupts(); - - s32 count = 0; - for (struct SNDCommand *cmd = sReserveList; cmd != NULL; cmd = cmd->llNext) - count++; - - (void)OS_RestoreInterrupts(oldirq); - return count; -} - -ARM_FUNC s32 SND_CountWaitingCommand(void) { - return SND_CMD_COUNT - SND_CountFreeCommand() - SND_CountReservedCommand(); -} - -ARM_FUNC static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL) { -#pragma unused (tag) - OSIntrMode oldirq = OS_DisableInterrupts(); - SNDi_CallAlarmHandler((s32)data); - (void)OS_RestoreInterrupts(oldirq); -} - -ARM_FUNC static void InitPXI(void) { - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback); - - if (!IsCommandAvailable()) - return; - - if (PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)) - return; - - do { - OS_SpinWait(100); - } while (!PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7)); -} - -ARM_FUNC static void RequestCommandProc(void) { - while (PXI_SendWordByFifo(7, 0, 0) < 0) { } -} - -ARM_FUNC static struct SNDCommand *AllocCommand(void) { - OSIntrMode oldirq = OS_DisableInterrupts(); - if (sFreeList == NULL) { - (void)OS_RestoreInterrupts(oldirq); - return NULL; - } - - struct SNDCommand *retval = sFreeList; - - sFreeList = sFreeList->llNext; - if (sFreeList == NULL) - sFreeListEnd = NULL; - (void)OS_RestoreInterrupts(oldirq); - return retval; -} - -ARM_FUNC static BOOL IsCommandAvailable(void) { - if (!OS_IsRunOnEmulator()) - return TRUE; - - OSIntrMode oldirq = OS_DisableInterrupts(); - // TODO use proper register names here - // is this some kind of debug or ensata register? - *(vu32 *)0x4FFF200 = 0x10; - u32 resp = *(vu32 *)0x4FFF200; - (void)OS_RestoreInterrupts(oldirq); - return resp != 0; -} diff --git a/arm9/lib/src/SND_interface.c b/arm9/lib/src/SND_interface.c deleted file mode 100644 index 42b5ff42..00000000 --- a/arm9/lib/src/SND_interface.c +++ /dev/null @@ -1,172 +0,0 @@ -#include "SND_interface.h" -#include "SND_command.h" - -static void PushCommand_impl(s32 id, u32 par1, u32 par2, u32 par3, u32 par4); -#define PushCmd1(id, a) PushCommand_impl(id, (u32)(a), 0, 0, 0) -#define PushCmd2(id, a, b) PushCommand_impl(id, (u32)(a), (u32)(b), 0, 0) -#define PushCmd3(id, a, b, c) PushCommand_impl(id, (u32)(a), (u32)(b), (u32)(c), 0) -#define PushCmd4(id, a, b, c, d) PushCommand_impl(id, (u32)(a), (u32)(b), (u32)(c), (u32)(d)) - -// TODO fill in "random" constants with macros - -// ARM_FUNC void SND_StartSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData) { } - -ARM_FUNC void SND_StopSeq(s32 player) { - PushCmd1(SND_CMD_STOP_SEQ, player); -} - -ARM_FUNC void SND_PrepareSeq(s32 player, const void *seqBasePtr, u32 seqOffset, struct SNDBankData *bankData) { - PushCmd4(SND_CMD_PREPARE_SEQ, player, seqBasePtr, seqOffset, bankData); -} - -ARM_FUNC void SND_StartPreparedSeq(s32 player) { - PushCmd1(SND_CMD_START_PREPARED_SEQ, player); -} - -ARM_FUNC void SND_PauseSeq(s32 player, BOOL flag) { - PushCmd2(SND_CMD_PAUSE_SEQ, player, flag); -} - -// ARM_FUNC void SND_SetPlayerTempoRatio(s32 player, s32 ratio) { } - -ARM_FUNC void SND_SetPlayerVolume(s32 player, s32 volume) { - SNDi_SetPlayerParam(player, 6, (u32)volume, 2); -} - -ARM_FUNC void SND_SetPlayerChannelPriority(s32 player, s32 prio) { - SNDi_SetPlayerParam(player, 4, (u32)prio, 1); -} - -// ARM_FUNC void SND_SetPlayerLocalVariable(s32 player, s32 varNo, s16 var) { } - -// ARM_FUNC void SND_SetPlayerGlobalVariable(s32 varNo, s16 var) { } - -// ARM_FUNC void SND_SetTrackVolume(s32 player, u32 trackBitMask, s32 volume) { } - -ARM_FUNC void SND_SetTrackPitch(s32 player, u32 trackBitMask, s32 pitch) { - SNDi_SetTrackParam(player, trackBitMask, 12, (u32)pitch, 2); -} - -ARM_FUNC void SND_SetTrackPan(s32 player, u32 trackBitMask, s32 pan) { - SNDi_SetTrackParam(player, trackBitMask, 9, (u32)pan, 1); -} - -ARM_FUNC void SND_SetTrackAllocatableChannel(s32 player, u32 trackBitMask, u32 chnBitMask) { - PushCmd3(SND_CMD_ALLOCATABLE_CHANNEL, player, trackBitMask, chnBitMask); -} - -ARM_FUNC void SND_StartTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags) { - PushCmd4(SND_CMD_START_TIMER, chnBitMask, capBitMask, alarmBitMask, flags); -} - -ARM_FUNC void SND_StopTimer(u32 chnBitMask, u32 capBitMask, u32 alarmBitMask, u32 flags) { - s32 i = 0; - u32 tmpMask = alarmBitMask; - - while (i < SND_ALARM_COUNT && tmpMask != 0) { - if (tmpMask & 1) - SNDi_IncAlarmId((u32)i); - i++; - tmpMask >>= 1; - } - - PushCmd4(SND_CMD_STOP_TIMER, chnBitMask, capBitMask, alarmBitMask, flags); -} - -ARM_FUNC void SND_SetupCapture(s32 capture, s32 format, void *bufferPtr, u32 length, BOOL loopFlag, s32 in, s32 out) { - PushCmd3(SND_CMD_SETUP_CAPTURE, bufferPtr, length, - (capture << 31) | (format << 30) | (loopFlag << 29) | (in << 28) | (out << 27)); -} - -ARM_FUNC void SND_SetupAlarm(s32 alarm, u32 tick, u32 period, SNDAlarmCallback cb, void *userData) { - PushCmd4(SND_CMD_SETUP_ALARM, alarm, tick, period, SNDi_SetAlarmHandler((u32)alarm, cb, userData)); -} - -// ARM_FUNC void SND_SetTrackMute(s32 player, u32 trackBitMask, BOOL flag) { } - -// ARM_FUNC void SND_StopUnlockedChannel(u32 chnBitMask, u32 flags) { } - -ARM_FUNC void SND_LockChannel(u32 chnBitMask, u32 flags) { - PushCmd2(SND_CMD_LOCK_CHANNEL, chnBitMask, flags); -} - -ARM_FUNC void SND_UnlockChannel(u32 chnBitMask, u32 flags) { - PushCmd2(SND_CMD_UNLOCK_CHANNEL, chnBitMask, flags); -} - -ARM_FUNC void SND_SetChannelTimer(u32 chnBitMask, s32 timer) { - PushCmd2(SND_CMD_CHANNEL_TIMER, chnBitMask, timer); -} - -ARM_FUNC void SND_SetChannelVolume(u32 chnBitMask, s32 volume, s32 chnDataShift) { - PushCmd3(SND_CMD_CHANNEL_VOLUME, chnBitMask, volume, chnDataShift); -} - -ARM_FUNC void SND_SetChannelPan(u32 chnBitMask, s32 pan) { - PushCmd2(SND_CMD_CHANNEL_PAN, chnBitMask, pan); -} - -ARM_FUNC void SND_SetupChannelPcm(s32 chn, s32 waveFormat, const void *dataAddr, s32 loopMode, s32 loopStart, s32 dataLen, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { - PushCmd4(SND_CMD_SETUP_CHANNEL_PCM, - chn | (timer << 16), - dataAddr, - (volume << 24) | (chnDataShift << 22) | dataLen, - (loopMode << 26) | (waveFormat << 24) | (pan << 16) | loopStart); -} - -// ARM_FUNC void SND_SetupChannelPsg(s32 chn, s32 sndDuty, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { } - -// ARM_FUNC void SND_SetupChannelNoise(s32 chn, s32 volume, s32 chnDataShift, s32 timer, s32 pan) { } - -ARM_FUNC void SND_InvalidateSeqData(const void *start, const void *end) { - PushCmd2(SND_CMD_INVALIDATE_SEQ, start, end); -} - -ARM_FUNC void SND_InvalidateBankData(const void *start, const void *end) { - PushCmd2(SND_CMD_INVALIDATE_BANK, start, end); -} - -ARM_FUNC void SND_InvalidateWaveData(const void *start, const void *end) { - PushCmd2(SND_CMD_INVALIDATE_WAVE, start, end); -} - -// ARM_FUNC void SND_SetMasterVolume(s32 volume) { } - -ARM_FUNC void SND_SetOutputSelector(s32 left, s32 right, s32 channel1, s32 channel3) { - PushCmd4(SND_CMD_OUTPUT_SELECTOR, left, right, channel1, channel3); -} - -ARM_FUNC void SND_SetMasterPan(s32 pan) { - PushCmd1(SND_CMD_MASTER_PAN, pan); -} - -ARM_FUNC void SND_ResetMasterPan(void) { - PushCmd1(SND_CMD_MASTER_PAN, -1); -} - -// ARM_FUNC void SND_ReadDriverInfo(struct SNDDriverInfo *info) { } - -ARM_FUNC void SNDi_SetPlayerParam(s32 player, u32 offset, u32 data, s32 size) { - PushCmd4(SND_CMD_PLAYER_PARAM, player, offset, data, size); -} - -ARM_FUNC void SNDi_SetTrackParam(s32 player, u32 trackBitMask, u32 offset, u32 data, s32 size) { - PushCmd4(SND_CMD_TRACK_PARAM, player | (size << 24), trackBitMask, offset, data); -} - -// ARM_FUNC void SNDi_SetSurroundDecay(s32 decay) { } - -// ARM_FUNC void SNDi_SkipSeq(s32 player, u32 tick) { } - -ARM_FUNC static void PushCommand_impl(s32 id, u32 par1, u32 par2, u32 par3, u32 par4) { - struct SNDCommand *cmd = SND_AllocCommand(SND_CMD_FLAG_BLOCK); - if (cmd == NULL) - return; - - cmd->id = id; - cmd->arg[0] = par1; - cmd->arg[1] = par2; - cmd->arg[2] = par3; - cmd->arg[3] = par4; - SND_PushCommand(cmd); -} diff --git a/arm9/lib/src/SND_main.c b/arm9/lib/src/SND_main.c deleted file mode 100644 index f97b0873..00000000 --- a/arm9/lib/src/SND_main.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "SND_main.h" -#include "SND_command.h" -#include "SND_alarm.h" - -#include "global.h" -#include "OS_mutex.h" - -static struct OSMutex sSndMutex; -static s32 sSndInitialized; - -ARM_FUNC void SND_Init(void) { - if (sSndInitialized) - return; - sSndInitialized = 1; - OS_InitMutex(&sSndMutex); - SND_CommandInit(); - SND_AlarmInit(); -} - -ARM_FUNC void SNDi_LockMutex(void) { - OS_LockMutex(&sSndMutex); -} - -ARM_FUNC void SNDi_UnlockMutex(void) { - OS_UnlockMutex(&sSndMutex); -} diff --git a/arm9/lib/src/SND_util.c b/arm9/lib/src/SND_util.c deleted file mode 100644 index 6ff8cb14..00000000 --- a/arm9/lib/src/SND_util.c +++ /dev/null @@ -1,238 +0,0 @@ -#include "SND_util.h" - -// not used in pokediamond -//static const u16 sPitchTable[0x600] = { -// 0x0000, 0x003B, 0x0076, 0x00B2, 0x00ED, 0x0128, 0x0164, 0x019f, -// 0x01DB, 0x0217, 0x0252, 0x028E, 0x02CA, 0x0305, 0x0341, 0x037D, -// 0x03B9, 0x03F5, 0x0431, 0x046E, 0x04AA, 0x04E6, 0x0522, 0x055F, -// 0x059B, 0x05D8, 0x0614, 0x0651, 0x068D, 0x06CA, 0x0707, 0x0743, -// 0x0780, 0x07BD, 0x07FA, 0x0837, 0x0874, 0x08B1, 0x08EF, 0x092C, -// 0x0969, 0x09A7, 0x09E4, 0x0A21, 0x0A5F, 0x0A9C, 0x0ADA, 0x0B18, -// 0x0B56, 0x0B93, 0x0BD1, 0x0C0F, 0x0C4D, 0x0C8B, 0x0CC9, 0x0D07, -// 0x0D45, 0x0D84, 0x0DC2, 0x0E00, 0x0E3F, 0x0E7D, 0x0EBC, 0x0EFA, -// 0x0F39, 0x0F78, 0x0FB6, 0x0FF5, 0x1034, 0x1073, 0x10B2, 0x10F1, -// 0x1130, 0x116F, 0x11AE, 0x11EE, 0x122D, 0x126C, 0x12AC, 0x12EB, -// 0x132B, 0x136B, 0x13AA, 0x13EA, 0x142A, 0x146A, 0x14A9, 0x14E9, -// 0x1529, 0x1569, 0x15AA, 0x15EA, 0x162A, 0x166A, 0x16AB, 0x16EB, -// 0x172C, 0x176C, 0x17AD, 0x17ED, 0x182E, 0x186F, 0x18B0, 0x18F0, -// 0x1931, 0x1972, 0x19B3, 0x19F5, 0x1A36, 0x1A77, 0x1AB8, 0x1AFA, -// 0x1B3B, 0x1B7D, 0x1BBE, 0x1C00, 0x1C41, 0x1C83, 0x1CC5, 0x1D07, -// 0x1D48, 0x1D8A, 0x1DCC, 0x1E0E, 0x1E51, 0x1E93, 0x1ED5, 0x1F17, -// 0x1F5A, 0x1F9C, 0x1FDF, 0x2021, 0x2064, 0x20A6, 0x20E9, 0x212C, -// 0x216F, 0x21B2, 0x21F5, 0x2238, 0x227B, 0x22BE, 0x2301, 0x2344, -// 0x2388, 0x23CB, 0x240E, 0x2452, 0x2496, 0x24D9, 0x251D, 0x2561, -// 0x25A4, 0x25E8, 0x262C, 0x2670, 0x26B4, 0x26F8, 0x273D, 0x2781, -// 0x27C5, 0x280A, 0x284E, 0x2892, 0x28D7, 0x291C, 0x2960, 0x29A5, -// 0x29EA, 0x2A2F, 0x2A74, 0x2AB9, 0x2AFE, 0x2B43, 0x2B88, 0x2BCD, -// 0x2C13, 0x2C58, 0x2C9D, 0x2CE3, 0x2D28, 0x2D6E, 0x2DB4, 0x2DF9, -// 0x2E3F, 0x2E85, 0x2ECB, 0x2F11, 0x2F57, 0x2F9D, 0x2FE3, 0x302A, -// 0x3070, 0x30B6, 0x30FD, 0x3143, 0x318A, 0x31D0, 0x3217, 0x325E, -// 0x32A5, 0x32EC, 0x3332, 0x3379, 0x33C1, 0x3408, 0x344F, 0x3496, -// 0x34DD, 0x3525, 0x356C, 0x35B4, 0x35FB, 0x3643, 0x368B, 0x36D3, -// 0x371A, 0x3762, 0x37AA, 0x37F2, 0x383A, 0x3883, 0x38CB, 0x3913, -// 0x395C, 0x39A4, 0x39ED, 0x3A35, 0x3A7E, 0x3AC6, 0x3B0F, 0x3B58, -// 0x3BA1, 0x3BEA, 0x3C33, 0x3C7C, 0x3CC5, 0x3D0E, 0x3D58, 0x3DA1, -// 0x3DEA, 0x3E34, 0x3E7D, 0x3EC7, 0x3F11, 0x3F5A, 0x3FA4, 0x3FEE, -// 0x4038, 0x4082, 0x40CC, 0x4116, 0x4161, 0x41AB, 0x41F5, 0x4240, -// 0x428A, 0x42D5, 0x431F, 0x436A, 0x43B5, 0x4400, 0x444B, 0x4495, -// 0x44E1, 0x452C, 0x4577, 0x45C2, 0x460D, 0x4659, 0x46A4, 0x46F0, -// 0x473B, 0x4787, 0x47D3, 0x481E, 0x486A, 0x48B6, 0x4902, 0x494E, -// 0x499A, 0x49E6, 0x4A33, 0x4A7F, 0x4ACB, 0x4B18, 0x4B64, 0x4BB1, -// 0x4BFE, 0x4C4A, 0x4C97, 0x4CE4, 0x4D31, 0x4D7E, 0x4DCB, 0x4E18, -// 0x4E66, 0x4EB3, 0x4F00, 0x4F4E, 0x4F9B, 0x4FE9, 0x5036, 0x5084, -// 0x50D2, 0x5120, 0x516E, 0x51BC, 0x520A, 0x5258, 0x52A6, 0x52F4, -// 0x5343, 0x5391, 0x53E0, 0x542E, 0x547D, 0x54CC, 0x551A, 0x5569, -// 0x55B8, 0x5607, 0x5656, 0x56A5, 0x56F4, 0x5744, 0x5793, 0x57E2, -// 0x5832, 0x5882, 0x58D1, 0x5921, 0x5971, 0x59C1, 0x5A10, 0x5A60, -// 0x5AB0, 0x5B01, 0x5B51, 0x5BA1, 0x5BF1, 0x5C42, 0x5C92, 0x5CE3, -// 0x5D34, 0x5D84, 0x5DD5, 0x5E26, 0x5E77, 0x5EC8, 0x5F19, 0x5F6A, -// 0x5FBB, 0x600D, 0x605E, 0x60B0, 0x6101, 0x6153, 0x61A4, 0x61F6, -// 0x6248, 0x629A, 0x62EC, 0x633E, 0x6390, 0x63E2, 0x6434, 0x6487, -// 0x64D9, 0x652C, 0x657E, 0x65D1, 0x6624, 0x6676, 0x66C9, 0x671C, -// 0x676F, 0x67C2, 0x6815, 0x6869, 0x68BC, 0x690F, 0x6963, 0x69B6, -// 0x6A0A, 0x6A5E, 0x6AB1, 0x6B05, 0x6B59, 0x6BAD, 0x6C01, 0x6C55, -// 0x6CAA, 0x6CFE, 0x6D52, 0x6DA7, 0x6DFB, 0x6E50, 0x6EA4, 0x6EF9, -// 0x6F4E, 0x6FA3, 0x6FF8, 0x704D, 0x70A2, 0x70F7, 0x714D, 0x71A2, -// 0x71F7, 0x724D, 0x72A2, 0x72F8, 0x734E, 0x73A4, 0x73FA, 0x7450, -// 0x74A6, 0x74FC, 0x7552, 0x75A8, 0x75FF, 0x7655, 0x76AC, 0x7702, -// 0x7759, 0x77B0, 0x7807, 0x785E, 0x78B4, 0x790C, 0x7963, 0x79BA, -// 0x7A11, 0x7A69, 0x7AC0, 0x7B18, 0x7B6F, 0x7BC7, 0x7C1F, 0x7C77, -// 0x7CCF, 0x7D27, 0x7D7F, 0x7DD7, 0x7E2F, 0x7E88, 0x7EE0, 0x7F38, -// 0x7F91, 0x7FEA, 0x8042, 0x809B, 0x80F4, 0x814D, 0x81A6, 0x81FF, -// 0x8259, 0x82B2, 0x830B, 0x8365, 0x83BE, 0x8418, 0x8472, 0x84CB, -// 0x8525, 0x857F, 0x85D9, 0x8633, 0x868E, 0x86E8, 0x8742, 0x879D, -// 0x87F7, 0x8852, 0x88AC, 0x8907, 0x8962, 0x89BD, 0x8A18, 0x8A73, -// 0x8ACE, 0x8B2A, 0x8B85, 0x8BE0, 0x8C3C, 0x8C97, 0x8CF3, 0x8D4F, -// 0x8DAB, 0x8E07, 0x8E63, 0x8EBF, 0x8F1B, 0x8F77, 0x8FD4, 0x9030, -// 0x908C, 0x90E9, 0x9146, 0x91A2, 0x91FF, 0x925C, 0x92B9, 0x9316, -// 0x9373, 0x93D1, 0x942E, 0x948C, 0x94E9, 0x9547, 0x95A4, 0x9602, -// 0x9660, 0x96BE, 0x971C, 0x977A, 0x97D8, 0x9836, 0x9895, 0x98F3, -// 0x9952, 0x99B0, 0x9A0F, 0x9A6E, 0x9ACD, 0x9B2C, 0x9B8B, 0x9BEA, -// 0x9C49, 0x9CA8, 0x9D08, 0x9D67, 0x9DC7, 0x9E26, 0x9E86, 0x9EE6, -// 0x9F46, 0x9FA6, 0xA006, 0xA066, 0xA0C6, 0xA127, 0xA187, 0xA1E8, -// 0xA248, 0xA2A9, 0xA30A, 0xA36B, 0xA3CC, 0xA42D, 0xA48E, 0xA4EF, -// 0xA550, 0xA5B2, 0xA613, 0xA675, 0xA6D6, 0xA738, 0xA79A, 0xA7FC, -// 0xA85E, 0xA8C0, 0xA922, 0xA984, 0xA9E7, 0xAA49, 0xAAAC, 0xAB0E, -// 0xAB71, 0xABD4, 0xAC37, 0xAC9A, 0xACFD, 0xAD60, 0xADC3, 0xAE27, -// 0xAE8A, 0xAEED, 0xAF51, 0xAFB5, 0xB019, 0xB07C, 0xB0E0, 0xB145, -// 0xB1A9, 0xB20D, 0xB271, 0xB2D6, 0xB33A, 0xB39F, 0xB403, 0xB468, -// 0xB4CD, 0xB532, 0xB597, 0xB5FC, 0xB662, 0xB6C7, 0xB72C, 0xB792, -// 0xB7F7, 0xB85D, 0xB8C3, 0xB929, 0xB98F, 0xB9F5, 0xBA5B, 0xBAC1, -// 0xBB28, 0xBB8E, 0xBBF5, 0xBC5B, 0xBCC2, 0xBD29, 0xBD90, 0xBDF7, -// 0xBE5E, 0xBEC5, 0xBF2C, 0xBF94, 0xBFFB, 0xC063, 0xC0CA, 0xC132, -// 0xC19A, 0xC202, 0xC26A, 0xC2D2, 0xC33A, 0xC3A2, 0xC40B, 0xC473, -// 0xC4DC, 0xC544, 0xC5AD, 0xC616, 0xC67F, 0xC6E8, 0xC751, 0xC7BB, -// 0xC824, 0xC88D, 0xC8F7, 0xC960, 0xC9CA, 0xCA34, 0xCA9E, 0xCB08, -// 0xCB72, 0xCBDC, 0xCC47, 0xCCB1, 0xCD1B, 0xCD86, 0xCDF1, 0xCE5B, -// 0xCEC6, 0xCF31, 0xCF9C, 0xD008, 0xD073, 0xD0DE, 0xD14A, 0xD1B5, -// 0xD221, 0xD28D, 0xD2F8, 0xD364, 0xD3D0, 0xD43D, 0xD4A9, 0xD515, -// 0xD582, 0xD5EE, 0xD65B, 0xD6C7, 0xD734, 0xD7A1, 0xD80E, 0xD87B, -// 0xD8E9, 0xD956, 0xD9C3, 0xDA31, 0xDA9E, 0xDB0C, 0xDB7A, 0xDBE8, -// 0xDC56, 0xDCC4, 0xDD32, 0xDDA0, 0xDE0F, 0xDE7D, 0xDEEC, 0xDF5B, -// 0xDFC9, 0xE038, 0xE0A7, 0xE116, 0xE186, 0xE1F5, 0xE264, 0xE2D4, -// 0xE343, 0xE3B3, 0xE423, 0xE493, 0xE503, 0xE573, 0xE5E3, 0xE654, -// 0xE6C4, 0xE735, 0xE7A5, 0xE816, 0xE887, 0xE8F8, 0xE969, 0xE9DA, -// 0xEA4B, 0xEABC, 0xEB2E, 0xEB9F, 0xEC11, 0xEC83, 0xECF5, 0xED66, -// 0xEDD9, 0xEE4B, 0xEEBD, 0xEF2F, 0xEFA2, 0xF014, 0xF087, 0xF0FA, -// 0xF16D, 0xF1E0, 0xF253, 0xF2C6, 0xF339, 0xF3AD, 0xF420, 0xF494, -// 0xF507, 0xF57B, 0xF5EF, 0xF663, 0xF6D7, 0xF74C, 0xF7C0, 0xF834, -// 0xF8A9, 0xF91E, 0xF992, 0xFA07, 0xFA7C, 0xFAF1, 0xFB66, 0xFBDC, -// 0xFC51, 0xFCC7, 0xFD3C, 0xFDB2, 0xFE28, 0xFE9E, 0xFF14, 0xFF8A, -//}; - -static const u8 sVolumeTable[724] = { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xB, - 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0xB, 0xC, 0xC, 0xC, 0xC, - 0xC, 0xC, 0xC, 0xC, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xE, - 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0xF, 0xF, 0xF, 0xF, 0xF, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, - 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, - 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, - 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, - 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x1A, - 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1D, - 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, - 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, - 0x24, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, - 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, - 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, - 0x31, 0x31, 0x32, 0x32, 0x33, 0x33, 0x34, 0x35, 0x35, - 0x36, 0x36, 0x37, 0x38, 0x38, 0x39, 0x3A, 0x3A, 0x3B, - 0x3C, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F, 0x40, 0x41, 0x42, - 0x42, 0x43, 0x44, 0x45, 0x45, 0x46, 0x47, 0x48, 0x49, - 0x4A, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, - 0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x5A, 0x5B, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, - 0x64, 0x65, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, - 0x6F, 0x71, 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, - 0x7B, 0x7D, 0x7E, 0x7F, 0x20, 0x21, 0x21, 0x21, 0x22, - 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, 0x26, - 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, - 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, - 0x2F, 0x2F, 0x30, 0x30, 0x31, 0x31, 0x32, 0x33, 0x33, - 0x34, 0x34, 0x35, 0x36, 0x36, 0x37, 0x37, 0x38, 0x39, - 0x39, 0x3A, 0x3B, 0x3B, 0x3C, 0x3D, 0x3E, 0x3E, 0x3F, - 0x40, 0x40, 0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, - 0x47, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4D, - 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, - 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, - 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x69, 0x6A, - 0x6B, 0x6C, 0x6D, 0x6F, 0x70, 0x71, 0x73, 0x74, 0x75, - 0x77, 0x78, 0x79, 0x7B, 0x7C, 0x7E, 0x7E, 0x40, 0x41, - 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x48, - 0x49, 0x4A, 0x4B, 0x4C, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, - 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D, - 0x6E, 0x70, 0x71, 0x72, 0x74, 0x75, 0x76, 0x78, 0x79, - 0x7B, 0x7C, 0x7D, 0x7E, 0x40, 0x41, 0x42, 0x42, 0x43, - 0x44, 0x45, 0x46, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, - 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, - 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x65, 0x66, - 0x67, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x6F, 0x71, - 0x72, 0x73, 0x75, 0x76, 0x77, 0x79, 0x7A, 0x7C, 0x7D, - 0x7E, 0x7F, -}; - -const s16 SNDi_DecibelTable[0x80] = { - -32768,-421,-361, -325, -300, -281, -265, -252, - -240, -230, -221, -212, -205, -198, -192, -186, - -180, -175, -170, -165, -161, -156, -152, -148, - -145, -141, -138, -134, -131, -128, -125, -122, - -120, -117, -114, -112, -110, -107, -105, -103, - -100, -98, -96, -94, -92, -90, -88, -86, - -85, -83, -81, -79, -78, -76, -74, -73, - -71, -70, -68, -67, -65, -64, -62, -61, - -60, -58, -57, -56, -54, -53, -52, -51, - -49, -48, -47, -46, -45, -43, -42, -41, - -40, -39, -38, -37, -36, -35, -34, -33, - -32, -31, -30, -29, -28, -27, -26, -25, - -24, -23, -23, -22, -21, -20, -19, -18, - -17, -17, -16, -15, -14, -13, -12, -12, - -11, -10, -9, -9, -8, -7, -6, -6, - -5, -4, -3, -3, -2, -1, -1, 0, -}; - -// not used in pokediamond -//const s16 SNDi_DecibelSquareTable[0x80] = { -// -32768,-722,-721, -651, -601, -562, -530, -503, -// -480, -460, -442, -425, -410, -396, -383, -371, -// -360, -349, -339, -330, -321, -313, -305, -297, -// -289, -282, -276, -269, -263, -257, -251, -245, -// -239, -234, -229, -224, -219, -214, -210, -205, -// -201, -196, -192, -188, -184, -180, -176, -173, -// -169, -165, -162, -158, -155, -152, -149, -145, -// -142, -139, -136, -133, -130, -127, -125, -122, -// -119, -116, -114, -111, -109, -106, -103, -101, -// -99, -96, -94, -91, -89, -87, -85, -82, -// -80, -78, -76, -74, -72, -70, -68, -66, -// -64, -62, -60, -58, -56, -54, -52, -50, -// -49, -47, -45, -43, -42, -40, -38, -36, -// -35, -33, -31, -30, -28, -27, -25, -23, -// -22, -20, -19, -17, -16, -14, -13, -11, -// -10, -8, -7, -6, -4, -3, -1, 0, -//}; - -ARM_FUNC u16 SND_CalcChannelVolume(s32 x) { - // directly using s32 doesn't match - int decibels = (int)x; - if (decibels < -723) - decibels = -723; - else if (decibels > 0) - decibels = 0; - - u32 resultLo = sVolumeTable[decibels + 723]; - u32 resultHi; - - if (decibels < -240) { - resultHi = 3; - } else { - if (decibels < -120) { - resultHi = 2; - } else { - if (decibels < -60) { - resultHi = 1; - } else { - resultHi = 0; - } - } - } - - return (u16)((resultHi << 8u) | resultLo); -} diff --git a/arm9/lib/src/SND_work.c b/arm9/lib/src/SND_work.c deleted file mode 100644 index ca9208d6..00000000 --- a/arm9/lib/src/SND_work.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "SND_work.h" -#include "SND_alarm.h" -#include "SND_main.h" -#include "OS_cache.h" - -struct SNDSharedWork *SNDi_SharedWork; - -u32 SND_GetPlayerStatus(void) { - DC_InvalidateRange(&SNDi_SharedWork->playerStatus, 4); - return SNDi_SharedWork->playerStatus; -} - -u16 SND_GetChannelStatus(void) { - DC_InvalidateRange(&SNDi_SharedWork->channelStatus, 2); - return SNDi_SharedWork->channelStatus; -} - -//u16 SND_GetCaptureStatus(void) { -// DC_InvalidateRange(&SNDi_SharedWork->captureStatus, 2); -// return SNDi_SharedWork->captureStatus; -//} - -u32 SND_GetPlayerTickCounter(u32 playerId) { - DC_InvalidateRange(&SNDi_SharedWork->players[playerId].tickCounter, 4); - return SNDi_SharedWork->players[playerId].tickCounter; -} - -//s16 SND_GetPlayerLocalVariable(u32 playerId, u32 var) { -// DC_InvalidateRange(&SNDi_SharedWork->players[playerId].localVars[var], 2); -// return SNDi_SharedWork->players[playerId].localVars[var]; -//} -// -//s16 SND_GetPlayerLocalVariable(u32 var) { -// DC_InvalidateRange(&SNDi_SharedWork->globalVars[var], 2); -// return SNDi_SharedWork->globalVars[var]; -//} -// -//BOOL SND_ReadChannelInfo(const SNDDriverInfo *driverInfo, s32 chnId, SNDChannelInfo *chnInfo) { -// // T O D O, implement if it's actually used -//} -// -//BOOL SND_ReadPlayerInfo(const SNDDriverInfo *driverInfo, s32 playerId, SNDPlayerInfo *playerInfo) { -// if (playerId < 0 || playerId >= SND_PLAYER_COUNT) -// return FALSE; -// SNDPlayer *player = &driverInfo->work.players[playerId]; -// playerInfo->trackBitMask = 0; -// for (s32 i = 0; i < SND_TRACK_COUNT; i++) { -// if (player->tracks[i] != SND_INVALID_TRACK_INDEX) { -// playerInfo->trackBitMask |= (1 << i); -// } -// } -// playerInfo->flags.active = player->flags.active; -// playerInfo->flags.paused = player->flags.paused; -// playerInfo->tempo = player->tempo; -// playerInfo->volume = player->volume; -// return TRUE; -//} -// -// -//BOOL SND_ReadTrackInfo(const SNDDriverInfo *driverInfo s32 playerId, s32 trackId, SNDTrackInfo *trackInfo) { -// if (playerId < 0 || playerId >= SND_PLAYER_COUNT) -// return FALSE; -// if (trackId < 0 || trackId >= SND_TRACK_COUNT) -// return FALSE; -// SNDPlayer *player = &driverInfo->work.players[playerId]; -// if (player->tracks[trackId] == SND_INVALID_TRACK_INDEX) -// return FALSE; -// SNDTrack *track = &driverInfo->work.tracks[trackId]; -// trackInfo->program = track->program; -// trackInfo->volume = track->volume; -// trackInfo->expression = track->expression; -// trackInfo->pitchBend = track->pitchBend; -// trackInfo->bendRange = track->bendRange; -// trackInfo->pan = track->pan + 0x40; // 0x40 == MIDI center pan -// trackInfo->transpose = track->transpose; -// trackInfo->chnCount = 0; -// -// //#define LL_READ_PTR(ptr, basePtr, base) (ptr ? ((typeof(ptr))(s32)(ptr) - (s32)(basePtr) + (s32)&(base)) : NULL) -// //for (SNDExChannel *exChn = LL_READ_PTR(track->channelLLHead, driverInfo->workPtr, driverInfo->work); -// // exChn != NULL; exChn = LL_READ_PTR(exChn->channelLLNext, driverInfo->workPtr, driverInfo->work)) -// //{ -// // trackInfo->channel[trackInfo->chnCount] = exChn->id; -// // trackInfo->chnCount++; -// //} -// //#undef LL_READ_PTR -// -// return TRUE; -//} - -ARM_FUNC u32 SNDi_GetFinishedCommandTag(void) { - DC_InvalidateRange(&SNDi_SharedWork->finishedCommandTag, 4); - return SNDi_SharedWork->finishedCommandTag; -} - -ARM_FUNC void SNDi_InitSharedWork(struct SNDSharedWork *sw) { - sw->playerStatus = 0; - sw->channelStatus = 0; - sw->captureStatus = 0; - sw->finishedCommandTag = 0; - - for (s32 i = 0; i < SND_PLAYER_COUNT; i++) { - sw->players[i].tickCounter = 0; - for (s32 j = 0; j < 16; j++) { - sw->players[i].localVars[j] = -1; - } - } - - for (s32 i = 0; i < 16; i++) { - sw->globalVars[i] = -1; - } - - DC_FlushRange(sw, sizeof(*sw)); -} diff --git a/arm9/lib/src/WM_ks.c b/arm9/lib/src/WM_ks.c deleted file mode 100644 index 93e96f89..00000000 --- a/arm9/lib/src/WM_ks.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "WM_ks.h" -#include "function_target.h" - -extern WMErrCode WM_StartDataSharing(WMKeySetBuf *buf, u16 port, u16 aidBitmap, u16 dataLength, BOOL doubleMode); -extern WMErrCode WM_EndDataSharing(WMKeySetBuf *buf); - -ARM_FUNC WMErrCode WM_StartKeySharing(WMKeySetBuf *buf, u16 port) -{ - return WM_StartDataSharing(buf, port, 0xffff, 2, TRUE); -} - -ARM_FUNC WMErrCode WM_EndKeySharing(WMKeySetBuf *buf) -{ - return WM_EndDataSharing(buf); -} diff --git a/arm9/lib/src/crt0.c b/arm9/lib/src/crt0.c deleted file mode 100644 index 4e46cb63..00000000 --- a/arm9/lib/src/crt0.c +++ /dev/null @@ -1,378 +0,0 @@ -#include "nitro.h" -#include "MI_uncompress.h" - -extern void NitroMain(void); -extern void SDK_IRQ_STACKSIZE(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); -extern void OS_IrqHandler(void); - -extern void *const _start_ModuleParams[]; - -static void init_cp15(void); -static void do_autoload(void); -static void INITi_CpuClear32(register u32 data, register void *destp, register u32 size); -void _start_AutoloadDoneCallback(void *argv[]); - -extern void __call_static_initializers(void); -extern void _fp_init(void); -void NitroStartUp(void); -void _start(void); - -#define SDK_VERSION_ID ((3 << 24) | (2 << 16) | 30001) -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 - -ARM_FUNC asm void _start(void) -{ - //set IME to 0 - mov r12, #0x4000000 - str r12, [r12, #0x208] - - //adjust VCOUNT -_02000808: - ldrh r0, [r12, #6] - cmp r0, #0 - bne _02000808 - - //init cp15 - bl init_cp15 - - //init stack pointer - //SVC mode - mov r0, #OS_PROCMODE_SVC - msr CPSR_c, r0 - ldr r0, =SDK_AUTOLOAD_DTCM_START - add r0, r0, #0x3fc0 - mov sp, r0 - - //IRQ mode - mov r0, #OS_PROCMODE_IRQ - msr CPSR_c, r0 - ldr r0, =SDK_AUTOLOAD_DTCM_START - add r0, r0, #0x3fc0 - sub r0, r0, #HW_SVC_STACK_SIZE - sub sp, r0, #4 - tst sp, #4 - subeq sp, sp, #4 - - //system mode - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, r0, r1 - mov r0, #OS_PROCMODE_SYS - msr CPSR_csfx, r0 - sub sp, r1, #4 - - //clear memory - //DTCM - mov r0, #0 - ldr r1, =SDK_AUTOLOAD_DTCM_START - mov r2, #HW_DTCM_SIZE - bl INITi_CpuClear32 - - //BG/OBJ palette - mov r0, #0 - ldr r1, =HW_PLTT - mov r2, #HW_PLTT_SIZE - bl INITi_CpuClear32 - - //OAM - mov r0, #0x0200 - ldr r1, =HW_OAM - mov r2, #HW_OAM_SIZE - bl INITi_CpuClear32 - - //load autoload block and init bss - ldr r1, =_start_ModuleParams - ldr r0, [r1, #20] - bl MIi_UncompressBackward - bl do_autoload - - //fill static bss with 0 - ldr r0, =_start_ModuleParams - ldr r1, [r0, #12] - ldr r2, [r0, #16] - mov r3, r1 - mov r0, #0 -_020008B4: - cmp r1, r2 - strcc r0, [r1], #4 - bcc _020008B4 - - //flush static bss region - bic r1, r3, #HW_CACHE_LINE_SIZE - 1 -_020008C4: - mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer - mcr p15, 0, r1, c7, c5, 1 //Invalidate Instruction Cache Line VA - mcr p15, 0, r1, c7, c14, 1 //Clean and Invalidate Data Cache Line VA - add r1, r1, #HW_CACHE_LINE_SIZE - cmp r1, r2 - blt _020008C4 - - //print buffer - ldr r1, =HW_COMPONENT_PARAM - str r0, [r1, #0] - - //set interrput vector - ldr r1, =SDK_AUTOLOAD_DTCM_START - add r1, r1, #0x3fc0 - add r1, r1, #HW_DTCM_SYSRV_OFS_INTR_VECTOR - ldr r0, =OS_IrqHandler - str r0, [r1, #0] - - bl _fp_init - bl NitroStartUp - bl __call_static_initializers - - //start - ldr r1, =NitroMain - ldr lr, =HW_RESET_VECTOR - - tst sp, #4 - subne sp, sp, #4 - bx r1 -} - -ARM_FUNC static asm void INITi_CpuClear32(register u32 data, register void *destp, register u32 size) -{ - add r12, r1, r2 -_02000940: - cmp r1, r12 - stmltia r1!, {r0} - blt _02000940 - bx lr -} - -void *const _start_ModuleParams[] = { - (void *)SDK_AUTOLOAD_LIST, - (void *)SDK_AUTOLOAD_LIST_END, - (void *)SDK_AUTOLOAD_START, - (void *)SDK_STATIC_BSS_START, - (void *)SDK_STATIC_BSS_END, - (void *)0, // CompressedStaticEnd - (void *)SDK_VERSION_ID, // SDK version info - (void *)SDK_NITROCODE_BE, // Checker 1 - (void *)SDK_NITROCODE_LE, // Checker 2 -}; - -ARM_FUNC asm void MIi_UncompressBackward(register void *bottom) -{ - cmp r0, #0 - beq _020009F8 - stmfd sp!, {r4-r7} - ldmdb r0, {r1-r2} - add r2, r0, r2 - sub r3, r0, r1, lsr #24 - bic r1, r1, #0xff000000 - sub r1, r0, r1 - mov r4, r2 -_02000974: - cmp r3, r1 - ble _020009D4 - ldrb r5, [r3, #-1]! - mov r6, #8 -_02000984: - subs r6, r6, #1 - blt _02000974 - tst r5, #0x80 - bne _020009A0 - - ldrb r0, [r3, #-1]! - strb r0, [r2, #-1]! - b _020009C8 -_020009A0: - ldrb r12, [r3, #-1]! - ldrb r7, [r3, #-1]! - orr r7, r7, r12, lsl #8 - bic r7, r7, #0xf000 - add r7, r7, #0x0002 - add r12, r12, #0x0020 -_020009B8: - ldrb r0, [r2, r7] - strb r0, [r2, #-1]! - subs r12, r12, #0x0010 - bge _020009B8 -_020009C8: - cmp r3, r1 - mov r5, r5, lsl #1 - bgt _02000984 -_020009D4: - mov r0, #0 - bic r3, r1, #HW_CACHE_LINE_SIZE - 1 -_020009DC: - mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer - mcr p15, 0, r3, c7, c5, 1 //Invalidate Instruction Cache Line VA - mcr p15, 0, r3, c7, c14, 1 //Clean and Invalidate Data Cache Line VA - add r3, r3, #HW_CACHE_LINE_SIZE - cmp r3, r4 - blt _020009DC - - ldmfd sp!, {r4-r7} -_020009F8: - bx lr -} - -ARM_FUNC static asm void do_autoload(void) -{ - ldr r0, =_start_ModuleParams - ldr r1, [r0, #0] - ldr r2, [r0, #4] - ldr r3, [r0, #8] - -_02000A0C: - cmp r1, r2 - beq _02000A6C - - ldr r5, [r1], #4 - ldr r7, [r1], #4 - add r6, r5, r7 - mov r4, r5 -_02000A24: - cmp r4, r6 - ldrmi r7, [r3], #4 - strmi r7, [r4], #4 - bmi _02000A24 - - //fill bss with 0 - ldr r7, [r1], #4 - add r6, r4, r7 - mov r7, #0 -_02000A40: - cmp r4, r6 - strcc r7, [r4], #4 - bcc _02000A40 - - bic r4, r5, #HW_CACHE_LINE_SIZE - 1 -_02000A50: - mcr p15, 0, r7, c7, c10, 4 //Drain Write Buffer - mcr p15, 0, r4, c7, c5, 1 //Invalidate Instruction Cache Line VA - mcr p15, 0, r4, c7, c14, 1 //Clean and Invalidate Data Cache Line VA - add r4, r4, #HW_CACHE_LINE_SIZE - cmp r4, r6 - blt _02000A50 - - b _02000A0C - -_02000A6C: - b _start_AutoloadDoneCallback -} - -ARM_FUNC asm void _start_AutoloadDoneCallback(void *argv[]) -{ - bx lr -} - -#define SET_PROTECTION_A(id, addr, size) ldr r0, =(addr|HW_C6_PR_##size|HW_C6_PR_ENABLE) -#define SET_PROTECTION_B(id, addr, size) mcr p15, 0, r0, c6, id, 0 -#define REGION_BIT(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<1)|((c)<<2)|((d)<<3)|((e)<<4)|((f)<<5)|((g)<<6)|((h)<<7)) -#define REGION_ACC(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<4)|((c)<<8)|((d)<<12)|((e)<<16)|((f)<<20)|((g)<<24)|((h)<<28)) -ARM_FUNC static asm void init_cp15(void) -{ - //Disable TCM/Cache/Protection Unit - mrc p15, 0, r0, c1, c0, 0 //Save Control Register - - /* - * The following bits are disabled - * * Instruction Cache - * * Data/Unified Cache - * * ITCM - * * DTCM - * * ITCM Load Mode - * * DTCM Load Mode - * * LD Interwork Disable - * * Protection Unit Enable - */ - ldr r1, =0x000f9005 - bic r0, r0, r1 - mcr p15, 0, r0, c1, c0, 0 //Set Control Register - - //Disable Cache - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 //Invalidate Entire Instruction Cache - mcr p15, 0, r0, c7, c6, 0 //Invalidate Entire Data Cache - - mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer - - SET_PROTECTION_A(c0, HW_IOREG, 64MB) //Protection Unit Unified Region - SET_PROTECTION_B(c0, HW_IOREG, 64MB) - - SET_PROTECTION_A(c1, HW_MAIN_MEM, 8MB) - SET_PROTECTION_B(c1, HW_MAIN_MEM, 8MB) - - SET_PROTECTION_A(c2, HW_MAIN_MEM_SUB, 128KB) - SET_PROTECTION_B(c2, HW_MAIN_MEM_SUB, 128KB) - - SET_PROTECTION_A(c3, HW_CTRDG_ROM, 128MB) - SET_PROTECTION_B(c3, HW_CTRDG_ROM, 128MB) - - ldr r0, =SDK_AUTOLOAD_DTCM_START - orr r0, r0, #0x1a - orr r0, r0, #1 - SET_PROTECTION_B(c4, HW_DTCM, 16KB) - - SET_PROTECTION_A(c5, HW_ITCM_IMAGE, 16MB) - SET_PROTECTION_B(c5, HW_ITCM_IMAGE, 16MB) - - SET_PROTECTION_A(c6, HW_BIOS, 32KB) - SET_PROTECTION_B(c6, HW_BIOS, 32KB) - - SET_PROTECTION_A(c7, HW_MAIN_MEM_SHARED, 4KB) - SET_PROTECTION_B(c7, HW_MAIN_MEM_SHARED, 4KB) - - mov r0, #HW_C9_TCMR_32MB - mcr p15, 0, r0, c9, c1, 1 //ITCM Size/Base - - ldr r0, =SDK_AUTOLOAD_DTCM_START - orr r0, r0, #HW_C9_TCMR_16KB - mcr p15, 0, r0, c9, c1, 0 //DTCM Size/Base - - mov r0, #REGION_BIT(0,1,0,0,0,0,1,0) - mcr p15, 0, r0, c2, c0, 1 //Cache Bits for Instruction Protection Region - - mov r0, #REGION_BIT(0,1,0,0,0,0,1,0) - mcr p15, 0, r0, c2, c0, 0 //Cache Bits for Data Protection Region - - mov r0, #REGION_BIT(0,1,0,0,0,0,0,0) - mcr p15, 0, r0, c3, c0, 0 //Cache Write Buffer Bits for Data Protection Region - - ldr r0, =REGION_ACC(1,1,0,0,0,1,5,0) - mcr p15, 0, r0, c5, c0, 3 //Extended Access Permission Instruction Protection Region - - ldr r0, =REGION_ACC(1,1,0,1,1,1,5,1) - mcr p15, 0, r0, c5, c0, 2 //Extended Access Permission Data Protection Region - - mrc p15, 0, r0, c1, c0, 0 //Save Control Register - - /* - * The following bits are enabled - * * Instruction Cache - * * Data Cache - * * Cache Replacement - Round Robin - * * ITCM - * * DTCM - * * SB1 Bit Set - * * Exception Vectors - * * Protection Unit - */ - ldr r1, =0x0005707D - orr r0, r0, r1 - mcr p15, 0, r0, c1, c0, 0 //Set Control Register - - bx lr -} -#undef SET_PROTECTION_A -#undef SET_PROTECTION_B -#undef REGION_BIT -#undef REGION_ACC - -ARM_FUNC void NitroStartUp(void) -{ -} - -ARM_FUNC void OSi_ReferSymbol(void *symbol) -{ -#pragma unused(symbol) -} diff --git a/arm9/lib/src/custom_allocator.c b/arm9/lib/src/custom_allocator.c deleted file mode 100644 index 283c3500..00000000 --- a/arm9/lib/src/custom_allocator.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "custom_allocator.h" - -#include "global.h" -#include "OS_alloc.h" - -static FreeFunc sDestructor; -static AllocFunc sAllocator; - -// Custom allocator -ARM_FUNC void* CallCustomAllocator(u32 size) -{ - if (sAllocator != NULL) - return sAllocator(size); - else - return OS_AllocFromHeap(OS_ARENA_MAIN, -1, size); -} - -// Custom destructor -ARM_FUNC void CallCustomDestructor(void * ptr) -{ - if (sDestructor != NULL) - sDestructor(ptr); - else - OS_FreeToHeap(OS_ARENA_MAIN, -1, ptr); -} - -// Custom alloc/free setter -ARM_FUNC void SetCustomAllocatorAndDestructor(AllocFunc allocator, FreeFunc destructor) -{ - sAllocator = allocator; - sDestructor = destructor; -} diff --git a/arm9/lib/src/version_1_dwc.c b/arm9/lib/src/version_1_dwc.c deleted file mode 100644 index 713aed0d..00000000 --- a/arm9/lib/src/version_1_dwc.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_NintendoDWC[] = "[SDK+NINTENDO:DWC1.2.30006.061019.2254_DWC_1_2_PLUS6]"; -#pragma section VERSION end diff --git a/arm9/lib/src/version_2_wifi.c b/arm9/lib/src/version_2_wifi.c deleted file mode 100644 index e5db89e4..00000000 --- a/arm9/lib/src/version_2_wifi.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_NintendoWiFi[] = "[SDK+NINTENDO:WiFi1.2.30000.0609050341]"; -#pragma section VERSION end diff --git a/arm9/lib/src/version_3_cps.c b/arm9/lib/src/version_3_cps.c deleted file mode 100644 index 5918341e..00000000 --- a/arm9/lib/src/version_3_cps.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_UbiquitousCPS[] = "[SDK+UBIQUITOUS:CPS]"; -#pragma section VERSION end diff --git a/arm9/lib/src/version_4_ssl.c b/arm9/lib/src/version_4_ssl.c deleted file mode 100644 index f1bf08ce..00000000 --- a/arm9/lib/src/version_4_ssl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_UbiquitousSSL[] = "[SDK+UBIQUITOUS:SSL]"; -#pragma section VERSION end diff --git a/arm9/lib/src/version_5_vct.c b/arm9/lib/src/version_5_vct.c deleted file mode 100644 index a13caf88..00000000 --- a/arm9/lib/src/version_5_vct.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_AbiossolibVCT[] = "[SDK+Abiosso:libVCT 1.0.1_ec]"; -#pragma section VERSION end diff --git a/arm9/lib/src/version_6_backup.c b/arm9/lib/src/version_6_backup.c deleted file mode 100644 index 3cbe3e37..00000000 --- a/arm9/lib/src/version_6_backup.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "sections.h" - -#pragma section VERSION begin -char _SDK_NintendoBackup[] = "[SDK+NINTENDO:BACKUP]"; -#pragma section VERSION end diff --git a/arm9/modules/06/include/module_06.h b/arm9/modules/06/include/module_06.h index d9915f00..3942b1ce 100644 --- a/arm9/modules/06/include/module_06.h +++ b/arm9/modules/06/include/module_06.h @@ -1,14 +1,14 @@ -#ifndef POKEDIAMOND_MODULE_06_H -#define POKEDIAMOND_MODULE_06_H - -enum MartType -{ - MART_ITEMS = 0, - MART_GOODS, - MART_SEALS, - MART_DECORATIONS = MART_GOODS, -}; - -void MOD06_0223D3D0(struct UnkStruct_0204639C *, struct UnkSavStruct80 *, const u16 *, enum MartType, u32); - -#endif //POKEDIAMOND_MODULE_06_H +#ifndef POKEDIAMOND_MODULE_06_H +#define POKEDIAMOND_MODULE_06_H + +enum MartType +{ + MART_ITEMS = 0, + MART_GOODS, + MART_SEALS, + MART_DECORATIONS = MART_GOODS, +}; + +void MOD06_0223D3D0(struct UnkStruct_0204639C *, struct UnkSavStruct80 *, const u16 *, enum MartType, u32); + +#endif //POKEDIAMOND_MODULE_06_H diff --git a/arm9/modules/19/src/module_19.c b/arm9/modules/19/src/module_19.c index 1fc6197e..b8426d9f 100644 --- a/arm9/modules/19/src/module_19.c +++ b/arm9/modules/19/src/module_19.c @@ -1,47 +1,47 @@ -#include "global.h" -#include "heap.h" -#include "gx.h" -#include "gf_gfx_loader.h" -#include "bg_window.h" -#include "graphic/poketch.naix" - -const struct BgTemplate MOD19_02252508 = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0x000, - .size = GF_BG_SCR_SIZE_256x256, - .colorMode = GF_BG_CLR_4BPP, - .screenBase = 12, - .charBase = 0, - .priority = 0, - .areaOver = 0, - .mosaic = 0 -}; - -THUMB_FUNC void MOD19_02252440(struct BgConfig * bgConfig) -{ - CreateHeap(3, 8, 0x18000); - GXS_SetGraphicsMode(GX_BGMODE_0); - GX_SetBankForSubBG(0x80); - GX_SetBankForSubOBJ(0x100); - GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); - InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_0, &MOD19_02252508, GF_BG_TYPE_TEXT); - GfGfxLoader_LoadCharData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0010_NCGR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8); - GfGfxLoader_LoadScrnData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0011_NSCR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8); - GfGfxLoader_GXLoadPal(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0012_NCLR, GF_BG_LYR_SUB_0, 0x00, 0x20, 8); - GXS_SetVisibleWnd(GX_WNDMASK_NONE); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); -} - -THUMB_FUNC void MOD19_022524F4(struct BgConfig * bgConfig) -{ - FreeBgTilemapBuffer(bgConfig, GF_BG_LYR_SUB_0); - DestroyHeap(8); -} - -THUMB_FUNC BOOL MOD19_02252504(struct BgConfig * bgConfig) -{ -#pragma unused(bgConfig) - return TRUE; -} +#include "global.h" +#include "heap.h" +#include "gx.h" +#include "gf_gfx_loader.h" +#include "bg_window.h" +#include "graphic/poketch.naix" + +const struct BgTemplate MOD19_02252508 = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0x000, + .size = GF_BG_SCR_SIZE_256x256, + .colorMode = GF_BG_CLR_4BPP, + .screenBase = 12, + .charBase = 0, + .priority = 0, + .areaOver = 0, + .mosaic = 0 +}; + +THUMB_FUNC void MOD19_02252440(struct BgConfig * bgConfig) +{ + CreateHeap(3, 8, 0x18000); + GXS_SetGraphicsMode(GX_BGMODE_0); + GX_SetBankForSubBG(0x80); + GX_SetBankForSubOBJ(0x100); + GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); + InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_0, &MOD19_02252508, GF_BG_TYPE_TEXT); + GfGfxLoader_LoadCharData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0010_NCGR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8); + GfGfxLoader_LoadScrnData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0011_NSCR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8); + GfGfxLoader_GXLoadPal(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0012_NCLR, GF_BG_LYR_SUB_0, 0x00, 0x20, 8); + GXS_SetVisibleWnd(GX_WNDMASK_NONE); + GXS_SetVisiblePlane(GX_PLANEMASK_BG0); +} + +THUMB_FUNC void MOD19_022524F4(struct BgConfig * bgConfig) +{ + FreeBgTilemapBuffer(bgConfig, GF_BG_LYR_SUB_0); + DestroyHeap(8); +} + +THUMB_FUNC BOOL MOD19_02252504(struct BgConfig * bgConfig) +{ +#pragma unused(bgConfig) + return TRUE; +} -- cgit v1.2.3 From 2901b33027f77ca9470f96c99a769807206a3ed3 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 23 Jul 2021 02:02:16 +0100 Subject: update calcrom --- .github/calcrom/calcrom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/calcrom/calcrom.cpp b/.github/calcrom/calcrom.cpp index 2947f5e7..1cb6f9fe 100644 --- a/.github/calcrom/calcrom.cpp +++ b/.github/calcrom/calcrom.cpp @@ -64,7 +64,7 @@ void analyze(string basedir, string subdir, string version) { size_t shstrsz = 0; stringstream builddir; builddir << subdir << "/build/" << version; - pattern << basedir << "/" << subdir << "/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}"; + pattern << basedir << "/" << subdir << "/{src,asm,lib/src,lib/{libc,libnns,NitroSDK}/src,modules/*/{src,asm}}/*.{c,s,cpp}"; for (char const * & fname : Glob(pattern.str())) { string fname_s(fname); -- cgit v1.2.3 From b84262634da1ef13fa894873d778d88000b1e99a Mon Sep 17 00:00:00 2001 From: tgsm Date: Thu, 22 Jul 2021 21:35:31 -0500 Subject: Split module 44 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 8 + arm9/modules/44/asm/mod44_02254854.s | 297 ++++++++++++++++++ arm9/modules/44/asm/mod44_02254A54.s | 289 +++++++++++++++++ arm9/modules/44/asm/module_44.s | 580 ----------------------------------- 5 files changed, 596 insertions(+), 581 deletions(-) create mode 100644 arm9/modules/44/asm/mod44_02254854.s create mode 100644 arm9/modules/44/asm/mod44_02254A54.s delete mode 100644 arm9/modules/44/asm/module_44.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 3f9b8806..c88b88f0 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -984,7 +984,8 @@ Overlay MODULE_44 { After MODULE_20 Object module_44_sinit.o - Object module_44.o + Object mod44_02254854.o + Object mod44_02254A54.o } Overlay MODULE_45 diff --git a/arm9/global.inc b/arm9/global.inc index 350ae6d2..96c0e659 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7451,6 +7451,14 @@ .extern MOD33_02254A18 .extern MOD33_02254A38 .extern MOD33_02254AD8 +.extern MOD44_02254A54 +.extern MOD44_02254B00 +.extern MOD44_02254B14 +.extern MOD44_02254B38 +.extern MOD44_02254B44 +.extern MOD44_02254B64 +.extern MOD44_02254BF8 +.extern MOD44_02254C14 .extern MOD46_022549AC .extern MOD46_022549DC .extern MOD46_022549E8 diff --git a/arm9/modules/44/asm/mod44_02254854.s b/arm9/modules/44/asm/mod44_02254854.s new file mode 100644 index 00000000..5abb4074 --- /dev/null +++ b/arm9/modules/44/asm/mod44_02254854.s @@ -0,0 +1,297 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD44_02254854 +MOD44_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x14 + add r7, r2, #0 + str r3, [sp] + bl AllocFromHeap + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD44_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD44_022548EC + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _0225488C + str r4, [r5] + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225488C: + add r0, r4, #0 + bl FreeToHeap +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD44_022548EC + thumb_func_end MOD44_02254854 + + thumb_func_start MOD44_0225489C +MOD44_0225489C: ; 0x0225489C + push {r4, r5, r6, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + add r6, r2, #0 + bl MOD20_02252C3C + str r0, [r5, #0x10] + bl Sav2_Poketch_GetScreenTint + str r0, [r5, #4] + strb r0, [r5, #3] + add r0, r5, #0 + add r0, #8 + add r1, r5, #4 + add r2, r6, #0 + bl MOD44_02254A54 + cmp r0, #0 + beq _022548D2 + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0xc] + mov r0, #1 + pop {r4, r5, r6, pc} +_022548D2: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD44_0225489C + + thumb_func_start MOD44_022548D8 +MOD44_022548D8: ; 0x022548D8 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #8] + bl MOD44_02254B00 + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_022548D8 + + thumb_func_start MOD44_022548EC +MOD44_022548EC: ; 0x022548EC + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254918 + lsl r2, r1, #2 + ldr r1, _0225491C ; =MOD44_02254C54 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254918 + add r0, r4, #0 + bl MOD44_022548D8 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0xc] + bl MOD20_022529A0 +_02254918: + pop {r3, r4, r5, pc} + nop +_0225491C: .word MOD44_02254C54 + thumb_func_end MOD44_022548EC + + thumb_func_start MOD44_02254920 +MOD44_02254920: ; 0x02254920 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD44_02254920 + + thumb_func_start MOD44_02254928 +MOD44_02254928: ; 0x02254928 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254930 + b _02254932 +_02254930: + mov r1, #2 +_02254932: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD44_02254928 + + thumb_func_start MOD44_0225493C +MOD44_0225493C: ; 0x0225493C + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _0225494C + cmp r0, #1 + beq _0225495C + b _02254976 +_0225494C: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD44_02254B14 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254976 +_0225495C: + ldr r0, [r4, #8] + mov r1, #0 + bl MOD44_02254B38 + cmp r0, #0 + beq _02254976 + ldr r0, [r4, #0xc] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD44_02254928 +_02254976: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_0225493C + + thumb_func_start MOD44_0225497C +MOD44_0225497C: ; 0x0225497C + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254990 + mov r1, #2 + bl MOD44_02254928 + mov r0, #0 + pop {r4, pc} +_02254990: + ldrb r1, [r4, #1] + cmp r1, #0 + beq _0225499C + cmp r1, #1 + beq _022549B4 + b _022549C4 +_0225499C: + bl MOD44_022549C8 + cmp r0, #0 + beq _022549C4 + ldr r0, [r4, #8] + mov r1, #2 + bl MOD44_02254B14 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549C4 +_022549B4: + ldr r0, [r4, #8] + mov r1, #2 + bl MOD44_02254B38 + cmp r0, #0 + beq _022549C4 + mov r0, #0 + strb r0, [r4, #1] +_022549C4: + mov r0, #0 + pop {r4, pc} + thumb_func_end MOD44_0225497C + + thumb_func_start MOD44_022549C8 +MOD44_022549C8: ; 0x022549C8 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + ldr r0, [r4, #0xc] + bl MOD20_02252C08 + cmp r0, #0 + bne _02254A18 + add r0, sp, #4 + add r1, sp, #0 + bl FUN_02020AB0 + cmp r0, #0 + beq _02254A18 + ldr r0, [sp] + cmp r0, #0x88 + blo _02254A18 + cmp r0, #0xa0 + bhs _02254A18 + ldr r0, [sp, #4] + cmp r0, #0x30 + blo _02254A18 + cmp r0, #0xb8 + bhs _02254A18 + sub r0, #0x30 + lsr r1, r0, #4 + cmp r1, #8 + blo _02254A02 + mov r1, #7 +_02254A02: + ldrb r0, [r4, #3] + cmp r1, r0 + beq _02254A18 + str r1, [r4, #4] + strb r1, [r4, #3] + ldr r0, [r4, #0x10] + bl Sav2_Poketch_SetScreenTint + add sp, #8 + mov r0, #1 + pop {r4, pc} +_02254A18: + mov r0, #0 + add sp, #8 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_022549C8 + + thumb_func_start MOD44_02254A20 +MOD44_02254A20: ; 0x02254A20 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A30 + cmp r0, #1 + beq _02254A40 + b _02254A4E +_02254A30: + ldr r0, [r4, #8] + mov r1, #1 + bl MOD44_02254B14 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A4E +_02254A40: + ldr r0, [r4, #8] + bl MOD44_02254B44 + cmp r0, #0 + beq _02254A4E + mov r0, #1 + pop {r4, pc} +_02254A4E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_02254A20 + + .section .rodata + + .global MOD44_02254C54 +MOD44_02254C54: ; 0x02254C54 + .word MOD44_0225493C, MOD44_0225497C, MOD44_02254A20 diff --git a/arm9/modules/44/asm/mod44_02254A54.s b/arm9/modules/44/asm/mod44_02254A54.s new file mode 100644 index 00000000..13d6529c --- /dev/null +++ b/arm9/modules/44/asm/mod44_02254A54.s @@ -0,0 +1,289 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD44_02254A54 +MOD44_02254A54: ; 0x02254A54 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #8 + mov r1, #0x3c + bl AllocFromHeap + add r4, r0, #0 + beq _02254A8A + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r5, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + bl MOD20_02252D24 + str r0, [r4, #0x20] + add r0, r4, #0 + add r1, r5, #0 + bl MOD44_02254A90 + str r4, [r6] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254A8A: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD44_02254A54 + + thumb_func_start MOD44_02254A90 +MOD44_02254A90: ; 0x02254A90 + push {r4, r5, lr} + sub sp, #0xc + mov r3, #0 + str r3, [sp] + mov r2, #1 + add r5, r0, #0 + add r4, r1, #0 + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x45 + bl GfGfxLoader_LoadWholePalette + mov r0, #8 + str r0, [sp] + add r0, r5, #0 + add r0, #0x28 + mov r1, #0xc + mov r2, #0x43 + mov r3, #0x44 + bl MOD20_02253FBC + add r2, r5, #0 + ldr r0, [r5, #0x20] + ldr r1, _02254AE0 ; =MOD44_02254C60 + add r2, #0x28 + bl MOD20_02253E74 + str r0, [r5, #0x24] + ldr r1, [r4] + mov r2, #0x25 + lsl r1, r1, #4 + add r1, #0x38 + lsl r1, r1, #0xc + lsl r2, r2, #0xe + bl MOD20_02253F64 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 +_02254AE0: .word MOD44_02254C60 + thumb_func_end MOD44_02254A90 + + thumb_func_start MOD44_02254AE4 +MOD44_02254AE4: ; 0x02254AE4 + push {r4, lr} + add r4, r0, #0 + ldr r1, [r4, #0x24] + cmp r1, #0 + beq _02254AF4 + ldr r0, [r4, #0x20] + bl MOD20_02253F14 +_02254AF4: + add r4, #0x28 + add r0, r4, #0 + bl MOD20_02254014 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_02254AE4 + + thumb_func_start MOD44_02254B00 +MOD44_02254B00: ; 0x02254B00 + push {r4, lr} + add r4, r0, #0 + beq _02254B10 + bl MOD44_02254AE4 + add r0, r4, #0 + bl FreeToHeap +_02254B10: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_02254B00 + + thumb_func_start MOD44_02254B14 +MOD44_02254B14: ; 0x02254B14 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254B34 ; =MOD44_02254C8C + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254B34: .word MOD44_02254C8C + thumb_func_end MOD44_02254B14 + + thumb_func_start MOD44_02254B38 +MOD44_02254B38: ; 0x02254B38 + ldr r3, _02254B40 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254B40: .word MOD20_02253794 + thumb_func_end MOD44_02254B38 + + thumb_func_start MOD44_02254B44 +MOD44_02254B44: ; 0x02254B44 + ldr r3, _02254B4C ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254B4C: .word MOD20_022537B8 + thumb_func_end MOD44_02254B44 + + thumb_func_start MOD44_02254B50 +MOD44_02254B50: ; 0x02254B50 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_02254B50 + + thumb_func_start MOD44_02254B64 +MOD44_02254B64: ; 0x02254B64 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD20_022538A4 + ldr r0, [r5, #4] + ldr r2, _02254BEC ; =MOD44_02254C70 + mov r1, #6 + mov r3, #0 + bl InitBgFromTemplate + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x42 + mov r3, #6 + bl GfGfxLoader_LoadCharData + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x41 + mov r3, #6 + bl GfGfxLoader_LoadScrnData + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r0, [r5, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + ldr r1, _02254BF0 ; =0x04001000 + ldr r0, _02254BF4 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD44_02254B50 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 +_02254BEC: .word MOD44_02254C70 +_02254BF0: .word 0x04001000 +_02254BF4: .word 0xFFFFE0FF + thumb_func_end MOD44_02254B64 + + thumb_func_start MOD44_02254BF8 +MOD44_02254BF8: ; 0x02254BF8 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FreeBgTilemapBuffer + add r0, r4, #0 + bl MOD44_02254B50 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD44_02254BF8 + + thumb_func_start MOD44_02254C14 +MOD44_02254C14: ; 0x02254C14 + push {r4, r5, r6, lr} + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r5, r0, #0 + add r0, r6, #0 + bl MOD20_022538A4 + add r4, r0, #0 + ldr r0, _02254C50 ; =0x00000663 + bl MOD20_02252B28 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r1, [r4] + mov r2, #0x25 + lsl r1, r1, #4 + add r1, #0x38 + ldr r0, [r5, #0x24] + lsl r1, r1, #0xc + lsl r2, r2, #0xe + bl MOD20_02253F64 + add r0, r6, #0 + bl MOD44_02254B50 + pop {r4, r5, r6, pc} + .align 2, 0 +_02254C50: .word 0x00000663 + thumb_func_end MOD44_02254C14 + + .section .rodata + + .global MOD44_02254C60 +MOD44_02254C60: ; 0x02254C60 + .byte 0x00, 0x80, 0x03, 0x00 + .byte 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 + + .global MOD44_02254C70 +MOD44_02254C70: ; 0x02254C70 + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 + .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD44_02254C8C +MOD44_02254C8C: ; 0x02254C8C + .word 0x00, MOD44_02254B64, 0x00 + .word 0x01, MOD44_02254BF8, 0x00 + .word 0x02, MOD44_02254C14, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/44/asm/module_44.s b/arm9/modules/44/asm/module_44.s deleted file mode 100644 index b8f5aa0b..00000000 --- a/arm9/modules/44/asm/module_44.s +++ /dev/null @@ -1,580 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD44_02254854 -MOD44_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x14 - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD44_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD44_022548EC - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD44_022548EC - thumb_func_end MOD44_02254854 - - thumb_func_start MOD44_0225489C -MOD44_0225489C: ; 0x0225489C - push {r4, r5, r6, lr} - add r4, r1, #0 - add r5, r0, #0 - add r0, r4, #0 - add r6, r2, #0 - bl MOD20_02252C3C - str r0, [r5, #0x10] - bl Sav2_Poketch_GetScreenTint - str r0, [r5, #4] - strb r0, [r5, #3] - add r0, r5, #0 - add r0, #8 - add r1, r5, #4 - add r2, r6, #0 - bl MOD44_02254A54 - cmp r0, #0 - beq _022548D2 - mov r0, #0 - strb r0, [r5] - strb r0, [r5, #1] - strb r0, [r5, #2] - str r4, [r5, #0xc] - mov r0, #1 - pop {r4, r5, r6, pc} -_022548D2: - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD44_0225489C - - thumb_func_start MOD44_022548D8 -MOD44_022548D8: ; 0x022548D8 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #8] - bl MOD44_02254B00 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_022548D8 - - thumb_func_start MOD44_022548EC -MOD44_022548EC: ; 0x022548EC - push {r3, r4, r5, lr} - add r4, r1, #0 - ldrb r1, [r4] - add r5, r0, #0 - cmp r1, #3 - bhs _02254918 - lsl r2, r1, #2 - ldr r1, _0225491C ; =MOD44_02254C54 - add r0, r4, #0 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254918 - add r0, r4, #0 - bl MOD44_022548D8 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0xc] - bl MOD20_022529A0 -_02254918: - pop {r3, r4, r5, pc} - nop -_0225491C: .word MOD44_02254C54 - thumb_func_end MOD44_022548EC - - thumb_func_start MOD44_02254920 -MOD44_02254920: ; 0x02254920 - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD44_02254920 - - thumb_func_start MOD44_02254928 -MOD44_02254928: ; 0x02254928 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254930 - b _02254932 -_02254930: - mov r1, #2 -_02254932: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD44_02254928 - - thumb_func_start MOD44_0225493C -MOD44_0225493C: ; 0x0225493C - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _0225494C - cmp r0, #1 - beq _0225495C - b _02254976 -_0225494C: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD44_02254B14 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254976 -_0225495C: - ldr r0, [r4, #8] - mov r1, #0 - bl MOD44_02254B38 - cmp r0, #0 - beq _02254976 - ldr r0, [r4, #0xc] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD44_02254928 -_02254976: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_0225493C - - thumb_func_start MOD44_0225497C -MOD44_0225497C: ; 0x0225497C - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _02254990 - mov r1, #2 - bl MOD44_02254928 - mov r0, #0 - pop {r4, pc} -_02254990: - ldrb r1, [r4, #1] - cmp r1, #0 - beq _0225499C - cmp r1, #1 - beq _022549B4 - b _022549C4 -_0225499C: - bl MOD44_022549C8 - cmp r0, #0 - beq _022549C4 - ldr r0, [r4, #8] - mov r1, #2 - bl MOD44_02254B14 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549C4 -_022549B4: - ldr r0, [r4, #8] - mov r1, #2 - bl MOD44_02254B38 - cmp r0, #0 - beq _022549C4 - mov r0, #0 - strb r0, [r4, #1] -_022549C4: - mov r0, #0 - pop {r4, pc} - thumb_func_end MOD44_0225497C - - thumb_func_start MOD44_022549C8 -MOD44_022549C8: ; 0x022549C8 - push {r4, lr} - sub sp, #8 - add r4, r0, #0 - ldr r0, [r4, #0xc] - bl MOD20_02252C08 - cmp r0, #0 - bne _02254A18 - add r0, sp, #4 - add r1, sp, #0 - bl FUN_02020AB0 - cmp r0, #0 - beq _02254A18 - ldr r0, [sp] - cmp r0, #0x88 - blo _02254A18 - cmp r0, #0xa0 - bhs _02254A18 - ldr r0, [sp, #4] - cmp r0, #0x30 - blo _02254A18 - cmp r0, #0xb8 - bhs _02254A18 - sub r0, #0x30 - lsr r1, r0, #4 - cmp r1, #8 - blo _02254A02 - mov r1, #7 -_02254A02: - ldrb r0, [r4, #3] - cmp r1, r0 - beq _02254A18 - str r1, [r4, #4] - strb r1, [r4, #3] - ldr r0, [r4, #0x10] - bl Sav2_Poketch_SetScreenTint - add sp, #8 - mov r0, #1 - pop {r4, pc} -_02254A18: - mov r0, #0 - add sp, #8 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_022549C8 - - thumb_func_start MOD44_02254A20 -MOD44_02254A20: ; 0x02254A20 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254A30 - cmp r0, #1 - beq _02254A40 - b _02254A4E -_02254A30: - ldr r0, [r4, #8] - mov r1, #1 - bl MOD44_02254B14 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254A4E -_02254A40: - ldr r0, [r4, #8] - bl MOD44_02254B44 - cmp r0, #0 - beq _02254A4E - mov r0, #1 - pop {r4, pc} -_02254A4E: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_02254A20 - - thumb_func_start MOD44_02254A54 -MOD44_02254A54: ; 0x02254A54 - push {r4, r5, r6, lr} - add r6, r0, #0 - add r5, r1, #0 - mov r0, #8 - mov r1, #0x3c - bl AllocFromHeap - add r4, r0, #0 - beq _02254A8A - add r0, #8 - mov r1, #4 - bl MOD20_022536F4 - str r5, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - bl MOD20_02252D24 - str r0, [r4, #0x20] - add r0, r4, #0 - add r1, r5, #0 - bl MOD44_02254A90 - str r4, [r6] - mov r0, #1 - pop {r4, r5, r6, pc} -_02254A8A: - mov r0, #0 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD44_02254A54 - - thumb_func_start MOD44_02254A90 -MOD44_02254A90: ; 0x02254A90 - push {r4, r5, lr} - sub sp, #0xc - mov r3, #0 - str r3, [sp] - mov r2, #1 - add r5, r0, #0 - add r4, r1, #0 - str r2, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r0, #0xc - mov r1, #0x45 - bl GfGfxLoader_LoadWholePalette - mov r0, #8 - str r0, [sp] - add r0, r5, #0 - add r0, #0x28 - mov r1, #0xc - mov r2, #0x43 - mov r3, #0x44 - bl MOD20_02253FBC - add r2, r5, #0 - ldr r0, [r5, #0x20] - ldr r1, _02254AE0 ; =MOD44_02254C60 - add r2, #0x28 - bl MOD20_02253E74 - str r0, [r5, #0x24] - ldr r1, [r4] - mov r2, #0x25 - lsl r1, r1, #4 - add r1, #0x38 - lsl r1, r1, #0xc - lsl r2, r2, #0xe - bl MOD20_02253F64 - add sp, #0xc - pop {r4, r5, pc} - .align 2, 0 -_02254AE0: .word MOD44_02254C60 - thumb_func_end MOD44_02254A90 - - thumb_func_start MOD44_02254AE4 -MOD44_02254AE4: ; 0x02254AE4 - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4, #0x24] - cmp r1, #0 - beq _02254AF4 - ldr r0, [r4, #0x20] - bl MOD20_02253F14 -_02254AF4: - add r4, #0x28 - add r0, r4, #0 - bl MOD20_02254014 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_02254AE4 - - thumb_func_start MOD44_02254B00 -MOD44_02254B00: ; 0x02254B00 - push {r4, lr} - add r4, r0, #0 - beq _02254B10 - bl MOD44_02254AE4 - add r0, r4, #0 - bl FreeToHeap -_02254B10: - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_02254B00 - - thumb_func_start MOD44_02254B14 -MOD44_02254B14: ; 0x02254B14 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254B34 ; =MOD44_02254C8C - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254B34: .word MOD44_02254C8C - thumb_func_end MOD44_02254B14 - - thumb_func_start MOD44_02254B38 -MOD44_02254B38: ; 0x02254B38 - ldr r3, _02254B40 ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254B40: .word MOD20_02253794 - thumb_func_end MOD44_02254B38 - - thumb_func_start MOD44_02254B44 -MOD44_02254B44: ; 0x02254B44 - ldr r3, _02254B4C ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254B4C: .word MOD20_022537B8 - thumb_func_end MOD44_02254B44 - - thumb_func_start MOD44_02254B50 -MOD44_02254B50: ; 0x02254B50 - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_02254B50 - - thumb_func_start MOD44_02254B64 -MOD44_02254B64: ; 0x02254B64 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - add r0, r4, #0 - bl MOD20_022538A4 - ldr r0, [r5, #4] - ldr r2, _02254BEC ; =MOD44_02254C70 - mov r1, #6 - mov r3, #0 - bl InitBgFromTemplate - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x42 - mov r3, #6 - bl GfGfxLoader_LoadCharData - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x41 - mov r3, #6 - bl GfGfxLoader_LoadScrnData - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - ldr r0, [r5, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - ldr r1, _02254BF0 ; =0x04001000 - ldr r0, _02254BF4 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD44_02254B50 - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 -_02254BEC: .word MOD44_02254C70 -_02254BF0: .word 0x04001000 -_02254BF4: .word 0xFFFFE0FF - thumb_func_end MOD44_02254B64 - - thumb_func_start MOD44_02254BF8 -MOD44_02254BF8: ; 0x02254BF8 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - add r0, r4, #0 - bl MOD44_02254B50 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD44_02254BF8 - - thumb_func_start MOD44_02254C14 -MOD44_02254C14: ; 0x02254C14 - push {r4, r5, r6, lr} - add r6, r1, #0 - add r0, r6, #0 - bl MOD20_022538A0 - add r5, r0, #0 - add r0, r6, #0 - bl MOD20_022538A4 - add r4, r0, #0 - ldr r0, _02254C50 ; =0x00000663 - bl MOD20_02252B28 - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - ldr r1, [r4] - mov r2, #0x25 - lsl r1, r1, #4 - add r1, #0x38 - ldr r0, [r5, #0x24] - lsl r1, r1, #0xc - lsl r2, r2, #0xe - bl MOD20_02253F64 - add r0, r6, #0 - bl MOD44_02254B50 - pop {r4, r5, r6, pc} - .align 2, 0 -_02254C50: .word 0x00000663 - thumb_func_end MOD44_02254C14 - - .section .rodata - - .global MOD44_02254C54 -MOD44_02254C54: ; 0x02254C54 - .word MOD44_0225493C, MOD44_0225497C, MOD44_02254A20 - - .global MOD44_02254C60 -MOD44_02254C60: ; 0x02254C60 - .byte 0x00, 0x80, 0x03, 0x00 - .byte 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 - - .global MOD44_02254C70 -MOD44_02254C70: ; 0x02254C70 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x00 - .byte 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD44_02254C8C -MOD44_02254C8C: ; 0x02254C8C - .word 0x00, MOD44_02254B64, 0x00 - .word 0x01, MOD44_02254BF8, 0x00 - .word 0x02, MOD44_02254C14, 0x00 - .word 0x00, 0x00000000, 0x00 -- cgit v1.2.3 From f789535ffd0531d74a87f3ed5d5b157c5aecc548 Mon Sep 17 00:00:00 2001 From: tgsm Date: Fri, 23 Jul 2021 12:21:54 -0500 Subject: Split module 26 --- arm9/arm9.lsf | 3 +- arm9/global.inc | 5 + arm9/modules/26/asm/mod26_02254854.s | 523 ++++++++++++++++++++++ arm9/modules/26/asm/mod26_02254BD4.s | 305 +++++++++++++ arm9/modules/26/asm/module_26.s | 822 ----------------------------------- 5 files changed, 835 insertions(+), 823 deletions(-) create mode 100644 arm9/modules/26/asm/mod26_02254854.s create mode 100644 arm9/modules/26/asm/mod26_02254BD4.s delete mode 100644 arm9/modules/26/asm/module_26.s diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index c88b88f0..25689701 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -848,7 +848,8 @@ Overlay MODULE_26 ##Dot Artist## After MODULE_20 Object module_26_sinit.o - Object module_26.o + Object mod26_02254854.o + Object mod26_02254BD4.o } Overlay MODULE_27 diff --git a/arm9/global.inc b/arm9/global.inc index 96c0e659..d638e601 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7444,6 +7444,11 @@ .extern MOD21_02254B10 .extern MOD21_02254B34 .extern MOD21_02254B40 +.extern MOD26_02254BD4 +.extern MOD26_02254C04 +.extern MOD26_02254C10 +.extern MOD26_02254C34 +.extern MOD26_02254C40 .extern MOD33_022549AC .extern MOD33_022549DC .extern MOD33_022549E8 diff --git a/arm9/modules/26/asm/mod26_02254854.s b/arm9/modules/26/asm/mod26_02254854.s new file mode 100644 index 00000000..8f6576b7 --- /dev/null +++ b/arm9/modules/26/asm/mod26_02254854.s @@ -0,0 +1,523 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD26_02254854 +MOD26_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + mov r1, #0x9b + add r5, r0, #0 + mov r0, #8 + lsl r1, r1, #2 + add r7, r2, #0 + str r3, [sp] + bl AllocFromHeap + add r4, r0, #0 + beq _0225489C + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD26_022548A8 + cmp r0, #0 + beq _02254896 + ldr r0, _022548A0 ; =MOD26_02254A4C + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _02254896 + ldr r0, _022548A4 ; =MOD26_02254A30 + add r1, r4, #0 + str r4, [r5] + bl MOD20_022529B4 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_02254896: + add r0, r4, #0 + bl FreeToHeap +_0225489C: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022548A0: .word MOD26_02254A4C +_022548A4: .word MOD26_02254A30 + thumb_func_end MOD26_02254854 + + thumb_func_start MOD26_022548A8 +MOD26_022548A8: ; 0x022548A8 + push {r3, r4, r5, lr} + add r4, r2, #0 + mov r2, #0x1f + add r5, r0, #0 + lsl r2, r2, #4 + str r1, [r5, r2] + add r1, r5, #0 + add r1, #0xc + bl MOD26_022548E8 + mov r0, #0x7b + lsl r0, r0, #2 + add r1, r5, #0 + add r0, r5, r0 + add r1, #0xc + add r2, r4, #0 + bl MOD26_02254BD4 + cmp r0, #0 + beq _022548E4 + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + mov r0, #0x19 + str r0, [r5, #4] + mov r0, #0x15 + str r0, [r5, #8] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548E4: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD26_022548A8 + + thumb_func_start MOD26_022548E8 +MOD26_022548E8: ; 0x022548E8 + push {r4, r5, r6, lr} + add r5, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r5, r0] + add r4, r1, #0 + bl MOD20_02252C3C + add r6, r0, #0 + bl Sav2_Poketch_DotArtistIsEnabled + cmp r0, #0 + beq _0225490E + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl MOD26_02254918 + pop {r4, r5, r6, pc} +_0225490E: + add r0, r4, #0 + bl MOD26_022549DC + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD26_022548E8 + + thumb_func_start MOD26_02254918 +MOD26_02254918: ; 0x02254918 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + mov r1, #0x7d + add r5, r0, #0 + lsl r1, r1, #2 + add r0, r2, #0 + add r1, r5, r1 + bl Sav2_Poketch_DotArtistGetDrawing + mov r3, #0 + mov r7, #0x7d + mov ip, r3 + lsl r7, r7, #2 + mov r0, #3 +_02254934: + mov r2, #0 +_02254936: + asr r1, r3, #1 + lsr r1, r1, #0x1e + add r1, r3, r1 + asr r1, r1, #2 + add r1, r5, r1 + add r6, r3, #0 + lsl r6, r6, #0x1e + ldrb r1, [r1, r7] + lsr r6, r6, #0x1d + add r3, r3, #1 + asr r1, r6 + and r1, r0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r1, #1 + strb r1, [r4, r2] + add r2, r2, #1 + cmp r2, #0x18 + blt _02254936 + mov r1, ip + add r1, r1, #1 + add r4, #0x18 + mov ip, r1 + cmp r1, #0x14 + blt _02254934 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD26_02254918 + + thumb_func_start MOD26_0225496C +MOD26_0225496C: ; 0x0225496C + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r1, #0 + mov r1, #0x7d + str r2, [sp] + lsl r1, r1, #2 + str r0, [sp, #4] + add r0, r0, r1 + mov r1, #0 + mov r2, #0x78 + bl MI_CpuFill8 + mov r5, #0 + mov ip, r5 +_02254988: + mov r4, #0 +_0225498A: + asr r0, r5, #1 + lsr r0, r0, #0x1e + add r0, r5, r0 + asr r1, r0, #2 + ldr r0, [sp, #4] + add r6, r5, #0 + add r3, r0, r1 + mov r0, #0x7d + lsl r0, r0, #2 + ldrb r2, [r3, r0] + ldrb r0, [r7, r4] + add r4, r4, #1 + add r5, r5, #1 + sub r1, r0, #1 + mov r0, #3 + and r0, r1 + lsl r1, r6, #0x1e + lsr r1, r1, #0x1d + lsl r0, r1 + add r1, r2, #0 + orr r1, r0 + mov r0, #0x7d + lsl r0, r0, #2 + strb r1, [r3, r0] + cmp r4, #0x18 + blt _0225498A + mov r0, ip + add r0, r0, #1 + add r7, #0x18 + mov ip, r0 + cmp r0, #0x14 + blt _02254988 + mov r2, #0x7d + ldr r1, [sp, #4] + lsl r2, r2, #2 + ldr r0, [sp] + add r1, r1, r2 + bl Sav2_Poketch_DotArtistSetDrawingAndEnable + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD26_0225496C + + thumb_func_start MOD26_022549DC +MOD26_022549DC: ; 0x022549DC + push {r4, r5} + mov r4, #0 + ldr r5, _02254A00 ; =MOD26_02254DF0 + add r2, r4, #0 +_022549E4: + add r3, r2, #0 +_022549E6: + ldrb r1, [r5, r3] + strb r1, [r0, r3] + add r3, r3, #1 + cmp r3, #0x18 + blt _022549E6 + add r4, r4, #1 + add r5, #0x18 + add r0, #0x18 + cmp r4, #0x14 + blt _022549E4 + pop {r4, r5} + bx lr + nop +_02254A00: .word MOD26_02254DF0 + thumb_func_end MOD26_022549DC + + thumb_func_start MOD26_02254A04 +MOD26_02254A04: ; 0x02254A04 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_02252C3C + add r1, r4, #0 + add r2, r0, #0 + add r0, r4, #0 + add r1, #0xc + bl MOD26_0225496C + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C04 + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + thumb_func_end MOD26_02254A04 + + thumb_func_start MOD26_02254A30 +MOD26_02254A30: ; 0x02254A30 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_02252C3C + add r2, r0, #0 + add r0, r4, #0 + add r4, #0xc + add r1, r4, #0 + bl MOD26_0225496C + pop {r4, pc} + thumb_func_end MOD26_02254A30 + + thumb_func_start MOD26_02254A4C +MOD26_02254A4C: ; 0x02254A4C + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254A7C + lsl r2, r1, #2 + ldr r1, _02254A80 ; =MOD26_02254DE4 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254A7C + add r0, r4, #0 + bl MOD26_02254A04 + add r0, r5, #0 + bl FUN_0200CAB4 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_022529A0 +_02254A7C: + pop {r3, r4, r5, pc} + nop +_02254A80: .word MOD26_02254DE4 + thumb_func_end MOD26_02254A4C + + thumb_func_start MOD26_02254A84 +MOD26_02254A84: ; 0x02254A84 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD26_02254A84 + + thumb_func_start MOD26_02254A8C +MOD26_02254A8C: ; 0x02254A8C + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254A94 + b _02254A96 +_02254A94: + mov r1, #2 +_02254A96: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD26_02254A8C + + thumb_func_start MOD26_02254AA0 +MOD26_02254AA0: ; 0x02254AA0 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254AB0 + cmp r0, #1 + beq _02254AC4 + b _02254AE6 +_02254AB0: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl MOD26_02254C10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254AE6 +_02254AC4: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl MOD26_02254C34 + cmp r0, #0 + beq _02254AE6 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD26_02254A8C +_02254AE6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254AA0 + + thumb_func_start MOD26_02254AEC +MOD26_02254AEC: ; 0x02254AEC + push {r3, r4, r5, lr} + sub sp, #8 + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254B04 + mov r1, #2 + bl MOD26_02254A8C + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, pc} +_02254B04: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl MOD26_02254C34 + cmp r0, #0 + beq _02254B90 + add r0, sp, #4 + add r1, sp, #0 + bl MOD20_02252B68 + cmp r0, #0 + beq _02254B90 + ldr r1, [sp, #4] + cmp r1, #0x10 + blo _02254B90 + ldr r0, [sp] + cmp r0, #0x10 + blo _02254B90 + sub r1, #0x10 + lsr r2, r1, #3 + sub r0, #0x10 + lsr r1, r0, #3 + str r2, [sp, #4] + str r1, [sp] + cmp r2, #0x18 + bhs _02254B90 + cmp r1, #0x14 + bhs _02254B90 + ldr r0, [r4, #4] + cmp r0, r2 + bne _02254B54 + ldr r0, [r4, #8] + cmp r0, r1 + bne _02254B54 + bl FUN_02020AA4 + cmp r0, #1 + bne _02254B90 +_02254B54: + ldr r2, [sp] + add r0, r4, #0 + mov r1, #0x18 + add r3, r2, #0 + add r0, #0xc + mul r3, r1 + add r5, r0, r3 + ldr r3, [sp, #4] + ldrb r2, [r5, r3] + add r2, r2, #1 + strb r2, [r5, r3] + ldr r2, [sp] + mul r1, r2 + add r2, r0, r1 + ldr r1, [sp, #4] + ldrb r0, [r2, r1] + cmp r0, #4 + bls _02254B7C + mov r0, #1 + strb r0, [r2, r1] +_02254B7C: + ldr r0, [sp, #4] + mov r1, #1 + str r0, [r4, #4] + ldr r0, [sp] + str r0, [r4, #8] + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C10 +_02254B90: + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD26_02254AEC + + thumb_func_start MOD26_02254B98 +MOD26_02254B98: ; 0x02254B98 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254BA8 + cmp r0, #1 + beq _02254BBC + b _02254BCE +_02254BA8: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #2 + bl MOD26_02254C10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254BCE +_02254BBC: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C40 + cmp r0, #0 + beq _02254BCE + mov r0, #1 + pop {r4, pc} +_02254BCE: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254B98 + + .section .rodata + + .global MOD26_02254DE4 +MOD26_02254DE4: ; 0x02254DE4 + .word MOD26_02254AA0, MOD26_02254AEC, MOD26_02254B98 + + .global MOD26_02254DF0 +MOD26_02254DF0: ; 0x02254DF0 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1 + .byte 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1 + .byte 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1 + .byte 1, 1, 1, 4, 1, 1, 4, 4, 4, 1, 4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 1 + .byte 1, 1, 1, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 1, 4, 1, 4, 1, 1, 1 + .byte 1, 1, 1, 4, 1, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 1, 4, 1, 4, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 diff --git a/arm9/modules/26/asm/mod26_02254BD4.s b/arm9/modules/26/asm/mod26_02254BD4.s new file mode 100644 index 00000000..b305807a --- /dev/null +++ b/arm9/modules/26/asm/mod26_02254BD4.s @@ -0,0 +1,305 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD26_02254BD4 +MOD26_02254BD4: ; 0x02254BD4 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl AllocFromHeap + add r4, r0, #0 + beq _02254C00 + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _02254C00 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254C00: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD26_02254BD4 + + thumb_func_start MOD26_02254C04 +MOD26_02254C04: ; 0x02254C04 + push {r3, lr} + cmp r0, #0 + beq _02254C0E + bl FreeToHeap +_02254C0E: + pop {r3, pc} + thumb_func_end MOD26_02254C04 + + thumb_func_start MOD26_02254C10 +MOD26_02254C10: ; 0x02254C10 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254C30 ; =MOD26_02254FF0 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254C30: .word MOD26_02254FF0 + thumb_func_end MOD26_02254C10 + + thumb_func_start MOD26_02254C34 +MOD26_02254C34: ; 0x02254C34 + ldr r3, _02254C3C ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254C3C: .word MOD20_02253794 + thumb_func_end MOD26_02254C34 + + thumb_func_start MOD26_02254C40 +MOD26_02254C40: ; 0x02254C40 + ldr r3, _02254C48 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254C48: .word MOD20_022537B8 + thumb_func_end MOD26_02254C40 + + thumb_func_start MOD26_02254C4C +MOD26_02254C4C: ; 0x02254C4C + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254C4C + + thumb_func_start MOD26_02254C60 +MOD26_02254C60: ; 0x02254C60 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254CB8 ; =MOD26_02254FD4 + mov r1, #6 + mov r3, #0 + bl InitBgFromTemplate + ldr r0, [r5, #4] + bl MOD26_02254CC4 + ldr r0, [r5, #4] + ldr r1, [r5] + bl MOD26_02254DAC + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r0, [r5, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + ldr r1, _02254CBC ; =0x04001000 + ldr r0, _02254CC0 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD26_02254C4C + pop {r3, r4, r5, pc} + .align 2, 0 +_02254CB8: .word MOD26_02254FD4 +_02254CBC: .word 0x04001000 +_02254CC0: .word 0xFFFFE0FF + thumb_func_end MOD26_02254C60 + + thumb_func_start MOD26_02254CC4 +MOD26_02254CC4: ; 0x02254CC4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + str r0, [sp, #4] + mov r0, #8 + lsl r1, r0, #6 + bl AllocFromHeap + str r0, [sp, #0x1c] + cmp r0, #0 + beq _02254D68 + mov r0, #0 + str r0, [sp, #0x18] + str r0, [sp, #0x14] + str r0, [sp, #0x10] + str r0, [sp, #0xc] + str r0, [sp, #8] + add r7, r0, #0 + add r6, r0, #0 + add r4, r0, #0 + add r5, r0, #0 +_02254CEC: + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x1c] + orr r1, r0 + ldr r0, [sp, #8] + orr r0, r1 + orr r0, r7 + orr r0, r6 + orr r0, r4 + add r1, r5, #0 + orr r1, r0 + ldr r0, [sp, #0x18] + orr r0, r1 + ldr r1, [sp, #0x14] + add r1, r2, r1 + mov r2, #0x20 + bl MIi_CpuClearFast + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x10] + add r0, #0x20 + str r0, [sp, #0x14] + mov r0, #1 + lsl r0, r0, #0x18 + add r0, r1, r0 + str r0, [sp, #0x10] + mov r0, #1 + ldr r1, [sp, #0xc] + lsl r0, r0, #0x1c + add r0, r1, r0 + str r0, [sp, #0xc] + mov r0, #1 + ldr r1, [sp, #8] + lsl r0, r0, #0x14 + add r0, r1, r0 + str r0, [sp, #8] + mov r0, #1 + lsl r0, r0, #0x10 + add r7, r7, r0 + lsr r0, r0, #4 + add r6, r6, r0 + mov r0, #1 + lsl r0, r0, #8 + add r4, r4, r0 + ldr r0, [sp, #0x18] + add r5, #0x10 + add r0, r0, #1 + str r0, [sp, #0x18] + cmp r0, #0x10 + blt _02254CEC + mov r0, #0 + str r0, [sp] + mov r3, #2 + ldr r0, [sp, #4] + ldr r2, [sp, #0x1c] + mov r1, #6 + lsl r3, r3, #8 + bl BG_LoadCharTilesData + ldr r0, [sp, #0x1c] + bl FreeToHeap +_02254D68: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD26_02254CC4 + + thumb_func_start MOD26_02254D6C +MOD26_02254D6C: ; 0x02254D6C + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r0, [r4, #4] + ldr r1, [r4] + bl MOD26_02254DAC + ldr r0, [r4, #4] + mov r1, #6 + bl BgCommitTilemapBufferToVram + add r0, r5, #0 + bl MOD26_02254C4C + pop {r3, r4, r5, pc} + thumb_func_end MOD26_02254D6C + + thumb_func_start MOD26_02254D90 +MOD26_02254D90: ; 0x02254D90 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FreeBgTilemapBuffer + add r0, r4, #0 + bl MOD26_02254C4C + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254D90 + + thumb_func_start MOD26_02254DAC +MOD26_02254DAC: ; 0x02254DAC + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + mov r1, #6 + bl GetBgTilemapBuffer + mov r5, #0 + ldr r1, _02254DE0 ; =MOD26_02254FD0 + add r0, #0x84 + add r2, r5, #0 +_02254DBE: + add r3, r2, #0 + add r6, r0, #0 +_02254DC2: + ldrb r7, [r4, r3] + add r3, r3, #1 + add r7, r1, r7 + sub r7, r7, #1 + ldrb r7, [r7] + strh r7, [r6] + add r6, r6, #2 + cmp r3, #0x18 + blt _02254DC2 + add r5, r5, #1 + add r0, #0x40 + add r4, #0x18 + cmp r5, #0x14 + blt _02254DBE + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254DE0: .word MOD26_02254FD0 + thumb_func_end MOD26_02254DAC + + .section .rodata + + .global MOD26_02254FD0 +MOD26_02254FD0: ; 0x02254FD0 + .byte 0x04, 0x0F, 0x08, 0x01 + + .global MOD26_02254FD4 +MOD26_02254FD4: ; 0x02254FD4 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD26_02254FF0 +MOD26_02254FF0: ; 0x02254FF0 + .word 0x00, MOD26_02254C60, 0x00 + .word 0x01, MOD26_02254D6C, 0x00 + .word 0x02, MOD26_02254D90, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/26/asm/module_26.s b/arm9/modules/26/asm/module_26.s deleted file mode 100644 index 251ea218..00000000 --- a/arm9/modules/26/asm/module_26.s +++ /dev/null @@ -1,822 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD26_02254854 -MOD26_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r6, r1, #0 - mov r1, #0x9b - add r5, r0, #0 - mov r0, #8 - lsl r1, r1, #2 - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _0225489C - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD26_022548A8 - cmp r0, #0 - beq _02254896 - ldr r0, _022548A0 ; =MOD26_02254A4C - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _02254896 - ldr r0, _022548A4 ; =MOD26_02254A30 - add r1, r4, #0 - str r4, [r5] - bl MOD20_022529B4 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_02254896: - add r0, r4, #0 - bl FreeToHeap -_0225489C: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022548A0: .word MOD26_02254A4C -_022548A4: .word MOD26_02254A30 - thumb_func_end MOD26_02254854 - - thumb_func_start MOD26_022548A8 -MOD26_022548A8: ; 0x022548A8 - push {r3, r4, r5, lr} - add r4, r2, #0 - mov r2, #0x1f - add r5, r0, #0 - lsl r2, r2, #4 - str r1, [r5, r2] - add r1, r5, #0 - add r1, #0xc - bl MOD26_022548E8 - mov r0, #0x7b - lsl r0, r0, #2 - add r1, r5, #0 - add r0, r5, r0 - add r1, #0xc - add r2, r4, #0 - bl MOD26_02254BD4 - cmp r0, #0 - beq _022548E4 - mov r0, #0 - strb r0, [r5] - strb r0, [r5, #1] - strb r0, [r5, #2] - mov r0, #0x19 - str r0, [r5, #4] - mov r0, #0x15 - str r0, [r5, #8] - mov r0, #1 - pop {r3, r4, r5, pc} -_022548E4: - mov r0, #0 - pop {r3, r4, r5, pc} - thumb_func_end MOD26_022548A8 - - thumb_func_start MOD26_022548E8 -MOD26_022548E8: ; 0x022548E8 - push {r4, r5, r6, lr} - add r5, r0, #0 - mov r0, #0x1f - lsl r0, r0, #4 - ldr r0, [r5, r0] - add r4, r1, #0 - bl MOD20_02252C3C - add r6, r0, #0 - bl Sav2_Poketch_DotArtistIsEnabled - cmp r0, #0 - beq _0225490E - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl MOD26_02254918 - pop {r4, r5, r6, pc} -_0225490E: - add r0, r4, #0 - bl MOD26_022549DC - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD26_022548E8 - - thumb_func_start MOD26_02254918 -MOD26_02254918: ; 0x02254918 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - mov r1, #0x7d - add r5, r0, #0 - lsl r1, r1, #2 - add r0, r2, #0 - add r1, r5, r1 - bl Sav2_Poketch_DotArtistGetDrawing - mov r3, #0 - mov r7, #0x7d - mov ip, r3 - lsl r7, r7, #2 - mov r0, #3 -_02254934: - mov r2, #0 -_02254936: - asr r1, r3, #1 - lsr r1, r1, #0x1e - add r1, r3, r1 - asr r1, r1, #2 - add r1, r5, r1 - add r6, r3, #0 - lsl r6, r6, #0x1e - ldrb r1, [r1, r7] - lsr r6, r6, #0x1d - add r3, r3, #1 - asr r1, r6 - and r1, r0 - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - add r1, r1, #1 - strb r1, [r4, r2] - add r2, r2, #1 - cmp r2, #0x18 - blt _02254936 - mov r1, ip - add r1, r1, #1 - add r4, #0x18 - mov ip, r1 - cmp r1, #0x14 - blt _02254934 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end MOD26_02254918 - - thumb_func_start MOD26_0225496C -MOD26_0225496C: ; 0x0225496C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r7, r1, #0 - mov r1, #0x7d - str r2, [sp] - lsl r1, r1, #2 - str r0, [sp, #4] - add r0, r0, r1 - mov r1, #0 - mov r2, #0x78 - bl MI_CpuFill8 - mov r5, #0 - mov ip, r5 -_02254988: - mov r4, #0 -_0225498A: - asr r0, r5, #1 - lsr r0, r0, #0x1e - add r0, r5, r0 - asr r1, r0, #2 - ldr r0, [sp, #4] - add r6, r5, #0 - add r3, r0, r1 - mov r0, #0x7d - lsl r0, r0, #2 - ldrb r2, [r3, r0] - ldrb r0, [r7, r4] - add r4, r4, #1 - add r5, r5, #1 - sub r1, r0, #1 - mov r0, #3 - and r0, r1 - lsl r1, r6, #0x1e - lsr r1, r1, #0x1d - lsl r0, r1 - add r1, r2, #0 - orr r1, r0 - mov r0, #0x7d - lsl r0, r0, #2 - strb r1, [r3, r0] - cmp r4, #0x18 - blt _0225498A - mov r0, ip - add r0, r0, #1 - add r7, #0x18 - mov ip, r0 - cmp r0, #0x14 - blt _02254988 - mov r2, #0x7d - ldr r1, [sp, #4] - lsl r2, r2, #2 - ldr r0, [sp] - add r1, r1, r2 - bl Sav2_Poketch_DotArtistSetDrawingAndEnable - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD26_0225496C - - thumb_func_start MOD26_022549DC -MOD26_022549DC: ; 0x022549DC - push {r4, r5} - mov r4, #0 - ldr r5, _02254A00 ; =MOD26_02254DF0 - add r2, r4, #0 -_022549E4: - add r3, r2, #0 -_022549E6: - ldrb r1, [r5, r3] - strb r1, [r0, r3] - add r3, r3, #1 - cmp r3, #0x18 - blt _022549E6 - add r4, r4, #1 - add r5, #0x18 - add r0, #0x18 - cmp r4, #0x14 - blt _022549E4 - pop {r4, r5} - bx lr - nop -_02254A00: .word MOD26_02254DF0 - thumb_func_end MOD26_022549DC - - thumb_func_start MOD26_02254A04 -MOD26_02254A04: ; 0x02254A04 - push {r4, lr} - add r4, r0, #0 - mov r0, #0x1f - lsl r0, r0, #4 - ldr r0, [r4, r0] - bl MOD20_02252C3C - add r1, r4, #0 - add r2, r0, #0 - add r0, r4, #0 - add r1, #0xc - bl MOD26_0225496C - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD26_02254C04 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD26_02254A04 - - thumb_func_start MOD26_02254A30 -MOD26_02254A30: ; 0x02254A30 - push {r4, lr} - add r4, r0, #0 - mov r0, #0x1f - lsl r0, r0, #4 - ldr r0, [r4, r0] - bl MOD20_02252C3C - add r2, r0, #0 - add r0, r4, #0 - add r4, #0xc - add r1, r4, #0 - bl MOD26_0225496C - pop {r4, pc} - thumb_func_end MOD26_02254A30 - - thumb_func_start MOD26_02254A4C -MOD26_02254A4C: ; 0x02254A4C - push {r3, r4, r5, lr} - add r4, r1, #0 - ldrb r1, [r4] - add r5, r0, #0 - cmp r1, #3 - bhs _02254A7C - lsl r2, r1, #2 - ldr r1, _02254A80 ; =MOD26_02254DE4 - add r0, r4, #0 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254A7C - add r0, r4, #0 - bl MOD26_02254A04 - add r0, r5, #0 - bl FUN_0200CAB4 - mov r0, #0x1f - lsl r0, r0, #4 - ldr r0, [r4, r0] - bl MOD20_022529A0 -_02254A7C: - pop {r3, r4, r5, pc} - nop -_02254A80: .word MOD26_02254DE4 - thumb_func_end MOD26_02254A4C - - thumb_func_start MOD26_02254A84 -MOD26_02254A84: ; 0x02254A84 - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD26_02254A84 - - thumb_func_start MOD26_02254A8C -MOD26_02254A8C: ; 0x02254A8C - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254A94 - b _02254A96 -_02254A94: - mov r1, #2 -_02254A96: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD26_02254A8C - - thumb_func_start MOD26_02254AA0 -MOD26_02254AA0: ; 0x02254AA0 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254AB0 - cmp r0, #1 - beq _02254AC4 - b _02254AE6 -_02254AB0: - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl MOD26_02254C10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254AE6 -_02254AC4: - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #0 - bl MOD26_02254C34 - cmp r0, #0 - beq _02254AE6 - mov r0, #0x1f - lsl r0, r0, #4 - ldr r0, [r4, r0] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD26_02254A8C -_02254AE6: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD26_02254AA0 - - thumb_func_start MOD26_02254AEC -MOD26_02254AEC: ; 0x02254AEC - push {r3, r4, r5, lr} - sub sp, #8 - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _02254B04 - mov r1, #2 - bl MOD26_02254A8C - add sp, #8 - mov r0, #0 - pop {r3, r4, r5, pc} -_02254B04: - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #1 - bl MOD26_02254C34 - cmp r0, #0 - beq _02254B90 - add r0, sp, #4 - add r1, sp, #0 - bl MOD20_02252B68 - cmp r0, #0 - beq _02254B90 - ldr r1, [sp, #4] - cmp r1, #0x10 - blo _02254B90 - ldr r0, [sp] - cmp r0, #0x10 - blo _02254B90 - sub r1, #0x10 - lsr r2, r1, #3 - sub r0, #0x10 - lsr r1, r0, #3 - str r2, [sp, #4] - str r1, [sp] - cmp r2, #0x18 - bhs _02254B90 - cmp r1, #0x14 - bhs _02254B90 - ldr r0, [r4, #4] - cmp r0, r2 - bne _02254B54 - ldr r0, [r4, #8] - cmp r0, r1 - bne _02254B54 - bl FUN_02020AA4 - cmp r0, #1 - bne _02254B90 -_02254B54: - ldr r2, [sp] - add r0, r4, #0 - mov r1, #0x18 - add r3, r2, #0 - add r0, #0xc - mul r3, r1 - add r5, r0, r3 - ldr r3, [sp, #4] - ldrb r2, [r5, r3] - add r2, r2, #1 - strb r2, [r5, r3] - ldr r2, [sp] - mul r1, r2 - add r2, r0, r1 - ldr r1, [sp, #4] - ldrb r0, [r2, r1] - cmp r0, #4 - bls _02254B7C - mov r0, #1 - strb r0, [r2, r1] -_02254B7C: - ldr r0, [sp, #4] - mov r1, #1 - str r0, [r4, #4] - ldr r0, [sp] - str r0, [r4, #8] - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD26_02254C10 -_02254B90: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD26_02254AEC - - thumb_func_start MOD26_02254B98 -MOD26_02254B98: ; 0x02254B98 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254BA8 - cmp r0, #1 - beq _02254BBC - b _02254BCE -_02254BA8: - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - mov r1, #2 - bl MOD26_02254C10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254BCE -_02254BBC: - mov r0, #0x7b - lsl r0, r0, #2 - ldr r0, [r4, r0] - bl MOD26_02254C40 - cmp r0, #0 - beq _02254BCE - mov r0, #1 - pop {r4, pc} -_02254BCE: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD26_02254B98 - - thumb_func_start MOD26_02254BD4 -MOD26_02254BD4: ; 0x02254BD4 - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x30 - bl AllocFromHeap - add r4, r0, #0 - beq _02254C00 - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - str r6, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - cmp r0, #0 - beq _02254C00 - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_02254C00: - mov r0, #0 - pop {r4, r5, r6, pc} - thumb_func_end MOD26_02254BD4 - - thumb_func_start MOD26_02254C04 -MOD26_02254C04: ; 0x02254C04 - push {r3, lr} - cmp r0, #0 - beq _02254C0E - bl FreeToHeap -_02254C0E: - pop {r3, pc} - thumb_func_end MOD26_02254C04 - - thumb_func_start MOD26_02254C10 -MOD26_02254C10: ; 0x02254C10 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254C30 ; =MOD26_02254FF0 - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254C30: .word MOD26_02254FF0 - thumb_func_end MOD26_02254C10 - - thumb_func_start MOD26_02254C34 -MOD26_02254C34: ; 0x02254C34 - ldr r3, _02254C3C ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254C3C: .word MOD20_02253794 - thumb_func_end MOD26_02254C34 - - thumb_func_start MOD26_02254C40 -MOD26_02254C40: ; 0x02254C40 - ldr r3, _02254C48 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254C48: .word MOD20_022537B8 - thumb_func_end MOD26_02254C40 - - thumb_func_start MOD26_02254C4C -MOD26_02254C4C: ; 0x02254C4C - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD26_02254C4C - - thumb_func_start MOD26_02254C60 -MOD26_02254C60: ; 0x02254C60 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254CB8 ; =MOD26_02254FD4 - mov r1, #6 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r5, #4] - bl MOD26_02254CC4 - ldr r0, [r5, #4] - ldr r1, [r5] - bl MOD26_02254DAC - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - ldr r0, [r5, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - ldr r1, _02254CBC ; =0x04001000 - ldr r0, _02254CC0 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD26_02254C4C - pop {r3, r4, r5, pc} - .align 2, 0 -_02254CB8: .word MOD26_02254FD4 -_02254CBC: .word 0x04001000 -_02254CC0: .word 0xFFFFE0FF - thumb_func_end MOD26_02254C60 - - thumb_func_start MOD26_02254CC4 -MOD26_02254CC4: ; 0x02254CC4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x20 - str r0, [sp, #4] - mov r0, #8 - lsl r1, r0, #6 - bl AllocFromHeap - str r0, [sp, #0x1c] - cmp r0, #0 - beq _02254D68 - mov r0, #0 - str r0, [sp, #0x18] - str r0, [sp, #0x14] - str r0, [sp, #0x10] - str r0, [sp, #0xc] - str r0, [sp, #8] - add r7, r0, #0 - add r6, r0, #0 - add r4, r0, #0 - add r5, r0, #0 -_02254CEC: - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - ldr r2, [sp, #0x1c] - orr r1, r0 - ldr r0, [sp, #8] - orr r0, r1 - orr r0, r7 - orr r0, r6 - orr r0, r4 - add r1, r5, #0 - orr r1, r0 - ldr r0, [sp, #0x18] - orr r0, r1 - ldr r1, [sp, #0x14] - add r1, r2, r1 - mov r2, #0x20 - bl MIi_CpuClearFast - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x10] - add r0, #0x20 - str r0, [sp, #0x14] - mov r0, #1 - lsl r0, r0, #0x18 - add r0, r1, r0 - str r0, [sp, #0x10] - mov r0, #1 - ldr r1, [sp, #0xc] - lsl r0, r0, #0x1c - add r0, r1, r0 - str r0, [sp, #0xc] - mov r0, #1 - ldr r1, [sp, #8] - lsl r0, r0, #0x14 - add r0, r1, r0 - str r0, [sp, #8] - mov r0, #1 - lsl r0, r0, #0x10 - add r7, r7, r0 - lsr r0, r0, #4 - add r6, r6, r0 - mov r0, #1 - lsl r0, r0, #8 - add r4, r4, r0 - ldr r0, [sp, #0x18] - add r5, #0x10 - add r0, r0, #1 - str r0, [sp, #0x18] - cmp r0, #0x10 - blt _02254CEC - mov r0, #0 - str r0, [sp] - mov r3, #2 - ldr r0, [sp, #4] - ldr r2, [sp, #0x1c] - mov r1, #6 - lsl r3, r3, #8 - bl BG_LoadCharTilesData - ldr r0, [sp, #0x1c] - bl FreeToHeap -_02254D68: - add sp, #0x20 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD26_02254CC4 - - thumb_func_start MOD26_02254D6C -MOD26_02254D6C: ; 0x02254D6C - push {r3, r4, r5, lr} - add r5, r1, #0 - add r0, r5, #0 - bl MOD20_022538A0 - add r4, r0, #0 - ldr r0, [r4, #4] - ldr r1, [r4] - bl MOD26_02254DAC - ldr r0, [r4, #4] - mov r1, #6 - bl BgCommitTilemapBufferToVram - add r0, r5, #0 - bl MOD26_02254C4C - pop {r3, r4, r5, pc} - thumb_func_end MOD26_02254D6C - - thumb_func_start MOD26_02254D90 -MOD26_02254D90: ; 0x02254D90 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - add r0, r4, #0 - bl MOD26_02254C4C - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD26_02254D90 - - thumb_func_start MOD26_02254DAC -MOD26_02254DAC: ; 0x02254DAC - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - mov r1, #6 - bl GetBgTilemapBuffer - mov r5, #0 - ldr r1, _02254DE0 ; =MOD26_02254FD0 - add r0, #0x84 - add r2, r5, #0 -_02254DBE: - add r3, r2, #0 - add r6, r0, #0 -_02254DC2: - ldrb r7, [r4, r3] - add r3, r3, #1 - add r7, r1, r7 - sub r7, r7, #1 - ldrb r7, [r7] - strh r7, [r6] - add r6, r6, #2 - cmp r3, #0x18 - blt _02254DC2 - add r5, r5, #1 - add r0, #0x40 - add r4, #0x18 - cmp r5, #0x14 - blt _02254DBE - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02254DE0: .word MOD26_02254FD0 - thumb_func_end MOD26_02254DAC - - .section .rodata - - .global MOD26_02254DE4 -MOD26_02254DE4: ; 0x02254DE4 - .word MOD26_02254AA0, MOD26_02254AEC, MOD26_02254B98 - - .global MOD26_02254DF0 -MOD26_02254DF0: ; 0x02254DF0 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1 - .byte 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1 - .byte 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 1 - .byte 1, 1, 1, 4, 1, 1, 4, 4, 4, 1, 4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 1 - .byte 1, 1, 1, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 1, 4, 1, 4, 1, 1, 1 - .byte 1, 1, 1, 4, 1, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 4, 4, 1, 4, 1, 4, 1, 4, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - - .global MOD26_02254FD0 -MOD26_02254FD0: ; 0x02254FD0 - .byte 0x04, 0x0F, 0x08, 0x01 - - .global MOD26_02254FD4 -MOD26_02254FD4: ; 0x02254FD4 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD26_02254FF0 -MOD26_02254FF0: ; 0x02254FF0 - .word 0x00, MOD26_02254C60, 0x00 - .word 0x01, MOD26_02254D6C, 0x00 - .word 0x02, MOD26_02254D90, 0x00 - .word 0x00, 0x00000000, 0x00 -- cgit v1.2.3