diff options
-rw-r--r-- | arm9/asm/unk_020030E8.s | 1424 | ||||
-rw-r--r-- | arm9/src/unk_020030E8.c | 708 | ||||
-rw-r--r-- | include/unk_02002F08.h | 69 | ||||
-rw-r--r-- | include/unk_020030E8.h | 32 |
4 files changed, 793 insertions, 1440 deletions
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); |